XB-llama - 🎞️ 分镜词处理器Pro
Same storyboard gacha, plus it sniffs your characters for you
- text_input
- output_list
- 背景
- 角色_1
- 角色_2
- 角色_3
The Pro version of XB_ToolBox's storyboard shot-selector. It does everything the plain XB_llamaStoryboardProcessor does - same cache, same draw_mode gacha switch, same draw_range dropdown - then adds the bit that makes it actually useful for multi-shot video: it sniffs your storyboard text for background and character tags and hands them to you as separate outputs.
If you've been fighting character consistency across shots, this is the node that makes the "describe the character once, reuse the description every shot" pattern work without copy-pasting.
What Pro adds
Same inputs as the base node: draw_mode, draw_range, and the optional text_input. Same output_list STRING output for the shot prompts. The difference is four extra outputs, all plain STRING:
背景(background)角色_1,角色_2,角色_3(character 1–3)
It finds them with a non-greedy regex that grabs everything after a 背景[A-E] or 角色[A-E] tag until the next tag or the end of the string. The readme for the node family calls it "sniffing," and that's honestly the right word - it's a text scrape, not an LLM pass, so it costs nothing.
One quirk to know: each sniffed value is truncated to 10 characters. That's deliberate - these outputs are meant to be compact tokens you can feed into a character reference encoder or a LoRA trigger, not full paragraph descriptions. If your character description is "the tall detective with the red coat and the scar," you're getting "the tall d" and it may be useless for what you wanted.
Where the extra outputs go
This is the part that makes Pro worth having. In a short-drama or image-to-video pipeline you typically have a separate path that needs the character identity - an image guide, a reference encoder, a regional conditioning node - and a path that needs the bare shot prompt. The base processor gives you only the second. Pro gives you both from one parse:
output_list→ your CLIP/text encoder, per-shot prompts.角色_1→ character-consistency conditioning, so shot 3's "detective" is the same detective as shot 1's.背景→ a background/control path if your workflow separates environment from subject.
The tag format (背景A, 角色A, 角色B...) is what the XB-llama storyboard writer templates emit, so this pairs specifically with the StoryboardEnhancer/StoryboardInstruct chain from the same pack. Feed it raw text from some other source and the regex will often find nothing, which is why the outputs can come back empty.
Install & gotchas
Same pack, same story as its little sibling:
cd ComfyUI/custom_nodes
git clone https://github.com/WJLUOXIAO/XB_ToolBox.git
# or: ComfyUI Manager → "XB_ToolBox"
pip install llama-cpp-python # needed for the whole XB-llama family to appear
And the same cache rule applies: run it once with draw_mode off before flipping to gacha mode, or you'll get the "暂无缓存" message instead of shots. If your text uses Scene_N headers instead of 分镜图_N, the parse still works but the draw_range dropdown only lists the 分镜图 names - pick 全部 in that case.
The 10-char truncation is the trap to respect. If you need the full character description for a serious consistency setup, treat 角色_1 as a selector token rather than the whole description, and keep the full text in a separate string node.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| draw_mode | BOOLEAN | false | — |
| draw_range | COMBO | 全部 | 17 options: 全部, 分镜图_01, 分镜图_02, 分镜图_03, 分镜图_04, 分镜图_05, +11 |
| text_inputopt | * | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| output_list | STRING | — |
| 背景 | STRING | — |
| 角色_1 | STRING | — |
| 角色_2 | STRING | — |
| 角色_3 | STRING | — |