📸 One HTTP call turns any document, spreadsheet, deck, e-mail, archive, audio or video into a picture.
🕹 f3l1x.io | 💻 f3l1x | 🐦 @xf3l1x
Upload a document, get back a picture: one page, a contact sheet, or a ZIP of every page. 300+ formats — PDF, Office, HTML, Markdown, e-mail, images, video, audio, archives, fonts. Self-hosted, one container. Great for thumbnails, previews and vision LLMs.
docker run -d -p 3000:3000 dockette/docshotcurl -F file=@report.docx localhost:3000/upload -o report.png # first page
curl -F file=@deck.pptx localhost:3000/upload/grid -o deck.png # contact sheet
curl -F file=@report.docx localhost:3000/upload/pages -o report.zip # all pagesUpload (POST) |
Link (GET) |
|
|---|---|---|
| One page | /upload |
/render |
| Contact sheet | /upload/grid |
/render/grid |
| All pages (ZIP) | /upload/pages |
/render/pages |
| Metadata (JSON) | /upload/info |
/info |
Common parameters: page, width, height, fit, format (png, jpeg, webp, auto)
and preset (thumb, card, preview, og).
curl -F file=@movie.mp4 'localhost:3000/upload?time=1:23&width=640&format=webp' -o frame.webpGET links work straight in <img>, once a source is enabled:
<img src="http://localhost:3000/render?path=offer.docx&preset=thumb">| Source | Enable with |
|---|---|
?path=… |
DOCSHOT_ROOT + a mounted directory |
?s3=bucket/key |
DOCSHOT_S3_* |
?url=https://… |
DOCSHOT_FETCH_ALLOW=<regexp> |
Errors are JSON ({"error", "code", "status"}). GET /formats lists every supported
extension; /healthz, /readyz, /metrics and /version are there for monitoring.
| Env | Default | |
|---|---|---|
DOCSHOT_DEFAULT_DPI |
150 |
|
DOCSHOT_MAX_BYTES |
104857600 |
Upload limit |
DOCSHOT_TIMEOUT_SECONDS |
180 |
|
DOCSHOT_CACHE_MB |
256 |
In-memory cache |
DOCSHOT_ROOT |
– | Directory for ?path= |
DOCSHOT_FETCH_ALLOW |
– | URLs ?url= may fetch |
DOCSHOT_SIGN_KEY |
– | Require signed GET links |
All options are in internal/server/server.go.
Warning
There is no authentication. Keep docshot on a private network, or set DOCSHOT_SIGN_KEY.
A small Go server on :3000 runs Gotenberg inside the same
container. Documents become PDF (LibreOffice, Chromium) and PDFium draws the page;
images, video and audio go through Go and ffmpeg. JavaScript and network access are
off for untrusted input.
Releases are dated: YYYY.MM.DD (see VERSION).
| Tag | |
|---|---|
dockette/docshot:latest |
latest master |
dockette/docshot:2026.10.19 |
a release — pin this |
dockette/docshot:sha-<sha> |
exact commit |
To release, run make release, commit and push; CI publishes the image and the GitHub release.
make up # build + start on :9994
make test-unit # go vet + unit tests
make lint # gofmt, staticcheck, govulncheck, shellcheck, hadolint
make smoke # render one page with the built image
make test # end-to-end checksSee how to contribute to this package.
This package is currently maintaining by these authors.
Consider to support f3l1x. Also thank you for using this package.
