How the GIF Editor Works
AnyTool edits and renders GIFs entirely in the browser using a self-hosted single-threaded ffmpeg.wasm engine — the core (ffmpeg-core.js + the 32 MB wasm) is bundled from npm and served as a same-origin asset, so nothing is fetched from a CDN. A single one-pass filter_complex chains the whole edit: trim selects the clip, crop frames it, setpts applies the speed change, fps sets the output rate, scale (lanczos) resizes, then a split feeds palettegen (with stats_mode) and paletteuse (with dithering) for a high-quality optimized palette. Reverse and ping-pong are built from the reverse and concat filters, and quality presets tune the palette and dither. The result is written back as a GIF. Single-threaded is deliberate: the multi-threaded core needs SharedArrayBuffer + cross-origin isolation (COOP/COEP), which would block cross-origin ad iframes, so it is avoided.
- Runs client-side — the GIF/video is never uploaded
- Self-hosted ffmpeg core (bundled) — no CDN
- One-pass filter_complex: trim -> crop -> setpts -> fps -> scale(lanczos)
- split -> palettegen(stats_mode) -> paletteuse(dither) for quality
- Reverse / ping-pong via reverse + concat filters
- Single-threaded (keeps ads working); no backend, no cap
