ComfyUI Node

SaveAnimatedGIF

Save that animation without leaving the graph — a dedicated GIF node, warts included

By MakkiShizu·Created 2 years ago·Updated about a year ago· 1
SaveAnimatedGIF
  • images
    filename_prefixComfyUI
    fps6.00
    losslesstrue
    method

    SaveAnimatedGIF is a terminal node: you feed it the image batch that your sampler, video model, or frame-upscaler just produced, and it writes one looping animated GIF into your ComfyUI output folder. No outputs, no chained downstream nodes - it's the last thing in the graph, doing one job. It comes from a two-node pack (this one plus SaveAnimatedWEBPRevise) by MakkiShizu, a utility that started life as a pull request to ComfyUI core.

    So when do you actually reach for it? When the thing you want to share is a GIF specifically - Discord, forums, image boards, docs. Core ComfyUI's animated saver was stripped to WEBP-only in the newer IO-schema refactor, and VideoHelperSuite's video node can emit GIFs but, as one r/StableDiffusion user put it, with no quality controls to speak of. This is the "I just want a GIF" lever. It's also the pack's claim to fame in the only real community mention it has: someone pointing another user at it as the quality-conscious alternative to VHS.

    How it works

    The mechanism is boring in the best way. Each IMAGE tensor in your batch gets multiplied by 255 and clamped to bytes, so every frame becomes a PIL image. Then frame zero is saved with save_all=True, the rest passed as append_images, and the timing comes from your fps: each frame gets 1000/fps milliseconds. loop=0 means it repeats forever. The file lands in ComfyUI/output as {filename_prefix}_{00001}_.gif, with a counter that auto-increments so you never clobber an earlier save.

    One nice touch inherited from the core save nodes: it stuffs the prompt and the workflow into the GIF's EXIF metadata, so "workflow included" survives on GIFs you share - drag one back in and the graph rebuilds. That's a real courtesy if you post workflows.

    The inputs that actually matter

    • images - the IMAGE batch; every frame becomes a GIF frame. Point it at your VAE-decoded frames.
    • fps (default 6) - sets frame duration. 6 is that choppy silent-film look; 12–15 reads as motion; anything under 2 is basically a slideshow.
    • filename_prefix (default ComfyUI) - rename it or your output folder fills with ComfyUI_00001_.gif until you can't tell anything apart.

    The other two are honest-to-goodness decoys here. lossless (default true) and method (default/fastest/slowest) both come from the WEBP node this was forked from, and on the GIF path they're computed and then ignored - Pillow doesn't even read them when saving GIF. method especially is never passed to the save call at all. Don't touch them, and don't feel bad about it.

    Also, GIF is a 256-color format, so gradients band and colors shift. That's the container talking, not a bug here.

    Installing it

    Install via ComfyUI Manager - search "SaveAnimatedGIF" (pack title ComfyUI-SaveAnimatedGIF) - or, if you prefer the terminal:

    cd ComfyUI/custom_nodes
    git clone https://github.com/MakkiShizu/ComfyUI-SaveAnimatedGIF
    # restart ComfyUI
    

    Good news: zero heavy dependencies and no model files. It only uses Pillow and numpy, which ComfyUI already ships, so install is genuinely one step.

    The awkward news: as of this writing that GitHub repo returns 404 - the author's account is still active, but the repo was deleted or made private. So right now, both Manager and git clone will fail until it's republished. If you already have it installed, it keeps working - it's a local copy and nothing phones home. Can't install it? You're not missing a superpower: the code it runs is preserved in ComfyUI's PR archive (ComfyNodePRs/PR-ComfyUI-SaveAnimatedGIF-…), and a core Save Animated WEBP or VHS node gets you 95% of the way.

    Common issues

    • "Nothing showed up." It's an output node - you must wire an image batch into images. The file goes to ComfyUI/output, and the node preview shows the result.
    • Banding on smooth gradients. Inherent to GIF's palette. For smoother output, save WEBP instead (the pack's other node) or accept the 256-color tax.
    • Node breaks after a ComfyUI update. This is the real, evergreen failure mode for legacy-style save nodes - the validate_inputs() takes 3 positional arguments but 4 were given complaint is a known one on core's WEBP node after updates. This pack is unmaintained and just as exposed; if a future ComfyUI breaks it, the fix is usually to find a maintained equivalent, not to wait for a patch.

    It's a tiny, honest utility: one job, no surprises, no dependencies. Install it while the repo is up, use it when a GIF is the deliverable, and don't overthink the two inputs that quietly do nothing.

    Categoryimage/animation

    Inputs (5)

    NameTypeDefaultDescription
    imagesIMAGE
    filename_prefixSTRINGComfyUI
    fpsFLOAT6.000.01–1000
    losslessBOOLEANtrue
    methodCOMBO3 options: default, fastest, slowest

    Outputs (0)

    No outputs