GIF Text Preview
Check the caption on one frame before you commit to forty
- images
- style
- preview
Rendering text onto a whole batch just to look at it is wasteful, and it's exactly what people do when they have no cheap way to check placement. GIF Text Preview is the cheap way: it takes your style, draws it on one frame of the batch, and hands you that single frame to look at.
Think of it as the non-interactive sibling of the designer nodes. Same style object, same renderer, no canvas, no dragging, no browser extension.
How it works
It picks the frame at preview_frame out of the batch, runs the same overlay function the batch renderer uses, and returns a one-frame IMAGE. Because it's the same code path as GIF Text Overlay, the preview tells you the truth about position, size, outline, background and shadow at the real output resolution - not an approximation on a squashed canvas.
The index is clamped to the batch, so a preview_frame past the end gives you the last frame rather than an error.
Note there's no blink logic here. This node shows the text on, which is what you want for placement work; if you're checking what a blink cycle looks like, you're better off looking at the temp GIF from the preview combine.
The inputs and output
images(IMAGE) - your prepared batch.style(GIF_TEXT_STYLE) - from GIF Text Style, GIF Multi-Text Designer, or the legacy GIF Text Designer.preview_frame(INT, default0, range 0–9999) - which frame to render.
One output: preview (IMAGE). Wire it into a Preview Image node (or a Save Image node if you want it on disk). That output node is also what forces this one to run - Text Preview isn't an output node and doesn't override caching, so if nothing downstream looks at its result, the engine may decide there's no reason to execute it.
In a workflow that already uses GIF Multi-Text Designer, this node is redundant: the designer returns its own rendered preview and re-renders every run. Text Preview earns its place when your style comes from GIF Text Style - the anchor-position style node with no canvas - or when you want a second look at a different frame without disturbing the designer's state.
Install
Manager → search GIF Toolkit → Install, or:
cd ComfyUI/custom_nodes
git clone https://github.com/oekobudde/ComfyUI-GIFToolkit.git
Restart ComfyUI. No pip dependencies of its own; the pack's workflow also expects ComfyUI-VideoHelperSuite, which is not bundled.
Common issues
Nothing happens when you Run. There's no output node downstream reading preview. Add a Preview Image node and wire the preview socket into it. Nodes whose results nobody looks at get skipped - that's the caching model, not a bug in this node.
The preview frame doesn't change. If it isn't re-executing, it's the same cache situation. Change something upstream, or attach the output node as above so the run has a reason to reach it.
Text is missing entirely. Same three checks as anywhere in the pack: the style's enabled flag is on, the layer is enabled, and the layer has actual text in it. Empty text renders nothing and does so silently.
It looks slightly different from the designer canvas. The canvas scales the frame to fit the node body and draws a UI approximation on top; this node renders at true resolution from the saved style JSON. When the two disagree, trust this one - and, for that matter, trust the exported GIF.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| style | GIF_TEXT_STYLE | — | |
| preview_frame | INT | 00–9999 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| preview | IMAGE | — |