Power Image Crop (QQ)
Crop a reference image by dragging on the canvas (Power Image Crop QQ)
- image
- image
If you've ever hand-cropped a reference image for an I2V run by typing pixel coordinates into a Crop node and hoping the math worked out, Power Image Crop (QQ) is aimed directly at you. It puts the image on a little canvas inside the node, lets you drag and resize a crop box with your mouse, and spits out the cropped region resized to whatever working resolution your model wants. No calculators, no "wait, is this crop centered?" - you see the box, you place the box.
Why you'd reach for it
Video models are fussy about their input resolution, and Wan I2V especially: the first frame gets encoded into a fixed latent space, so feeding it a 3000x2000 photo straight in is a gamble. The standard prep is to crop a reference down to the model's working size - a portrait crop for a 480x832 generation, a landscape one for 1280x720. This node wraps that whole "crop then resize to exact dims" step in one canvas. It's part of the pack's "Power" series, which borrows the interactive-widget style from rgthree-comfy (the pack's own copy of the rgthree UI code ships in its web/ folder), so the vibe is "proper UI, not raw sliders."
How it works
The crop box is stored as four normalized values - crop_x/crop_y are the box center, crop_width/crop_height are the full extent, all in 0–1 relative to the source image. The node converts those to pixel bounds on the original, clamps to the image edges, crops, then bilinearly resizes the result to mask_width × mask_height with antialiasing. A top row of buttons does the interaction: Refresh loads the connected image into the canvas (and resets the box to the full frame), Crop toggles the overlay on and off, Keep AR locks the box's aspect ratio while you drag.
The catch is that the numeric inputs still exist in the schema but are hidden in the UI - the canvas drives them, which is exactly what you want 99% of the time, and mildly confusing the other 1% when you open a saved workflow and can't find the widgets. They're there; the node just manages them for you.
The inputs that matter
- mask_width / mask_height - the output resolution, 8 to 4096 in steps of 8. This is the resolution the crop gets resized to, so set it to your model's working size.
- keep_ar - aspect lock for the canvas drag box. Default on.
- crop_x / crop_y / crop_width / crop_height - the hidden normalized crop box. You usually won't touch these directly.
- image (optional) - the source. Wire it up or you get the quirk below.
- Output: image - the cropped, resized IMAGE, ready to feed an I2V conditioning path or VACE.
Installing it
Same pack as everything else here. Via ComfyUI Manager, search "ComfyUI-SA-Nodes-QQ", or:
cd ComfyUI/custom_nodes
git clone https://github.com/siraxe/ComfyUI-SA-Nodes-QQ
Restart ComfyUI. No pip dependencies and no model downloads for this node - requirements.txt is empty. Watch the rename: this was formerly ComfyUI-WanVideoWrapper_QQ (folder wanwrapper_qq), and you should delete any old copy before installing the new pack, or stale workflows can pull the wrong package. The category name WanVideoWrapper_QQ on the node is just leftover branding; harmless.
Common issues
- White output out of nowhere - if no image is connected, the node returns a solid white frame at
mask_width×mask_heightinstead of erroring. It's a placeholder, not a bug, but it means "connect the image." - "My crop disappeared" - you toggled Crop off in the top row, hiding the overlay. Toggle it back on.
- Unexpected dimensions - the output is always exactly
mask_width×mask_height, because it resizes after cropping. If you wanted the raw crop pixels, this node resizes, period.
It's a small thing - a crop box you can actually see - but it removes one of the fiddliest manual steps from the reference-frame pipeline, and that's worth having around.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| mask_width | INT | 5128–4096 | — |
| mask_height | INT | 5128–4096 | — |
| keep_ar | BOOLEAN | true | — |
| crop_x | FLOAT | 0.5000–1 | — |
| crop_y | FLOAT | 0.5000–1 | — |
| crop_width | FLOAT | 1.0000.01–1 | — |
| crop_height | FLOAT | 1.0000.01–1 | — |
| imageopt | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |