Crop Image+
A crop node you drag instead of one you type coordinates into
- image
- mask
- image
- mask
Crop Image+ is the crop node you actually want when you're framing a reference image for an image-to-video pass or cropping a face region for a detailer: an interactive box you drag directly in the node, with an aspect-ratio lock so your crop is guaranteed to come out 16:9 (or 1:1, or whatever) instead of 16:9-and-a-bit because your mouse wobbled.
It's part of ComfyUI-FBnodes, François Beaudry's utility pack, and it solves the oldest annoyance in ComfyUI image editing - core's CropImage makes you type percentages into four boxes and think about what "top 25%" means. This one shows you the actual image and lets you drag.
How it works
Feed an image (and optionally a mask) in, and the node renders a preview with a draggable crop box and corner handles. Under the hood the box position is stored as four percentages - left_pct, right_pct, top_pct, bottom_pct, each 0–100 - so the crop is resolution-independent and stays where you put it if you swap a different-size image in later. The box is live: move it, and the four pct values update.
The aspect-ratio lock is where it gets genuinely useful. Pick 16:9 (Widescreen) from aspect_ratio and the node refits your dragged rectangle to exactly that ratio, growing it in whichever direction it needs. portrait (BOOLEAN) flips the selected ratio - 16:9 becomes 9:16 - which matters because half of AI video work these days is vertical. Choosing Source locks to the input image's own ratio; None (the default) leaves you freeform.
Two details the README calls out: a new input image resets the crop to the full frame and the ratio back to None, so you don't accidentally carry a crop from a previous image into a new one; and it crops image and mask together, both outputs emitted, which is what you want when you're cropping a mask region for inpainting.
Inputs that matter
image(IMAGE, optional) - what you're cropping.mask(MASK, optional) - cropped to the same box, emitted alongside.aspect_ratio- None / Source / 1:1 / 3:2 / 4:3 / 16:9 / 21:9.portrait- flip the ratio to vertical.
Outputs: image and mask, both cropped to the same region.
Installing it
ComfyUI Manager - search "ComfyUI-FBnodes" - or:
cd ComfyUI/custom_nodes
git clone https://github.com/FranckyB/ComfyUI-FBnodes.git
pip install -r ComfyUI-FBnodes/requirements.txt
Restart ComfyUI. Pure frontend + basic tensor slicing, so the pack's only real dependencies (av, color-matcher) are there for the video nodes - no model downloads for this one.
Where it's fiddly
The four pct values are percentages of the source, not pixel coordinates, so if you're coming from a pixel-based crop node, expect to eyeball it. That's fine - the whole point is that you drag the box instead of computing. The one thing to remember: because the node resets on a new image, if you're feeding it a changing batch you'll want to set your ratio and re-drag each time. It's an interactive node for an interactive job, not a batch tool.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| left_pct | FLOAT | 0.00–100 | — |
| right_pct | FLOAT | 100.00–100 | — |
| top_pct | FLOAT | 0.00–100 | — |
| bottom_pct | FLOAT | 100.00–100 | — |
| aspect_ratio | COMBO | None | 7 options: None, Source, 1:1 (Square), 3:2 (Photo), 4:3 (Standard), 16:9 (Widescreen), +1 |
| portrait | BOOLEAN | false | — |
| imageopt | IMAGE | — | |
| maskopt | MASK | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| mask | MASK | — |