Nodes/闲兔 Qwen Image 2.1 工作台/闲兔|数字人工作台 V2
ComfyUI Node

闲兔|数字人工作台 V2

Project files, frozen audio, and a queue you can actually batch

By xiantuhenlan·Created 21 days ago·Updated a day ago· 5
闲兔|数字人工作台 V2
  • H3_CLIP
  • H3_VIDEO_VAE
  • H3_AUDIO_VAE
  • H3条件
  • H3 Latent
  • H3图像
  • H3音频
  • H3放大前文件名
  • H3放大后文件名
◄project_id►
◄segment_index0►

V2 is the same idea as the original digital-human workbench - one long track, cut into segments, each with reference images and a prompt - rebuilt around a project that lives on disk instead of inside a widget. That single change is what makes it the version I'd reach for: the node now knows which segment to render from an input, so ComfyUI's own queue can walk your whole song instead of you clicking through the panel twelve times.

It also does something cleverer than V1 with the audio, and we'll get to that, because it's the actual reason the lip timing holds.

The project, and what the node reads

The workbench's state lives at ComfyUI/output/XiantuDigitalHumanV2/projects/<project_id>/state.json, and project_id is the one required thing you mostly don't type - the node hides both it and segment_index behind a button called 打开数字人工作台, which opens the editor panel. Upload your track, drag cut points, name the segments, attach up to nine reference images per segment, write a prompt each, close the panel. segment_index is 0-based and clamped, so segment 3 is index 3 in the UI's numbering but 3 here means the fourth one - read the panel's own numbering before you wire a batch.

Feeding it: H3_CLIP, H3_VIDEO_VAE, H3_AUDIO_VAE are optional inputs, all three required by the one adapter that exists today (h3). The code keeps adapters in a dict so future models can add their own port group without disturbing H3's - the README says as much, and you can see it in the source. Skip them and the node tells you exactly which ports are missing.

What happens on run

It loads the segment's reference images, then mixes the project's audio: every unmuted track that overlaps the segment's time range, resampled to the highest sample rate present, offset, volume-scaled and summed into one stereo waveform. Mute a segment and the reference audio becomes silence - handy for a beat where the shot is a cutaway.

If auto-optimize is on in the project settings, it runs your prompt through ComfyUI_Qwen_H3_Prompt locally (model and mmproj pulled from the project settings, defaults scanning ComfyUI/models/LLM/Qwen3.8) and uses the rewrite. Note the if here: optimization failure is swallowed - if the Qwen node isn't installed or won't run, you silently get your verbatim prompt and the segment is stamped with a direct-optimization marker. Check the panel before you assume the LLM did anything.

Two bits of authorial opinion are baked in, and I like them. First, camera guidance: a rotating list of near-shot moves with a hard rule that wide shots and pulling the subject small are forbidden, and the same move can only recur after five segments. Second, the guidance is appended twice - once into the text handed to the optimizer and once onto whatever comes back - because otherwise the optimizer cheerfully drops it. <imageN> tokens in your prompt are rewritten to H3's native <Picture N> labels before encoding, so you can reference refs by number.

Then the part that matters. Instead of handing your audio over as a loose reference, it encodes the mixed audio through the audio VAE, sets a noise_mask of zeros on that latent so the sampler cannot touch it, separates the H3 video latent, and concatenates the two into an AV latent. That's the same frozen-audio dance LTX-2 AV workflows use, and it's why the clip comes out exactly as long as the segment rather than as long as the model felt like.

Frame count is duration × 24, rounded up to the next 17n+5.

Outputs

H3条件 and H3 Latent go to your sampler. H3图像 is the reference images letterboxed onto your canvas resolution - a batch, same size, so it's safe to split or save. H3音频 is the mixed slice. The last two are the sleeper feature: H3放大前文件名 and H3放大后文件名 emit prefixes like 数字人/放大前/01-分镜 01, so your video saver writes the pre-upscale and post-upscale versions into the folder structure the workbench's result list and merge tool expect. Use them and the 合并成片 button works; ignore them and your clips land somewhere the panel won't find.

The panel then collects outputs from history, tags them 放大前 / 放大后 / 合并成品, and merging concatenates two or more selected 放大后 clips in segment order via ffmpeg (stream copy first, libx264/aac fallback) into 成品-001.mp4 and friends. ffmpeg must be on PATH or available through imageio_ffmpeg.

Install

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, hard-refresh the browser. No models ship with this: H3's weights (~42.5GB) and both VAEs are your problem, and H3's community licence excludes the US, EU, UK and Korea. Auto-optimize additionally needs ComfyUI_Qwen_H3_Prompt plus a GGUF in models/LLM/Qwen3.8.

Gotchas

The project is on disk, not in the workflow, so a shared workflow with no project gives you 数字人项目不存在 or 请先点击'打开数字人工作台'…. The 输出目录 button shells out to explorer.exe, so that small convenience is Windows-only. Merging refuses to run with fewer than two selected 放大后 clips - by design, since it sorts by segment index and has nothing to sort otherwise. And if the sampler path you feed the AV latent into doesn't understand concatenated audio-video latents, the frozen audio doesn't do you any good; keep the sampling side to the workflow this node was built against.

Category闲兔/数字人 V2

Inputs (5)

NameTypeDefaultDescription
project_idSTRING—
segment_indexINT00–9999—
H3_CLIPoptCLIP—
H3_VIDEO_VAEoptVAE—
H3_AUDIO_VAEoptVAE—

Outputs (6)

NameTypeDescription
H3条件CONDITIONING—
H3 LatentLATENT—
H3图像IMAGE—
H3音频AUDIO—
H3放大前文件名STRING—
H3放大后文件名STRING—