Nodes/DiffSynth-ComfyUI/DiffSynth: Wan Video Inference
ComfyUI Node

DiffSynth: Wan Video Inference

One node, every Wan variant, and about forty sockets you can ignore

By modelscope·Created about a month ago·Updated a day ago· 8
DiffSynth: Wan Video Inference
  • pipe
  • input_image
  • end_image
  • input_video
  • input_audio
  • audio_embeds
  • s2v_pose_video
  • s2v_pose_latents
  • motion_video
  • control_video
  • reference_image
  • vace_video
  • vace_video_mask
  • vace_reference_image
  • animate_pose_video
  • animate_face_video
  • animate_inpaint_video
  • animate_mask_video
  • animate2_reference_image
  • animate2_reference_video
  • animate2_refert_images
  • vap_video
  • longcat_video
  • wantodance_reference_image
  • wantodance_keyframes
  • video
◄prompt►
◄seed0►
◄num_inference_steps50►
◄height480►
◄width832►
◄negative_prompt►
◄denoising_strength1.0►
◄audio_sample_rate16000►
◄camera_control_directionLeft►
◄camera_control_speed0.0►
◄camera_control_origin0,0.532139961,0.946026558,0.5,0.5,0,0,1,0,0,0,0,1,0,0,0,0,1,0►
◄vace_scale1.0►
◄animate2_prompt_ref ►
◄animate2_offload_kvfalse►
◄animate2_log_scale0.0►
◄vap_prompt ►
◄negative_vap_prompt ►
◄num_frames81►
◄cfg_scale5.0►
◄cfg_mergefalse►
◄switch_DiT_boundary0.9►
◄sigma_shift5.0►
◄motion_bucket_id0►
◄tiledtrue►
◄tile_size30,52►
◄tile_stride15,26►
◄sliding_window_size0►
◄sliding_window_stride0►
◄tea_cache_l1_thresh0.0►
◄wantodance_music_path►
◄wantodance_fps30►
◄wantodance_keyframes_mask►
◄framewise_decodingfalse►

Scroll past the input list on this node and you'll think something has gone wrong. It's enormous. That's not a mistake or a sign of bloat - it's the union of every task the Wan family can do, from text-to-video through VACE control, speech-to-video, motion transfer and music-driven dance. You use three or four sockets. The rest are for a workflow you're not running.

The core settings

If you're doing plain text-to-video, this is the whole node:

  • pipe - from DiffSynth: Wan Video Loader.
  • prompt, negative_prompt - natural language, cinematic description works better than tag soup.
  • seed, num_inference_steps (50), cfg_scale (5).
  • height 480, width 832, num_frames 81 - the classic Wan 480p short. 81 frames is the model's native context; it's roughly three and a half seconds at 16fps, and everything the community does at 3–5 seconds starts here.
  • sigma_shift (5) and switch_DiT_boundary (0.875) - scheduler and expert-boundary knobs. Wan 2.2 splits denoising between a high-noise expert and a low-noise one; the boundary is where it hands over. Leave both alone unless you're following a recipe.

Image, video and audio conditioning

  • input_image - image-to-video. This is most people's actual workflow; a still plus motion beats a prompt alone for anything with a subject you care about.
  • end_image - first/last-frame interpolation. Give it both ends and let it join them.
  • input_video + denoising_strength - video-to-video. denoising_strength near 1 replaces the clip; drop it to keep more of the original.
  • input_audio, audio_sample_rate, motion_video, s2v_pose_video - the speech-to-video family. Wants the audio processor config on the Loader.
  • control_video, reference_image - ControlNet-style conditioning and subject reference.
  • camera_control_direction, camera_control_speed, camera_control_origin - camera moves on the models trained for it. camera_control_direction takes Left, Right, Up, Down and the four diagonals; origin is a long transform string you should only ever paste from an example.

The rest - vace_video and friends, animate_*, animate2_*, vap_*, longcat_video, wantodance_* - belong to specific checkpoints. Connect a VACE input without VACE weights loaded and you get an error or, worse, a video that silently ignores it.

