Live Prompt Interpolation
Type a new prompt mid-run and watch the animation steer toward it live
- text
- current_strength
- previous_strength
- toggle_state
Live Prompt Interpolation is the node that makes the Dream Zoom workflow feel like a DJ set instead of a render farm. You're auto-queueing animation frames, the prompt box is sitting there, and you type something new. This node notices - after the right delay - and steers the animation from the previous prompt to the new one over a set number of frames, live, without you touching the queue.
The trick is that "after the right delay." Nobody wants the animation to lurch sideways on every keystroke, so this node is built around trigger thresholds. It only registers a new prompt when three things line up: the new text is different from the current one, it's long enough to be a real change (≥ min_char_count, default 30), and the character count has been stable for char_stability_frames (default 5) frames. Typing "a" then "ab" then "abc" never fires. A solid, finished prompt does.
How it works
The node is stateful - it remembers your previous prompt, current prompt, and where it is in the interpolation across queued runs. When it commits a new prompt, it resets the frame counter, flips toggle_state between 0 and 1, and starts blending. The blend itself is classic weighted interpolation: the previous prompt gets weight (1-t) and the current gets (t), where t is current_frame / total_frames. You get the old prompt fading out inside the new one fading in, in the A1111-style (prompt:weight) syntax your sampler already understands.
One implementation detail worth knowing: the interpolation actually runs in a spawned python subprocess - the "Python Code Box" pattern this node inherits from atom.p's nodes, which the author credits. It works, but it means the python executable has to be findable from ComfyUI's environment.
The inputs
new_prompt- the text box you edit live. This is the only input you'll touch day to day.total_frames(default 100) - length of the blend once a new prompt is committed.update_cycle,min_char_count,char_stability_frames- the trigger tuning. Raisemin_char_countif short prompt swaps feel twitchy; lower it if long-ish changes never seem to register.seed- drives frame counting inside the interpolation.
The outputs
text- the interpolated prompt string for the current frame. Feed this into your CLIP encoder.current_strengthandprevious_strength- the blend weights for each prompt, if your workflow wants the numbers separately.toggle_state- 0 or 1, flips on every committed change. Handy if you're toggling something else in the workflow in step with prompt changes.
Installing it
Standard FrameFX install - ComfyUI Manager, search ComfyUI-FrameFX, install, restart. Or clone:
cd ComfyUI/custom_nodes
git clone https://github.com/mgfxer/ComfyUI-FrameFX
No dependencies beyond stock ComfyUI, no models to fetch.
Where people get burned
If text comes back empty, the subprocess couldn't find python on PATH - a known wrinkle on some portable/Windows setups; point ComfyUI's environment at your Python. If prompts feel like they never take, your min_char_count is set above your typical prompt length. And remember it's stateful: the node holds your previous prompt between runs, which is the point - it's also why this node doesn't make sense outside an auto-queue animation setup. On a one-shot static render it's just a slower way to type.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| new_prompt | STRING | Enter your prompt here... | — |
| seed | INT | 311 | — |
| total_frames | INT | 100 | — |
| update_cycle | INT | 10 | — |
| min_char_count | INT | 30 | — |
| char_stability_frames | INT | 5 | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |
| current_strength | FLOAT | — |
| previous_strength | FLOAT | — |
| toggle_state | INT | — |