Skip to content

loupekind straighten

Description

Detect a frame's tilt and record a level correction on its edit record. Nothing applies it automatically, and it is baked to pixels only on loupekind export. LoupeKind proposes; you dispose.

Detection is an edge-orientation histogram: a level frame's edges cluster on the horizontal and vertical axes, so the dominant deviation from those axes is the tilt to undo. It is pure Go, reproducible, and uses no model. The correction is clamped to a sane maximum (default ±8°), and the raw detected angle is kept on the record as the basis, so the proposal is explainable and the Phase-4 learner can relate your overrides to it.

Non-destructive: only the frame's .loupekind/edits/<frame>.yaml record changes, and the original is never touched. Undo it with loupekind reset.

The shoot must already be culled with loupekind cull (--all proposes across the keepers).

Usage

loupekind straighten [frame] [flags]

Name a single frame, or pass --all to propose across every keeper: exactly one of the two. The shoot is taken from --shoot, or the current working directory if omitted.

Flags

Flag Description Default
--shoot Shoot directory to scope to the current directory
--all Propose a correction for every keeper frame false
--max-angle Maximum correction in degrees (clamp) the shoot's develop config (8)
--output Output format: text or json text

Examples

# Propose a level correction for one frame
loupekind straighten --shoot ~/shoots/smith-wedding 044-ceremony.jpg

# Batch-propose across every keeper
loupekind straighten --shoot ~/shoots/smith-wedding --all

A frame with no dominant horizontal/vertical structure to level (a flat sky, say) is reported and left untouched; a frame already level within the clamp proposes nothing.

See also