Wan 2.2 ComfyUI Workflow: 5B vs 14B Setup, Model Files and Fixes

https://tramcongngheai.com/

Wan 2.2 runs in ComfyUI through two official templates. The 5B template is one model that does both text-to-video and image-to-video. The 14B template uses two models: a high-noise model for the first half of the sampling steps and a low-noise model for the second half. This guide shows the real node graph, the exact model files and their sizes, and the errors you get when a file is missing, all taken from a fresh ComfyUI install.

Quick answer: update ComfyUI, open the template video_wan2_2_5B_ti2v (or video_wan2_2_14B_t2v), download the model files listed below into models/diffusion_models, models/text_encoders and models/vae, then run it. The 5B setup needs about 18 GB of downloads. The 14B fp8 setup needs about 36 GB, or 38 GB with the 4-step LoRAs.

How we tested: we installed ComfyUI 0.38.0 (commit 65787d6, 1 Oct 2026) with workflow templates 0.11.74 in a container. Our test machine has no NVIDIA GPU, so ComfyUI ran with --cpu. That is enough to read the node definitions, open the official templates and send prompts to the API. We did not generate a video, so this post has no speed or quality numbers. For those, see the official ComfyUI Wan 2.2 guide.

5B or 14B: which Wan 2.2 workflow to use

The official ComfyUI guide states: “The Wan2.2 5B version should fit well on 8GB vram with the ComfyUI native offloading.” The 14B models are much bigger files, as the Hugging Face listing below shows. Start with 5B unless you have a large GPU.

5B TI2V14B T2V
Templatevideo_wan2_2_5B_ti2vvideo_wan2_2_14B_t2v
Diffusion model(s)1 file, 10.00 GB (fp16)2 files (high + low noise), 14.29 GB each (fp8)
VAEwan2.2_vae, 1.41 GBwan_2.1_vae, 0.25 GB
Default size1280×704, 121 frames, 24 fps640×640, 81 frames, 16 fps
Default samplingKSampler, 20 steps, CFG 5, uni_pc2× KSamplerAdvanced, 20 steps split 10/10, CFG 3.5, euler

Other Wan 2.2 templates in the same package: video_wan2_2_14B_i2v, video_wan2_2_14B_flf2v (first and last frame), video_wan2_2_14B_s2v (sound to video), video_wan2_2_14B_fun_camera, video_wan2_2_14B_fun_control, video_wan2_2_14B_fun_inpaint, video_wan2_2_5B_fun_control and video_wan2_2_5B_fun_inpaint.

Model files and where to put them

All files come from the Comfy-Org/Wan_2.2_ComfyUI_Repackaged repository. The text encoder and the 2.1 VAE come from the Wan 2.1 repackaged repo. These sizes come from the Hugging Face API:

  10.00  split_files/diffusion_models/wan2.2_ti2v_5B_fp16.safetensors
  14.29  split_files/diffusion_models/wan2.2_t2v_high_noise_14B_fp8_scaled.safetensors
  14.29  split_files/diffusion_models/wan2.2_t2v_low_noise_14B_fp8_scaled.safetensors
  28.58  split_files/diffusion_models/wan2.2_t2v_high_noise_14B_fp16.safetensors
  28.58  split_files/diffusion_models/wan2.2_t2v_low_noise_14B_fp16.safetensors
  14.29  split_files/diffusion_models/wan2.2_i2v_high_noise_14B_fp8_scaled.safetensors
  14.29  split_files/diffusion_models/wan2.2_i2v_low_noise_14B_fp8_scaled.safetensors
  11.37  split_files/text_encoders/umt5_xxl_fp16.safetensors
   6.74  split_files/text_encoders/umt5_xxl_fp8_e4m3fn_scaled.safetensors
   1.41  split_files/vae/wan2.2_vae.safetensors
   0.25  split_files/vae/wan_2.1_vae.safetensors
   1.23  split_files/loras/wan2.2_t2v_lightx2v_4steps_lora_v1.1_high_noise.safetensors
   1.23  split_files/loras/wan2.2_t2v_lightx2v_4steps_lora_v1.1_low_noise.safetensors

