Save Animated WEBP
The animation format that actually ships
- images
- images
You've generated an AnimateDiff sequence or a batch of frames, and now you need something that will actually play when you send it to a friend or upload it to Discord. Save Animated WEBP turns a stack of frames into a single, loopable, reasonably small animation file - and it's the one you'll actually reach for when the destination is a website, a chat app, or anywhere that treats animated GIFs with the contempt they deserve.
What it is
The node takes an images input (your frame stack) and a filename_prefix (default ComfyUI). It writes one animated .webp to your output directory. The knobs are where it gets interesting:
fps- default 6, range 0.01–1000. Frame rate of the animation.lossless- default true. Lossless WebP preserves pixels exactly; the file is bigger but there's zero quality drift between frames.quality- default 80, range 0–100. Only applies when lossless is off.method- a combo ofdefault,fastest,slowest, which map to libwebp compression methods 4, 0, and 6 under the hood. Slower compresses better at the same quality.
The thing beginners miss: with lossless on, quality does nothing. Quality is a lossy-encoding parameter; a lossless file ignores it. If you toggle lossless off, that's when quality suddenly matters - and the pairing of low lossless-file-size with high quality is exactly the fiddly trade-off the method dropdown exists to tune.
How it works
The mechanism is unglamorous and reliable: ComfyUI batches the frame tensor into libwebp's animated encoder with the fps you asked for and writes the file with the same auto-incrementing _00001_ counter and %date% / %node.widget% prefix formatting as every other save node. The images output passes the frames straight through, so you can save an animated WebP and keep feeding a preview or a second save node in the same branch.
Why WebP and not GIF? Animated GIF is 8-bit with a hard 256-color limit, which is why AI animation through GIF looks like it was faxed from 1997. WebP supports full color, alpha, and modern compression - smaller file, better quality. The community default for sharing short loops has shifted hard toward WebP for exactly this reason.
When you'd pick it over the alternatives
The sibling node Save Animated PNG produces larger, lossless, alpha-capable files - pick APNG when fidelity or transparency beats file size. WebP is the middle ground that's small enough to email and good enough to not embarrass you, at the cost of slightly worse compatibility with ancient software (anything from the last decade handles it fine). If you need an actual video file for a player that demands MP4 or WebM, neither animation node is the right tool - that's the video-save path.
Getting it and where it goes wrong
Ships with ComfyUI core, in comfy_extras/nodes_images.py, part of the newer node system - no install. The most common complaint is "my animation plays on my machine but not for them" - that's usually a compatibility assumption on the viewer's end, not a bug in the file, and the fix is either WebP-to-video conversion or just accepting that some corporate viewers lag behind. The other one is forgetting that fps is the only thing controlling speed: a 30-frame stack at default fps 6 is a five-second loop, and a lot of people expect snappier. Set the fps before you queue, not after, because re-encoding is cheap but annoying.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| filename_prefix | STRING | ComfyUI | — |
| fps | FLOAT | 6.000.01–1000 | — |
| lossless | BOOLEAN | true | — |
| quality | INT | 800–100 | — |
| method | COMBO | 3 options: default, fastest, slowest |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |