Nodes/Comfyui-Video-Progression/Vace Resolution Wizard
ComfyUI Node

Vace Resolution Wizard

One node to hit the exact video canvas — Vace Resolution Wizard

By pmarmotte2·Created 4 months ago·Updated 4 months ago· 3
Vace Resolution Wizard
  • image
  • Width
  • Height
  • Resized_Image
AUTOtrue
format16/9
crop_instead_of_padtrue
Draftfalse

The most useful thing about video generation is also the most annoying: every video model wants its input at a specific, boring, multiples-of-16 resolution, and your source images are never that. Vace Resolution Wizard is the pack's one-node answer - feed it any image, get back exactly the canvas your video model expects, plus the width and height as plain integers.

Yes, "Vace" is an odd name. The class itself is literally registered as Vace Resolution Wizard - spaces included - so that's exactly what you'll see in your workflow JSON and in the node search. Don't go hunting for a "Vace" pack; it ships inside ComfyUI Video Progression alongside the story nodes.

The three targets

The node normalizes to three video-friendly formats, all multiples of 16:

  • Square → 720 × 720
  • 16/9 → 960 × 544
  • Vertical → 544 × 720

And if Draft is on, both dimensions get halved - 360 × 360, 480 × 272, 272 × 360. That's the mode for test passes where you just want to prove the loop works before spending GPU time on the real canvas.

How it works

With AUTO enabled (the default), it ignores your format pick and infers the target from the input's aspect ratio - roughly square stays square, wider-than-tall goes 16/9, taller-than-wide goes Vertical. Turn AUTO off and your explicit format choice wins.

The second switch is crop_instead_of_pad, also on by default: it scales the image to fill the target and center-crops the overflow, which keeps pixels edge to edge. Turn it off and it scales to fit inside the target and pads with black bars instead. For video, the crop behavior is usually what you want - you're trying to keep the subject's head in frame, not letterbox everything.

The whole resize uses Lanczos, so it's decent quality on the way down, and the output tensor comes back clamped to the 0..1 float range ComfyUI expects.

Inputs and outputs

  • image (IMAGE) - anything; it accepts 4D, 3D, even grayscale tensors
  • AUTO (BOOLEAN) - infer format from aspect ratio
  • format - Square / 16/9 / Vertical
  • crop_instead_of_pad (BOOLEAN) - crop vs. pad
  • Draft (BOOLEAN) - halve the target dimensions
  • Width (INT) and Height (INT) - the final pixel dimensions, handy for wiring into an Empty Latent so your latents match the image you just made
  • Resized_Image (IMAGE) - the finished frame

Where it slots in: put it after a VAE Decode (or on your first-scene image input) and before anything that cares about canvas size. In this pack's loop, running every scene through it means every Infinite_Video*.mp4 segment is born on the same canvas, which is most of the battle against scene-to-scene drift.

Install

It's a shared-pack install, and it's the lightest node in the set - just torch, PIL, and numpy, all already present:

cd ComfyUI/custom_nodes
git clone https://github.com/pmarmotte2/Comfyui-Video-Progression

then restart ComfyUI. Or Manager → Install Custom Nodes → search "Comfyui-Video-Progression" → install → restart.

One thing to know: the console gets chatty - the node prints DEBUG lines for the input shape and the inferred format on every run. Harmless, but if your log is full of DEBUG: AUTO enabled -> inferred format = ..., that's this node, and it's normal.

CategoryCustom/Utils

Inputs (5)

NameTypeDefaultDescription
imageIMAGE
AUTOBOOLEANtrue
formatCOMBO16/93 options: Square, 16/9, Vertical
crop_instead_of_padBOOLEANtrue
DraftBOOLEANfalse

Outputs (3)

NameTypeDescription
WidthINT
HeightINT
Resized_ImageIMAGE