IAMCCS Cine PromptRelay Timeline
Turn 'at second 3 the camera pushes in' into PromptRelay segment data
- global_prompt
- local_prompts
- segment_lengths
- max_frames
- report
ComfyUI-PromptRelay is the community's answer to one of LTX's core frustrations: the model takes a single global prompt, but long videos want "this happens, then that happens, at these moments." PromptRelay splits your video latent into segments and applies a different local prompt to each one, so the model gets a timeline instead of a one-liner. The catch is the format - you have to produce a list of segment lengths and a matching list of local prompts, and hand-building those so they add up to the exact 8n+1 frame count is exactly the kind of arithmetic that ends with a 400-frame latent and a 397-frame prompt list.
IAMCCS Cine PromptRelay Timeline is that math, in node form. You describe the timeline in human terms; it returns local_prompts, segment_lengths, and max_frames that slot straight into a PromptRelay encode node.
How it works
You give it:
global_prompt- the scene-level prompt (passed through unchanged).timeline_data- either JSON (segments/rows/timelinewithseconds+prompt+ optionalcamera) or pipe lines:seconds | local prompt | camera note.duration_secondsandframe_rate- the shot.ltx_round_mode- defaults toup_8n_plus_1, i.e. round the total frame count up to the LTX-legal8n+1form.fallback_segments- if the timeline is empty, it fabricates that many evenly-spaced generic "cinematic beat n" segments so the graph still validates.
Then it converts seconds to proportional frame lengths that sum exactly to max_frames (any rounding remainder is dumped onto the last segment so you never get a dangling frame), joins the local prompts with |, and hands you the pieces. Camera notes get appended to their segment's prompt automatically.
The outputs that matter
local_prompts- pipe-separated, one per segment.segment_lengths- comma-separated frame counts summing tomax_frames.max_frames- the rounded total; wire it to your latent builder.global_prompt- passthrough.
The report helpfully includes a connect_to field pointing at PromptRelayEncodeTimeline or PromptRelayEncode.
Install
It's in IAMCCS-nodes:
cd ComfyUI/custom_nodes
git clone https://github.com/IAMCCS/IAMCCS-nodes.git
or Manager → search IAMCCS. README floor: ComfyUI ≥ 0.3.0, Python ≥ 3.12, Torch ≥ 2.8. To actually encode, you need ComfyUI-PromptRelay in custom_nodes - this node only produces the data.
Where people get burned
- It produces data, not conditioning. Forgetting the second pack is the classic failure: this node runs, prints a lovely report, and your video ignores it because there's no PromptRelay encode node in the graph.
- Frame-sum drift. The node guarantees lengths add up to
max_frames, but only if you feed that samemax_framesinto your latent builder. If your latent is built from a different rounding (saynearestvsup), the lengths won't match the latent again - which is exactly the mismatch PromptRelay complains about. - Camera notes that repeat. A camera note already in the prompt text gets appended anyway (the code checks case-insensitively and skips it - but only for exact substring matches). Keep notes short and distinct.
- Zero search impressions, one-author tooling. The Cine family is documented mostly through tooltips and
reportoutputs. For learning PromptRelay itself, the standalone ComfyUI-PromptRelay docs are better; this node is for the IAMCCS workflow specifically.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| global_prompt | STRING | cinematic scene with natural motion and coherent camera movement | — |
| timeline_data | STRING | Edited by the Cine PromptRelay timeline UI. JSON or lines: seconds | local prompt | camera note | |
| duration_seconds | FLOAT | 8.000.01–36000 | — |
| frame_rate | INT | 241–120 | — |
| ltx_round_mode | COMBO | up_8n_plus_1 | 3 options: up_8n_plus_1, nearest_8n_plus_1, none |
| fallback_segments | INT | 31–32 | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| global_prompt | STRING | — |
| local_prompts | STRING | — |
| segment_lengths | STRING | — |
| max_frames | INT | — |
| report | STRING | — |