Nodes/ComfyUI_MieNodes/零 LLM 组装剧本 · MiniMax H3 Build Plan From Script (Zero LLM) 🐑
ComfyUI Node

零 LLM 组装剧本 · MiniMax H3 Build Plan From Script (Zero LLM) 🐑

Same storyboard in, same plan out, every single run

By MieMieeeee·Created 2 years ago·Updated 6 days ago· 280
零 LLM 组装剧本 · MiniMax H3 Build Plan From Script (Zero LLM) 🐑
  • storyboard
  • character_1
  • character_2
  • character_3
  • character_4
  • character_5
  • character_6
  • character_7
  • character_8
  • scene_1
  • plan_json
  • summary
  • images
  • assets

"Zero LLM" sounds like a marketing sticker on a node that's really a template. Here it's the actual design constraint, and once you've had a plan silently change between two runs you'll understand why someone would spend a week removing a model from a pipeline.

Why this node exists

The MiniMax H3 loop pipeline (MieNodes talks to ComfyUI-MiniMaxH3-Context-Loop) generates a run of short clips that have to look like one film: same cast, same room, dialogue that carries over, <Picture N> slots pointing at the same face every scene. H3 does 4–15 seconds a shot, so a two-minute piece is a planning problem long before it's a generation problem.

MieNodes' first answer was the LLM generators - feed it a concept and a shot count, let a chat model write the plan. That works when you have a loose idea. But the tail end of those generators was always code: verbatim dialogue, picture bindings, [Shot 1], voice lines, pose constraints. The model was doing noisy template filling in front of a stamping machine. So this node deletes the model and keeps the machine: storyboard JSON plus wired asset bundles in, plan_json out.

The knock-on effects are the whole point. No connector socket means no API key, no token-plan quota, no provider hiccup stopping a render at scene 5. And no sampling means the same storyboard plus the same assets plus the same seed gives you byte-identical output - so a plan is something you can debug, diff, and re-run.

How it works

It's plain Python. It validates the storyboard bundle, then assembles one six-section prompt per scene - subject, summary, retention, detail, sound, music - in the shape the H3 chain node expects. Dialogue goes in byte for byte. Each cast entry's character_slot becomes a <Picture N> reference, and the wired asset bundles supply the description and voice text those pictures mean. Missing spatial layout gets completed left/right/centre by turn order - a fixed rule, not a model, and the summary says so. camera_discipline with both ambience fields empty picks one of three constant room-tone lines.

What you give up: the prose is flatter than an LLM's. Retention is one fixed template line per scene, and the whole film shares one ambience sentence. The author accepts that trade explicitly - if you want richer prose, stay on the V1/V2 LLM generators, which feed the same downstream node.

Inputs and outputs

Two required inputs. storyboard takes the MIE_STORYBOARD bundle from Load Storyboard Asset|Mie. seed is an integer with a policy baked in from the storyboard: per_scene_increment means scene i gets seed + i, same_across_scenes means every scene gets seed flat.

Then the optional image sockets - character_1 through character_8, each taking a character Load * Asset bundle, plus a single scene_1. Scenes always come after all characters in the picture numbering, and the storyboard's character_slot decides which <Picture N> a character becomes. That last bit is the one thing to internalise: socket order does not renumber anything. Slots are absolute.

Four outputs. plan_json is the one that matters - wire it to the H3 chain/plan node's plan input. summary is a human-readable run report (ambience used, layout filled by turn order, roster problems) and is where you look first when the video comes out strange. images is an IMAGE batch of the wired portraits in slot order. assets is a MIE_ASSET_ROSTER for an Asset → Slots node, which splits the same pictures and audio into numbered sockets so prompt and reference stay aligned by construction.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/MieMieeeee/ComfyUI-MieNodes
cd ComfyUI-MieNodes && pip install -r requirements.txt

Restart afterwards, or install MieNodes from ComfyUI Manager (registry publisher mie). No model files, no API key, no heavy dependencies - the requirements are pip-only utilities. You'll still need H3 in ComfyUI and the Context-Loop pack for the render half. Worth noting before you build a pipeline on H3: its community licence excludes the US, EU, UK and South Korea from running the local weights, so check you're actually licensed for the box you're on.

