vo_extend
Insert a silent gap into a voice-over track at a chosen word or phrase, opening room for existing footage to play beneath it while keeping the edit intact.
Instructions
Open a gap in clip_id's track for material the recording never had.
The one tool allowed to grow the edit rather than cut it: a real hold in
the VO, e.g. to let a line the footage carries play under it. Not the
end card (tail), and not restore, which only brings back cut source.
Addressed by word_index or phrase — the last word before the
gap, which must be on the timeline — for seconds. The stretch is a real
silent WAV, registered like any clip; a second call at the same seconds
reuses it.
Read covered_by. build_shots runs each shot to the next cue, so
whatever picture was playing freezes across the hold by default, with
shots_error, verify and check_frames all staying clean. It names
every shot the gap now overlaps ([] with no cue table at all).
Two consequences are permanent once a hold lands: restore refuses across
the seam, and export always goes through the MLT writer. plan=True
reports covered_by without writing; its hold_clip_id is a placeholder.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| 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. | |
| after | No | A forward cursor over a phrase's matches: any match at or before this word index is skipped. -1, the default, means from the start. | |
| phrase | No | Address it by wording instead. A phrase binds to its **last** word here, which is this tool's own meaning: the last word before the gap. | |
| clip_id | Yes | The track the gap opens in — the VO. | |
| seconds | No | How long the hold runs. An editorial call this makes no attempt to derive. | |
| occurrence | No | Disambiguate a phrase by count when it matches more than once, **1-based** in transcript order among the matches after `after`: 1 is the first, 2 the second. Unset, an ambiguous phrase is refused — listing every candidate's range and text — rather than guessed at. | |
| word_index | No | The last word **before** the gap; the hold opens immediately after that word's own end. It has to be on the timeline: an index naming cut material is refused rather than guessed at. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||