Nodes/was-node-suite-comfyui/Fast Save Animated WEBP
ComfyUI Node Runs on cloud

Fast Save Animated WEBP

Every frame encoded at once, no dead cores

By WASasquatch·Created 4 years ago·Updated a day ago· 1,864
Fast Save Animated WEBP
  • images
  • images
◄root▾►
◄filename_prefixComfyUI►
◄fps6.00►
◄losslesstrue►
◄quality80►
◄method▾►

An animated WebP is the format you want at the end of an AnimateDiff or Wan run that's going on a webpage, a Discord post or a README: one file, plays anywhere modern, far smaller than a GIF and with real 24-bit colour. ComfyUI core already writes them. Fast Save Animated WEBP writes the same ones, but it encodes the frames side by side across your cores instead of one after another, which is the difference between a save that takes 90 seconds on a 120-frame clip and one that takes ten.

What it does differently

Each frame is encoded on its own thread - up to eight at a time, capped by your CPU count - and then stitched into the container. The file structure is a standard VP8X WebP carrying an ANIM chunk, an optional EXIF chunk for the workflow metadata, and one whole still-image frame per frame of your batch, placed at the origin with blending off. That last detail is the tradeoff: because each frame is stored complete rather than as a delta against the one before, a lossless export comes out a little larger than core's. In exchange, nothing is thrown away between frames, lossless frames keep their exact pixels, and the encode parallelises cleanly.

It is also an output node, so it runs even if nothing is wired after it - the batch of frames hits the disk whether or not you tacked anything onto the end.

The inputs that matter

images takes the batch from your video branch in order. Frames should all come from the same branch and match in size; the first frame sets the file's canvas.

fps defaults to 6, which is a slow loop and a good default for a short clip that people will look at. Bump it to 24 if the motion was generated as film-speed. Durations are written as whole milliseconds, so 24fps means 41ms per frame - accurate enough that nobody will notice, but don't come to it expecting frame-exact 60fps timing.

lossless defaults to true and that's the right call for short loops and for anything you're archiving. Flip it off and quality (0–100, default 80) becomes picture quality; leave it on and quality becomes compression effort instead, so a higher number means a smaller file from the same pixels rather than a nicer one.

method is the blunt version of the same idea: fastest writes quickly and produces a larger file, slowest spends longer for a smaller one, default sits in the middle and maps to the encoder's own mid effort level.

root and filename_prefix decide where the file lands. root offers ComfyUI's output and temp, plus any folder you've added under paths.allow_write in <ComfyUI user dir>/was-node-suite/config.yaml - each one shows up in the menu under its own name, so web/ becomes an option you can pick. This is an allowlist, deliberately: the node resolves the destination against it and refuses anything else with a PathNotAllowed error rather than writing wherever a workflow tells it to. filename_prefix takes a subfolder, so renders/walk drops walk_00001_.webp into output/renders/.

The single output is images, the same frames passed through untouched - useful, because it means you can save a lossless animated WebP and a couple of PNG stills from the same batch without duplicating the video branch.

What to expect from the file

A 60-frame lossless 512×512 animation is a large file - that's the format, not the node; WebP lossless on photographic or AI-generated content does not compress like a flat vector illustration. For anything headed to the web, lossless: false at quality 80–90 gets you most of the visual quality at a fraction of the size, and alpha still comes through, because the encoder flags transparency in the container when a frame carries it. Keep lossless on for loops short enough that size doesn't matter, and for frames you'll re-encode later. This is a save node - you can always write both.

Installing it

ComfyUI Manager → search WAS Node Suite v3 → Install → restart. Or the manual route:

cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/was-node-suite-comfyui.git

ComfyUI 0.14.0+ and Python 3.10+, and that's it. The v3 pack installs no packages at all - no pip run, nothing fetched from a git URL, no model downloads unless you explicitly turn on features.network in the config file. First launch after install takes an extra second or two while the pack writes its config, state database and folder structure under <ComfyUI user dir>/was-node-suite/ and compiles to bytecode; each update recompiles.

Tutorials describing install.bat, a requirements install, or opencv downgrades are v2-era: that build carried around twenty packages and could get into pin conflicts with other node packs. The media path here is standard library plus the Pillow that already ships with ComfyUI.

Common snags

If the file isn't where you expected, look at root and remember filename_prefix can create a subfolder - renders/walk is not a typo, it's a path. If you get a permission error naming a path, the folder you pointed at isn't in paths.allow_write; add it to config.yaml and restart rather than fighting it, because the check is by design. And a very long clip at lossless can look like the save has hung when it's just doing a lot of work - set method to fastest and watch it finish before you conclude anything is broken.

CategoryWAS Suite/IO

Inputs (7)

NameTypeDefaultDescription
imagesIMAGEThe frames of the animation, in order.
rootCOMBOWhich folder the file lands in: ComfyUI's own 'output' or 'temp', or any folder added under paths.allow_write in config.yaml.
filename_prefixSTRINGComfyUIThe file's name before its number, such as `renders/walk` for a subfolder.
fpsFLOAT6.000.01–1000Frames per second. `24` plays as film, `6` as a slow loop.
losslessBOOLEANtrue`true` keeps every pixel exactly; `false` stores smaller, softer frames.
qualityINT800–100`0` to `100`. Picture quality when lossy, compression effort when lossless.
methodCOMBO`fastest` writes quickly and larger, `slowest` spends longer for a smaller file.

Outputs (1)

NameTypeDescription
imagesIMAGEThe frames, passed through unchanged.