H3 Studio Controls (one source, both stages)
One panel that drives both stages of the H3 chain
- model
- width
- height
- frames_per_shot
- steps
- sampler_name
- scheduler
- shot_count
- use_file_prompts
H3 Studio Controls is the master settings panel for this pack's two-stage chain. A two-stage H3 render duplicates its settings - the conditioning node and the multishot sampler each carry their own width, height, frames, steps, sampler, and scheduler - and editing one and forgetting the other is exactly the kind of thing that fails at the concat, or worse, succeeds at two different qualities. This node is the single source: wire its outputs to both stages and there's exactly one place to change anything.
It's the node that makes the whole "one source, both stages" philosophy of these workflows real. Instead of hunting through a canvas for the four nodes that each hold a copy of the resolution, you change it here once and the outputs fan out. And it's also where the extend-take mode lives - type a length, get a take.
How it works
It's a value panel, not a generator. You set the widgets, and it emits typed outputs (width, height, frames_per_shot, steps, sampler_name, scheduler, shot_count, use_file_prompts) that wire into the sampler and conditioning nodes.
The widgets that matter most:
frames_per_shot(default 362) - H3's 17k+5 grid at 24 fps; 362 is ~15.1s, the trained max. This one number drives stage A's length and stage B's per-shot length, which is the point.sampler_name/scheduler- defaults euler/beta. The full workflow shipsbeta57from RES4LYF; without that pack,betais the measured fallback.shot_count(default 0) - total shots in the scene, not shots per prompt. 0 lets the script decide.use_file_prompts- flips between typing the scene yourself and pulling from a prompt file/folder.
Then there's take_seconds - the extend-take mode. Set it to a length (0 = off) and the panel computes how many windows fill that time, sizes the window for your card (window = auto picks the largest that fits, or fit this card (VRAM auto) for the VRAM-driven sizing), and replaces shot_count with the computed count. The optional model input exists so auto can size against the real weight size instead of an assumed 15 GB.
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+.
Gotchas
The extend-take feature has a documented limit worth respecting: the chain's texture ratchet isn't fully solved for long takes - measured about +13% fine texture per join at 736x1280 with anti-drift on. Under ~4 windows (~30-40s) it's slight; at 7 windows it's visible sharpening. Keep extend takes to ~4 windows for now. Also, if you hand-set a VRAM reserve elsewhere, remember this panel's auto mode is the measurement-based sizing the pack recommends - a fixed hand-set number is correct for exactly one resolution and a trap at every other.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| width | INT | 76832–4096 | — |
| height | INT | 134432–4096 | — |
| frames_per_shot | INT | 3625–481 | H3's 17k+5 grid at 24fps. 362 = ~15.1s, the trained max. Drives stage A's length AND stage B's per-shot length. |
| steps | INT | 121–50 | — |
| sampler_name | COMBO | euler | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 |
| scheduler | COMBO | beta | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 |
| shot_countopt | INT | 00–30 | How many shots the scene is, in TOTAL - not shots per prompt. 0 = one shot per --- block in the script (and lets the prompt writer decide). Wire this to BOTH the sampler's shot_count and the writer's num_shots so they cannot disagree. |
| use_file_promptsopt | BOOLEAN | false | Drives the prompt-source switch. OFF = type the scene yourself; ON = pull it from the prompt-set file or folder. Wire to an H3 Any Switch. |
| take_secondsopt | FLOAT | 0.00–600 | EXTEND TAKE: 0 = off. Any other value = the length of the finished take; frames_per_shot above then sets the WINDOW length (snapped to the grid), shot_count is replaced by the computed count that fills the time. Set the writer's join_style to 'extend take' so it writes ONE speech across the windows. |
| windowopt | COMBO | auto | Frames per window when take_seconds is set. auto = the largest window whose estimated activation pool fits with most of the weights resident on THIS card (wire model for a real weight size; 15 GB assumed otherwise). Bigger window = fewer joins; smaller = less VRAM. |
| modelopt | MODEL | Optional, EXTEND TAKE only: the loaded H3 model, so 'auto' can size its weights. |
Outputs (8)
| Name | Type | Description |
|---|---|---|
| width | INT | — |
| height | INT | — |
| frames_per_shot | INT | — |
| steps | INT | — |
| sampler_name | STRING | — |
| scheduler | STRING | — |
| shot_count | INT | — |
| use_file_prompts | BOOLEAN | — |