JZL - 📋 列表分发
Split your script into per-shot lines and route them to N outputs
- 分段1
- 分段2
- 分段3
- 分段4
- 分段5
- 分段6
- 分段7
- 分段8
- 分段9
- 分段10
- 分段11
- 分段12
- 分段13
- 分段14
- 分段15
- 分段16
- 分段17
- 分段18
- 分段19
- 分段20
- 分段21
- 分段22
- 分段23
- 分段24
- 分段25
- 分段26
- 分段27
- 分段28
- 分段29
- 分段30
- 分段31
- 分段32
- 分段33
- 分段34
- 分段35
- 分段36
- 分段37
- 分段38
- 分段39
- 分段40
- 分段41
- 分段42
- 分段43
- 分段44
- 分段45
- 分段46
- 分段47
- 分段48
- 分段49
- 分段50
- 分段51
- 分段52
- 分段53
- 分段54
- 分段55
- 分段56
- 分段57
- 分段58
- 分段59
- 分段60
- 分段61
- 分段62
- 分段63
- 分段64
- 分段65
- 分段66
- 分段67
- 分段68
- 分段69
- 分段70
- 分段71
- 分段72
- 分段73
- 分段74
- 分段75
- 分段76
- 分段77
- 分段78
- 分段79
- 分段80
- 分段81
- 分段82
- 分段83
- 分段84
- 分段85
- 分段86
- 分段87
- 分段88
- 分段89
- 分段90
- 分段91
- 分段92
- 分段93
- 分段94
- 分段95
- 分段96
- 分段97
- 分段98
- 分段99
"JZL - 📋 列表分发" is the workhorse that turns one giant script into many usable lines. In the JZL-MiniMax-H3 pack's pipeline, the "剧本与镜头处理器" (Script Processor) LLM writes a whole story as a block of [SHOT_START]…[SHOT_END] segments, and this node carves that block into per-segment chunks, pulls out one field from each, and pushes them to however many output ports you want. It's the node that makes "one story, six separate video generations" actually tractable.
How it works
The input is a 文本输入 (STRING, force-input) that comes straight off the script processor. The node splits it on [SHOT_START]…[SHOT_END] blocks, then inside each block looks for a field marker and extracts that field's full content - without breaking lines, per the source. Which field it pulls is decided by 调度类型:
H3提示词- the H3_PROMPT field (default)场景调度- SCENE_INSTRUCTION视频调度- VIDEO_INSTRUCTION音频调度- AUDIO_INSTRUCTION
Then it fans the results out to the first 输出数量 of its up-to-99 STRING outputs, named 分段1…分段99. One quirk worth knowing: if the input has no [SHOT_START] tags at all - say a downstream node already extracted the list - the node treats each incoming list element as one segment and passes it through, so it doubles as a generic list fan-out. It's declared INPUT_IS_LIST, so it accepts both a scalar string and a list.
The inputs that matter
调度类型- which field to extract per segment. This is the one you'll actually change.输出数量- number of populated outputs, 1–99, default 4.
Everything else is plumbing. The outputs are plain STRINGs, so anything downstream that eats text will take them.
How it fits
You'll typically see it between the Script Processor (or the "分段处理中心" ShotFormatter) and the encoding/scheduling layer: extract H3 prompts per segment and feed each into a MiniMax H3 参考编码 or the asset manager, or extract the 场景调度/音频调度 fields to drive the scene and audio dispatchers. It's a pure text-formatting node - no model, no GPU, no weights.
How to install it
Part of the same pack as everything else - ComfyUI Manager, search "ComfyUI-JZL-MiniMax-H3", or:
cd ComfyUI/custom_nodes
git clone https://github.com/wjluoxiao/ComfyUI-JZL-MiniMax-H3
Restart ComfyUI. This node is pure Python stdlib (re), so it needs no extra dependencies at all - a nice contrast with the rest of the pack.
Common issues
The most common mistake is forgetting that the segment count you request has to match the actual number of [SHOT_START] blocks; leftover outputs just come out empty, and an empty STRING flowing into a video encoder gives you a confusing "no prompt" failure a few nodes later. Also, if your upstream script doesn't use the exact [SHOT_START]/[SHOT_END] markers the node scans for, you'll get the fallback passthrough instead of split segments - check the field markers if nothing comes out the way you expected.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| 文本输入 | STRING | — | |
| 调度类型 | COMBO | H3提示词 | 4 options: H3提示词, 场景调度, 视频调度, 音频调度 |
| 输出数量 | INT | 41–99 | — |
Outputs (99)
| Name | Type | Description |
|---|---|---|
| 分段1 | STRING | — |
| 分段2 | STRING | — |
| 分段3 | STRING | — |
| 分段4 | STRING | — |
| 分段5 | STRING | — |
| 分段6 | STRING | — |
| 分段7 | STRING | — |
| 分段8 | STRING | — |
| 分段9 | STRING | — |
| 分段10 | STRING | — |
| 分段11 | STRING | — |
| 分段12 | STRING | — |
| 分段13 | STRING | — |
| 分段14 | STRING | — |
| 分段15 | STRING | — |
| 分段16 | STRING | — |
| 分段17 | STRING | — |
| 分段18 | STRING | — |
| 分段19 | STRING | — |
| 分段20 | STRING | — |
| 分段21 | STRING | — |
| 分段22 | STRING | — |
| 分段23 | STRING | — |
| 分段24 | STRING | — |
| 分段25 | STRING | — |
| 分段26 | STRING | — |
| 分段27 | STRING | — |
| 分段28 | STRING | — |
| 分段29 | STRING | — |
| 分段30 | STRING | — |
| 分段31 | STRING | — |
| 分段32 | STRING | — |
| 分段33 | STRING | — |
| 分段34 | STRING | — |
| 分段35 | STRING | — |
| 分段36 | STRING | — |
| 分段37 | STRING | — |
| 分段38 | STRING | — |
| 分段39 | STRING | — |
| 分段40 | STRING | — |
| 分段41 | STRING | — |
| 分段42 | STRING | — |
| 分段43 | STRING | — |
| 分段44 | STRING | — |
| 分段45 | STRING | — |
| 分段46 | STRING | — |
| 分段47 | STRING | — |
| 分段48 | STRING | — |
| 分段49 | STRING | — |
| 分段50 | STRING | — |
| 分段51 | STRING | — |
| 分段52 | STRING | — |
| 分段53 | STRING | — |
| 分段54 | STRING | — |
| 分段55 | STRING | — |
| 分段56 | STRING | — |
| 分段57 | STRING | — |
| 分段58 | STRING | — |
| 分段59 | STRING | — |
| 分段60 | STRING | — |
| 分段61 | STRING | — |
| 分段62 | STRING | — |
| 分段63 | STRING | — |
| 分段64 | STRING | — |
| 分段65 | STRING | — |
| 分段66 | STRING | — |
| 分段67 | STRING | — |
| 分段68 | STRING | — |
| 分段69 | STRING | — |
| 分段70 | STRING | — |
| 分段71 | STRING | — |
| 分段72 | STRING | — |
| 分段73 | STRING | — |
| 分段74 | STRING | — |
| 分段75 | STRING | — |
| 分段76 | STRING | — |
| 分段77 | STRING | — |
| 分段78 | STRING | — |
| 分段79 | STRING | — |
| 分段80 | STRING | — |
| 分段81 | STRING | — |
| 分段82 | STRING | — |
| 分段83 | STRING | — |
| 分段84 | STRING | — |
| 分段85 | STRING | — |
| 分段86 | STRING | — |
| 分段87 | STRING | — |
| 分段88 | STRING | — |
| 分段89 | STRING | — |
| 分段90 | STRING | — |
| 分段91 | STRING | — |
| 分段92 | STRING | — |
| 分段93 | STRING | — |
| 分段94 | STRING | — |
| 分段95 | STRING | — |
| 分段96 | STRING | — |
| 分段97 | STRING | — |
| 分段98 | STRING | — |
| 分段99 | STRING | — |