H3 Media Loader (genkai)
Nine reference slots instead of nine Load Image nodes
- references
MiniMax H3 is a 33B omni-modal video model - text, image, video and audio in one context, 4–15 second clips at up to 2K with native stereo audio. Its reference-to-video mode is the reason this node exists: you hand the model a pile of pictures, a couple of clips and some audio, and it composes from them. Doing that with core nodes means nine Load Image nodes, three video loaders and three audio loaders, all with paths you have to remember and update one by one.
H3 Media Loader is the panel that replaces all of that. Nine picture slots, three video slots, three standalone audio slots, with previews and on/off switches, and one output carrying the whole set.
Fair warning while you're here: H3's open weights ship under a community licence whose grant is scoped to a territory that excludes the US, EU, UK and South Korea - the exclusion reaches outputs, not just weights. The tooling in this pack is MIT and fine anywhere; the model licence is the part you should actually read before you build a pipeline on it.
How it works
The node is a bundled port of Adudeguyman's Fantastic H3 Media Loader (upstream 1.7.1, MIT, licence included in h3_media/LICENSE, hashes in h3_media/UPSTREAM.json). The loader UI, decoder and the HTTP handlers it needs are all shipped here, so the original pack does not need to be installed.
Slots hold references, not tensors. When you drop a file in, the frontend uploads it to a directory inside ComfyUI (input/genkai_h3_media for new uploads; files already inside ComfyUI's input/output/temp are used in place), and the node's state - which slot holds which reference, plus any per-reference edits - is serialised into media_state. The decoder applies the edits at load time: crop, rotate and mirror for pictures; trim, frame capture and audio extraction for video.
Video sound gets three modes: off, paired with the video, or standalone as its own audio reference. That's slot configuration in the panel, not a socket - but it's what decides whether the sound travels with the clip into the splitter's video_audio_N outputs.
The inputs and outputs that matter
There is exactly one input, media_state, and you never type in it. It's a JSON string the browser frontend writes and rewrites; hands off. The only output is references, the H3_REFS bundle.
That output has two consumers. Wire it to H3 Reference Splitter when you want individual IMAGE/AUDIO sockets to feed MiniMaxH3ReferenceToVideo. The upstream pack's Prompt Builder node is not bundled here and is not required.
H3_REFS is a private type. Nothing outside this pack can read it, and you cannot inspect it with a text preview - if a wire full of references looks dead, it's because it's meant to go into the splitter, not a debug node.
How to install it
cd ComfyUI/custom_nodes
git clone https://github.com/GENKAIx/Genkai-ComfyUI-Nodes
ComfyUI Manager → Genkai-ComfyUI-Nodes works too. Restart, then Ctrl+F5 - this one is frontend-heavy, and a soft refresh will leave you with a half-loaded panel. Find it under GENKAI → Media. No models, no pip installs of its own.
Common issues
Limits are real. Nine pictures, three videos, three audio references - the original H3 budgets, and the loader doesn't lift them.
Disabled slots are skipped, not padded. Turn a slot off and the references of that type renumber in visual slot order: left grid first, then the right-hand sections. Which means wiring picture_1..9 before you disable slot 2 gives you a different mapping than you planned. Decide your slots first, wire second.
Dragging between slots is not a copy on collision. An occupied slot swaps with the source; an empty slot receives the media and leaves the source empty.
Filenames are paths, not data. Slots point at files on the ComfyUI machine. Move, rename or delete the file and the workflow loads with an empty slot. Same story when you open a shared workflow: the paths are someone else's.
Ctrl+V paste needs the cursor hovering a slot, or you'll paste into nothing and conclude clipboard support is broken.
Don't run this alongside the original Adudeguyman pack expecting two separate sets of nodes if you don't want to. The port changes HTTP namespaces, CSS names, preference keys and upload directories specifically so the two can coexist - but they'll look nearly identical in the search dialog, so check the (genkai) suffix and the category.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| media_state | STRING | [] | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| references | H3_REFS | — |