(Size in GB. Excerpt; the repo also has Animate, S2V, Fun and VACE models.)

The 5B template stores its download links inside the workflow file. Folder and URL for each model:

model: wan2.2_ti2v_5B_fp16.safetensors -> diffusion_models  https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_ti2v_5B_fp16.safetensors
model: umt5_xxl_fp8_e4m3fn_scaled.safetensors -> text_encoders  https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged/resolve/main/split_files/text_encoders/umt5_xxl_fp8_e4m3fn_scaled.safetensors
model: wan2.2_vae.safetensors -> vae  https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/vae/wan2.2_vae.safetensors

Download them from inside your ComfyUI folder:

cd ComfyUI
wget -P models/diffusion_models https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_ti2v_5B_fp16.safetensors
wget -P models/text_encoders https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged/resolve/main/split_files/text_encoders/umt5_xxl_fp8_e4m3fn_scaled.safetensors
wget -P models/vae https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/vae/wan2.2_vae.safetensors

Do not mix up the two VAEs. The 5B model uses wan2.2_vae.safetensors. The 14B models use wan_2.1_vae.safetensors.

Install ComfyUI and check the Wan nodes

These are the commands we ran. On a machine with an NVIDIA GPU, install the CUDA build of PyTorch from pytorch.org instead of the CPU build, and drop --cpu.

git clone --depth 1 https://github.com/comfyanonymous/ComfyUI.git
cd ComfyUI
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu   # CPU-only build, as in our test
pip install -r requirements.txt
python main.py --cpu --listen 0.0.0.0

Use /system_stats to check versions. The templates are a separate pip package, so an old comfyui-workflow-templates package means the Wan 2.2 templates may be missing:

$ curl -s localhost:8188/system_stats | python3 -m json.tool
        "comfyui_version": "0.38.0",
        "required_frontend_version": "1.53.10",
        "installed_templates_version": "0.11.74",
        "required_templates_version": "0.11.74",
        "pytorch_version": "2.14.1+cpu",

/object_info lists every node this build has. Our build had 970 nodes. Two kinds of Wan nodes are mixed in that list:

  Wan22ImageToVideoLatent - model/conditioning/wan
  WanImageToVideo - model/conditioning/wan
  WanFirstLastFrameToVideo - model/conditioning/wan
  WanCameraImageToVideo - model/conditioning/wan/camera
  WanSoundImageToVideo - model/conditioning/wan/sound
  WanVaceToVideo - model/conditioning/wan/vace
  ...
  Wan2TextToVideoApi - partner/video/Wan
  Wan2ImageToVideoApi - partner/video/Wan
  WanTextToVideoApi - partner/video/Wan

Nodes under model/conditioning/wan run on your own GPU with the files above. Nodes under partner/video/Wan are Partner Nodes: they send the job to a hosted API through your Comfy account and need no local model files. If you have no suitable GPU, use Partner Nodes or a hosted tool such as Pika or Luma.

The 5B text/image-to-video graph

This is the official 5B template, node by node (the “widgets_values” of each node):

   37 UNETLoader                 ['wan2.2_ti2v_5B_fp16.safetensors', 'default']
   38 CLIPLoader                 ['umt5_xxl_fp8_e4m3fn_scaled.safetensors', 'wan', 'default']
   39 VAELoader                  ['wan2.2_vae.safetensors']
   48 ModelSamplingSD3           [8]
    6 CLIPTextEncode             ['Low contrast. In a retro 1970s-style subway station, a street musician plays ...']
    7 CLIPTextEncode             ['色调艳丽,过曝,静态,细节模糊不清,字幕,...']
   55 Wan22ImageToVideoLatent    [1280, 704, 121, 1]
   56 LoadImage                  ['example.png', 'image']
    3 KSampler                   [898471028164125, 'randomize', 20, 5, 'uni_pc', 'simple', 1]
    8 VAEDecode                  []
   57 CreateVideo                [24]
   58 SaveVideo                  ['video/ComfyUI', 'auto', 'auto']

