PromptMasterLD
ComfyUI custom node: prompt authoring for LTX video - Studio panel, brief builder, wardrobe and reference rails
Nodes (75)
How Long Is That Track, Really? Measure It Instead of Typing a Number
One Scheduler, One Node
Let the Canvas Do the Switching
Flip a boolean and ComfyUI never even executes the other branch
The 41-millisecond node that keeps lip sync honest
Character folders in, matched reference photos out, no manual wiring
A character's whole look and voice in one .riftcast file
Motion, Voice and Continuity Carry Across Every Cut
The text encoder loader that won't silently lose your reference images
Stitch two stages into one take, and hide the focus snap between them
How hard should the model obey your keyframes and refs?
Carve one script into the stage A prompt and the stage B chain
Type how long you want, get the window math done for you
The one-node fix for the 16GB text encoder squatting on your card
One continuous trajectory, any length, VRAM that doesn't grow
One integer in, a resolution-safe integer out
H3 Join Fixes the Joins You Never Noticed
Add a physical start frame to conditioning that only has references
Anchor a clip at any frame, not just first and last
The tiny node that hands a take to the next stage
H3 Library Load
Save a Take So the Next One Can Extend It Seamlessly
One Themed Loader for UNET, CLIP and Both VAEs
Refine the Picture Without Re-Rolling the Sound
Four LoRAs, one node, one model output
The master panel that sizes an LTX-2.5 take to your card
H3 Master Renders the Whole Chain
One dropdown that handles safetensors and GGUF, with a VRAM brain
Long-form chains with a bank that holds the story
Render the Whole Studio Pack Without Rebuilding the Graph
One node, a whole seamless take instead of a cut sequence
The H3 Multishot Sampler, Tamed
H3 Music Video Writes Each Segment to the Song
The right way to turn I2V on and off in an H3 chain
H3 Output Is the Sane End of the Rail
H3 Pack Bridge Feeds Your Own H3 Graph
The experimental node that grafts another model's attention onto H3
The adapter that makes a RefPicker's output actually reach H3
Why your H3 render crashed on a mono audio file
Scene conditioning, not motion control
Nine reference images from a folder, no LoadImage spaghetti
The Refine Pass Sampler
Run H3's 18 GB text encoder on a second PC
Fix one bad stretch of a finished clip without rerendering the whole thing
Route Picture and Sound as One Decision, So They Can Never Desync
A Switch That Reads the Answer Instead of Being Told It
What Rail Is Live Right Now? This Node Reads It Without Running Anything
One master sampler dropdown that actually drives every node
Turning one shot list into the four prompts a 3-shot chain needs
A linked scheduler string that actually becomes a sigma schedule
The speed knobs that are safe to leave off
One panel that drives both stages of the H3 chain
Tell It What You Want in One Line, Get a Shootable Script Back
The feature-toggle panel, and why its dead switches ship dead
2-second draft previews instead of a minute per shot
Stop typing the upscale size into three nodes — let this one decide
The deprecated name for the H3 prompt source — and why it still loads
The deprecated JSON script dropdown, and what it feeds
LTX LoRAs are half picture, half sound — this loader gives you a fader for each
The LTX-2.5 sampler that makes a take as long as you like
The node that makes H3 clips actually continue each other
Chain past MiniMax H3's 15-second limit without touching the Run button
Loading the previous H3 clip's latent, without the quality tax
The invisible hand that carries your H3 clip's tail into the next run
Measure the H3 join in-graph
The trim node that keeps your chained H3 soundtrack on the beat
The node that writes the song so you don't mangle it
The node that stuffs your whole render rail into one cable
Turn the panel's reference list into sockets you can actually wire
Write one script, render it with H3 or LTX-2.5
Txt briefs, JSON scripts, and unattended folder renders
Hand your H3 chain a saved script from a dropdown
Rgthree-style group switching, but every rule is a dropdown
Where a shot script becomes wires you can actually touch
The end-of-render node that stops AI video looking like AI video
Prompt Master LD
A shot writer and pipeline pack for ComfyUI, built around H3 video. It runs a local model through LM Studio, turns a one-line intent into a finished shot script, and hands the graph the text plus real timing — then ships the sampler, routing, reference and audio nodes that render it.
The centre of the pack is the H3 Studio node and its panel. Everything else exists to get a script out of it and into a render.
What it does
You type what you want. The panel builds a brief from the dials you actually set, sends it to your local model, and returns a script the graph can use — with the frame count, the beats and the pack-out already correct.
Eight modes, chosen on the node:
| Mode | What it writes for |
|---|---|
| ref | reference-driven shots — the default; files you attach are cited by name |
| i2v | image to video, opening on the frame you supply |
| t2v | text to video, building the frame from nothing |
| mv | music videos — per-shot start stills, a tagged cast rail, wardrobe lock |
| multishot | multi-shot sequences staged onto the multishot sampler |
| ext | extending an existing take |
| music | music and lyric work |
| image | stills (see README_IMAGE.md for the FLUX.2 writer) |
The brief
One craft instruct is always present. It is organised the way a shot is physically built, because that is the order the failures appear in:
WEIGHT mass, gravity, contact, poses arrived at, joints in directions
TEXTURE the physical particular over the impression; what shifts as it runs
LIGHT direction, quality, one effect, one optical property
SOUND everything audible comes from inside the shot
FRAME camera placed once, distance, eye contact, cast, the closing image
Then a short law for each dial that is actually set, and nothing for the ones that are not. A bare shot reads as a clean brief rather than a stripped one.
The request always outranks a dial. Anything named in the intent wins over anything a dropdown seeded.
VOICE — register, grain, pace, and the scene setting the delivery — ships with
any talking shot and always before the accent law.
Where the laws live
brain.py the craft instruct, first person, speech, assembly, budgets
accents.py 49 accent notes and the accent law
wardrobe.py appearance — viewer look, cast look, wardrobe, undress
closet.py the garment catalogue and its pictures
dials.py style, camera, transition, music, format
celebrities.py face keys, rebuilt from h3_known_faces.json
worldscapes.py settings and worlds
scenarios.py scenario banks
artists.py artist and vocal profiles
refs.py the reference rail — what is attached, and what it is for
vision.py one vision policy: sizes, per-mode caps, frame budgets
Plumbing: backend.py (LM Studio transport, streaming, abort), routes.py
(panel endpoints), h3_studio.py (the node), imaging.py, negative.py,
vram.py.
Dials
video_mode 8 modes · pov off / male / female · accent 49 + strength (natural / strong / thick) + a separate partner accent + who leads + spoken language (english / own) · dialogue 0–100% · wardrobe 591 garments in 16 categories + seed + undress · style 570 in 20 groups · style_look 176 · camera 40 · transition 11 · music 51 · scenario 107 · worldscape 57 · celebrity 503 · ref_recipe 7 · fps, seconds → beats and frame count · words_per_second short / medium / long · fmt 5 formats · lexicon names and terms.
Accents
49 accents, and the law splits them by what can actually be written down:
- An accent whose note names a writeable shift (
th toward d,dropped h,rolled r) gets SPELL IT — the accent goes in the letters of the words. - An accent whose note names only rhythm, stress or vowel colour gets grammar, word order, tags and address terms instead, and respelling is forbidden. Told to respell anyway, a model invents fake phonetics or borrows a louder accent's — which is how an Indian-tagged line came back French.
The accent is named inside the dialogue bracket, where it reaches the voice
(<d>[English with heavy Ugandan accent] She is de queen.</d>), and nowhere in
the prose attribution. Two speakers each get the full law, never a paraphrase.
Nodes
53 register in total — this pack's own plus the vendored packs below. They
appear under LD / PromptMaster and as H3 … entries. The spine is:
🎬 H3 Studio → Unpack / Pack In → your H3 or LTX graph
with routing (H3 Route, H3 Route AV, Group Switch), samplers (H3 Multishot, H3 Chain, H3 Infinite Take), references (H3 Refs, H3 Ref Folder, H3 Auto Refs), audio (Music Studio, H3 Lock Audio, Audio Duration) and output (H3 Join, H3 Concat A/V, Video Grade).
Backend
LM Studio only. Point it at an OpenAI-compatible server — the default is
http://127.0.0.1:1234 — and pick your model in the cog. The modes that look
at pictures (ref, i2v, mv, multishot) need a vision-capable model
loaded; set it as the vision model in the same panel.
Setting up LM Studio
- Download and install LM Studio (Windows/Mac/Linux, free).
- In the search tab, pull a model. This pack is built and tested
against
qwen3.8-27b-uncensored-hauhaucs-aggressive-mtp— search for it by name and grab the quant that fits your VRAM. - Before you load it, open the model's load settings and:
- Turn "Thinking" off (reasoning mode). A reasoning model spends its
whole reply on a
<think>block before writing anything usable, which wastes your token budget on scratch work instead of the shot script and can make the panel stall waiting for text that never shows up. - Set Context Length to at least 32,768 (32k). LM Studio's own default (4k–8k depending on model) is too small for this pack's longer briefs — multishot, reference-heavy scenes, and accent + wardrobe stacked together can all run past it, and a context that's too short cuts the script off mid-sentence instead of failing cleanly.
- Turn "Thinking" off (reasoning mode). A reasoning model spends its
whole reply on a
- Open the Local Server tab (left sidebar) and start it with that model
loaded. Leave the port at the default
1234unless you have a reason to change it. - In the H3 Studio panel's ⚙ settings: set server_url to
http://127.0.0.1:1234, pick your model from the list, and set the panel's own ctx field to the same number you set in step 3 (32768). This ctx is a separate number the pack uses to estimate whether a prompt will fit — it does not read LM Studio's setting automatically, so the two have to be kept in sync by hand.
The managed llama-server backend was removed: it spawned llama-server.exe
against a GGUF picked from disk, and it kept breaking for people who were
connected to LM Studio anyway.
Connection settings live in cpld_conn.json, which is local and never
committed.
Install
Copy this folder to ComfyUI/custom_nodes/PromptMasterLD/ and restart.
Assets are not in the repository. RefBank/ is excluded entirely and
Wardrobe/ ships two example garments so the closet has something to resolve —
the rest of both folders stays on the machine that made them. See .gitignore.
workflows/ ships an example graph — drop it into
ComfyUI/user/default/workflows/ to load it from the workflow menu.
Tests
python selftest.py # wiring, no LLM
python eval.py # real shots through the live backend
python eval.py --dry # build every brief, call no LLM
python eval.py ref # only cases matching "ref"
selftest.py checks that dropdown keys map to real laws in both directions,
that a set dial changes the brief and an unset one does not, that no two live
laws contradict each other, that the arithmetic holds, and that every call
routes.py makes into a law module binds against the real signature.
eval.py grades the generated script, which is the only layer that can see
an accent bleeding into the wrong mouth, a second speaker coming back flat, two
people's actions blending, or forty actions crammed into twenty seconds. Needs
the backend up. The graders are blunt and mechanical on purpose — no model
judging a model — and each failure hands you the offending line.
Licence
MIT — see LICENSE.
Bundled third-party packs
PromptMasterLD ships two packs inside vendor/ so the whole rail installs
as one repository. Each keeps its own folder, its own __init__.py and its
own LICENSE, unmodified, and is loaded by this pack's __init__.py.
| Pack | Author | Licence | Why it is here |
|---|---|---|---|
| ComfyUI-H3-Multishot | RiftCast / jlucasmcrell | MIT | upstream for h3ms_bridge; its instruct and sampler are what multishot is built on |
| ComfyUI-H3-Motion-Context | NikoDemon80 | GPL | H3 Master's clip chaining |
Full credit to both authors. The multishot contract in dials.py is
ported from jlucasmcrell's instruct and is marked as such in the source.
Licence note: ComfyUI-H3-Motion-Context is GPL-licensed. Bundling it
means this distribution as a whole is subject to the GPL. If you would rather
keep this pack permissive, delete vendor/ComfyUI-H3-Motion-Context/, remove
it from _VENDORED in __init__.py, and install it separately — H3 Master
already raises a clear message when it is absent.