Neo H3 Video Director
Stitching H3 clips so the seams don't show
- model
- video
MiniMax H3 tops out at 15 seconds per clip, which is a real limit if you're trying to tell anything longer than a GIF's worth of story. The obvious workaround - generate four clips and cut them together in an editor - has two problems: the characters change between clips, and the audio restarts from zero at every cut.
Neo H3 Video Director is the pack's answer. It takes a video director recipe: a list of segments, each with its own skill, prompt, duration and optional first frame, generates them one after another, and returns a single VIDEO with one continuous audio track.
Same licence caveat applies as to anything H3: the Community License's Applicable Territory excludes the US, EU, UK and South Korea, so local generation isn't licensed for you there. Directors in those regions should read that first.
How the continuity works
This is the part worth understanding, because it's the difference between a montage and a scene.
With continuity on (the default), segment n+1 is generated as image-to-video using the last frame of segment n as its first frame. That's what keeps the character and the lighting consistent across the cut - H3 gets handed the actual pixels it needs to continue from, not a description of them.
Then it does two cleanup passes at the seam. The first frame of the following segment is dropped from the output, because it's a near-duplicate of the previous segment's last frame and would read as a stutter. Depending on how many segments you have, that costs you a 24th of a second per seam. Second, the audio: each segment's waveform gets concatenated, and at every seam the samples corresponding to the dropped frame are cut too (round(sample_rate / 24)), so the soundtrack stays aligned with the picture instead of drifting a frame per cut.
Turn continuity off and you get hard cuts - no dropped frames, no tail-to-head chaining, and each segment is generated independently. Useful when the segments are genuinely separate shots; wrong when you want one take.
Seeds are derived, not shared: segment i runs at base_seed + i, so a run is reproducible and no two segments land on the same seed. Base seed comes from the node's seed input, or the recipe's shared.seed when you leave it at -1.
The inputs
recipe- required, a dropdown ofvideo_directorrecipes found on disk. You create these in the sidebar Recipes panel (🎬 new), or by clicking the timeline on the node itself and hitting ✎.seed,width,height- all-1by default, meaning "use the recipe'ssharedvalues". Override at the node for a quick retry at another resolution.continuity- boolean, default true.
Output is a single video (VIDEO, frames + audio, 24fps). SaveVideo eats it.
Each segment in the recipe carries skill_id, prompt, duration_sec and an optional first_frame. Durations go through the same 24fps → 17k+5 frame-grid conversion as the single-segment node, so a "5 second" segment is 124 frames.
Building a recipe
The Recipes panel's 🎬 entry opens a timeline editor: a shared resolution at the top (aspect ratio plus a megapixel slider, aligned to multiples of 32), then segment cards. Drag card edges to change duration, drag cards to reorder, click to focus. You can pull first-frame images straight out of the Neo Gallery sidebar into a segment, which is handier than it sounds when you're building a shot list.
There's also a 半自动故事板 tab: describe a theme, hit ✨, and an LLM writes a script and splits it into 5/10/15-second segments with per-scene prompts. You can hand it character and background reference images and have it set one as the first frame of every segment. Treat the output as a first draft - the prompts still want per-segment editing before you spend GPU time.
What to expect at run time
The node shows a read-only timeline while it works: the segment currently generating gets an amber bar, finished ones go green, and the front-end polls a progress endpoint every 500ms. It's genuinely useful, because the run is serial and each segment costs what a full H3 clip costs. Five five-second segments is five H3 generations back to back, not one long one. Do a one-segment smoke test before queueing the whole recipe.
Under the hood each segment reuses the single-segment resolver and executor, so the model/VAE/LoRA resolution rules are identical - including the separate audio VAE, which must be its own loader. Same trap: hand the video VAE to VAEDecodeAudio and you get an IndexError.
Gotchas
One bad segment kills the run. A missing workflow.json raises mid-loop (第 N 段 skill ... 缺少 workflow.json), and everything generated so far is discarded - nothing is concatenated or returned. Errors here are in Chinese, like the rest of the pack's resolver messages.
You get one first frame per segment. The v1 reference scope is a single image (first_frame, or the first entry in the segment's refs). Multi-reference, video-reference and audio-reference segments aren't supported yet.
Recipes are files. They live under the pack's recipes/ directory, and first-frame assets get written into the recipe's assets/ folder on save, so copy both when you move a recipe between machines.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| recipe | COMBO | video_director 配方名:多段整片模式的分镜来源;接了 BUNDLE 时忽略配方。 | |
| skillopt | COMBO | H3参考生视频 | 仅 BUNDLE 单段模式用的视频 skill;配方多段模式忽略(各段自带 skill)。 |
| seedopt | INT | -1-1–9223372036854776000 | -1 = 用配方 shared.seed(配方里存 -1 = 每次运行随机种子);≥0 = 本次整片覆盖该种子。 |
| widthopt | INT | -1-1–16384 | -1 = 优先配方 shared 分辨率,缺省回退各段 skill config(选配方时前端自动填)。 |
| heightopt | INT | -1-1–16384 | -1 = 优先配方 shared 分辨率,缺省回退各段 skill config(选配方时前端自动填)。 |
| continuityopt | BOOLEAN | true | 跨段连续性总开关:开 = 上下文窗口 + 身份继承。 |
| context_framesopt | INT | 220–362 | 上下文窗口帧数;0 = 退回尾帧链入(只带上一段尾帧)。 |
| modelopt | MODEL | 外部加速模型;提供时覆盖每段内部主模型链(UNETLoader/LoRA/VDN)。 | |
| stepsopt | INT | -1-1–100 | -1 = 优先配方 shared.steps,缺省用各段 preset/config 的 steps。 |
| previewopt | BOOLEAN | true | 节点内实时预览:开 = taeh3 真彩动作预览,关 = 完全不出(省显存)。 |
| duration_secopt | INT | 51–150 | BUNDLE 单段时长(秒):按 24fps 换算成 H3 帧数并对齐 17k+5 网格(5 秒 → 124 帧);切换视频 skill 时按该 skill config 的 length 自动填 |
| bundleopt | STRING | — | |
| only_segmentsopt | STRING | 只运行勾选的段:填段号(1 基,逗号分隔,如 1,3,5);空 = 全部段(由时间轴上的勾选自动写入) |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | 整片拼接后的 VIDEO(含音频,24fps),接 SaveVideo / 预览;接 NeoH3SegmentRun 的 film 可做单段重生成锚点。 |