XB-BOX - 🎵 InfiniteTalk 无限对口型总线
One bus for the whole talking-head pipeline
- model
- model_patch
- clip
- vae
- audio_encoder
- clip_vision
- start_image
- audio
- 📦 WAN_INFINITETALK_BUS
InfiniteTalk is the Wan-ecosystem trick for talking-head video that doesn't loop or freeze: an audio-conditioned model that drives a character's lips and motion from a voice track, segment by segment, so the clip can run as long as the audio does. XB_WanInfiniteTalk_ParamBus ("XB-BOX - 🎵 InfiniteTalk 无限对口型总线") is the pack's command center for that pipeline - the one place you set every shared parameter, load the models, and hand a single WAN_INFINITETALK_BUS to the relay nodes that actually generate each segment.
If you've used the pack's plain XB_Wan_ParamBus, this is its audio-aware sibling. Everything the Wan bus does for I2V relays, this does for InfiniteTalk relays - plus the model plumbing and the audio handling those relays need, which is why it takes more inputs.
How it works
On the model side it accepts the full stack: model and model_patch (the audio-conditioned checkpoint plus its patch - the source clones and patches a copy so an interrupted run can't poison the base model), clip, vae, audio_encoder, and clip_vision. Then the usual generation parameters: width/height (832×480 default), fps, negative_prompt, steps (default 4 - the distilled regime), cfg (1.0), sampler/scheduler/seed, plus the VAE chunking knobs (vae_encode_tile_size, vae_decode_tile_size, spatial_overlap, temporal_chunk_size, temporal_overlap) and a cleanup dropdown for post-run VRAM nuking.
Then the InfiniteTalk-specific pieces:
total_frames- per its tooltip, this is "bus audio mode": the total frame count from your audio-slicing node, which the relays consume until it's exhausted and then auto-stop.0means "independent audio mode," where each relay feeds its own audio.audio(optional) - in bus audio mode you drop your long audio here and the bus encodes it once; relays then slice it automatically by frame offset. One encode for the whole track instead of re-encoding per segment.motion_frame_count(default 9) andaudio_scale(default 1.0) - the overlap for seamless transitions between segments, and how strongly the audio drives the motion.start_image(optional) - the character's face; if you also wireclip_vision, the bus encodes it into clip-vision conditioning for identity retention.
The single output is the WAN_INFINITETALK_BUS, which you pass to any of the pack's InfiniteTalk relay nodes.
What to set
For a first run: models + clip_vision + start_image + negative_prompt, and pick your audio mode. Bus mode (long audio + total_frames from the slicer) is the one that makes "one video as long as the podcast" a real workflow. Independent mode is for per-segment audio, which is easier to iterate on. motion_frame_count of 9 is a sane overlap - lower it if transitions feel heavy, raise it if they feel jumpy.
Install
ComfyUI Manager → XB_ToolBox, or git clone https://github.com/wjluoxiao/XB_ToolBox.git into custom_nodes, restart. Declared deps: opencv-python, easyocr; no weights ship. You need the InfiniteTalk weights, the Wan audio encoder (the AUDIO_ENCODER this node takes is loaded by ComfyUI's audio-encoder node), a Wan VAE/CLIP/T5, and a CLIP Vision for identity. InfiniteTalk is a real, working open model - community threads report seamless 20-second takes with no visible transitions - but it's a niche corner of the ecosystem, so expect to debug the plumbing yourself.
Inputs (29)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| model_patch | MODEL_PATCH | — | |
| clip | CLIP | — | |
| vae | VAE | — | |
| audio_encoder | AUDIO_ENCODER | — | |
| clip_vision | CLIP_VISION | — | |
| negative_prompt | STRING | 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 | — |
| width | INT | 832260–8192 | — |
| height | INT | 48016–8192 | — |
| total_frames | INT | 00–999999 | 总线音频模式:音频切片节点输出的总帧数,耗尽后自动停止接力。0=独立音频模式 |
| fps | FLOAT | 251–120 | — |
| vae_encode_tile_size | INT | 2560–3840 | — |
| vae_decode_tile_size | INT | 1920–3840 | — |
| spatial_overlap | INT | 320–3840 | — |
| temporal_chunk_size | INT | 960–8192 | — |
| temporal_overlap | INT | 40–8192 | — |
| steps | INT | 41–100 | — |
| cfg | FLOAT | 1.00–10 | — |
| sampler_name | COMBO | 41 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +35 | |
| scheduler | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| seed | INT | 123456789 | — |
| motion_frame_count | INT | 91–33 | — |
| audio_scale | FLOAT | 1.00-10–10 | — |
| scale_method | COMBO | lanczos | 5 options: bilinear, bicubic, lanczos, nearest-exact, area |
| crop_mode | COMBO | center | 2 options: center, disabled |
| cleanup | COMBO | 双次缓存清理 | 4 options: 不做任何清理, 单次缓存清理, 双次缓存清理, 卸载显存模型 |
| start_imageopt | IMAGE | — | |
| audioopt | AUDIO | 总线音频模式:接入长音频,总线一次性编码,接力点自动分段 | |
| concat_modeopt | COMBO | 自动 | 视频累积拼接位置 |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| 📦 WAN_INFINITETALK_BUS | WAN_INFINITETALK_BUS | — |