Wan2.2 I2V A14B: animate a supplied still. Same two-expert schedule as the T2V graph, with one structural difference taken from ComfyUI 0.34.0's own video_wan2_2_14B_i2v template — WanImageToVideo produces the positive, negative AND latent that both samplers consume, so the start image conditions the clip rather than merely seeding it. That template leaves clip_vision_output UNLINKED, so no CLIP-vision tower is loaded here. Defaults are the template's: euler/simple, shift 5.0, 20 steps split at 10, CFG 3.5, 81 frames at 16 fps.
Tags: motionwan2.2image-to-videorunpod-serverlessvolume-backed
Inputs (18)#
The typed parameter surface callers bind when they request this workflow. Enum options and numeric bounds are the values the workflow document declares.
start_imageimagerequiredend_imageimagepromptstringrequireddefault the paper boat rocks and drifts forward, water rippling around itnegative_promptstringdefault 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走seedintegerdefault -1resolutionenumdefault 480p_landscape_832x480480p_landscape_832x480480p_portrait_480x832720p_landscape_1280x720720p_portrait_720x1280square_624x624match_image_aspect_480pmatch_image_aspect_720plengthintegerdefault 81min 5max 121fpsintegerdefault 16min 8max 30stepsintegerdefault 20min 4max 40boundary_ratiofloatdefault 0.5min 0.1max 0.9cfgfloatdefault 3.5min 1.0max 10.0shiftfloatdefault 5.0min 1.0max 12.0speed_modeenumdefault qualityqualitylightx2v_4stepsamplerenumdefault eulereuleruni_pcdpmpp_2mschedulerenumdefault simplesimplebetamotion_presetenumdefault nonenonestatic cameraslow push inorbit lefthandhelddolly outloraenumdefault nonenonecamera-tiltdown-undershot-v2camera-tiltup-overhead-v1.1hip-sway-type1hip-bump-dancensfw-posing-nude-v2bouncing-boobs-wan22twerking-i2vslow-twerklora_strengthfloatdefault 1min -2max 2ComfyUI node graph (17)#
The executable ComfyUI prompt graph: 17 nodes across 13 distinct node classes, wired by 22 data dependencies. Nodes tinted green come from a custom node pack this workflow declares; the rest are ComfyUI core / baked-community classes.
Nodes (17)#
1UNETLoadercoreunet_name = wan2.2_i2v_high_noise_14B_fp16.safetensorsweight_dtype = defaultMODEL2UNETLoadercoreunet_name = wan2.2_i2v_low_noise_14B_fp16.safetensorsweight_dtype = defaultMODEL3CLIPLoadercoreclip_name = umt5_xxl_fp16.safetensorstype = wandevice = defaultCLIP4VAELoadercorevae_name = wan_2.1_vae.safetensorsVAE5ModelSamplingSD3coremodel = ◂ node 1 · out[0]shift = {{shift}} tmplMODEL6ModelSamplingSD3coremodel = ◂ node 2 · out[0]shift = {{shift}} tmplMODEL7CLIPTextEncodecoretext = {{constructed_prompt}} tmplclip = ◂ node 3 · out[0]CONDITIONING8CLIPTextEncodecoretext = {{negative_prompt}} tmplclip = ◂ node 3 · out[0]CONDITIONING9LoadImagecoreimage = {{start_image}} tmplIMAGEMASK10KSamplerAdvancedcoremodel = ◂ node 5 · out[0]positive = ◂ node 17 · out[0]negative = ◂ node 17 · out[1]latent_image = ◂ node 17 · out[2]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 = enableLATENT11KSamplerAdvancedcoremodel = ◂ node 6 · out[0]positive = ◂ node 17 · out[0]negative = ◂ node 17 · out[1]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 = disableLATENT12VAEDecodecoresamples = ◂ node 11 · out[0]vae = ◂ node 4 · out[0]IMAGE13CreateVideocoreimages = ◂ node 12 · out[0]fps = {{fps}} tmplVIDEO14SaveVideocorevideo = ◂ node 13 · out[0]filename_prefix = wan22-i2vformat = mp4codec = h26415ImageFromBatchcoreimage = ◂ node 12 · out[0]batch_index = {{length - 1}} tmpllength = 1IMAGE16SaveImagecoreimages = ◂ node 15 · out[0]filename_prefix = wan22-i2v-lastframe17WanImageToVideocorepositive = ◂ node 7 · out[0]negative = ◂ node 8 · out[0]vae = ◂ node 4 · out[0]start_image = ◂ node 9 · out[0]width = {{resolution_map[resolution].width}} tmplheight = {{resolution_map[resolution].height}} tmpllength = {{length}} tmplbatch_size = 1CONDITIONINGCONDITIONINGLATENTPrompt construction#
template{base_prompt}{motion}Variables (2)#
base_prompt{{prompt}} tmplmotion{{motion_map[motion_preset]}} tmplParameter banks (7)#
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{"camera-tiltdown-undershot-v2": {"distribution": "service", "content": "neutral"}, "camera-tiltup-overhead-v1.1": {"distribution": "service", "content": "neutral"}, "hip-sway-type1": {"distribution": "service", "content": "racy"}, "hip-bump-dance": {"distribution": "service", "content": "racy"}, "nsfw-posing-nude-v2": {"distribution": "internal_only", "content": "explicit"}, "bouncing-boobs-wan22": {"distribution": "internal_only", "content": "explicit"}, "twerking-i2v": {"distribution": "internal_only", "content": "explicit"}, "slow-twerk": {"distribution": "internal_only", "content": "explicit"}}resolution_map (7)#
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}match_image_aspect_480p{"width": 832, "height": 480}match_image_aspect_720p{"width": 1280, "height": 720}requires_families (2)#
wan22-i2vwan-sharedmotion_map (6)#
nonestatic camera, static cameraslow push in, slow push inorbit left, camera orbits lefthandheld, handheld cameradolly out, camera dollies outlora_pair_map (8)#
camera-tiltdown-undershot-v2{"high": "wan22-camera-tiltdown-undershot-v2-high.safetensors", "low": "wan22-camera-tiltdown-undershot-v2-low.safetensors"}camera-tiltup-overhead-v1.1{"high": "wan22-camera-tiltup-overhead-v1.1-high.safetensors", "low": "wan22-camera-tiltup-overhead-v1.1-low.safetensors"}hip-sway-type1{"high": "wan22-hip-sway-type1-high.safetensors", "low": "wan22-hip-sway-type1-low.safetensors"}hip-bump-dance{"high": "wan22-hip-bump-dance-high.safetensors", "low": "wan22-hip-bump-dance-low.safetensors"}nsfw-posing-nude-v2{"high": "wan22-nsfw-posing-nude-v2-high.safetensors", "low": "wan22-nsfw-posing-nude-v2-low.safetensors"}bouncing-boobs-wan22{"high": "wan22-bouncing-boobs-wan22-high.safetensors", "low": "wan22-bouncing-boobs-wan22-low.safetensors"}twerking-i2v{"high": "wan22-twerking-i2v-high.safetensors", "low": "wan22-twerking-i2v-low.safetensors"}slow-twerk{"high": "wan22-slow-twerk-high.safetensors", "low": "wan22-slow-twerk-low.safetensors"}post_render (3)#
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_i2v_lightx2v_4steps_lora_v1_high_noise.safetensors", "lora_low": "wan2.2_i2v_lightx2v_4steps_lora_v1_low_noise.safetensors", "steps": 4, "split": 2, "cfg": 1.0, "strength": 1.0}wan_first_last_frame{"input": "end_image", "node_class": "WanImageToVideo", "swap_to": "WanFirstLastFrameToVideo"}submission (1)#
fit_to_image{"input": "resolution", "image_input": "start_image", "match_values": {"match_image_aspect_480p": 480, "match_image_aspect_720p": 720}, "node_classes": ["WanImageToVideo", "WanFirstLastFrameToVideo"], "multiple_of": 16, "_comment": "The resolution_map entries for these two values are the tier's landscape default and are only what the template renders before this transform overwrites them; the real numbers come from the image."}Models & dependencies#
Models required (22)#
wan2.2_i2v_high_noise_14B_fp16.safetensorswan2.2_i2v_low_noise_14B_fp16.safetensorsumt5_xxl_fp16.safetensorswan_2.1_vae.safetensorswan2.2_i2v_lightx2v_4steps_lora_v1_high_noise.safetensorswan2.2_i2v_lightx2v_4steps_lora_v1_low_noise.safetensorswan22-camera-tiltdown-undershot-v2-high.safetensorswan22-camera-tiltdown-undershot-v2-low.safetensorswan22-camera-tiltup-overhead-v1.1-high.safetensorswan22-camera-tiltup-overhead-v1.1-low.safetensorswan22-hip-sway-type1-high.safetensorswan22-hip-sway-type1-low.safetensorswan22-hip-bump-dance-high.safetensorswan22-hip-bump-dance-low.safetensorswan22-nsfw-posing-nude-v2-high.safetensorswan22-nsfw-posing-nude-v2-low.safetensorswan22-bouncing-boobs-wan22-high.safetensorswan22-bouncing-boobs-wan22-low.safetensorswan22-twerking-i2v-high.safetensorswan22-twerking-i2v-low.safetensorswan22-slow-twerk-high.safetensorswan22-slow-twerk-low.safetensorsOutput contract#
What a successful run of this workflow returns.
typevideoformatmp4codech264fps_sourcefixedaudiofalsealphafalseexpected_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.
assetFamilykeyframe-anchored-motionoutputPackageProfilevideo-master-profilecontrolModalitiesmodel-locksampler-scheduler-lockseed-lockprompt-template-lockkeyframe-anchor-lockmotion-vector-locktemporal-lockconsistencyDimensionsmotionidentitylightingenvironmentnotesWan2.2 I2V A14B. keyframe-anchor-lock is real here and not in the T2V graph: the start image is carried through WanImageToVideo into both experts' conditioning, so it anchors the clip rather than only seeding it.