What matters:

  • CLIPLoader type must be wan. The same node also offers stable_diffusion, sd3, ltxv and others. The UMT5 text encoder works only with wan.
  • ModelSamplingSD3 shift = 8 for 5B. The 14B template uses 5.
  • Text vs image to video is the same graph. Wan22ImageToVideoLatent has an optional start_image input. Connect the LoadImage node for image-to-video, or leave it unconnected for text-to-video.
  • The negative prompt is in Chinese, as in the original Wan release. Keep it.

Size limits from the node definition:

Wan22ImageToVideoLatent inputs:
  [required] vae: VAE
  [required] width: INT {'default': 1280, 'min': 32, 'max': 16384, 'step': 32}
  [required] height: INT {'default': 704, 'min': 32, 'max': 16384, 'step': 32}
  [required] length: INT {'default': 49, 'min': 1, 'max': 16384, 'step': 4}
  [required] batch_size: INT {'default': 1, 'min': 1, 'max': 4096}
  [optional] start_image: IMAGE
  outputs: ['LATENT']

Width and height move in steps of 32, and length in steps of 4. The template frame counts are all 4n+1: 121 frames at 24 fps is about 5 seconds. To make a shorter clip, lower length to 97, 73, 49 and so on. To make it smaller, lower the width and height, for example 832×480 or 640×352.

The 14B workflow: two models, one denoising pass

The 14B templates hide their nodes inside a subgraph named “Text to Video(Wan2.2)”. Open it to see the high-noise/low-noise split:

subgraph: Text to Video(Wan2.2) 30 nodes
   71 CLIPLoader                                        ['umt5_xxl_fp8_e4m3fn_scaled.safetensors', 'wan', 'default']
   73 VAELoader                                         ['wan_2.1_vae.safetensors']
   74 EmptyHunyuanLatentVideo                           [640, 640, 81, 1]
   75 UNETLoader                                        ['wan2.2_t2v_high_noise_14B_fp8_scaled.safetensors', 'default']
   76 UNETLoader                                        ['wan2.2_t2v_low_noise_14B_fp8_scaled.safetensors', 'default']
   78 KSamplerAdvanced                                  ['disable', 0, 'fixed', 4, 1, 'euler', 'simple', 2, 4, 'disable']
   81 KSamplerAdvanced                                  ['enable', 923510416338945, 'randomize', 4, 1, 'euler', 'simple', 0, 2, 'enable']
   82 ModelSamplingSD3                                  [5.000000000000001]
   83 LoraLoaderModelOnly                               ['wan2.2_t2v_lightx2v_4steps_lora_v1.1_high_noise.safetensors', 1.0000000000000002]
   85 LoraLoaderModelOnly                               ['wan2.2_t2v_lightx2v_4steps_lora_v1.1_low_noise.safetensors', 1.0000000000000002]
  114 PrimitiveInt           Int (Steps)                [20, 'fixed']
  115 PrimitiveInt           Int (Split Steps)          [10, 'fixed']
  116 PrimitiveFloat         Float(CFG)                 [3.5]
  117 PrimitiveInt           Int (Steps)                [4, 'fixed']
  118 PrimitiveInt           Int (Split Steps)          [2, 'fixed']
  119 PrimitiveFloat         Float(CFG)                 [1]
  125 PrimitiveFloat         Float (FPS)                [16]
  126 PrimitiveFloat         Float (Duration)           [5]
  127 ComfyMathExpression                               ['floor(a * b) + 1']
  129 PrimitiveBoolean       Enable Lightning LoRA      [False]

