reframe
Set or read which part of each clip survives into the frame, adjusting crops per clip or shot so the canvas fills correctly when subjects are off-center.
Instructions
Read or set which part of each clip survives into the frame.
What makes a swapped canvas fill the frame instead of pillarboxing it. The
default is a centre crop, which is wrong whenever the subject is not
centred. Call with no clip_id to read the crops in force for every
clip; clips[].windows is each clip's whole series.
A rect is a floor rather than a frame: grown to the canvas's shape, never
shrunk into it, stored as asked and refit whenever the canvas moves; the
reply gives both asked and the crop it became. src_start makes it a
per-shot window, addressed on the source's own clock, so every
placement of the clip picks it up. pane makes that window a stacked
split for a shot one crop cannot hold; interp slides into it rather than
stepping; fill="blur" draws it whole over a blurred copy of itself
instead of cropping, for a shot every crop loses something from.
reset drops overrides (one clip, one window, or all); plan resolves
without writing. Nothing here analyses the picture — reframe_detect
proposes crops and writes through this tool. Judge a window on
reframe_sheet, never on a watch: a wrong one reads as framing in motion.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| fill | No | `blur` draws this window **blur-filled**: the whole source contained in the frame, over a blurred, darkened copy of the same moment covering the canvas. For a shot every crop loses something from and no split divides. Takes no `rect`, `pane` or `interp`; set `src_start` for one shot. | |
| pane | No | A second rect making this window a **stacked split**: `rect` on top, `pane` below, each about twice the width one 9:16 window gets. For the shot one window cannot frame. Both are grown to the full source height — nothing masks a pane, so a shorter crop scales into the other half at exit 0. | |
| path | No | The project directory to act on. Omit it — the usual case — when this server is bound to a project (started as `proofcut -C DIR mcp`, or inside a project; `ping` says which): it then resolves to that one bound project, a relative path resolves against it, and a path outside it is refused by name. Unbound, `path` is the whole address and omitting it refuses rather than guessing. | |
| plan | No | Resolve the whole call and report what it would do, writing nothing. Prefer it over doing the thing and undoing it. | |
| rect | No | `X,Y,W,H` in that clip's **own source pixels** — the region kept. An override is a floor rather than a frame: a rect that is not the canvas's shape is grown to it, so nothing named is pushed off screen, and the reply gives both `asked` and the `crop` it became. | |
| reset | No | With `clip_id`, drop that clip's overrides; with `src_start` as well, only the window there. Alone, drop every override. | |
| interp | No | Slide into this window from whatever governed before it instead of stepping to it. It needs `src_start` past 0 — there is nothing before the head of the source to slide from — and cannot be combined with `pane`. | |
| clip_id | No | The clip to read or frame. Omit it to read the crops in force for every clip, including how much of each is kept. | |
| src_start | No | Frame a **shot** rather than a clip: seconds into that clip's own source, the rect holding from there until the next window. Because the address is the source's own clock, a clip used seven times picks up the right window at each placement. Omitted, it is the window from the head of the file. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||