Usage guide
From install to a cropped roll in five minutes — plus the tuning reference for tricky scans.
Install
- Download and unzip. You get a folder named
Cut Corners.lrplugin. - Move it somewhere permanent (e.g.
Documents/Lightroom Plugins), then in Lightroom Classic open File → Plug-in Manager → Add and select it. - The standard download includes the detection engine — nothing else to install. If you chose the lightweight build instead, install Python 3 with
pip install opencv-python numpyand check the Python executable path in the Plug-in Manager's Cut Corners section.
Crop a roll
- Select one photo or a whole roll in the Library.
- Run Library → Plug-in Extras → Cut Corners: Auto-crop film frames.
- Pick the film type:
- Color negative — orange-masked base
- B&W negative — bright clear base, dark frame
- Slide / positive — dark rebate, bright frame
- Already inverted — scans converted to positive before cropping
- Auto-detect — per-image characterization, for mixed rolls
- Pick the film format (35mm full frame, half frame, XPan, 6×4.5, 6×6, 6×7, 6×9, 4×5, or custom) — it sets the aspect ratio detection expects.
- Optionally enable Dry run to see what would happen without changing anything.
- Review the summary. Skipped frames carry a color label (red by default), so you can filter to them in the grid and crop those few by hand.
Frames that already have a crop are skipped unless you enable Re-crop photos that already have a crop, which resets the crop first so detection sees the full scan. Everything is non-destructive: a single Undo (or the Crop tool in Develop) reverts any of it.
Settings & Preview
For a tricky roll, click Settings & Preview… in the run dialog before committing. It shows the detection overlay on the first few selected photos and re-runs live as you adjust anything:
- red — candidate mask
- blue — detected film area
- green — detected frame
- magenta — the crop Lightroom will apply
Use these settings saves the values for the batch run; Cancel discards them.
Tuning reference
| Setting | Default | Meaning |
|---|---|---|
| Edge band | 0.10 | Corners must lie within this fraction of each film-area edge |
| Crop inset | 0.005 | Shrinks the crop slightly to keep the rebate edge out |
| Aspect target | 1.5 | Long/short ratio; set by the film format preset, or custom |
| Aspect tolerance | 0.08 | How far off-aspect a frame may be before it's flagged |
| Min frame area | 0.64 | Smallest accepted frame as a fraction of the film area |
| Max frame area | 0.99 | Largest accepted frame as a fraction of the whole scan |
| Manual threshold | 0 (adaptive) | Fixed brightness cutoff for rolls the adaptive threshold misreads |
| Mask dark film holder edges | off | Excludes dark scan surround (holders/carriers) from detection |
| Max preview size | 1500 px | Detection preview resolution; larger is more precise but slower |
Troubleshooting detection
Start with Settings & Preview… — it shows the exact rule that rejected a frame, updating live as you adjust.
- Frame found but crop slightly off? Raise the max preview size, or nudge the crop inset.
- Scanner bed or film holder visible? Blown white or black background is excluded automatically; for dark-gray holder edges enable Mask dark film holder edges.
- Underexposed or unevenly lit rolls? Detection falls back through a threshold sweep and a backlight-flattening pass automatically; if it still misses, try the manual threshold.
- Whole roll skipped with an aspect reason? Check the film format preset matches the roll (half frame vs full frame is the usual culprit).
For a full roll, enable Save diagnostic images in the run dialog: the temp folder (path shown in the summary) keeps, per frame, the exported preview, the detection verdict, and an overlay image using the same colors as the preview dialog.
Limitations
- Mirrored photo orientations (flipped in Lightroom) are skipped.
- Rotation is limited to Lightroom's ±45° straighten range.
- Detection assumes one full frame per scan with film border visible around it.