How it works:

  1. Sampler 81 (high-noise model) runs from step 0 to the split step with add_noise: enable and return_with_leftover_noise: enable. It hands a half-finished latent to the next sampler.
  2. Sampler 78 (low-noise model) continues from the split step to the last step with add_noise: disable.
  3. “Enable Lightning LoRA” switch. Off (default): 20 steps, split at 10, CFG 3.5, no LoRA. On: the two lightx2v LoRAs are applied, with 4 steps, split at 2, CFG 1. The widget values shown on nodes 78/81 are overwritten by these switches.
  4. Frame count is computed: floor(duration × fps) + 1 = floor(5 × 16) + 1 = 81 frames.

The subgraph exposes these inputs on the outside, so you can change models and settings without opening it: text, width, height, duration, high_noise_model, high_noise_lightning_lora, low_noise_model, low_noise_lightning_lora, clip_name, vae_name, enable_turbo_mode.

If you build the graph yourself, keep the step count and split the same on both samplers. Each sampler covers only half of the steps, so a mismatch leaves noise in the video.

Run Wan 2.2 through the ComfyUI API

The /prompt endpoint takes the graph in API format, not the template file. Export it from the ComfyUI menu as an API workflow, or write it by hand. This is the 5B text-to-video graph in API format:

{"prompt": {
 "37": {"class_type": "UNETLoader", "inputs": {"unet_name": "wan2.2_ti2v_5B_fp16.safetensors", "weight_dtype": "default"}},
 "38": {"class_type": "CLIPLoader", "inputs": {"clip_name": "umt5_xxl_fp8_e4m3fn_scaled.safetensors", "type": "wan", "device": "default"}},
 "39": {"class_type": "VAELoader", "inputs": {"vae_name": "wan2.2_vae.safetensors"}},
 "48": {"class_type": "ModelSamplingSD3", "inputs": {"model": ["37", 0], "shift": 8}},
 "6":  {"class_type": "CLIPTextEncode", "inputs": {"clip": ["38", 0], "text": "a red fox walking through snow, slow camera pan"}},
 "7":  {"class_type": "CLIPTextEncode", "inputs": {"clip": ["38", 0], "text": "blurry, low quality"}},
 "55": {"class_type": "Wan22ImageToVideoLatent", "inputs": {"vae": ["39", 0], "width": 1280, "height": 704, "length": 121, "batch_size": 1}},
 "3":  {"class_type": "KSampler", "inputs": {"model": ["48", 0], "positive": ["6", 0], "negative": ["7", 0], "latent_image": ["55", 0],
        "seed": 1, "steps": 20, "cfg": 5, "sampler_name": "uni_pc", "scheduler": "simple", "denoise": 1}},
 "8":  {"class_type": "VAEDecode", "inputs": {"samples": ["3", 0], "vae": ["39", 0]}},
 "57": {"class_type": "CreateVideo", "inputs": {"images": ["8", 0], "fps": 24}},
 "58": {"class_type": "SaveVideo", "inputs": {"video": ["57", 0], "filename_prefix": "video/wan22_5b", "format": "auto", "codec": "auto"}}
}}
curl -s -X POST localhost:8188/prompt -H 'Content-Type: application/json' -d @5b_api.json | python3 -m json.tool

Troubleshooting: “Value not in list” on the loader nodes

This is the most common error with a new Wan 2.2 workflow. We sent the graph above to a server with no model files. The server rejected it before running anything:

