Nodes/ComfyUI-H3-Multishot/Script for Two Engines (H3 + LTX-2.5)
ComfyUI Node

Script for Two Engines (H3 + LTX-2.5)

Write one script, render it with H3 or LTX-2.5

By jlucasmcrell·Created 21 days ago·Updated 2 days ago· 31
Script for Two Engines (H3 + LTX-2.5)
    • h3_script
    • ltx_prompt
    • shot_count
    script
    ltx_shot_labelThen, without moving the camera,

    Rift Engine Script is the bridge node that turns one written script into two engine-native forms: the H3 shot-list (shots separated by ---) and an LTX-2.5 prompt. You write the scene once, in the H3 convention, and this node produces both the H3 script and the single LTX prompt with the per-shot beats joined the way LTX wants them.

    This pack is fundamentally about H3, but it also ships an LTX-2.5 lane, and this node is what keeps the two honest. H3 renders discrete shots you chain; LTX-2.5 renders one continuous take and decides its own cut points. A script that works for one doesn't naturally read for the other - H3 needs the scene block restated verbatim in each shot, while LTX wants one flowing prompt. This node does that translation mechanically instead of by hand.

    How it works

    It parses the H3 script into blocks, then does a clever bit of text surgery. First it finds the common prefix - the scene block H3 convention repeats in every shot - and strips it off the tails so it's stated once for LTX. Then it looks for the "hold" preamble shots 2..N usually share ("She sits exactly as she was, …") and strips that too, carefully avoiding the opening quote of dialogue. What remains are the per-shot beats, joined with ltx_shot_label (default "Then, without moving the camera,"), with case handling so a beat that continues the joining clause doesn't arrive capitalised mid-sentence - unless it opens with dialogue, where the capital belongs to the line.

    The inputs are script (the H3-form script) and ltx_shot_label (how shots connect in LTX; for hard cuts try "Cut to:"). Outputs are h3_script (passthrough), ltx_prompt, and shot_count.

    If the script doesn't use the verbatim scene-block convention at all - no common prefix - it passes the blocks through in order rather than inventing structure that isn't there, and prints that it did so.

    Installing it

    Part of the ComfyUI-H3-Multishot pack:

    cd ComfyUI/custom_nodes
    git clone https://github.com/jlucasmcrell/ComfyUI-H3-Multishot
    

    Or search H3 Multishot in ComfyUI Manager. Requires ComfyUI v0.30.0+. To use the LTX output you'll also want the LTX-2.5 model setup; the pack's ltx25_multishot.py lane handles the rendering side.

    Gotchas

    The label matters more than it looks. LTX-2.5 decides its own cut points, so ltx_shot_label is the only way to tell it whether the beats are one continuous take ("Then, without moving the camera,") or separate setups ("Cut to:"). Get it wrong and you get the other one. And the "no common prefix" fallback is worth reading as a signal: if you're getting an LTX prompt that's just your shots space-joined, it means your script doesn't follow the H3 verbatim-scene convention, and fixing that improves both engines - H3's chain quality depends on it anyway.

    CategoryH3/script

    Inputs (2)

    NameTypeDefaultDescription
    scriptSTRINGThe H3 form: shots separated by --- on its own line, with the scene block restated verbatim in each. Write it once, here, for either engine.
    ltx_shot_labeloptSTRINGThen, without moving the camera,Joins the per-shot beats in the LTX prompt. LTX-2.5 decides its own cut points, so this is how you tell it whether the shots are one continuous take or separate setups. For hard cuts try 'Cut to:'.

    Outputs (3)

    NameTypeDescription
    h3_scriptSTRING
    ltx_promptSTRING
    shot_countINT