IDEAFACTORY / ANIMATION TOOLS
Small moments.
Every frame, yours.
Open a GIF or a whole batch. Inspect the animation, pick the frames you need, and take home full-size PNGs with their original timing. All in this browser tab.
01Add your GIFs
Up to 10 GIFs · 10 MiB each · 50 MiB total input
4 megapixels per canvas · 300 frames per GIF
100 million canvas pixels × frames per GIF
500 million canvas pixels × frames per batch
PNG: 20 MiB each · ZIP: 150 MiB maximum
APNG and animated WebP are not supported. For still JPG, PNG or WebP images, use the Batch Image Compressor (also converts formats)
Your GIFs
0 / 10Each GIF has its own frame range and interval. Check the sources to include in the ZIP; click a name to preview it.
Add GIF files to begin.
02Inspect the animation
Frames are composited at the original canvas size. Transparent areas show a checkerboard.
Preview runs through all frames of this source and loops for inspection. Delays under 20 ms are shown at 20 ms; decoding and browser scheduling can slow playback. Original timing is preserved in JSON. Exports use the original canvas size.
Choose frames for this GIF
Frame numbers are 1-based and inclusive. Every Nth starts at your first frame. Change this independently for each GIF; no frames are silently truncated.
- Canvas size
- Source frames
- Raw duration
- Selected PNG frames
03Take the frames with you
The estimate is selected full-frame RGBA memory, not predicted PNG size. PNG compression varies. Export is sequential; if the 150 MiB ZIP limit is reached, nothing is downloaded. Reduce the range, increase Every Nth, or select fewer GIFs.
Each checked GIF gets a uniquely named folder with PNG frames and timing.json. manifest.json lists source names, settings, timing and any failures. Original filenames are included; review the archive before sharing.
Your files are decoded, composited and packaged in this tab using bundled code. No uploads, remote processing, third-party analytics or saved processing history. Clear all releases this batch; files already downloaded stay on your device.
From animation to useful frames
Add and inspect
Choose local GIF files. Click each source to check its dimensions, raw duration and frame count, then pause or step through the full composited frames.
Choose the moments
Set a first frame, last frame and interval for each source. Use every frame for detailed animation review, or skip evenly for sprite-editing references and storyboards.
Export with timing
Download one previewed PNG, or check several sources and export their selected frames together. Keep the timing JSON beside the PNGs when reviewing variable-delay animation.
A few useful details
Are these the full frames or the GIF’s internal patches?
The downloads are full-canvas PNGs, after composing each image patch with the frames before it. Supported disposal modes, transparency, interlacing and local palettes are applied before export. This makes the frames useful for sprite editing, animation review and comparing changes. Opaque partial-canvas GIFs use the logical global background; some viewers handle this or non-square pixel-aspect metadata differently. Check the preview before exporting. Unsupported or malformed GIFs are reported instead of guessed; not every GIF found online is guaranteed to decode.
Is the PNG output lossless?
PNG encoding is lossless for the decoded, composited pixels. GIF palette limits and any detail already missing from the source cannot be recovered. This tool does not upscale, enhance, interpolate frames, use AI, re-encode GIFs or export lossy JPG/WebP frames.
Why does the preview timing differ from the GIF?
GIF delays are stored in hundredths of a second. The interface and JSON show the raw value, including zero. The preview uses at least 20 milliseconds per frame and may run more slowly while decoding. It loops for inspection even if the source specifies a finite loop count. Original loop metadata and raw frame timing are recorded in the manifest.
What happens when I skip frames?
The selected PNGs retain their source frame numbers. The timing JSON records original frame delays and timestamps; it is not a newly retimed animation. Every Nth counts from your chosen first frame, and the end is inclusive only when it falls on that interval. Internal frames needed for correct compositing are still decoded.
Which limits apply?
At most 10 GIFs, 10 MiB each and 50 MiB total input. Each logical canvas is limited to 4 million pixels and each GIF to 300 frames. Width × height × all source frames must be at most 100 million per GIF and 500 million across the batch, even if you export fewer frames. PNG output is capped at 20 MiB per frame and the whole ZIP at 150 MiB. No automatic truncation is performed. Large files may still exceed a browser’s available memory.
What if a file fails or I cancel?
Import errors stay visible beside their source. ZIP export processes selected sources sequentially and records source failures in its manifest. If a source fails after some frames have been written, those partial frames are explicitly identified. Cancel or a newer import, removal, range or source-selection change invalidates the pending export; a stale ZIP is never downloaded. A ZIP size-limit failure cancels the whole archive.
Do filenames or images leave my browser?
No. This tool accepts local files only and makes no processing requests. The PNGs contain rendered pixels rather than the original GIF metadata, but images themselves may contain personal information. The ZIP JSON includes the original filenames and timing metadata. Check these before sharing. The tool is not an anonymizer.
Can I use APNG, WebP, video or static images?
Only GIF87a and GIF89a input is supported here, including valid single-frame GIFs. APNG, animated WebP and video need a different decoder and are explicitly unsupported. For static JPG, PNG or WebP conversion, use the existing Batch Image Compressor and choose your output format.