H3 Import Source
Your MP4 Doesn't Fit H3's Grid — This Node Makes It
- images
- vae
- audio
- audio_vae
- latent
- images
- audio
- report
The problem this solves
Long H3 videos are chains, and a chain has to start somewhere - usually not with H3. It's a live-action plate you shot, a clip from another model, or last week's master you want to keep going. Drop that into an H3 workflow and nothing lines up: it's 30fps, it's 1080p when your project is 928×928, and its length is whatever it happens to be rather than something H3 can render.
H3 Import Source is the in-graph version of the suite's Import… button - conform outside footage onto H3's grids, encode it, hand back a clip you can save as clip 1. Same conforming either way; the panel just shows you a filmstrip, and this node writes a text report.
What it actually does to the footage
H3 runs at 24fps and its clip lengths sit on a ladder of 17m + 5 frames - 5, 22, 39, 56, the same numbers as the pack's context-length dropdown. Nothing here is free-form.
Frame rate conversion is by index, not interpolation: each 24fps frame centre picks a real source frame, so nothing is blended and no pixel gets invented. Which means the node has to trust you about the source rate - an IMAGE batch carries no fps, hence the required source_fps.
Length then snaps down to the nearest rung, and the leftovers are trimmed from one end. keep decides which: tail (the default) keeps the finish, head the start, center trims both evenly - tail by default, because imported footage usually leads into a chain.
Picture is resized to width×height with lanczos. crop: center fills that box by cropping the edges; disabled isn't "keep everything" - it just resizes, so a mismatched aspect ratio comes out squashed. Want bars? Letterbox before the node.
Audio is optional and well behaved: resampled to the audio VAE's rate, then conformed to exactly what the kept frame count implies at 24fps. Both streams are packaged into one latent, the shape the rest of the suite expects.
The sockets that matter
Required: images (any loader you use), source_fps (take it from the loader, not from memory - a wrong value stutters at every join), width, height, crop, keep, and vae, the H3 video VAE. Optional: audio and audio_vae, only if you wired audio.
Four things come out. latent is the encoded clip → H3 Project Save. images is exactly the frames that latent contains, also → Project Save, so the video it writes shows what was really kept. audio is the conformed waveform, same destination. report is a string: frames in, rate converted, frames dropped and from which end, the final seconds and latent steps. Wire it to any text preview and read it before you approve. This isn't an output node, either - nothing hits disk until Project Save is downstream.
Installing it
One install, because it ships with the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/Adudeguyman/ComfyUI-H3-Project-Suite
Restart ComfyUI and hard-refresh the browser (Ctrl+Shift+R) - the pack serves its own panel over /h3_suite/ routes and a stale cache will hide it. Manager works too; search the pack title. No extra downloads: you need the H3 video and audio VAEs you're already running, and av/numpy ship with essentially every ComfyUI install.
One conflict: if you have the original ComfyUI-H3-Motion-Context, remove or disable it. The pack detects it and refuses to run rather than produce a bad render. Other H3 motion-context forks coexist fine.
Where people get burned
The audio sync trap. If the source audio is longer than the kept video, the node takes the last matching span of samples - regardless of keep. With keep: tail that lines up perfectly. With keep: head the picture came from the front and the audio from the back, so they drift. If there's sound, leave keep on tail or pre-trim the file.
Audio that isn't this video's audio. Conformance has a guard rail at half a percent: a frame count lands between audio steps, so a tiny correction is normal, but beyond that the node refuses with both durations spelled out rather than stretching and drifting your whole chain. Trim them to match, or unwire the audio.
Wired audio without an audio VAE throws immediately, by name - as does a sample-rate mismatch when torchaudio isn't around to resample. Rare on a normal install, likelier on stripped-down portable builds.
Footage shorter than 5 frames after conforming can't be a clip at all, and you get a fixed error saying so. A 4fps phone timelapse will do this.
Picking resolution after the fact. A chain is locked to the size of its first clip, and an imported clip is the first clip. Decide the aspect ratio now - hence the Resolution Selector the panel workflow wires into the Hub's width/height before any footage exists.
And the boring one: the weights. MiniMax's community licence excludes the US, EU, UK and Korea from the territory where you're licensed to run H3 locally at all. Licensing problem, not a node problem - but check before debugging your install.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | the source footage, from any loader you already use | |
| source_fps | FLOAT | 24.0001–240 | the rate the footage was shot or rendered at. Wrong here means a stutter at every join, so take it from the loader rather than guessing. |
| width | INT | 92816–4096 | — |
| height | INT | 92816–4096 | — |
| crop | COMBO | center | 2 options: disabled, center |
| keep | COMBO | tail | which end survives the trim. 'tail' keeps the end, which is what you want when the footage runs INTO the chain. |
| vae | VAE | H3 video VAE | |
| audioopt | AUDIO | optional. Conformed to the kept video's length; wildly mismatched audio is refused rather than stretched. | |
| audio_vaeopt | VAE | H3 audio VAE, needed only when audio is wired |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| latent | LATENT | the encoded clip, for H3 Project Save |
| images | IMAGE | exactly the frames that latent contains, for H3 Project Save so the saved video shows what was kept |
| audio | AUDIO | the conformed audio, for H3 Project Save |
| report | STRING | what conforming did, in words |