闲兔|分镜中转器
The node that writes your renders back onto the right shot
- 图片结果
- 视频帧
- 资产分镜
- 视频分镜
- 图片结果
- 视频帧
- 视频文件名
- 中转记录
This is the return path for the storyboard workflow. You generated shot 7's image; this node takes the shot's description JSON, saves the image into a structured folder, records it against that shot's ID in a results index, and pings the director's panel so the thumbnail appears where you expect it. Without it you have a pile of PNGs named after a timestamp and no idea which storyboard shot each one belongs to.
It's a pass-through too, which is why the display name calls it a 中转器 - a transfer station. The strings and images you hand it come straight back out, so you can put it at the tail of a graph and keep going if you want.
Inputs and outputs, matching one to one
Five optional inputs, six outputs, and the left column echoes back out the right:
资产分镜in →资产分镜out. This is the one you connect from the director's 资产分镜 output when you're rendering a character/scene/prop sheet.视频分镜in →视频分镜out. The video-route shot JSON.图片结果in (IMAGE) →图片结果out. Whatever your sampler produced for that shot.视频帧in (IMAGE) →视频帧out. A representative frame, if you generated video.视频文件名in (STRING) →视频文件名out. The filename of your rendered video. Heads up: the author's tooltip points at a "V3 director" output that doesn't exist in this pack - the director here has no 视频文件名 output - so wire this from whatever saver or filename node you actually use.中转记录out (STRING) is new: the JSON record of what just happened.
You must connect at least one of 资产分镜 or 视频分镜. With neither, it raises 请连接导演台的"资产分镜"或"视频分镜"输出。 - the node has no way to know which shot it's recording otherwise.
What it does with your images
It calls ComfyUI's core Save Image under a generated prefix: xiantu_storyboard/<project title>/<shot or asset id>/<task slot>/image. Because the prefix is built from the shot's active image task, a shot that has both a 首帧 and a 尾帧 gets them in separate subfolders instead of one overwriting the other.
Then it writes the bookkeeping: an index at output/xiantu_storyboard/results.json, keyed by shot ID, merged rather than replaced (the writer takes a lock, writes a temp file, then renames it - so a crash mid-write doesn't corrupt the index), and it keeps a per-image-task map so re-running one slot of a shot updates that slot and leaves the others alone. If you saved images, their records go in; if you passed a video filename, that goes in; and the shot is tagged as image, video or mixed.
Finally it fires a websocket event the workbench panel listens for, so the director can backfill the shot with the new result while you're still in the UI. There's also a small HTTP endpoint, GET /xiantu/storyboard/results, that returns the whole index as JSON - handy if you want to script something on top of the board.
The practical loop, and the sharp edges
The reason to wire this in is iteration. Generate the assets first, then the shots; the panel shows you which shots have results and which don't; change one prompt and re-run with selection_mode set to 当前分镜 to avoid redoing the other eleven. That loop - write, render, look, fix one thing - is the actual work of storyboarding, and the backfill is what makes it possible without a spreadsheet.
Sharp edges: it's an output node, so once wired it always executes and will save images to those folders whether or not you wanted a copy. The index lives under output/, so clearing your output directory loses the backfill (the images are gone too, so that's fair). And the merge is per shot ID, not per workflow run - if you edit a shot's ID in the JSON you've orphaned its old results, which will still sit in the index looking current.
Install
Comes with the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/xiantuhenlan/ComfyUI-Xiantu-QwenImage21-Workbench.git
pip install -r ComfyUI-Xiantu-QwenImage21-Workbench/requirements.txt
Restart ComfyUI and hard-refresh the browser, otherwise the panel never receives the backfill event and you'll conclude the node is broken when it's just your cache. No models, no extra downloads. If you only want results on disk without the storyboard, you don't need this node - Save Image does that. You need this one when you want the results attached to shots.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| 资产分镜opt | STRING | 连接故事分镜导演台的“资产分镜”输出。 | |
| 图片结果opt | IMAGE | — | |
| 视频分镜opt | STRING | 连接故事分镜导演台的“视频分镜”输出。 | |
| 视频帧opt | IMAGE | — | |
| 视频文件名opt | STRING | 连接 V3 导演台的“视频文件名”输出。 |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| 资产分镜 | STRING | — |
| 视频分镜 | STRING | — |
| 图片结果 | IMAGE | — |
| 视频帧 | IMAGE | — |
| 视频文件名 | STRING | — |
| 中转记录 | STRING | — |