Nodes/comfy-ovum/LiveCrop
ComfyUI Node

LiveCrop

LiveCrop — crop, expand, and rotate with interactive guides right in the node

By sfinktah·Created about a year ago·Updated 10 months ago· 7
LiveCrop
  • image_ex
  • image
  • mask
  • IMAGE_EX
  • image
  • mask
  • BBOX
  • BBOX%
crop_top0.000
crop_bottom0.000
crop_left0.000
crop_right0.000
rotate_degrees0

LiveCrop is the rare ComfyUI node that feels like a tiny image editor. Connect an image and it shows you a preview with red guides drawn where the crop will land; drag the guides or nudge the sliders and the crop updates live. No guessing pixel values blind, no round-tripping through an external editor - you see the cut before you run anything.

It's part of the comfy-ovum grab bag, and honestly it's one of the more pleasant surprises in there. For any workflow that needs to reframe an image before it goes into a sampler or a video model - headroom cuts, letterbox removal, rotating a batch of frames 90 degrees - this is the node you'll keep coming back to.

How it works

The crop amounts are fractions, not pixels, and they're negative-only. From the schema, each side is a FLOAT slider from -1 to 0:

  • crop_top - negative value removes |value| × height from the top.
  • crop_bottom - same, from the bottom.
  • crop_left / crop_right - same, from the left / right edges.

So crop_left = -0.25 chops 25% off the left side of the image. Set all four to 0 and nothing is cropped. There's also rotate_degrees, an INT that rotates in 90-degree increments (-180 to 180, step 90) - the kind of rotation that costs nothing and fixes a sideways phone capture instantly.

Three optional inputs:

  • image (IMAGE) - the thing you're cropping.
  • mask (MASK) - cropped with the same operation, so your mask and image stay in sync.
  • image_ex (DICT) - an IMAGE_EX context object (the pack's image-plus-metadata bundle); pass one in and you get one back, with the crop applied.

And five outputs:

  • IMAGE_EX - the dict form, if you're carrying metadata along.
  • image - the cropped/rotated image.
  • mask - the cropped mask.
  • BBOX - crop bounds as a list [x, y, w, h] in pixels.
  • BBOX% - the same bounds as fractions of the original dimensions.

The BBOX% output is the quiet star: normalized bounds are exactly what many ControlNet and detailer workflows want for "focus here" regions, without you doing the division by hand.

What to watch for

  • No image connected → the node returns None. It's optional-input friendly; wire an image and the preview appears (downscaled for responsiveness).
  • Masks pad with white. When a mask is cropped, padding uses white (255), per the README.
  • Batch-friendly. Multiple images are supported, and the README hints at the workflow: adjust the crop for the second image, and by the next run that's the first image - crop as you go.
  • The preview is visual; the sliders are the source of truth, so if you drag guides, the numbers update too.

Install

Ships in comfy-ovum:

cd ComfyUI/custom_nodes
git clone https://github.com/sfinktah/comfy-ovum

or ComfyUI Manager → comfy-ovum, then restart. No models, no keys - this is pure frontend + PIL work.

Gotchas

crop_* values can't be positive - the range caps at 0, so you can't pad outward with these sliders (the README's older "expand" phrasing is optimistic; today it's crop and rotate). If you need to grow the canvas, that's a different node. And remember rotations are only 90° multiples - fine for orientation fixes, not for arbitrary angles.

Categoryovum

Inputs (8)

NameTypeDefaultDescription
crop_topFLOAT0.000-1–0Negative values crop from top.
crop_bottomFLOAT0.000-1–0Negative values crop from bottom.
crop_leftFLOAT0.000-1–0Negative values crop from left.
crop_rightFLOAT0.000-1–0Negative values crop from right.
rotate_degreesINT0-180–180Rotate by multiples of 90 degrees.
image_exoptDICT
imageoptIMAGE
maskoptMASK

Outputs (5)

NameTypeDescription
IMAGE_EXDICT
imageIMAGE
maskMASK
BBOXLIST
BBOX%LIST