📸 Simple Gif Maker
GIFs From a Frame Batch, Zero Fiddling
- images
You've got a batch of frames in the graph - from a video, an AnimateDiff-style pass, or the pack's own Qwen video input - and you want to actually see them move. That's the whole job of the Simple Gif Maker: feed it an IMAGE batch and it writes an animated .gif into your ComfyUI/output folder and shows you a preview. No ffmpeg wrapper, no imageio, no chasing settings through a maze of dropdowns.
It ships inside ComfyUI_Simple_Qwen3-VL-gguf, the pack built around running GGUF vision-language models like Qwen3-VL and Gemma4 locally in ComfyUI ([llm-in-comfyui.md]). The main node reads video as a reduced set of frames (see the max_frames config), which is handy for understanding what it's looking at - but it doesn't make a video from them. This is the node that closes that gap. It's also just a handy standalone GIF encoder for anything that produces a frame batch.
How it works
Under the hood it's plain PIL, nothing exotic. Each tensor frame gets converted to a PIL image, optionally resized, then palettized and saved with save_all=True, loop=0 (so the GIF loops forever), and a duration of 1000 / frame_rate milliseconds. It even writes a sibling .png alongside the GIF carrying the workflow's prompt metadata, in case you want to remember what produced it.
The one real decision is quality_mode. GIF is an 8-bit format - max 256 colors - so how you squeeze the palette down decides both look and file size:
maximum- a fresh 256-color palette per frame. Best quality, biggest file, and occasionally the colors "swim" between frames.ultra/high- a single 256-color global palette for the whole animation, no dither vs. light Floyd-Steinberg dither.medium(default) - 128 colors with dithering. The sensible default.low/very_low/extreme- 64/32/16 colors with blur, i.e. "make it look like a 2007 GIF." Fun for memes, terrible for anything you care about.
The inputs that matter
There are only five, and you'll touch three:
images- yourIMAGEbatch. Frames play in order, so whatever you wire in here is the animation.frame_rate- frames per second, 1–100, default 8. 8 is a good placeholder for previewing; 24+ starts to look smooth but makes the file longer for the same number of frames.resize_percent- 1–200, default 100. This is your file-size lever. A 1024×1024 GIF at 48 frames is not small; dropping to 50–70% keeps it shareable.quality_modeandfilename_prefix(defaultgif_) - self-explanatory. Files land inoutput/asgif_00001.gifand the number just increments.
It's an output node: no outputs at all, nothing to wire onward. Run the workflow, look at the preview, done.
Installing it
The node rides along with the whole pack, so you get the pack's baggage:
cd ComfyUI/custom_nodes
git clone https://github.com/KLL535/ComfyUI_Simple_Qwen3-VL-gguf
or search ComfyUI Manager for ComfyUI_Simple_Qwen3-VL-gguf, then restart ComfyUI and hard-refresh the browser. The catch: the pack's requirements.txt pulls in llama-cpp-python>=0.3.17, and that's the fiddly part - the README documents a whole build-from-source dance because stock PyPI llama-cpp-python lags behind. If you only installed the pack for this GIF node, you're paying for a heavy dependency you don't need. But realistically you didn't install a GGUF-VLM pack for a GIF encoder; you're here for the Qwen model, and this is the utility that makes its video output watchable.
Common issues
- "No images provided for GIF generation" - an empty or missing
imagesbatch. Wire something in; the node throws on nothing. - Huge files - GIF is palettized and greedy. Shrink with
resize_percent, drop to a global-palette mode, and keep the frame count sane. 100+ frames atmaximumgets chunky fast. - Colors look off - that's the format, not a bug. If a single 256-color palette can't represent the scene, either accept
maximum(per-frame palette) or re-encode as a proper video.
For a quick "what did the model just watch" preview it's genuinely the easiest path in the pack. For anything you intend to keep, export a real video format instead - GIF is for previews and memes, and it knows it.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| frame_rate | INT | 81–100 | — |
| resize_percent | INT | 1001–200 | Изменение размера в процентах с сохранением пропорций |
| quality_mode | COMBO | medium | maximum = индивидуальная палитра на кадр (лучшее качество), extreme = 16 цветов + деградация |
| filename_prefix | STRING | gif_ | — |
Outputs (0)
No outputs