Nodes/ComfyUI_zura_nodes/Zura · Save Native Wan Speech Guide
ComfyUI Node

Zura · Save Native Wan Speech Guide

How Wan's native speech guide gets recorded

By ZURAVFX·Created about a month ago·Updated a day ago· 2
Zura · Save Native Wan Speech Guide
  • filenames
  • selected_audio
  • pending_guide_key
◄crop_metadata—►
◄guide_key►
◄recipe_json►

Wan's local speech route in Zura Nodes is InfiniteTalk: you run a Wan 2.1 I2V base with the InfiniteTalk patch at 480 × 640 and 25 fps to generate a facial performance from your chosen audio, then Wan 2.2 Animate renders the actual shot using that performance as a mouth guide. ZuraWanSpeechSaveGuide (Zura · Save Native Wan Speech Guide) is the last node in that guide graph, and its whole job is to make the guide reusable and provable rather than just a video sitting in a folder.

It writes a receipt, not a result

The output is pending_guide_key - and "pending" is doing real work: the node doesn't promote anything. It validates the run, writes output/genj/wan_speech_guides/<guide_key>.pending.json, and stops. Promotion to a complete guide happens later, when the pack sees a successfully completed queue for that exact prompt. That two-step design is why a guide you generated and then cancelled is permanently pending, and why ZuraWanSpeechGuard can insist on state == "complete" before letting you sample.

What it checks before writing

The validation is dense, and it's all about binding the guide to a recipe:

  • recipe_json must contain a guide_key equal to the wired guide_key, and re-hashing the recipe's canonical data must reproduce that key. Change the recipe and the key no longer describes it.
  • The node must be part of the currently running prompt, and it must be the only thing in the queue at that moment. It reads VHS's filenames output, follows the export to its .mp4, and requires the audio-muxed final (not VHS's silent intermediate), with the guide key as a filename prefix.
  • crop_metadata must pass crop validation against the same guide key: intact recipe name, crop inside the opening frame, exact 4:3 aspect, mask overlaps ≥0.5, face confidences ≥0.3. That's the string from ZuraWanSpeechReferenceCrop, so a guide can't be saved with an unverified portrait.
  • selected_audio is fingerprinted and compared with the audio the recipe recorded - the actual waveform and timing signature, not "does it sound right".
  • The graph signature must match the recipe's. If you edited the graph, it doesn't error out: it returns an empty string and tells you the guide "rendered with an edited recipe. Studio will prepare its own selected settings." Advanced edits stay renderable; they just don't warm an unchanged Studio recipe.

The inputs

filenames (VHS_FILENAMES) is the wire from VHS_VideoCombine in VideoHelperSuite - that's why this node needs VHS installed. crop_metadata (STRING) comes from the crop node's provenance output. selected_audio (AUDIO) is the track the performance was actually driven by. guide_key and recipe_json are strings Studio supplies; you don't invent a key, because every check above is defined relative to it.

The guide's recipe is fixed at wan21-infinitetalk-i2v-sdpa-v1, 480 × 640, 25 fps against a 24 fps source, and reference speech is capped at 30 seconds; longer takes aren't quality-validated.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/ZURAVFX/ComfyUI_zura_nodes
python -m pip install -r ComfyUI_zura_nodes/requirements.txt

Then run Setup_Wan_Speech_Windows.cmd once from the pack folder. It checks and downloads the separate speech stack: the Wan 2.1 I2V 480p fp8 base, the InfiniteTalk single patch (~5.1 GB), chinese-wav2vec2-base.bin, the lightx2v distill LoRA, Wan2_1_VAE_bf16, umt5_xxl_fp8_e4m3fn_scaled and clip_vision_h. It has a --check mode if you just want to see what's missing, and it won't install Python packages for you.

For the graph to exist at all you need ComfyUI-WanVideoWrapper (Kijai's, tested at 1.4.7), ComfyUI-VideoHelperSuite and ComfyUI-WanAnimatePreprocess. The multi-gigabyte downloads matter here more than anywhere else in the pack: this is a second full Wan 2.1 stack that exists only to build the mouth guide.

Troubleshooting

  • No guide appears after a "successful" run. Check whether you edited the graph. An edited recipe returns "" by design, and Studio then makes its own guide from your selected settings.
  • Save the native speech guide to Comfy's output folder. or a complaint about the expected audio-muxed export - VHS didn't produce the final file, usually because the combine node was configured to a different format or the files were moved out of Comfy's output directory.
  • The guide changed the selected audio waveform or timing. - you re-encoded, trimmed or re-rendered the audio after the graph was queued. Regenerate the guide from the new track.
  • Local speech inference is the newest and least-validated part of this pipeline, and the pack says so: one visible human face, 30 seconds max, review every take. InfiniteTalk itself is the well-established local talking-head default - but that reputation is about the model, not this wrapper, which nobody has written up anywhere.

That last point applies to the whole pack: it's sophisticated and heavily validated, with essentially no community footprint. There's no walkthrough video to fall back on, so read the error strings. They're unusually descriptive, and they're the documentation.

CategoryZura/Artist Studio

Inputs (5)

NameTypeDefaultDescription
filenamesVHS_FILENAMES—
crop_metadataSTRING—
selected_audioAUDIO—
guide_keySTRING—
recipe_jsonSTRING—

Outputs (1)

NameTypeDescription
pending_guide_keySTRING—