Where people get burned

Wiring a hole in the middle. If your cast uses slots 1 and 3 and you leave character_2 empty, this node raises with the exact empty slot number instead of quietly binding slot 2 to whatever was plugged in at socket 3. That's deliberate and it's the right call - a wrong binding produces a plan that looks fine and a film with the wrong character in it.

Mixed picture sizes. Portraits of different dimensions can't be concatenated, so the images convenience output comes back empty for that run and the summary tells you to use Asset → Slots instead. H3 resizes each reference itself, so nothing is broken - you just skip the batch.

And off-screen speakers. A character marked offscreen in the storyboard stays in the roster for their audio but drops their picture, because handing H3 a portrait of someone who is never in frame is how you get a face in a shot that shouldn't have one.

Category🐑 MieNodes/🐑 Prompt Generator

Inputs (10)

NameTypeDefaultDescription
storyboardMIE_STORYBOARD接 Load Storyboard Asset 的 storyboard 输出。 Wire the Load Storyboard Asset's storyboard output. assembly_mode=authored preserves the complete shot prompt; audio_mode=generated sends images without reference audio.
character_1optMIE_ASSET角色槽位 1:接 Load Character Asset 的 asset 输出;v2 中可留空,用剧本默认设计或模型生成;接入时该资产优先。 Character slot 1. In v2, wired identity wins; unwired uses script defaults or model choice. Picture numbers count only connected on-screen portraits.
character_2optMIE_ASSET角色槽位 2:接 Load Character Asset 的 asset 输出;v2 中可留空,用剧本默认设计或模型生成;接入时该资产优先。 Character slot 2. In v2, wired identity wins; unwired uses script defaults or model choice. Picture numbers count only connected on-screen portraits.
character_3optMIE_ASSET角色槽位 3:接 Load Character Asset 的 asset 输出;v2 中可留空,用剧本默认设计或模型生成;接入时该资产优先。 Character slot 3. In v2, wired identity wins; unwired uses script defaults or model choice. Picture numbers count only connected on-screen portraits.
character_4optMIE_ASSET角色槽位 4:接 Load Character Asset 的 asset 输出;v2 中可留空,用剧本默认设计或模型生成;接入时该资产优先。 Character slot 4. In v2, wired identity wins; unwired uses script defaults or model choice. Picture numbers count only connected on-screen portraits.
character_5optMIE_ASSET角色槽位 5:接 Load Character Asset 的 asset 输出;v2 中可留空,用剧本默认设计或模型生成;接入时该资产优先。 Character slot 5. In v2, wired identity wins; unwired uses script defaults or model choice. Picture numbers count only connected on-screen portraits.
character_6optMIE_ASSET角色槽位 6:接 Load Character Asset 的 asset 输出;v2 中可留空,用剧本默认设计或模型生成;接入时该资产优先。 Character slot 6. In v2, wired identity wins; unwired uses script defaults or model choice. Picture numbers count only connected on-screen portraits.
character_7optMIE_ASSET角色槽位 7:接 Load Character Asset 的 asset 输出;v2 中可留空,用剧本默认设计或模型生成;接入时该资产优先。 Character slot 7. In v2, wired identity wins; unwired uses script defaults or model choice. Picture numbers count only connected on-screen portraits.
character_8optMIE_ASSET角色槽位 8:接 Load Character Asset 的 asset 输出;v2 中可留空,用剧本默认设计或模型生成;接入时该资产优先。 Character slot 8. In v2, wired identity wins; unwired uses script defaults or model choice. Picture numbers count only connected on-screen portraits.
scene_1optMIE_ASSET场景槽位 · scene slot 1:接 Load Scene Asset 的 asset 输出;排在角色 Picture 之后。 Wire a Load Scene Asset's asset output; scenes come after all characters. Optional for assembly_mode=authored.

Outputs (4)

NameTypeDescription
plan_jsonSTRING—
summarySTRING—
imagesIMAGE—
assetsMIE_ASSET_ROSTER—