Generated reference · ComfyUI workflow · motion

Wan 2.2 Text-to-Video

Wan2.2 T2V A14B text-to-video on the RunPod video endpoint, full-precision fp16 experts. Two-expert schedule: the high-noise expert samples steps 0..k and hands its leftover noise to the low-noise expert for k..N, where k = round(steps x …

motion16nodesGPU H100out video~120sv1.0.0

On this page

Wan2.2 T2V A14B text-to-video on the RunPod video endpoint, full-precision fp16 experts. Two-expert schedule: the high-noise expert samples steps 0..k and hands its leftover noise to the low-noise expert for k..N, where k = round(steps x boundary_ratio). Graph shape and every sampler default are taken from ComfyUI 0.34.0's own video_wan2_2_14B_t2v template, not invented: euler/simple, shift 5.0, 20 steps split at 10, CFG 3.5, EmptyHunyuanLatentVideo, 16 fps. speed_mode=lightx2v_4step splices the distilled LoRA onto both experts and forces the template's lightning schedule, through the V.06.04 post-render transform.

16Graph nodes
12Node classes
16Inputs
8Models

Tags: motionwan2.2text-to-videorunpod-serverlessvolume-backed

Inputs (16)#

The typed parameter surface callers bind when they request this workflow. Enum options and numeric bounds are the values the workflow document declares.

promptstringrequireddefault a paper boat drifting down a rain gutter, water beading on its folds, late afternoon light
What the clip should show, in natural prose. Wan responds to descriptive scene language and to explicit statements of what moves.
negative_promptstringdefault 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走
Wan's own published default negative prompt (Chinese, as shipped). Replacing it with an English translation measurably weakens it — the model was trained with this text.
seedintegerdefault -1
Random seed (-1 = random). Both experts share it.
resolutionenumdefault 480p_landscape_832x480
Frame size. 720p costs roughly 2.4x a 480p clip of the same length.
options: 480p_landscape_832x480480p_portrait_480x832720p_landscape_1280x720720p_portrait_720x1280square_624x624
lengthintegerdefault 81min 5max 121
Frames, and it must be 4n+1 — Wan's temporal compression plus the first frame. At 16 fps the default 81 is about 5 seconds. The executor refuses anything else before billing (motion-caps.ts).
fpsintegerdefault 16min 8max 30
Frame rate written into the container. Wan 2.2 was trained at 16 fps; a higher number here plays the same frames faster, it does not generate more.
stepsintegerdefault 20min 4max 40
Total sampling steps across BOTH experts. Overridden by speed_mode=lightx2v_4step, which forces 4.
boundary_ratiofloatdefault 0.5min 0.1max 0.9
Where the high-noise expert hands over to the low-noise one, as a fraction of steps. The template splits 20 at 10 and 4 at 2 — both 0.5.
cfgfloatdefault 3.5min 1.0max 10.0
Classifier-free guidance, applied to both experts. Overridden by speed_mode=lightx2v_4step, which forces 1.0.
shiftfloatdefault 5.0min 1.0max 12.0
ModelSamplingSD3 flow shift on both experts. 5.0 is the template value.
speed_modeenumdefault quality
lightx2v_4step splices the 4-step distilled LoRA onto BOTH experts and forces the template's lightning schedule (4 steps, split at 2, CFG 1.0), overriding steps/cfg/boundary_ratio. A LoRA is not a quantization, so this stays inside the full-precision rule (D-V5).
options: qualitylightx2v_4step
samplerenumdefault euler
Sampler for both experts
options: euleruni_pcdpmpp_2m
schedulerenumdefault simple
Sigma schedule for both experts
options: simplebeta
motion_presetenumdefault none
A documented phrase appended to the prompt (motion_map); `none` appends nothing at all. This is prompt guidance and nothing more — there is no camera control in this graph, and the model may ignore it.
options: nonestatic cameraslow push inorbit lefthandhelddolly out
loraenumdefault none
Optional Wan 2.2 LoRA pair (A.03.03). Wan 2.2 A14B is two experts, so every entry is two Civitai files: its high-noise file loads on the high-noise expert and its low-noise file on the low-noise expert, both at lora_strength, and an entry missing either file is refused at render rather than loaded by halves. Only pairs whose Civitai versions name Wan Video 2.2 T2V-A14B as their base are offered here, so the I2V-trained motion LoRAs are on wan22-i2v only. breast-slider-v2 = [Wan2.2] Breast slider v2.0, driven by strength in either direction; its versions list no trained words. It rendered one live clip on 2026-09-14 (A.05.02; see proof_note). none adds no loader.
options: nonebreast-slider-v2
lora_strengthfloatdefault 1min -2max 2
LoRA strength on BOTH experts (LoraLoaderModelOnly.strength_model on the high-noise and the low-noise half alike). A slider LoRA is meant to be driven negative as well as positive; the motion LoRAs sit at 1.0.

ComfyUI node graph (16)#

The executable ComfyUI prompt graph: 16 nodes across 12 distinct node classes, wired by 18 data dependencies. Nodes tinted green come from a custom node pack this workflow declares; the rest are ComfyUI core / baked-community classes.

flowchart TD n0["1: UNETLoader"] n1["2: UNETLoader"] n2["3: CLIPLoader"] n3["4: VAELoader"] n4["5: ModelSamplingSD3"] n5["6: ModelSamplingSD3"] n6["7: CLIPTextEncode"] n7["8: CLIPTextEncode"] n8["9: EmptyHunyuanLatentVideo"] n9["10: KSamplerAdvanced"] n10["11: KSamplerAdvanced"] n11["12: VAEDecode"] n12["13: CreateVideo"] n13["14: SaveVideo"] n14["15: ImageFromBatch"] n15["16: SaveImage"] n0 -->|model| n4 n1 -->|model| n5 n2 -->|clip| n6 n2 -->|clip| n7 n4 -->|model| n9 n6 -->|positive| n9 n7 -->|negative| n9 n8 -->|latent_image| n9 n5 -->|model| n10 n6 -->|positive| n10 n7 -->|negative| n10 n9 -->|latent_image| n10 n10 -->|samples| n11 n3 -->|vae| n11 n11 -->|images| n12 n12 -->|video| n13 n11 -->|image| n14 n14 -->|images| n15
Data-flow DAG — scroll to zoom, drag to pan.

Nodes (16)#

1UNETLoadercore
unet_name = wan2.2_t2v_high_noise_14B_fp16.safetensorsweight_dtype = default
outputs: MODEL
2UNETLoadercore
unet_name = wan2.2_t2v_low_noise_14B_fp16.safetensorsweight_dtype = default
outputs: MODEL
3CLIPLoadercore
clip_name = umt5_xxl_fp16.safetensorstype = wandevice = default
outputs: CLIP
4VAELoadercore
vae_name = wan_2.1_vae.safetensors
outputs: VAE
5ModelSamplingSD3core
model = ◂ node 1 · out[0]shift = {{shift}} tmpl
outputs: MODEL
6ModelSamplingSD3core
model = ◂ node 2 · out[0]shift = {{shift}} tmpl
outputs: MODEL
7CLIPTextEncodecore
text = {{constructed_prompt}} tmplclip = ◂ node 3 · out[0]
outputs: CONDITIONING
8CLIPTextEncodecore
text = {{negative_prompt}} tmplclip = ◂ node 3 · out[0]
outputs: CONDITIONING
9EmptyHunyuanLatentVideocore
width = {{resolution_map[resolution].width}} tmplheight = {{resolution_map[resolution].height}} tmpllength = {{length}} tmplbatch_size = 1
outputs: LATENT
10KSamplerAdvancedcore
model = ◂ node 5 · out[0]positive = ◂ node 7 · out[0]negative = ◂ node 8 · out[0]latent_image = ◂ node 9 · out[0]add_noise = enablenoise_seed = {{seed}} tmplsteps = {{steps}} tmplcfg = {{cfg}} tmplsampler_name = {{sampler}} tmplscheduler = {{scheduler}} tmplstart_at_step = 0end_at_step = {{int(round(steps * boundary_ratio))}} tmplreturn_with_leftover_noise = enable
outputs: LATENT
11KSamplerAdvancedcore
model = ◂ node 6 · out[0]positive = ◂ node 7 · out[0]negative = ◂ node 8 · out[0]latent_image = ◂ node 10 · out[0]add_noise = disablenoise_seed = {{seed}} tmplsteps = {{steps}} tmplcfg = {{cfg}} tmplsampler_name = {{sampler}} tmplscheduler = {{scheduler}} tmplstart_at_step = {{int(round(steps * boundary_ratio))}} tmplend_at_step = {{steps}} tmplreturn_with_leftover_noise = disable
outputs: LATENT
12VAEDecodecore
samples = ◂ node 11 · out[0]vae = ◂ node 4 · out[0]
outputs: IMAGE
13CreateVideocore
images = ◂ node 12 · out[0]fps = {{fps}} tmpl
outputs: VIDEO
14SaveVideocore
video = ◂ node 13 · out[0]filename_prefix = wan22-t2vformat = mp4codec = h264
15ImageFromBatchcore
image = ◂ node 12 · out[0]batch_index = {{length - 1}} tmpllength = 1
outputs: IMAGE
16SaveImagecore
images = ◂ node 15 · out[0]filename_prefix = wan22-t2v-lastframe

Prompt construction#

template
{base_prompt}{motion}

Variables (2)#

base_prompt
{{prompt}} tmpl
motion
{{motion_map[motion_preset]}} tmpl

Parameter banks (6)#

The prompt / configuration lookup tables this workflow keys into from its inputs — the vocabulary that turns a style / palette / preset selection into graph parameters.

option_policy (1)#

lora
{"breast-slider-v2": {"distribution": "service", "content": "racy"}}

resolution_map (5)#

480p_landscape_832x480
{"width": 832, "height": 480}
480p_portrait_480x832
{"width": 480, "height": 832}
720p_landscape_1280x720
{"width": 1280, "height": 720}
720p_portrait_720x1280
{"width": 720, "height": 1280}
square_624x624
{"width": 624, "height": 624}

requires_families (2)#

wan22-t2vwan-shared

motion_map (6)#

none
static camera
, static camera
slow push in
, slow push in
orbit left
, camera orbits left
handheld
, handheld camera
dolly out
, camera dollies out

lora_pair_map (1)#

breast-slider-v2
{"high": "wan22-breast-slider-v2-high.safetensors", "low": "wan22-breast-slider-v2-low.safetensors"}

post_render (2)#

wan_lora_pair
{"input": "lora", "strength_input": "lora_strength", "pair_map": "lora_pair_map", "none_value": "none"}
wan_speed_mode
{"input": "speed_mode", "fast_value": "lightx2v_4step", "lora_high": "wan2.2_t2v_lightx2v_4steps_lora_v1.1_high_noise.safetensors", "lora_low": "wan2.2_t2v_lightx2v_4steps_lora_v1.1_low_noise.safetensors", "steps": 4, "split": 2, "cfg": 1.0, "strength": 1.0}

Models & dependencies#

Models required (8)#

wan2.2_t2v_high_noise_14B_fp16.safetensors
wan2.2_t2v_low_noise_14B_fp16.safetensors
umt5_xxl_fp16.safetensors
wan_2.1_vae.safetensors
wan2.2_t2v_lightx2v_4steps_lora_v1.1_high_noise.safetensors
wan2.2_t2v_lightx2v_4steps_lora_v1.1_low_noise.safetensors
wan22-breast-slider-v2-high.safetensors
wan22-breast-slider-v2-low.safetensors

Output contract#

What a successful run of this workflow returns.

type
video
format
mp4
codec
h264
fps_source
fixed
audio
false
alpha
false
expected_dimensions
{"width": "{{resolution_map[resolution].width}}", "height": "{{resolution_map[resolution].height}}", "frames": "{{length}}"}

Taxonomy & routing#

How the control plane classifies this workflow — from the committed workflow-taxonomy-registry.json. It drives the consistency / control surface the agentic director can exercise over the workflow.

assetFamily
keyframe-anchored-motion
outputPackageProfile
video-master-profile
controlModalities
model-locksampler-scheduler-lockseed-lockprompt-template-lockmotion-vector-locktemporal-lock
consistencyDimensions
motionidentitylighting
notes
Wan2.2 T2V A14B, full-precision two-expert schedule on the RunPod video endpoint. controlModalities lists only what the graph really exposes: there is no camera control here, and motion_preset is prompt text, not a camera path.