Nodes/Boyonodes/Boyo Prompt Relay Encode (Timeline)
ComfyUI Node

Boyo Prompt Relay Encode (Timeline)

Drag your prompts onto a timeline and stop fighting one giant video prompt

By DragonDiffusionbyBoyo·Created 2 years ago·Updated 27 days ago· 16
Boyo Prompt Relay Encode (Timeline)
  • model
  • clip
  • latent
  • model
  • positive
global_prompt
max_frames129
timeline_data
local_prompts
segment_lengths
epsilon0.0010
fps24.0
time_unitsframes

You know the failure: you give a video model one long prompt, and by frame 60 the character has changed jackets, the room is a different room, and the zombies have all teleported. Video models lose the thread when they're asked to hold a whole scene in a single prompt. Prompt Relay's answer - and this is a port of kijai's ComfyUI-PromptRelay, renamed so both packs can coexist - is to let different prompts own different stretches of the clip. And the Timeline variant is the friendly version: instead of typing prompt lists and length numbers, you drag colored blocks onto a ruler.

It's genuinely the approach people reach for when a long, coherent video actually matters. One workflow that stress-tested it (a deliberately over-packed zombie chase in LTX 2.3) kept the scene consistent where a single prompt fell apart - global prompt locks the woman, the store, the horror lighting; the local prompts, separated by |, drive the action beat by beat.

How it works

Under the hood it's the same trick as the plain Boyo Prompt Relay Encode. Your global prompt and local prompts get tokenized as one sequence, and the node builds a Gaussian segment mask across the latent frames: each local prompt's tokens dominate their window of timesteps, then fade. The model is cloned and patched so its attention respects those masks, and you get back a patched model plus a conditioning tensor. The Timeline version just makes the bookkeeping visual - local_prompts and segment_lengths are auto-populated from the editor, so you rarely touch them.

The inputs that matter

  • latent - an empty latent video. The actual frame count is read from its shape, which is why max_frames only controls the editor's ruler scale, not the output.
  • global_prompt - conditions the entire clip. This is where persistent characters, objects, and scene context live; the tooltip says it best.
  • epsilon - the Gaussian width of segment boundaries. Paper default is 0.001, which gives sharp cuts. Want soft crossfades between segments? Crank it to 0.5 or higher. Below ~0.1 it all looks the same.
  • fps and time_units - display only. They decide whether the ruler reads in frames or seconds; internal storage is always pixel-space frames.
  • timeline_data - the editor's JSON state. Auto-managed. Do not hand-edit, despite the string input being right there.

Outputs are model (the patched model - wire it into your KSampler's model input) and positive (the CONDITIONING - into the KSampler's positive). That's the whole loop.

Install

This ships inside the Boyonodes pack. ComfyUI Manager → search "Boyonodes", or:

cd ComfyUI/custom_nodes
git clone https://github.com/DragonDiffusionbyBoyo/Boyonodes

Restart ComfyUI. No extra pip packages - but note these nodes use the newer comfy_api.latest.io schema API, so if the node refuses to appear, your ComfyUI is older than it wants. Update ComfyUI first.

Gotchas

Don't bother setting max_frames to your real video length expecting it to crop anything - it doesn't. And if you ever edit local_prompts by hand instead of the editor, remember the | separator. One more: you need at least one local prompt, or the node throws. Drag a block on, give it a prompt, and the whole segment business stops being fiddly.

Categoryconditioning/boyo_prompt_relay

Inputs (11)

NameTypeDefaultDescription
modelMODEL
clipCLIP
latentLATENTEmpty latent video — dimensions are read from its shape.
global_promptSTRINGConditions the entire video. Anchors persistent characters, objects, and scene context.
max_framesINT1291–10000Total timeline length in pixel-space frames. Used by the editor for visual scale only.
timeline_dataSTRINGJSON state of the timeline editor (auto-managed; do not edit by hand).
local_promptsSTRINGAuto-populated from the timeline editor.
segment_lengthsSTRINGAuto-populated from the timeline editor (pixel-space frame counts).
epsilonFLOAT0.00100.000001–0.99Penalty decay parameter. Values below ~0.1 all produce sharp boundaries (paper default 0.001). For softer transitions, try 0.5 or higher.
fpsoptFLOAT24.00.1–240Frames per second — only affects how time is displayed in the timeline editor when time_units is set to 'seconds'.
time_unitsoptCOMBOframesDisplay the ruler, segment ranges, length input, and total in frames or seconds. Internal storage is always pixel-space frames.

Outputs (2)

NameTypeDescription
modelMODEL
positiveCONDITIONING