闲兔|视频编辑工作台
A timeline UI node that doesn't cut video yet
Let's be straight about what this is, because the screenshot oversells it. It's a node whose entire Python is nine lines: run() takes a project id and a JSON blob and returns nothing. Everything you see - media library, player, parameter panel, multi-track timeline with scale/position/rotation controls - is browser-side UI that hangs off a button on the node. And the 导出 button in the top bar is rendered but not wired to any render backend. The pack's own changelog says the export isn't connected yet.
So: it is not a video editor. It's a layout and preview scratchpad that lives in your ComfyUI graph, which is still occasionally useful and much less useful than the name implies.
What it's good for today
It accepts imports of video, audio and image files, previews them in the player, and lets you drag them onto a timeline and nudge scale, position and rotation with a live preview. That makes it a reasonable place to eyeball your generated clips in order before you commit to a merge, or to rough out where a caption or an inset should sit before you hand the numbers to something that does render. The pack's digital-human panel has a real ffmpeg merge behind it; this node does not.
If you came here wanting to trim and concatenate clips inside ComfyUI, you want the merge in the digital-human panel, or VideoHelperSuite's video combine, or ffmpeg in a shell. Nothing in this node writes a file.
The interface, exactly
Two required inputs, both stored on the node and both effectively hidden from normal use:
project_id- a STRING, defaults empty. It identifies which editing project the panel loads and saves.editor_state- a multiline STRING, defaults{}. This is the panel's serialized state: imported assets, timeline layout, transform values. The frontend owns it; you're just the persistence layer.
No outputs at all - the node declares an empty return tuple. It is marked as an output node, though, which in ComfyUI terms means it always executes when the queue runs and its widget values get saved with the workflow. So it behaves like a save node that saves state instead of pixels: queue once, and your layout is in the workflow file.
The install is the pack's install
There's no separate anything for this one:
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, then hard-refresh the browser - this node is pure frontend, so a stale cached extension means a node with a button that does nothing when clicked. The pack serves its JS from a versioned directory precisely because port schemas kept changing, but your browser doesn't have to cooperate. If the panel doesn't open, that's the first thing to check, not a bug report.
Should you install the pack for this?
No. Install the pack for the Qwen Image 2.1 workbench, the storyboard chain or the digital-human workbench, and treat this as the bonus node. One more honest note that applies to the whole pack rather than this node: the author is essentially absent from the English-language community - no threads, no reviews, nothing to lean on - and this is a Chinese-language UI with a lot of surface area. The code is plain, readable Python and you can audit it in an afternoon, which is more than you can say for a lot of node packs. But the ecosystem's one serious malware incident was an LLM-flavoured node pack exactly like this one, so read before you run, and don't take the buttons at face value. This one's buttons, as shipped, are a preview and a promise.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| project_id | STRING | — | |
| editor_state | STRING | {} | — |
Outputs (0)
No outputs