Yanhuo 参考图打包 (图像列表→ref_pack)
Give One H3 Clip Its Own Reference Images — and Stop at Nine
- images
- ref_pack
- 参考数
An H3 Motion Context chain isn't one generation, it's a stack of clip cards: each card carries its own prompt, its own duration, its own reference set. That's the point of the whole architecture - clip 5 can introduce a second character, a prop, a different location, and the chain keeps its motion continuity anyway. The problem is the feeding. Each card has Picture 1 through Picture 9, which is fine when your references come from a file picker and miserable when they arrive as pixels from somewhere else in the graph. This node is the adapter for that: an IMAGE batch goes in, one card's worth of references comes out.
It's the smallest node in the pack, and worth understanding properly, because its failure modes are silent.
What it actually does
Almost nothing, which is the right amount of work for a node sitting next to a 33B video model. It takes the incoming IMAGE tensor, splits it along dim 0 - frame 0, frame 1, frame 2 - and gives each frame its own reference slot, in order. Those slots are wrapped in an H3_REF_PACK value: a small dict carrying the type tag, a format version, a source label, a count, and the tensors themselves. That's the pack shape the main node's per-clip ref_pack sockets expect - the single-input simplification of the reference-pack bridge the Extender ships.
Slots cap out at 9, matching the per-card Picture 1..9 ceiling. The cap is hard and it is not an error: frames ten and upward are dropped and a warning lands in the console, and the render proceeds happily with the nine it kept. Which means the way you discover you lost references is by squinting at the output and wondering why that character looks off.
Order is the slot number. The first frame you feed is Picture 1. If you're assembling a character sheet or a three-quarter/front/profile set, the batch order is the order the model sees, so don't let an upstream shuffle it casually.
The inputs and outputs
images(IMAGE) - the batch. It's optional and it's a forced input, meaning it exists only as a socket; wire something in. Left unwired, you get an empty pack and0, not an error.ref_pack(H3_REF_PACK) - the thing you actually want. Wire it toref_pack_Non the pack's "Yanhuo H3 逐段输入集合" collector node and it becomes the reference set for CLIP N specifically. Older workflows that still haveprompt_N/ref_pack_Nsockets directly on the main node keep working; the collector is just where those ports moved in v1.12.0.参考数(INT) - how many frames actually made it into the pack, after the nine-slot cap. Glance at this instead of tailing the console; if you fed twelve images and it says 9, you know exactly what happened.
Everything is per-clip. Nothing here touches the global reference images on the main node, or the other cards.
Installing it
This node ships inside the SelfLift pack, and it's the one member of the family that needs nothing else - no engine, no sibling packages, no pip dependency. If you're installing the pack for the actual chaining workflow, though, the siblings are mandatory, because the main node and the Final Decode bridge import them at startup.
cd ComfyUI/custom_nodes
git clone https://github.com/yanhuoxunxianren/yanhuo_H3_Motion-Context_SelfLift.git
# the two siblings this pack imports must also be present:
# ComfyUI_MiniMax_H3_Extender/
# comfyui-SelfLift/
Restart ComfyUI, or search the pack title in ComfyUI Manager. Grab the two siblings the same way - by name, from their own repos or through Manager. The directory names actually matter: the pack's own nodes look them up as ComfyUI_MiniMax_H3_Extender and comfyui-SelfLift under custom_nodes/, so a folder renamed by a manual download means the main node just never appears. It only imports those two read-only - and comfyui-SelfLift ships no LICENSE at all, which is exactly why the author refuses to bundle them. Separately, the H3 weights themselves (~42.5GB reported, no verified consumer-VRAM floor) come from the MiniMax side, not this pack, and the H3 Community License doesn't grant you rights to run the local weights in the US, EU, UK or Korea.
This node itself is just tensor bookkeeping - no Extender disk module, no SelfLift engine. It does not care whether the rest of the pack loaded.
Where people get burned
A Python list of separate IMAGE tensors is not a tensor, and this node will hand you an empty pack rather than complain. ComfyUI passes batched images around as one tensor with frames on dim 0; that's the shape this expects. If 参考数 comes back 0, that's your first suspect, followed by "the upstream node emitted nothing this run."
Also expect this pack to be frontier territory. It chains two experimental upstreams, and there's essentially no community footprint - a handful of launch-week H3 threads and nothing about motion-context chaining in ComfyUI. Your manual is the README and the pack's own 256-item test suite, not somebody's YouTube walkthrough.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| imagesopt | IMAGE | 参考图列表(batch):每一帧按顺序成为一个参考槽位(最多 9 个,与每卡 Picture 1..9 上限一致),直接连接到主节点的 ref_pack_N 端口。 |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| ref_pack | H3_REF_PACK | — |
| 参考数 | INT | — |