Multishot Advance Controls
One panel for resolution, duration, seed, and sampler — so nothing disagrees
- model
- width
- height
- frames_per_shot
- seed
- steps
- sampler_name
- scheduler
- shot_count
- use_file_prompts
Multi-shot video workflows have a plumbing problem that image workflows mostly don't: a dozen nodes each carry their own copy of resolution, frame count, seed, and sampler settings, and nothing stops them from disagreeing. Your controls node says 896x1184, your latent node says something else, your sampler says a third thing, and you spend an hour chasing a mismatch that was never visible on the canvas.
This node is the single source of truth. It computes the render geometry and carries the seed, frame count, steps, sampler, scheduler, and shot count, then hands all of it to the sampler as typed outputs. Change one widget, every downstream consumer updates. It also folds in what used to be a separate Resolution Selector - the tooltip says so outright.
The inputs that matter
The first three are the resolution math, and they're the ones to actually think about:
aspect_ratio- 1:1, 2:3, 3:2, 3:4, 4:3, 9:16, 16:9, or 21:9. 3:4 portrait is the default.megapixels- target total pixels. 1.0 MP at 3:4 with a 32 multiple resolves to 896x1184, which is right in H3's comfort zone.multiple- snaps width and height to this. 32 is the H3-safe default, and there's a reason it's not optional: H3's architecture wants dimensions on that grid.
Then duration and determinism:
frames_per_shot- H3's17k+5grid at 24 fps. 243 is the ~10.1 second default; 362 is ~15.1 seconds, the trained max. It drives both stage A's length and stage B's per-shot length.seed- defaults to 0 with after-generate mode fixed, so a run is reproducible until you tell it not to be.steps,sampler_name,scheduler- defaults are8steps,er_sde,beta. Those aren't arbitrary:er_sde/betais the pairing H3's own reference material expects, ander_sdeis a sampler other Chinese video models (Anima among them) lean on too, so it's a safe family to trust here.shot_count- 0 means one shot per prompt in the script. The tooltip's advice is the whole point of the node: wire this to both the sampler'sshot_countand any prompt generator'snum_shotsso they cannot disagree.
Outputs: width, height, frames_per_shot, seed, steps, sampler_name, scheduler, shot_count, use_file_prompts. Wire the first eight straight into the sampler (or into a latent/preview node that needs the geometry).
The EXTEND TAKE mode
The interesting hidden feature: take_seconds. Set it to anything other than 0 and the node stops being a simple pass-through and plans an extended take - it overrides frames_per_shot and shot_count with a window sized for your card (window, default auto) and the count that fills the requested duration, so a 60-second take becomes N joins instead of one impossible long render. Wire model in when using this so auto can size the window from the real weights (15 GB assumed otherwise).
The trap: pin_frames must match the memory sampler's pin_frames exactly (22 is the tested default). If you change the sampler's pin and leave this at 22, take_seconds calculates the wrong delivered length - you'll get takes that are visibly shorter or longer than asked.
Installing it
Ships in the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/KursatAs/ComfyUI-H3-Multishot-Advance
Restart ComfyUI. No extra dependencies, no model downloads.
Common issues
The recurring failure is forgetting it's a source, not a sink - people edit Controls, then wonder why the sampler still uses old dimensions, because they never wired width/height/frames_per_shot over. If the sampler has its own widgets, remember the sampler's local values win when you're not feeding it from this node. And with EXTEND TAKE, the pin_frames mismatch above is the classic "why is my take the wrong length" - check that one number before touching anything else. Otherwise this is one of the lower-drama nodes in the pack: it does arithmetic and passes numbers around, and it does that on purpose so the rest of your graph has one authority to listen to.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| aspect_ratio | COMBO | 3:4 (Portrait Standard) | Canvas aspect ratio. Replaces the separate Resolution Selector node. |
| megapixels | FLOAT | 0.980.1–16 | Target total megapixels using ComfyUI's 1 MP = 1024^2 convention. H3 uses a fixed 32-pixel grid: 0.98 MP at 16:9 gives 1344x768; 2.00 MP gives 1920x1088. |
| frames_per_shot | INT | 2435–481 | H3's 17k+5 grid at 24fps. 243 = ~10.1s default; 362 = ~15.1s trained max. Drives stage A's length AND stage B's per-shot length. |
| seed | INT | 00–18446744073709550000 | Seed sent to the H3 sampler. Default is 0 and the after-generate mode defaults to fixed. |
| steps | INT | 81–50 | — |
| sampler_name | COMBO | er_sde | 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. 0 = one shot per prompt in the script (or lets prompt planning decide). Wire this to BOTH the sampler's shot_count and the prompt generator's num_shots so they cannot disagree. |
| use_file_promptsopt | BOOLEAN | false | Legacy prompt-source flag. OFF = manual prompt entry; ON = external prompt-set source when the workflow provides its own switch. |
| take_secondsopt | FLOAT | 0.00–600 | EXTEND TAKE: 0 = off. Any other value = the length of the finished take; frames_per_shot and shot_count above are then OVERRIDDEN by a window sized for this card (see 'window') and the count that fills the time. Set prompt planning 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. | |
| pin_framesopt | INT | 220–56 | EXTEND TAKE only: set this to the same value as the memory sampler's pin_frames. 22 is the tested default. If you change the sampler pin but leave this at 22, take_seconds will calculate the wrong delivered length. |
Outputs (9)
| Name | Type | Description |
|---|---|---|
| width | INT | — |
| height | INT | — |
| frames_per_shot | INT | — |
| seed | INT | — |
| steps | INT | — |
| sampler_name | STRING | — |
| scheduler | STRING | — |
| shot_count | INT | — |
| use_file_prompts | BOOLEAN | — |