LTX Multishot Prompt + Refs
Multishot LTX prompts have a strict format — stop hand-writing them
- image_1
- image_2
- image_3
- image_4
- prompt
- references
- num_shots
LTX Multishot Prompt + Refs is the answer to a very specific pain: the multishot strata LoRA (multishot_strata_r128_v1, trained on Pensioner/shotplan keyframes) doesn't take a free-form prompt. It takes one text prompt in a strict ShotPlan caption format - a preamble paragraph, then Shot 1: ..., Shot 2: ... blocks - plus one reference keyframe per shot, stacked in exact slot order. Getting that format wrong silently, or miscounting slot order, was the difference between a coherent multi-shot clip and LTX doing whatever it felt like. This node builds both halves from a per-shot form so you never have to think about the format again.
How it works
You get four shot slots, each with image_N (the reference keyframe for that shot), shot_size, shot_modifier, camera_move, and action. The node assembles a prompt STRING in the training caption format, a references IMAGE batch of exactly four strata slots, and a num_shots INT.
The batch order is the shot order. Slot N means shot N and nothing else - the LoRA was trained with shuffle_reference_slots: false, and the first connected reference sets the resolution every slot is resized to. Shots are compacted, not positional: fill image_1 and image_3 and you get "Shot 1"/"Shot 2" on slots 0/1, but slot 0 must always be the opening shot. Leave later slots unconnected and they're padded with the flat mid-gray frame (RGB 128) the dataset builder used as "this slot carries no information" - the model was trained to read that blank as nothing, so the four-slot batch stays intact even for a one-shot clip.
Wiring it
No dedicated conditioning node is needed - LTX Identity Transfer already speaks this checkpoint's language. Feed the outputs like so:
references (IMAGE) -> LTX Identity Transfer layout="strata", source_id=2, phase_scale=1.0
prompt (STRING) -> LTX text encode -> positive
With source_id=2 over the four-image batch, Identity Transfer reproduces the trained convention exactly: source_id 2/3/4/5 on strata slots 0/1/2/3.
The inputs that matter
The preamble (multiline) describes the whole sequence - setting, palette, lighting, camera grammar, mood - and becomes the paragraph before "Shot 1:". Leave it empty and you just get the shot blocks. The dropdown vocabularies are worth respecting: they were extracted from the actual 17,525 shot headers in the training data (close-up ~32%, medium shot ~26%; static ~55%), so shot_size, shot_modifier and camera_move are the exact terms the LoRA is in-distribution for. Anything outside those lists is a gamble. Keep each action to a sentence or two - the text encoder caps the whole prompt at 1024 tokens, and real ShotPlan captions already run long at 3–4 shots, so the last shot's description is what gets cut first.
Installing it
Part of alisson-anjos/ComfyUI-BFSNodes. ComfyUI Manager → search "BFSNodes", or:
cd ComfyUI/custom_nodes
git clone https://github.com/alisson-anjos/ComfyUI-BFSNodes.git
cd ComfyUI-BFSNodes
pip install -r requirements.txt
Restart after. The pack's requirements.txt includes face/audio deps (insightface==0.7.3, onnxruntime, librosa) you don't need for this node, but you still have to get through the install to load the pack - the insightface pin is the usual snag.
Common issues
If it refuses to build, you've left every slot empty - you need at least one connected image or one action line. If the last shot's action vanishes, that's token truncation: trim the action lines, not the shot count. And if identity drifts between shots, that's LTX 2.3's weak prompt adherence showing up again - run more seeds rather than rewriting the caption, since the format is already locked down by the training data.
Inputs (21)
| Name | Type | Default | Description |
|---|---|---|---|
| preamble | STRING | Describes the WHOLE sequence -- setting, colour palette, lighting, overall camera grammar, mood. This is the paragraph that precedes 'Shot 1:' in the training captions. Leave empty to emit only the shot blocks. | |
| image_1opt | IMAGE | Reference keyframe for shot 1 (strata slot 0, source_id 2). Leave unconnected to end the sequence -- the slot is padded with the trained mid-gray blank. | |
| shot_modifier_1opt | COMBO | (none) | Combines WITH the shot size (e.g. 'Over-the-shoulder' + 'Close-up' -> 'Over-the-shoulder close-up'). Not a size on its own. |
| shot_size_1opt | COMBO | Medium shot | 10 options: Medium shot, Medium close-up, Wide shot, Extreme close-up, Medium long shot, Close-up, +4 |
| camera_move_1opt | COMBO | Static | 14 options: Static, Tracking, Pan, Static / locked-off, Pan right, Pan left, +8 |
| action_1opt | STRING | What happens in shot 1 -- subject, wardrobe, action, framing details. One or two sentences; the encoder caps the whole prompt at 1024 tokens. | |
| image_2opt | IMAGE | Reference keyframe for shot 2 (strata slot 1, source_id 3). Leave unconnected to end the sequence -- the slot is padded with the trained mid-gray blank. | |
| shot_modifier_2opt | COMBO | (none) | Combines WITH the shot size (e.g. 'Over-the-shoulder' + 'Close-up' -> 'Over-the-shoulder close-up'). Not a size on its own. |
| shot_size_2opt | COMBO | Medium shot | 10 options: Medium shot, Medium close-up, Wide shot, Extreme close-up, Medium long shot, Close-up, +4 |
| camera_move_2opt | COMBO | Static | 14 options: Static, Tracking, Pan, Static / locked-off, Pan right, Pan left, +8 |
| action_2opt | STRING | What happens in shot 2 -- subject, wardrobe, action, framing details. One or two sentences; the encoder caps the whole prompt at 1024 tokens. | |
| image_3opt | IMAGE | Reference keyframe for shot 3 (strata slot 2, source_id 4). Leave unconnected to end the sequence -- the slot is padded with the trained mid-gray blank. | |
| shot_modifier_3opt | COMBO | (none) | Combines WITH the shot size (e.g. 'Over-the-shoulder' + 'Close-up' -> 'Over-the-shoulder close-up'). Not a size on its own. |
| shot_size_3opt | COMBO | Medium shot | 10 options: Medium shot, Medium close-up, Wide shot, Extreme close-up, Medium long shot, Close-up, +4 |
| camera_move_3opt | COMBO | Static | 14 options: Static, Tracking, Pan, Static / locked-off, Pan right, Pan left, +8 |
| action_3opt | STRING | What happens in shot 3 -- subject, wardrobe, action, framing details. One or two sentences; the encoder caps the whole prompt at 1024 tokens. | |
| image_4opt | IMAGE | Reference keyframe for shot 4 (strata slot 3, source_id 5). Leave unconnected to end the sequence -- the slot is padded with the trained mid-gray blank. | |
| shot_modifier_4opt | COMBO | (none) | Combines WITH the shot size (e.g. 'Over-the-shoulder' + 'Close-up' -> 'Over-the-shoulder close-up'). Not a size on its own. |
| shot_size_4opt | COMBO | Medium shot | 10 options: Medium shot, Medium close-up, Wide shot, Extreme close-up, Medium long shot, Close-up, +4 |
| camera_move_4opt | COMBO | Static | 14 options: Static, Tracking, Pan, Static / locked-off, Pan right, Pan left, +8 |
| action_4opt | STRING | What happens in shot 4 -- subject, wardrobe, action, framing details. One or two sentences; the encoder caps the whole prompt at 1024 tokens. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| prompt | STRING | — |
| references | IMAGE | — |
| num_shots | INT | — |