Nodes/CWK_Wan2.2_Nodes/CWK Wan2.2 Image Prep
ComfyUI Node

CWK Wan2.2 Image Prep

Crop and set up your Wan 2.2 first frame without leaving ComfyUI

By cowneko·Created 3 months ago·Updated 3 months ago· 2
CWK Wan2.2 Image Prep
  • image
  • image
  • width
  • height
  • frame_rate
  • scheduler
  • sampler_name
  • total_steps
  • split_steps
  • cfg_scale
resolution_preset
crop_x0
crop_y0
crop_width512
crop_height512
upscale_method
frame_rate8.0
total_steps50
split_steps25
cfg_scale7.5
scheduler
sampler
image_filename

The fiddliest part of a Wan 2.2 image-to-video workflow is never the generation. It's the first frame. I2V is the community's favorite Wan mode precisely because anchoring the first frame to a known image kills most of the consistency problems that plague text-to-video - but the model expects a fixed resolution and a clean crop, and doing that in an external editor, exporting, and reloading gets old fast. This node is the shortcut: upload a still straight from your browser, drag a crop frame around it, and out the other side come the image and every sampler setting a KSampler wants. No LoadImage, no separate resize node, no tab-switching.

What it actually does

The crop is a real canvas UI drawn on the node itself - no DOM overlay, no stock widgets pretending. You drag a crop frame that's locked to your chosen aspect ratio (so you can't produce a crop Wan will choke on), and the node's crop_x, crop_y, crop_width, and crop_height inputs are just the serialized state of that frame. In the backend it crops, scales proportionally, then center-crops to the exact preset resolution.

The one thing to know about the internals: image source priority is uploaded file → connected image input → black placeholder. That last fallback is a trap. If you have neither a browser-uploaded image nor an IMAGE wired in, you don't get an error - you get a perfectly generated black rectangle. The whole workflow runs, and you won't notice until the video comes out black. Check that before anything else.

The inputs that matter

Three things actually get set by hand:

  • resolution_preset - five Wan-friendly sizes: 16:9 at 832×480 or 1280×720, 9:16 at 480×832 or 720×1280, and 1:1 at 1024×1024. Pick the one your VRAM can chew; 832×480 is the sane start.
  • sampler / scheduler - passed straight through to the KSampler as strings.
  • total_steps / split_steps - the interesting one. Wan 2.2 denoises in two passes: a high-noise model handles motion and composition, a low-noise model refines detail. split_steps is where the sampling hands off between them.

The defaults (CFG 7.5, 50 total / 25 split, scheduler simple, sampler euler) are generic and conservative - they're SDXL-era habits, and Wan is flow-matching, so they don't transfer perfectly. The community standard is lighter: 20–30 steps, CFG around 3.5 or higher on the high-noise pass (or 1.0 if you're running a speed LoRA like LightX2V or CausVid), Euler-family on simple/sgm_uniform. You can also wire frame_rate, width, and height forward to your latent/empty-latent node, so everything downstream agrees about what you're making.

One tiny gotcha in the resample dropdown: area is mapped to nearest-neighbor in the code, not area-averaging, so if you're scaling up a low-res still, reach for lanczos or bicubic instead.

Install

ComfyUI Manager → search CWK Wan2.2 Nodes → Install, or manually:

cd ComfyUI/custom_nodes
git clone https://github.com/cowneko/CWK_Wan2.2_Nodes.git

Then restart ComfyUI. There are no extra Python dependencies - just torch/numpy/Pillow, which ComfyUI already ships. You do need a Wan 2.2 model (I2V-A14B or the TI2V-5B) working in your setup, but this node doesn't touch it.

Troubleshooting

  • Black output - no image source reached the node; upload in the node or wire an IMAGE in.
  • You see a plain node with a filename text field, no canvas - the JS extension didn't load. That was a real early bug (the WEB_DIRECTORY registration), fixed in 1.0.0, so update the pack and hard-refresh the browser tab.
  • frame_rate default of 8 - that's a lowball for Wan; most people run 16fps. It's just a passthrough value, so set what your video pipeline uses.

It's a small pack from a single author with no big community behind it - but for the job it does, this node is quietly the most convenient part of it.

CategoryCWK/wan22

Inputs (14)

NameTypeDefaultDescription
resolution_presetCOMBO5 options: 16:9 (832x480), 16:9 (1280x720), 9:16 (480x832), 9:16 (720x1280), 1:1 (1024x1024)
crop_xINT00–65536
crop_yINT00–65536
crop_widthINT5121–65536
crop_heightINT5121–65536
upscale_methodCOMBO5 options: nearest-exact, bilinear, area, bicubic, lanczos
frame_rateFLOAT8.01–60
total_stepsINT501–1000
split_stepsINT251–1000
cfg_scaleFLOAT7.50–30
schedulerCOMBO9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
samplerCOMBO44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
image_filenameSTRING
imageoptIMAGE

Outputs (9)

NameTypeDescription
imageIMAGE
widthINT
heightINT
frame_rateFLOAT
schedulersimple,sgm_uniform,karras,exponential,ddim_uniform,beta,normal,linear_quadratic,kl_optimal
sampler_nameeuler,euler_cfg_pp,euler_ancestral,euler_ancestral_cfg_pp,heun,heunpp2,exp_heun_2_x0,exp_heun_2_x0_sde,dpm_2,dpm_2_ancestral,lms,dpm_fast,dpm_adaptive,dpmpp_2s_ancestral,dpmpp_2s_ancestral_cfg_pp,dpmpp_sde,dpmpp_sde_gpu,dpmpp_2m,dpmpp_2m_cfg_pp,dpmpp_2m_sde,dpmpp_2m_sde_gpu,dpmpp_2m_sde_heun,dpmpp_2m_sde_heun_gpu,dpmpp_3m_sde,dpmpp_3m_sde_gpu,ddpm,lcm,ipndm,ipndm_v,deis,res_multistep,res_multistep_cfg_pp,res_multistep_ancestral,res_multistep_ancestral_cfg_pp,gradient_estimation,gradient_estimation_cfg_pp,er_sde,seeds_2,seeds_3,sa_solver,sa_solver_pece,ddim,uni_pc,uni_pc_bh2
total_stepsINT
split_stepsINT
cfg_scaleFLOAT