零 LLM 剧本生成器 V3 · Script Plan Generator V3 (Zero LLM) 🐑
V3 is the zero-LLM H3 generator you can drop into a V2 workflow unchanged
- storyboard
- character_1
- character_2
- character_3
- character_4
- character_5
- character_6
- character_7
- character_8
- scene_1
- plan_json
- summary
- board_kind
- images
- assets
Two nodes in this pack do the same job. That's not a mistake - it's a migration path, and knowing which one to drop on the canvas saves you an afternoon of rewiring.
What it is
MiniMaxH3LoopPromptGeneratorV3|Mie turns a hand-authored storyboard into the plan_json a MiniMax H3 loop workflow eats. No LLM, no connector, no API key. It sits in the same category as the V1/V2 generators, takes the same self-growing character_1..8 sockets, and returns the same five outputs in the same order. That's the design brief: swap a V2 node for a V3 node, rewire one line, and nothing downstream notices.
The one line is storyboard - V2 wants a concept and prose plus a connector, V3 wants a MIE_STORYBOARD bundle from Load Storyboard Asset|Mie. The script is the asset now.
The mechanism, briefly
It's the same assembler as BuildPlanFromStoryboard|Mie - literally the same code path, which is why the two nodes emit byte-identical plan_json for the same inputs. Storyboard in, cast slots resolved from the wired character bundles, one six-section prompt stamped per scene in the shape the H3 chain node wants, dialogue copied verbatim, <Picture N> bound from each cast entry's character_slot, seed policy applied from the storyboard. Missing spatial layout is filled by turn order (a fixed rule, reported in the summary); ambience with nothing authored falls back to one of three constants picked by camera_discipline.
Where this matters versus the LLM generators: the tail of those was always deterministic code anyway - the model was filling templates in front of a stamping machine. V3 removes the model, so there's no quota to exhaust mid-render and no run-to-run drift.
The one difference: board_kind
Outputs are plan_json, summary, board_kind, images, assets.
board_kind is a STRING that always reads dialogue. It exists purely so a downstream wired against V2's five-output shape keeps working - storyboard version 1 is dialogue-only, so the value is a fixed literal, not something you set. Wire it or ignore it; it's not a decision.
The rest behave exactly as they do on the build node. plan_json goes to the H3 chain/plan node. summary is your run report - read it when a clip comes out with the wrong person in frame. images batches the wired portraits in slot order, and comes back empty when the pictures are different sizes (use an Asset → Slots node in that case; H3 resizes each reference itself). assets is the MIE_ASSET_ROSTER that Asset → Slots splits into numbered picture and audio sockets.
Sockets, in full: storyboard and seed required, character_1–character_8 and scene_1 optional. seed respects the storyboard's seed_policy - per_scene_increment gives scene i the value seed + i, same_across_scenes gives every scene seed.
Which one do I actually reach for?
If you're building a storyboard workflow from scratch, use BuildPlanFromStoryboard|Mie. Four outputs, no legacy shape, one less wire to wonder about.
If you already have a V2 workflow you like and you've decided the LLM generator is the flakiest part of it, use V3. Same category, same sockets, same five outputs, and the only thing you throw away is the connector wire. That's the whole reason the node exists, and it's a much nicer upgrade story than "rebuild your graph".
Either way, remember what you're signing up for: no translation, no polishing, no re-authoring. Text you left out of the storyboard is an error or a constant, never a generated sentence. If you want the model back, go and pick V1 or V2 - they feed the same downstream plan node.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/MieMieeeee/ComfyUI-MieNodes
cd ComfyUI-MieNodes && pip install -r requirements.txt
Restart ComfyUI, or install MieNodes through ComfyUI Manager (registry publisher mie, package comfyui_mienodes) and let it handle the pip step. Nothing here is heavy: no model weights, no compiled dependencies, no API key. The render half still needs H3 itself plus the Context-Loop pack - and H3's community licence puts the local weights out of reach in the US, EU, UK and South Korea, so that's a check worth doing before you invest in a pipeline.
The failure modes worth knowing
An empty socket in the middle of your cast. Slots are absolute: cast slots 1 and 3 with character_2 unconnected is a hard error naming slot 2, not a silent renumber. It looks pedantic until you've seen the alternative - a plan that binds the wrong face to a picture and only shows it at render time.
And the dropdown again. New storyboard saved? Refresh the Load node with R before you convince yourself V3 is broken.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| storyboard | MIE_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_1opt | MIE_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_2opt | MIE_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_3opt | MIE_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_4opt | MIE_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_5opt | MIE_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_6opt | MIE_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_7opt | MIE_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_8opt | MIE_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_1opt | MIE_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 (5)
| Name | Type | Description |
|---|---|---|
| plan_json | STRING | — |
| summary | STRING | — |
| board_kind | STRING | — |
| images | IMAGE | — |
| assets | MIE_ASSET_ROSTER | — |