H3 Video Outpaint · 区域提示/人物保护计划 (EXP)
Per-side prompts for the new canvas — and an honest person-box audit
- plan
- guidance
- guidance_report
Plain outpaint gives you one prompt for the entire newly generated area. That works when you're extending three sides by 100px of "same room, more room". It falls over the moment the new canvas is big and asymmetric - a 16:9 clip pushed into 9:16 needs sky above and ground below, and a single prompt will happily give you both, in the wrong places.
MiniMaxH3VideoOutpaintGuidanceT8 is the node that solves that. It takes two JSON strings and compiles them into a guidance object you feed to the guided Prepare and then to the Regional Model node.
regions_json
An array of region entries. Each one has three required fields and one optional:
[
{"shot": "all", "region": "top", "prompt": "open sky continuing naturally"},
{"shot": "all", "region": "bottom", "prompt": "wet pavement and reflections"}
]
shot is either "all" or a zero-based shot index, so you can give the beach shot a different sky than the street shot. region is one of top, bottom, left, right, expanded (the whole new area) or bbox. prompt must be 1–4096 characters and non-blank. A bbox region additionally needs box as [x, y, width, height] in output-canvas coordinates - and it will be rejected if it overlaps the original source rectangle. That's deliberate: you can't re-prompt pixels you promised to preserve.
Two limits worth knowing before you design something clever. Maximum eight regions per shot. And a region has to actually cover at least one H3 token centre at your sampling budget, or the node errors rather than silently dropping it - so a 6px strip on a heavily downscaled sampling canvas is a hard no.
person_boxes_json
This is the part people misread, so let's be precise. Entries look like {"shot": 0, "label": "subject", "box": [x, y, w, h]} and the coordinates are original source pixels, not output pixels. Every other coordinate in this node is output-space; this one isn't. That asymmetry is intentional and the source says so in as many words.
What the box does is audit, not constrain. The guidance report returns source_pixels_locked: true and expanded_area_person_pixels_guaranteed: false, and separately lists person_boundary_risks for any box that touches a source edge - the cases most likely to produce a severed torso or a duplicated limb at the join. If a label box runs off the left edge of the source, the node tells you rather than pretending the protection holds.
So: don't read "person protection" as "no person will be hallucinated into the new area". The author explicitly declines to claim that, and the node description says so outright.
Outputs
guidance, the compiled object, and guidance_report, a JSON summary with the region and person counts per shot, the hashes, and the human_review_required: true flag. There's no IMAGE output here - if you want to see the geometry you're guiding, that's the Geometry Preview node, and pairing the two is a reasonable habit.
Routing, briefly
Regions get compiled onto H3's native 32-pixel spatial token grid, matching how H3 lays out spatial patches, rather than being handed to ComfyUI's generic post-pack conditioning areas. The practical consequence is that this is H3-specific machinery, which is also why the regional route has its own Prepare and its own Model node.
Install
Manager: search MiniMax H3 Audio T8, install, restart ComfyUI fully. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8.git minimax-h3-audio-T8
The pack's requirements.txt is empty on purpose - no pip packages get added and your Torch stack stays put. The full guided chain needs the H3 FL2VA model, the Qwen3-VL text encoder and the video/audio VAEs in their standard ComfyUI folders, ComfyUI-KJNodes, and ffmpeg on PATH. This node itself is pure validation and bookkeeping; it loads nothing.
Where it goes wrong
Malformed JSON is the usual failure, and the error messages name the offending entry index, which is more help than most nodes give. The subtler one: if you edit regions_json after preparing, the guidance hash changes and the guided Prepare's cache no longer matches - new run_name, re-prepare. And don't share a run name between the plain and regional routes; the pack's own notes call that out twice.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| plan | T8_H3_OUTPAINT_PLAN | — | |
| regions_json | STRING | [] | — |
| person_boxes_json | STRING | [] | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| guidance | T8_H3_OUTPAINT_GUIDANCE | — |
| guidance_report | STRING | — |