- h3_inputs
- h3_inputs
- report
MiniMax H3 doesn't render whatever size and duration you type. It renders on a grid - width and height snap to 32px, and the number of frames has to fit n % 17 == 5. Ask for 5 seconds and you'll actually get 124 frames, which is 5.17 seconds, not 5.00. H3 Canvas is the node that does that arithmetic for you, and it's where you'll start almost every H3 workflow because everything else in this pack hangs off the h3_inputs wire it carries.
What it actually does
H3 Canvas sets the canvas - the resolution and the clip length - and puts them on the pack's h3_inputs wire so they travel with your assets. That wire design is the pack's whole trick: canvas, keyframes, references and audio all chain together in any order and all end up at H3 Encode. Unwired nodes just fall back to H3's defaults, so the graph still works if you delete this node; you're just stuck at the default 1344×768, 124 frames.
The three inputs you set are width (default 1344), height (default 768) and seconds (default 5). Both axes snap to the 32px grid - that's the VAE's /16 followed by the DiT's 2×2 patch - and duration snaps up to the legal frame grid. The report output tells you what you actually got: the snapped canvas, the frame count, the aspect ratio, and how far past H3's trained envelope you've wandered.
Where people get burned
Two things. First, the duration envelope. H3's trained range is roughly 5–15 seconds (~124–362 frames). The node will happily accept up to 150 seconds, but past the trained range the rope runs off the end of what the model saw, and sung or spoken content degrades into gibberish well before a minute. For longer pieces the intended move is chaining 10–15s segments with video continuation - not one giant canvas.
Second, this node sets size, not resolution strategy. It takes plain width and height ints. The README's guidance is to pick the actual resolution with a dedicated resolution node and wire its outputs in here - this node isn't trying to be the smart resolution picker, and it'll say so in the report when you land far outside H3's base envelope (a 768 short edge capped at 768×1344).
Install
ComfyUI Manager → search "Nynxz H3", or:
cd ComfyUI/custom_nodes
git clone https://github.com/Nynxz/ComfyUI-NynxzH3
Then restart. This pack is pure Python with no dependencies, but it uses ComfyUI's newer node API, so it needs ComfyUI 0.30.0 or newer. You also need the actual H3 pieces - the checkpoint (a 33B model, roughly 42GB of weights), the Qwen3-VL text encoder and the video VAE - before any of this does anything.
The one-liner
Set seconds, wire width/height in from a resolution picker, and read the report to see what H3 will actually sample. If the report ever says you're way past the trained range, that's the node telling you to think in 10-second segments instead.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| width | INT | 134432–16384 | Canvas width, snapped to the 32px grid — the VAE's /16 then the DiT's 2x2 patch. H3's own envelope is a 768 short edge capped at 768*1344; the report says how far past that you are. |
| height | INT | 76832–16384 | Canvas height, on the same 32px grid. |
| seconds | FLOAT | 5.00.2–150 | Duration at 24 fps, snapped UP to the legal frame grid — the report names what you actually get. H3's trained range is ~5-15s; past that the rope runs off the end of what it saw and sung or spoken content degrades into gibberish well before a minute. |
| h3_inputsopt | NYNXZH3_INPUT | Chain from H3 Image / Video / Audio, or leave unwired. Assets pass through untouched; only the canvas is set. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| h3_inputs | NYNXZH3_INPUT | Into H3 Encode, or on through more asset nodes. |
| report | STRING | What you actually get: the snapped canvas and frame count, the aspect ratio, and how far past H3's base envelope it lands. For the numbers as values, put an H3 Extras on the wire. |