Animated status badge
- Input
- A 64×48 GIF with a red first frame, green second frame, looping metadata, and short durations.
- Output
- A one-page PDF showing the red frame. PyMuPDF found no text, and the green frame was absent.
GIF → PDF made a one-page 1,757 byte PDF from our two-frame GIF, using only the red first frame.
From real runs
| Element | Result | What happens |
|---|---|---|
| First frame | Kept | The first GIF frame became the image on the PDF page and rendered as red in our pixel check. |
| Later frames | Lost | The second animation frame and timing data were removed before the PDF was written. |
| PDF page count | Changed | The animated input became a single PDF page, not one page per animation frame. |
| Selectable text | Lost | Labels drawn into the GIF frame remain image pixels inside the PDF, with no text layer. |
| Page size | Changed | The 64×48 GIF became a 48×36 pt PDF page in the local API run. |
| File size | Changed | The 542 byte GIF became a 1,757 byte PDF after page and image wrapper overhead. |
The first GIF frame became the image on the PDF page and rendered as red in our pixel check.
The second animation frame and timing data were removed before the PDF was written.
The animated input became a single PDF page, not one page per animation frame.
Labels drawn into the GIF frame remain image pixels inside the PDF, with no text layer.
The 64×48 GIF became a 48×36 pt PDF page in the local API run.
The 542 byte GIF became a 1,757 byte PDF after page and image wrapper overhead.
We converted our GIF sample (16 KB) with Image engine on 2026-10-20. It took 23 ms and produced a 32 KB PDF file, 2.1× larger than the input. The engine raised 1 warning, listed below.
Input · sample.gif · 16 KB
1200 × 800 px, GIF87a
Output · sample.pdf · 32 KB
PDF 1.4, 1 page, no text layer, 1 image object
GIF → PDF gives you a still page, not recognized text. For screen-recorded forms or menus, capture the important frame and use a text extraction workflow.
Pillow 11
from PIL import Image, ImageSequence
im = Image.open("in.gif")
first = next(ImageSequence.Iterator(im)).convert("RGB")
first.save("out.pdf")This writes a still image PDF and deliberately ignores every frame after the first.
The HTTP API and the MCP server run the exact engine this page uses (Image engine); the response carries the same warnings the web converter shows. Check support first with GET /api/v1/pairs?from=gif&to=pdf.
curl -X POST https://filetypeconverters.com/api/v1/convert \
-H "Authorization: Bearer $FTC_API_KEY" \
-F "file=@input.gif" -F "from=gif" -F "to=pdf" \
-F 'options={"dpi":96}' \
--output output.pdf| Key | Applies to | Type | Default |
|---|---|---|---|
| dpi | Reading GIF | number | 96 |
| width | Writing PDF | number | 0 |
| height | Writing PDF | number | 0 |
| fit | Writing PDF | contain · cover · fill | contain |
| quality | Writing PDF | number | 90 |
| background | Writing PDF | string | #ffffff |
| stripMetadata | Writing PDF | boolean | true |
No. The tested API produced one PDF page from the first frame only.
No. PyMuPDF extracted zero text from the output because the label was part of the image.
A PDF has page structure and embedded image data. Our 542 byte GIF became a 1,757 byte single-page PDF.