How to extract images from a Figma file without uploading it
Every "free" online Figma tool you've used uploads your file to a company server, extracts it there, and — in several documented cases — keeps a copy or a live download link for days, or limits free users to a few conversions a month. For client work, unreleased designs, or artwork you simply wouldn't post publicly, that's an unnecessary risk. The safer approach is to extract the file where it already is: on your own device.
This tool does exactly that. When you drop a .fig here, your browser:
- Checks the file is really a Figma .fig file — by its magic bytes, not its name — so a JPEG renamed .fig is refused with a clear message, a PDF renamed .fig is refused with a pointer at the Extract Images from PDF tool, a DOCX renamed .fig is refused with a pointer at the Extract Images from DOCX tool, an XLSX renamed .fig is refused with a pointer at the Extract Images from XLSX tool, a PPTX renamed .fig is refused with a note that it is a presentation, a Sketch file is refused with a pointer at the Extract Images from Sketch tool, an XD file is refused with a pointer at the Extract Images from XD tool, a CBZ or plain .zip renamed .fig is refused with a pointer at the CBZ tools, a Figma Make file is refused as a different format, and a password-protected archive is refused with an explanation instead of a cryptic error. A real .fig saved with the wrong extension still extracts.
- Reads the file's own structure and pulls the images in archive order — thumbnail.png is the 512×512 preview render saved inside the file, and the embedded images live under images/ keyed by SHA-1 hash, so the document preview comes first, then the embedded images in archive order, each labelled with its hash. canvas.fig, meta.json, fonts/ and macOS entries are skipped, and everything skipped is listed on the file card.
- Hands you the originals — download one image and it keeps its stored identity (an embedded image downloads as its SHA-1 hash plus its detected extension; thumbnail.png keeps its name); download the file as a ZIP and every image is renamed image-01, image-02 and so on in extraction order. Nothing is re-encoded, rasterized or resized at any point: the bytes you download are the bytes that were stored in the file.
What makes this extractor different
Most pages that top the results for this search convert on a server, or handle one file at a time with no previews — instead of handing you the images themselves. The desktop options are installs, not browser tools. This page does the simpler job, and does it fully in the browser: no upload, no monthly cap, no account, no 10 MB limit, a batch of 20 files, the document preview first with hash-labelled originals in archive order, original identity on per-image downloads, sequential names in the ZIP, and a live network-request counter so you can verify the privacy claim yourself.
Honest limitations
Verbatim means verbatim — no quality recovery
JPEG throws away detail when it compresses, and extracting cannot put it back. But nothing is lost either: the source bytes download unchanged, in every format. There is no quality setting because there is nothing to re-encode.
The document preview is a snapshot at export time
thumbnail.png is the 512×512 preview render saved when the file was exported — not a live re-render, and not an original. If the file was edited after its last export without re-exporting, the preview shows the older state.
Metadata stays in the files
Extraction copies the stored bytes, so EXIF and other metadata inside each image is kept — including location data, if the image has any. The file's own parts are skipped, and listed on the card, but the images themselves are untouched. Strip metadata yourself before sharing an image publicly.
No editable design, no text
Extraction cannot restore the editable design — only Figma reassembles that. This tool pulls out images only: it does not extract the document's text, and images linked from outside the file are never inside it to extract.
No frame labels — hash labels only
Frame and page labels are not available: the mapping from images to frames lives inside canvas.fig, the binary scene graph, which this page does not decode — so each image is labelled with its SHA-1 hash instead of a frame name. The 512×512 document preview usually makes it easy to tell which image is which.
Embedded images carry no filenames
Figma stores embedded images under bare SHA-1 hashes (images/<hash>), not filenames — so a per-image download is named after its hash plus its detected extension. The ZIP names (image-01, image-02, …) are the readable way to keep the images in extraction order.