Element Multi REF
One panel for every reference your video model keeps asking for
- REF_ALL_IN_ONE
Reference-conditioned video is where the hobby went. MiniMax H3 landed with ref2va and fl2va modes, LTX 2.3 is a first/last-frame model with time-windowed conditioning, and Wan and the Qwen edit models all want images, clips and audio side by side. So your graph, before it generates anything, is nine LoadImage nodes, two video loaders, three audio loaders, a text box - times every variant you're testing.
Element Multi REF is the fix for that mess: one node holds every material your shot needs - 21 slots plus a prompt - and hands them down a single wire. It's the bundle-on-one-wire plumbing pattern (rgthree's Context, Efficient's pipes) applied to reference material, with an actual UI on top.
What's in the panel
The 21 slots come in five groups, which matters because your model only accepts some of them: first and last frame; nine reference images (ref_image_0–_8); three reference videos; three audio slots paired to those videos; three independent reference audio slots; one driving audio. Drag files onto a slot or click an empty one for a filtered browser; videos and audio get a waveform/timeline editor with frame-quantized trims, images get crop, resize and a paint brush.
The frame-lattice presets are the quietly useful part. Length quantizes as a + n × div, with presets for MiniMax H3 (17n+5), LTXV (8n+1) and plain 4n - LTX 2.3 wants frame count divisible by 8 plus 1, and the div by 32 crop default matches its resolution requirement.
How it works under the hood
Everything on the panel serializes into a hidden string input called refs_data - materials (absolute paths plus probed durations and fps), per-slot edits, the prompt, every preset snapshot. Uploads land in ComfyUI/input/element_multi_ref/, deduplicated by SHA-256.
At execution the node packs that state into an EMR_REF bundle on REF_ALL_IN_ONE, its only output. Nothing is decoded here; it's paths and edit parameters, which is exactly why the second node of the pair exists - Element ref convert does the loading.
run_preset_NUM is the one input you'll touch. 0 gives you the panel as you left it; 1, 2, 3… give you that numbered preset snapshot (out of range clamps to the last preset). Wire a counter or list index into it and one queued batch plays your presets in order.
refs_data is the hidden state field: don't hand-edit it, and don't clear it expecting to keep your presets - they live in there, which is also why they travel with the workflow. To move them to another machine, use Collect and Export.
Installing it
Manager, search ComfyUI_Element_easy, install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/supElement/ComfyUI_Element_easy
cd ComfyUI_Element_easy
pip install -r requirements.txt
The requirements are real: av (PyAV, video/audio decoding), opencv-python, kornia, scenedetect. Scenedetect is optional-ish - Auto Split falls back to a built-in HSV histogram diff - but the real thing is better. ffmpeg on PATH is optional too: decode fallback for odd audio formats, plus the pack's audio-equipped video export. No model files.
One gotcha the README buries: this module imports from comfy_api.latest import io, so it needs a recent ComfyUI. The pack loads its newer modules through a try/except that skips a failed one instead of killing the pack - on an old build the nodes just aren't in the list, and the only clue is a terminal line like [Element_easy] 模块 Element_multi_ref 加载失败. Both nodes of this pair missing while the pack's others load is that tell: update ComfyUI.
Where people get burned
"Material missing." Materials are referenced by absolute path. Move the source file or open the workflow on another machine and the slot is dead until you re-drop it. Nothing is embedded except the path.
A hidden zone isn't an empty one. The bottom-bar toggles only hide things; clearing a slot is a right-click or the ✕. Clear All wipes materials, edits and prompt but keeps presets - a feature or a trap depending on which you wanted.
Long videos get heavy, and capped. Previews are cached but the timeline gets sticky on big files - use Fit/Zoom. Output is hard-capped at 1200 frames per video slot, so long reference clips get truncated rather than erroring.
No community reporting to lean on. This pack has essentially zero reddit footprint as of writing. Fair enough for a new, small pack - but it means everything above comes from the source and the author's docs, not other people hitting it. It logs to the terminal; read it.
Last thing, since the node is built around H3's reference modes: the MiniMax H3 Community License excludes the US, EU, UK and South Korea, so in those regions you aren't licensed to run the local weights at all. LTX and Wan are unaffected - the model's terms, not the node's.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| run_preset_NUM | INT | 0 | 0 = output the CURRENT panel state (materials/slots/prompt as edited in UI). >=1 = output preset #n (1-based). Out of range is clamped to preset count. Connect an upstream int node that changes per queue run for batch playback. |
| refs_data | STRING | {} | Internal UI state (hidden) |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| REF_ALL_IN_ONE | EMR_REF | — |