{
    "error": {
        "type": "prompt_outputs_failed_validation",
        "message": "Prompt outputs failed validation",
        ...
    },
    "node_errors": {
        "39": {
            "errors": [{"type": "value_not_in_list", "message": "Value not in list",
                        "details": "vae_name: 'wan2.2_vae.safetensors' not in ['pixel_space']"}],
            "class_type": "VAELoader"
        },
        "38": {
            "errors": [{"type": "value_not_in_list", "message": "Value not in list",
                        "details": "clip_name: 'umt5_xxl_fp8_e4m3fn_scaled.safetensors' not in []"}],
            "class_type": "CLIPLoader"
        },
        "37": {
            "errors": [{"type": "value_not_in_list", "message": "Value not in list",
                        "details": "unet_name: 'wan2.2_ti2v_5B_fp16.safetensors' not in []"}],
            "class_type": "UNETLoader"
        }
    }
}

The server log shows the same thing:

[ERROR] Failed to validate prompt for output 58:
[ERROR] * VAELoader 39:
[ERROR]   - Value not in list: vae_name: 'wan2.2_vae.safetensors' not in ['pixel_space']
[ERROR] * CLIPLoader 38:
[ERROR]   - Value not in list: clip_name: 'umt5_xxl_fp8_e4m3fn_scaled.safetensors' not in []
[ERROR] * UNETLoader 37:
[ERROR]   - Value not in list: unet_name: 'wan2.2_ti2v_5B_fp16.safetensors' not in []
[ERROR] Output will be ignored
[WARNING] invalid prompt: {'type': 'prompt_outputs_failed_validation', ...}

How to read it: the list after not in shows the files ComfyUI found in that folder. [] means the folder is empty. ['pixel_space'] is a built-in option of VAELoader, not a file. Fixes:

  • Check the folder: the diffusion model goes in models/diffusion_models (not checkpoints), and the UMT5 encoder goes in models/text_encoders.
  • Check the exact file name. A browser may add (1) to a second download, and then the name no longer matches.
  • Restart ComfyUI or refresh the page after adding files, so the lists are rebuilt.
  • Check the VAE: the 5B model needs wan2.2_vae and the 14B models need wan_2.1_vae.

The model folders a current ComfyUI build creates:

/ComfyUI/models/checkpoints/
/ComfyUI/models/clip/
/ComfyUI/models/clip_vision/
/ComfyUI/models/diffusion_models/
/ComfyUI/models/loras/
/ComfyUI/models/text_encoders/
/ComfyUI/models/unet/
/ComfyUI/models/vae/
...

Running Wan 2.2 on a small GPU

Settings you can change, all visible in the templates and node definitions above:

  • Use 5B: per the ComfyUI guide, it fits on 8 GB of VRAM with ComfyUI’s built-in offloading.
  • Use fp8 files for 14B: 14.29 GB per model instead of 28.58 GB for fp16. The text encoder also has an fp8 version (6.74 GB instead of 11.37 GB).
  • Lower width, height and length: fewer pixels and frames mean less memory.
  • Turn on the Lightning LoRA in the 14B template: 4 sampling steps instead of 20.
  • weight_dtype on UNETLoader accepts default, fp8_e4m3fn, fp8_e4m3fn_fast and fp8_e5m2. Use it to load an fp16 file in fp8.

If you only want still images from a local model, a simpler local tool such as Fooocus needs far less setup.

FAQ

Can Wan 2.2 run on CPU?

ComfyUI starts with --cpu and loads the Wan nodes, as in our test. Actually generating video that way was not tested here. With 10+ GB models and over 100 frames, plan on using an NVIDIA GPU.

Why does the 14B workflow have two models?

Wan 2.2 14B splits denoising into two stages. The high-noise model does the first steps (layout and motion), and the low-noise model finishes the details. In ComfyUI this is two KSamplerAdvanced nodes that share the step count and split it.

Where do I find the template?

Update ComfyUI and its comfyui-workflow-templates package, then open the template browser and search for Wan 2.2. The file names are video_wan2_2_5B_ti2v, video_wan2_2_14B_t2v, video_wan2_2_14B_i2v and video_wan2_2_14B_flf2v.

Trạm Công Nghệ AI
Logo
Compare items
  • Total (0)
Compare
0