Nodes/KIE.ai Nodes Next/Wan - 2.2 A14B Speech to Video Turbo
ComfyUI Node

Wan - 2.2 A14B Speech to Video Turbo

Point an audio file at a portrait and make it talk

By felipederosilva·Created about a month ago·Updated a day ago· 3
Wan - 2.2 A14B Speech to Video Turbo
  • image_url
  • audio_url
  • video
  • url
  • all_urls_json
  • task_id
  • raw_json
  • credits_consumed
  • credits_left
◄promptThe lady is talking►
◄num_frames80.00►
◄frames_per_second16.00►
◄resolution480p►
◄negative_prompt►
◄num_inference_steps27.00►
◄guidance_scale3.50►
◄shift5.00►
◄seed0►
◄nsfw_checkerfalse►
◄timeout_seconds1200►
◄callback_url►

Audio-driven video is the bridge everyone ends up needing: you have a voice track and a face, and you want them to belong to each other. Wan's S2V line is Alibaba's first-party answer - Apache 2.0 weights, part of the same frozen 2.2 family - and this node is KIE's hosted, turbo-distilled version of it, wrapped as a native ComfyUI node with an AUDIO socket instead of a URL box.

Reach for it for talking-head work, dubbed clips, character voices you generated elsewhere in the graph. Don't reach for it expecting a puppeteer: you give it one still frame and a soundtrack, and it invents the performance. That's a good deal for a portrait and a bad deal for a full-body action beat.

How it works

Three required sockets go in - image_url (IMAGE), audio_url (AUDIO), and prompt - and the node does the URL plumbing you'd otherwise do by hand. The image is uploaded to KIE, the audio is converted to WAV bytes and uploaded, and both come back as URLs that the marketplace request uses. Then it POSTs to /api/v1/jobs/createTask with model wan/2-2-a14b-speech-to-video-turbo and polls /api/v1/jobs/recordInfo until the job reports success. The finished MP4 is downloaded and archived under ComfyUI/output/KIE-Results/videos; you get a native VIDEO object back.

Inputs that matter

The prompt is mostly a sanity check on what's happening ("the lady is talking" is the shipped default) - the audio is doing the driving here.

Where you'll actually spend time:

  • num_frames - default 80, and it must be a multiple of 4 between 40 and 120. At the default 16 fps, 80 frames is a five-second performance. Longer audio than your frame budget means it gets cut off, not stretched.
  • frames_per_second - the tooltip states the trap directly: with frame interpolation and adjust_fps_for_interpolation on KIE's side (default true), the final playback FPS multiplies. Set 16 and you may get 32.
  • resolution - 480p, 580p, 720p. Default is 480p and that's fine for a draft.
  • num_inference_steps at 27, guidance_scale at 3.5, shift at 5.0 - these are the sampler knobs, and the defaults are sensible. Raise steps for quality, leave shift alone unless you know why you're touching it.
  • negative_prompt - 500 characters, gets you out of blurry/flicker territory.
  • nsfw_checker off by default, timeout_seconds at 1200, callback_url empty.

Outputs

video is the one you wire to SaveVideo or the video combiner. Beside it: url, all_urls_json, task_id, raw_json, and the pair this pack is quietly good at - credits_consumed and credits_left, on the node face as a receipt after each run. Speech-driven clips are short, which makes them one of the cheaper ways to spend credits on this pack.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
cd ComfyUI-KIE-Nodes-Next && pip install -r requirements.txt

Restart ComfyUI. There are no model files and no heavy dependencies - requests, Pillow, numpy, PyYAML is the whole list, because the model lives on KIE's side. The node tree itself is generated at startup from KIE's live API catalog, so you find this one under KIE Next / Video / Wan.

One-time setup: Settings → KIE.ai Nodes Next → Connection, paste your key, wait for ✅ CONNECTED. It's validated before it replaces anything saved. KIE_API_KEY in the environment works for headless installs and takes priority.

Common issues

The mouth doesn't match the words. That's the model, not the node. S2V does well on straight-on, well-lit faces; profiles and heavy occlusion degrade fast. Trim your audio to a clean take first.

Audio length vs. frame count fights you. Decide the clip length in frames, then cut the audio to fit. num_frames being a multiple of 4 is a hard requirement - 79 gets rejected.

Nothing renders. Add a video preview or save node. This isn't an output node, so a successful run looks like a no-op.

"Your ComfyUI build does not expose comfy_api.latest…" - the native VIDEO type needs a current ComfyUI. Update before blaming the pack.

Cost sneaks up. KIE meters credits per second of generated video and per resolution tier, and a failed job still bills. Kick off a silent 480p test with a short clip before committing to a batch.

CategoryKIE Next/Video/Wan

Inputs (14)

NameTypeDefaultDescription
promptSTRINGThe lady is talkingThe text prompt used for video generation (Max length: 5000 characters)
image_urlIMAGE—
audio_urlAUDIO—
num_framesoptFLOAT80.0040–120Number of frames to generate. Must be between 40 to 120, (must be multiple of 4) (Min: 40, Max: 120, Step: 4) (step: 4)
frames_per_secondoptFLOAT16.004–60Frames per second of the generated video. Must be between 4 to 60. When using interpolation and adjust_fps_for_interpolation is set to true (default true,) the final FPS will be multiplied by the number of interpolated frames plus one. For example, if the generated frames per second is 16 and the number of interpolated frames is 1, the final frames per second will be 32. If adjust_fps_for_interpolation is set to false, this value will be used as-is (Min: 4, Max: 60, Step: 1) (step: 1)
resolutionoptCOMBO480pResolution of the generated video (480p, 580p, or 720p)
negative_promptoptSTRINGNegative prompt for video generation (Max length: 500 characters)
num_inference_stepsoptFLOAT27.002–40Number of inference steps for sampling. Higher values give better quality but take longer (Min: 2, Max: 40, Step: 1) (step: 1)
guidance_scaleoptFLOAT3.501–10Classifier-free guidance scale. Higher values give better adherence to the prompt but may decrease quality (Min: 1, Max: 10, Step: 0.1) (step: 0.1)
shiftoptFLOAT5.001–10Shift value for the video. Must be between 1.0 and 10.0 (Min: 1, Max: 10, Step: 0.1) (step: 0.1)
seedoptINT0-2147483648–2147483647Random seed for reproducibility. If None, a random seed is chosen
nsfw_checkeroptBOOLEANfalseDefaults to false. You can set it to false based on your needs. If set to false, our content filtering will be disabled, and all results will be returned directly by the model itself. Note: There is no guarantee that everything can be filtered out; if you are not satisfied with the results, you will need to make your own arrangements.
timeout_secondsoptINT120030–7200—
callback_urloptSTRINGOptional KIE callback URL. Leave empty for normal ComfyUI use.

Outputs (7)

NameTypeDescription
videoVIDEO—
urlSTRING—
all_urls_jsonSTRING—
task_idSTRING—
raw_jsonSTRING—
credits_consumedFLOAT—
credits_leftFLOAT—