OpenH3-IR Media
A media tray that kills `<Picture 1>` bookkeeping
- media
OpenH3-IR Media is one drag-and-drop tray for everything your video looks at or listens to - pictures, clips, sounds - and it exists to kill the single most annoying thing about reference-based video: remembering that the girl was <Picture 1> and the dragon was <Picture 3>, then explaining that mapping to a model and hoping it follows it.
Here's the trick. Files land in the tray with names like picture1, video1, audio1, and you rename them to what they are - hero, dragon, desert, music. Then in your Main node sentence you just write @hero races across @desert while @dragon follows beside him. The binding is mechanical, not a hint: @hero points to that slot, and OpenH3-IR carries it through to the actual reference label H3 consumes. No numbered labels to keep synchronized, no explaining to the writing model.
How it works
Every slot has a role - what the reference is for, not just that it exists. A picture can be something in the shot, the setting, a style to copy, a first or last frame, or a replacement for something inside a clip. A clip can be "copy what's in it", "copy how it's shot", "edit it", or "carry on from it". A sound can play, match a style, cut to a beat, or be a voice to match. These aren't prompt decorations; they change how OpenH3-IR builds the job. Set a clip to edit it, add a picture as replace the one in an existing clip, and that picture becomes a replacement reference that takes the place of something already in the clip, following its position and movement. Two replacement pictures can target two different subjects in the same edit. That's still H3 generating new video - it's not an in-place repaint of your frames - but it's a genuinely different kind of edit than a fresh render.
The tray's state is saved with the graph, including slot names, roles, descriptions and clip-audio choices. Swap a file onto an occupied slot and the name, role and description stay put - a workflow using @hero keeps using @hero; only the source file changes. Drag a rendered video back into ComfyUI and the tray comes back with it.
What you actually touch
The node has one input, tray - its own state as text, written by the panel on the node. Editing it by hand works, and every rule about it is checked when the graph runs. The one output, media, wires into the media socket on OpenH3-IR Main. Hover a @ mention in your prompt and you see what it points to - a picture shows the picture, a clip shows a frame, a sound shows its filename and your note.
The limits, stated plainly
H3 has per-kind ceilings: 9 pictures, 3 clips, 3 standalone sounds, and the tray has a 12-file total, so not every slot can be full at once. A file that doesn't fit is rejected where you drop it, with the reason - never silently discarded. Two more honest limits worth knowing: the tray takes files from disk, not an IMAGE value straight off another node - save it first, then drop the file. And OpenH3-IR cannot hear audio; for sounds it knows the file details plus whatever description you typed, so write a good note on anything important.
Install
Search OpenH3-IR in ComfyUI Manager and install, or:
git clone https://github.com/ruashots/ComfyUI-OpenH3-IR.git ComfyUI/custom_nodes/ComfyUI-OpenH3-IR
/path/to/ComfyUI/python -m pip install -r ComfyUI/custom_nodes/ComfyUI-OpenH3-IR/requirements.txt
Media is pointless without Main + Setup, so budget for those too - Setup holds your LLM and the H3 files, and the LLM needs vision, because every reference in the tray gets read through it. One gotcha when you move workflows: the media files themselves live in ComfyUI's input folder. A graph knows what belongs in each slot on another machine, but the actual files have to be present or dropped back in. Type @ in the Main node's prompt editor and a picker opens with the available references and thumbnails - that's the whole workflow, once you're set up.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| tray | STRING | [] | The tray's own state, as text. The panel on this node writes it, and it is a field rather than hidden state so that a saved workflow and a rendered video carry the tray with them: drag that video back in and the slots come back. Each slot names its kind, its label, what it is, its note, and the file in ComfyUI's input folder. Editing it by hand works and every rule about it is checked when the graph runs. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| media | H3IR_MEDIA | The whole tray, decoded once: every file's pixels or samples, its label, what it is, and its note. Wire it into the media socket on OpenH3-IR Main. |