Difforum · Prompt Travel
`2.5s:` timestamps, blended frame by frame
- params
- clip
- prompts
- first_frame_cond
- batched
- info
Prompt travel is the oldest trick in AI video and it still works: instead of one prompt for the whole clip, you write a list, and the conditioning slides from one to the next as the frames go by. Misty forest at 0, crystal cave at 2 seconds, galaxy at 4. The camera keeps moving; the world changes around it.
Difforum's version is a straight port of the Deforum/FizzNodes frame: prompt syntax into a node that takes modern CLIP encoders.
The mechanism, and why it's cheap
Two things make this node nicer than naive implementations. First, the parser is deliberately forgiving - it tolerates 0:(a prompt), surrounding quotes, and trailing commas, so you can paste the body of a Deforum JSON straight in without cleaning it. Second, and this is the real design decision: each prompt is encoded once, and the blending happens lazily per frame. The blend reproduces ComfyUI's stock ConditioningAverage (addWeighted) result exactly, so the output behaves like the node you already know - but you're not re-encoding your prompt text 120 times on a big text encoder. That's what keeps long clips on Flux-class encoders from ballooning.
Timestamps work in frames or seconds. 2.5s: a storm becomes frame 60 at 24 fps, which means the schedule resolves relative to your Setup's fps and max_frames - so plug the same Setup node in here that you plugged in everywhere else, or your seconds will quietly mean something different.
easing decides how each prompt hands off to the next: linear, ease_in, ease_out, ease_in_out (the default) or step. Use step when you want hard cuts - a scene change rather than a morph - and be aware the in-between frames in the other modes are genuine blends of two text embeddings, which is why the middle of a long transition can read as a mush of both subjects rather than as a clean merge.
Inputs, outputs, wiring
params from Setup, clip from your model's text encoder loader, prompts (one line per key, frame: text or 2.5s: text), easing. Optional build_batched.
prompts(DIFFORUM_PROMPT) is the travel track - this is what the Feedback Sampler and Restyle take when you want the scene text to move with the clip.first_frame_condis a plain CONDITIONING for whatever renders frame 0 (a KSampler after a depth pass, say), so the first frame and the loop agree.batchedis the escape hatch: one conditioning where frame i carries prompt i, for batch samplers such as AnimateDiff-Evolved. It's opt-in because building it costs RAM on long clips.infoprints each prompt with its timecode, which is how you catch a typo'd120that you meant as12.
Install
ComfyUI Manager → search Difforum, or:
cd ComfyUI/custom_nodes
git clone https://github.com/chillithebillis/Difforum.git difforum
Restart. numpy is the only declared dependency, and this node needs nothing else - no OpenCV, no extra models. The pack ships with templates (Templates → Difforum) if you'd rather see a working travel schedule than assemble one.
Where people get burned
The parser wants a lowercase s immediately after a number for seconds - 2.5s: works, 2.5 s: and 2.5S: are read as frame keys, and the frames you get are nonsense. Blank lines are ignored, so spacing your prompt list out for readability is safe; a line without a leading number is dropped silently, which is the usual cause of "it only used two of my five prompts".
Then there's the compositional trap, which isn't a bug at all: blended text embeddings average. Three prompts across a five-second clip means most frames are a mixture, and mixtures of a forest and a galaxy give you a muddy middle. If you want clean scenes, either use easing: step and accept the cut, or keep the prompts close enough in subject that a blend is a direction rather than a collision. And note that this node changes conditioning, not camera - for the camera you want the Director or the Camera nodes, and for a curve on the sampler side you want Schedule.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| params | DIFFORUM_PARAMS | From Setup: frame count, fps, width and height. Plug the same Setup everywhere. | |
| clip | CLIP | CLIP of the image model. | |
| prompts | STRING | 0: a serene misty forest, soft light 2s: a glowing crystal cave, bioluminescent 4s: a vast starry galaxy, swirling nebula | One prompt per line: 'frame: text' or '2.5s: text'. Consecutive prompts blend. |
| easing | COMBO | ease_in_out | How each prompt blends into the next. |
| build_batchedopt | BOOLEAN | false | Also build the batched output (costs RAM on long clips). |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| prompts | DIFFORUM_PROMPT | — |
| first_frame_cond | CONDITIONING | — |
| batched | CONDITIONING | — |
| info | STRING | — |