Load Image & Crop (obvpm)
Crop on the node, no second editor and no re-upload
- image
- mask
The stock Load Image gives you a file picker and nothing else. So there's a whole little ritual: load the image, feed it into an Image Crop node, type pixel coordinates into four widgets, guess wrong, reload, look up the actual dimensions, type four more numbers. For a workflow where you're pulling a face out of a reference sheet, you do that every single time.
Load Image & Crop (obvpm) folds the two steps into one node with a crop rectangle drawn directly on the preview. Drag to draw the area, drag inside it to move it, drag a corner to resize, click outside to clear it. No crop drawn means the full image. The crop is stored in normalized coordinates, so it survives reloads and a workflow moved to another machine.
The fields
image- the file to load. Upload, drag & drop, paste, or pick from your input folder.crop- managed by the editor on the node; you never edit this by hand.max_megapixels- if the crop (or full image) is larger than this, downscale it to fit, aspect preserved.0disables it, which is the default.aspect-free, or a fixed ratio: 21:9, 2:1, 16:9, 3:2, 4:3, 5:4, 1:1, 4:5, 3:4, 2:3, 9:16 and friends.- Outputs:
image, andmaskfrom the image's alpha channel, cropped and scaled exactly the same way - same behaviour as the stock Load Image.
The label above the selection shows its size in source pixels, and a row under the preview shows the full image size. If max_megapixels is doing work, the preview also shows the resulting size as Downscaled To:, so you can see the actual number going downstream rather than guessing.
The aspect lock is the interesting bit
Set aspect to a ratio and the crop rectangle keeps that shape as you draw, move and resize it. Switch ratios and an existing crop snaps in place - same center, same area - rather than jumping. With no crop drawn, a dashed rectangle shows the largest centered cut of that ratio, and that's what gets output.
One design decision worth flagging because it's the opposite of what most nodes do: if the stored crop disagrees with the ratio - you hand-edited the workflow JSON, or something changed aspect by wire at runtime - the node refuses at run time rather than silently reshaping your crop. Slightly annoying for thirty seconds, considerably better than a workflow that quietly crops a different region than the one you framed.
Masking still works
Right-click → Open in MaskEditor runs ComfyUI's own mask editor on the loaded file, exactly like the stock node. Saving writes a painted copy under the input folder's clipspace directory and points the node at it. The crop stays where it was, because the painted copy has the source's dimensions - and both image and mask come out cropped together. That's how you do a detail pass or an inpaint prep off a hand-painted region without a second Load Image.
Where it fits
This is the front door of most reference-image workflows. Crop the face out of the portrait, crop the outfit out of the sheet, crop the pose out of the screenshot - and if you're feeding several of them at once, the pack's Load Images & Compose node takes over from here, layering multiple cropped images into one sheet. For a single reference, this plus max_megapixels set to something sane is the whole setup, and it's a real improvement on doing the crop in a separate node with typed coordinates.
Install
ComfyUI Manager → search comfyui-obvpm, or:
cd ComfyUI/custom_nodes
git clone https://github.com/chanon/comfyui-obvpm
Restart ComfyUI. It lives under obvpm/image; searching the node menu for obvpm shows the whole pack. No Python dependencies and no model downloads. The editor works in both the classic canvas renderer and Nodes 2.0, which hasn't been true of every pack in 2026. All class ids carry the (obvpm) suffix since 0.2.0 - the fix for an id collision with another pack - and old workflows migrate on open.
Two notes
Changing the crop re-executes the node on the next run, so a re-crop does cost you a re-run of everything downstream. And the pack's pre-0.2.0 workflows are migrated automatically, but if you've copied a workflow JSON by hand between machines and something looks off, re-drop the node - that's the author's own advice for migration edge cases.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| image | COMBO | The image file to load. Upload, drag & drop, or pick an existing input file. | |
| crop | STRING | Managed by the crop editor on the node — no need to edit by hand. | |
| max_megapixels | FLOAT | 0.000–128 | If the selected image area is larger than this many megapixels, then it is downscaled to it for output. Set to 0 to disable downscaling. |
| aspect | COMBO | free | Pin the crop rectangle to a fixed aspect ratio: drawing and resizing keep the shape, and with no crop drawn the output is the largest centered cut of that ratio. 'free' is the unconstrained editor. A stored crop that disagrees with the ratio refuses at run time rather than being silently reshaped. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | The loaded image, cropped to the selection (if any) and scaled down to max_megapixels (if set). |
| mask | MASK | Mask from the image's alpha channel, cropped and scaled the same way. |