The ones that actually change your day

  • tiled (on by default), tile_size, tile_stride - VAE decode tiling. Wan's 3D VAE is where big clips die, and this is why the default is on. The values are comma-separated strings (30,52 and 15,26), not tuples, because ComfyUI has no fancy string widgets.
  • sliding_window_size, sliding_window_stride - how you go past 81 frames. Chunked generation; identity drift across windows is the known cost, and the community's long-video node wrappers exist for exactly this reason.
  • tea_cache_l1_thresh - TeaCache, the caching speedup. Somewhere around 0.2–0.3 typically buys real time for a little drift; it's a trade, not a free win.
  • cfg_merge, motion_bucket_id, framewise_decoding - niche. cfg_merge matters on Wan 2.2's MoE checkpoints; the others are model-specific.
  • latents-adjacent sockets like s2v_pose_latents, audio_embeds - wildcard inputs for precomputed tensors. Ignore them unless a workflow hands you one.

Output is a single video socket, type IMAGE: a batch of frames. Wire to Video Combine or any frame consumer.

Install

Manager → DiffSynth-ComfyUI → install → restart, or clone into custom_nodes after pip install git+https://github.com/modelscope/DiffSynth-Studio.git. Weights are the real cost - the 1.3B T2V model is a few gigabytes; 14B is tens.

Common issues

  • Out of memory on decode, not sampling. Tiling is already on by default; if you turned it off, turn it back on.
  • A four-minute clip that loops or degrades. Native context is 81 frames. Chunk it deliberately or accept the mush.
  • Wrong task weights. The Loader loads what you tell it; this node then tries to use inputs the checkpoint was never trained for. Copy a working example graph, then edit.
  • Long waits on a mid-range card. 81 frames at 480p is minutes, not seconds, and 14B on a 12GB card is a different sport. Get a baseline at 1.3B first.
CategoryDiffSynth/inference

Inputs (58)

NameTypeDefaultDescription
pipeDIFFSYNTH_PIPE—
promptSTRING—
seedINT00–4294967295—
num_inference_stepsINT501–200—
heightINT48064–4096—
widthINT83264–4096—
negative_promptoptSTRING—
input_imageoptIMAGE—
end_imageoptIMAGE—
input_videooptIMAGE—
denoising_strengthoptFLOAT1.00–10000—
input_audioopt*—
audio_embedsopt*—
audio_sample_rateoptINT160000–4294967295—
s2v_pose_videooptIMAGE—
s2v_pose_latentsopt*—
motion_videooptIMAGE—
control_videooptIMAGE—
reference_imageoptIMAGE—
camera_control_directionoptCOMBOLeft8 options: Left, Right, Up, Down, LeftUp, LeftDown, +2
camera_control_speedoptFLOAT0.00–10000—
camera_control_originoptSTRING0,0.532139961,0.946026558,0.5,0.5,0,0,1,0,0,0,0,1,0,0,0,0,1,0—
vace_videooptIMAGE—
vace_video_maskoptIMAGE—
vace_reference_imageoptIMAGE—
vace_scaleoptFLOAT1.00–10000—
animate_pose_videooptIMAGE—
animate_face_videooptIMAGE—
animate_inpaint_videooptIMAGE—
animate_mask_videooptIMAGE—
animate2_prompt_refoptSTRING —
animate2_reference_imageoptIMAGE—
animate2_reference_videooptIMAGE—
animate2_refert_imagesoptIMAGE—
animate2_offload_kvoptBOOLEANfalse—
animate2_log_scaleoptFLOAT0.00–10000—
vap_videooptIMAGE—
vap_promptoptSTRING —
negative_vap_promptoptSTRING —
num_framesoptINT811–1000—
cfg_scaleoptFLOAT5.00–10000—
cfg_mergeoptBOOLEANfalse—
switch_DiT_boundaryoptFLOAT0.90–10000—
sigma_shiftoptFLOAT5.00–10000—
motion_bucket_idoptINT00–4294967295—
longcat_videooptIMAGE—
tiledoptBOOLEANtrue—
tile_sizeoptSTRING30,52—
tile_strideoptSTRING15,26—
sliding_window_sizeoptINT00–4294967295—
sliding_window_strideoptINT00–4294967295—
tea_cache_l1_threshoptFLOAT0.00–10000—
wantodance_music_pathoptSTRING—
wantodance_reference_imageoptIMAGE—
wantodance_fpsoptFLOAT300–10000—
wantodance_keyframesoptIMAGE—
wantodance_keyframes_maskoptSTRING—
framewise_decodingoptBOOLEANfalse—

Outputs (1)

NameTypeDescription
videoIMAGE—