Multi-Scene Prompt Editor
The tabbed prompt box for Wan + SVI long-form video that stops you hand-copying scene prompts
- scene_prompts
- common_prompt
- scene_count
If you've ever planned a Wan 2.2 + SVI long-form video, you know the pain this node exists to remove. The whole appeal of SVI is chaining scenes into one continuous shot - scene 1's last frame becomes scene 2's first - and every scene wants its own prompt while sharing a common denominator (style, camera, character, "4K, daylight"). So you end up with a text file, three separate CLIPTextEncode nodes, and a copy-paste session that always drifts. Multi-Scene Prompt Editor is a single node that holds a shared base prompt plus a tabbed list of per-scene prompts, merges each scene with the base, and hands you the whole script as one JSON array.
The name is honest: it's an editor, not an oracle. No LLM, no API, no model downloads, no keys. Its entire value is the tabbed UI and the merge, which - if your workflow is the multi-scene Wan thing - is exactly the fiddly bit.
How it works
The backend is almost insultingly simple. MultiScenePrompt.execute() takes common_prompt and scenes_json (a JSON array of strings), concatenates common_prompt + scene for each entry, and returns the merged list as JSON. The pyproject declares dependencies = [] - there is nothing to install beyond the node itself.
The clever part is frontend. A small JS extension (web/js/multiScenePrompt.js) hijacks the boring scenes_json text widget on creation and replaces it with a real tab bar: click + to add a scene, × to delete one, wheel-scroll when the tabs overflow. Scene text lives in the frontend and gets serialized back into scenes_json when the graph runs. So under the hood it's still just a JSON string in, JSON string out - the tabs are pure cosmetics, but they're the point.
Inputs and outputs that matter
Only two inputs exist, and you'll really only touch one:
common_prompt(STRING, multiline) - the base prompt merged into every scene. Set this once.scenes_json(STRING, default[""]) - the JSON array the tab UI edits for you. You can edit it by hand instead, but then the tabs and the data are two views of the same thing and you're on your own keeping them straight.
Outputs: scene_prompts (STRING - the JSON array of merged per-scene prompts), common_prompt (a passthrough, handy if other nodes want the shared text), and scene_count (INT, the number of scenes). Wire scene_prompts into anything that parses JSON, or read the values straight off.
One gotcha the author doesn't warn about: the merge inserts no separator. It's raw f"{common_prompt}{scene}", so if you want "a beautiful city, 4K" and "with skyscrapers" to read as one sentence, your scene text needs to start with the comma and space itself. The README's own example does this (, 有摩天大楼), so copy that habit.
Installing it
ComfyUI Manager → Install Custom Nodes → search ComfyUI-MultiScene-Prompt, or:
cd ComfyUI/custom_nodes
git clone https://github.com/mailzwj/ComfyUI-MultiScene-Prompt.git
Restart ComfyUI. That's it - no requirements, no model files.
Issues to know before you reach for it
First, the README and UI are Chinese-only. The node displays 场景 1, 场景 2 ("scene 1", "scene 2"), the placeholder says 公用提示词 ("common prompt"), and all the documentation is in Chinese. If that's a wall, the table above is basically the whole manual - it's a three-line node.
Second, garbage in, silent fallback out. execute() wraps json.loads(scenes_json) in a try/except; if the string isn't valid JSON it quietly becomes [""] and you get one empty scene instead of an error. If your downstream suddenly sees a single prompt, check what's actually in that widget.
Honest verdict: this is a thin convenience node for one specific workflow - multi-scene Wan/SVI long-form. If that's you, the tabbed editor genuinely saves the hand-copying dance. If you're generating single stills, you don't need it; ComfyUI's built-in multiline text nodes do the job. It's a one-commit pack with zero community footprint, so treat it as a young, hobbyist tool that works - not infrastructure.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| common_prompt | STRING | — | |
| scenes_json | STRING | [""] | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| scene_prompts | STRING | — |
| common_prompt | STRING | — |
| scene_count | INT | — |