闲兔|数字人音乐输出
Pull one segment of your music track out as an AUDIO socket
- 音乐
Give this node the digital-human workbench state and it hands you the music: the full track you uploaded, trimmed to the current segment's start and end, as a normal ComfyUI AUDIO. Despite the name it does not generate anything - the audio H3 invents comes out of the sampler. This is the source track, the thing the performance is supposed to be lip-syncing to.
That distinction is the whole reason to have it. Digital-human work is usually a two-model pipeline: something produces or provides audio, something else makes the face move to it. Here the audio is yours - a song, a voiceover, a stem you exported - and the workbench's job is bookkeeping, splitting one long file into one clip-length piece per segment. This node exposes the result of that bookkeeping, so the audio can also go anywhere else you need it.
How it works
studio_state is the shared workbench JSON. The node parses it, resolves the active segment, and reads the two things it needs: music (the record for the single uploaded track, including its subfolder and whether it came from input/output/temp) and that segment's audio_range, which is a start/end pair in seconds.
The load goes through comfy_extras.nodes_audio.LoadAudio, so you get the same decoded waveform/sample-rate dict every other audio node passes around. The trim is arithmetic on sample indices - start and end are multiplied by the sample rate and rounded, so the slice is sample-accurate rather than re-encoded. That's why cut points you drag in the panel don't drift over a long track. An end of 0 or less means "to the end of the file".
Two guards are worth knowing by heart. If no music is uploaded you get 当前分镜还没有上传音频。 or 上传音频的数据无效。 - the first means the panel has no track, the second means the record exists but decoded to nothing. And if a segment's end sits at or before its start you get 音轨切断终点必须大于起点。, which in practice means a cut marker got dragged past its neighbour in the waveform editor.
What to wire it into
The obvious use is the one the studio does for you internally - reference audio for H3, so the generated video follows your timing. But as a standalone socket it's more flexible than that:
- Save Audio / Save Audio MP3 to export per-segment stems next to your renders. When someone asks why shot 7 is 3 seconds longer, you have the file.
- A different avatar model. InfiniteTalk, MultiTalk, Wan S2V and friends take audio plus an image and generate lip-synced video (the audio knowledge base's §3). If H3's output isn't doing what you want for a particular segment, this is how you try a second model on the same slice without leaving the graph.
- Transcription or lyric work. A speech-to-text pass on the same slice gives you subtitles keyed to the exact shot you're rendering, which is much less annoying than transcribing the full track and cutting the timings by hand.
- LTX-2 native AV generation, if you want the model to invent the sound rather than receive it.
One output: 音乐, type AUDIO. It's not an output node in ComfyUI's sense - nothing is written until you wire it into a saver - and there are no parameters beyond the state blob, so if you're hunting for a gain or fade control, this isn't where it lives.
Install
Nothing separate; it 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. The pinned dependency faster-whisper==1.2.1 is worth knowing about: as of version 0.1.5 nothing in the shipped code imports it, so you're paying for a chunky install for functionality that isn't wired up yet. It doesn't break anything, but it will make your first install slower than the node list suggests.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| studio_state | STRING | {} | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| 音乐 | AUDIO | — |