cut_by_time
Remove unwanted footage by specifying playback time spans from a watched export; converts those timestamps to source intervals and applies the cuts.
Instructions
Cut spans of RENDER/TIMELINE time — what a human reports watching an export.
Each span is [start, end) in the seconds the current export plays at (what timeline_status/verify describe), not source time and not word indices. proofcut converts each span to the source interval(s) it plays — the inverse of the mapping captions and playback use — and cuts those through the same Edit.remove path cut_by_transcript uses. The render timestamp is never stored: the conversion happens once, here, at call time.
All spans resolve against the CURRENT timeline before any is applied, so a list of notes from one watch stays valid together even though a real cut would shift every later timestamp. Overlapping spans are refused rather than silently double-applied.
Every piece echoes the source interval it produced (more than one when the
span crosses an earlier cut or a clip boundary) and the words it overlaps
there, plus three neighbours either side — the human check that the
timestamp actually hit the intended flub. pad widens only the OUTER
edges of each requested span. plan=True resolves and reports without
writing, identically to cut_by_transcript.
Refused the same way cut_by_transcript is if a span overlaps a word with a
suspect duration; confirm_suspect=True or plan=True behave the same.
A second call is not the same call. These are render timestamps, and this cut moves everything after it, so the same numbers name different material next time — take them off a fresh watch rather than reusing a list across two calls. That is also why one call takes every span at once.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| pad | No | Widen only the outer edges of each requested span, in seconds. | |
| 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. | |
| spans | Yes | Half-open `[start, end)` spans in the seconds **an export plays at** — what a person reports off a watch, not source time and not word indices. Every span resolves against the current timeline before any is applied, so a list of notes from one watch stays valid together; overlapping spans are refused rather than double-applied. | |
| confirm_suspect | No | Go ahead even though a boundary word claims a suspect duration. Read the echoed words first — a suspect duration usually means whisper hid a retake inside that word, so the edge is not where it reads. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||