← Files RiversideARCHIVED FILE

skills/video-editing/references/transcript-editing.md

4.38 KB · Sep 30, 2026 · 23:19 UTC

↓ Download file

# Transcript editing

Choosing what to keep, remove, or move by what was said rather than by a
timecode.

Parameters, selection kinds, values, and defaults come from the live tool schemas
and `editing_get_editing_guide`, and the main skill file's rules — revision
threading, time axes, fail-closed payloads — govern everything here. This file
covers only the choices those sources cannot make for you.

## Two levels of read

`editing_read_aligned_transcript` offers a compact locating view and a
word-detailed view. Inspect the live schema and choose the mode intentionally.

- **Compact rows** are for locating and shortlisting. They are acoustic
  segments, not sentences, so their bounds are not final cut points.
- **Word detail** is for cut-grade selection. Ask for it once you know roughly
  where the material is, and use the live bounded-read semantics and returned
  metadata to choose the window. If the result does not cover enough context,
  widen the window rather than assuming the transcript ended.

Rows sit on one global playable timeline shared by every speaker, in
chronological order, and **may overlap** where people interrupt or talk over
each other. Flags marking a row as starting or ending mid-sentence are a
warning: extend a kept span past a flagged row rather than cutting mid-sentence.

Treat word-mode output as working data. Report the ranges you selected with
short evidence snippets; do not dump the transcript back at the user.

## Handles are opaque

Each row carries a span handle and each word a word handle. Pass them onward
exactly as received. Never parse one, never rebuild a timestamp from it, and
never construct one yourself. The millisecond bounds printed beside them are
rounded outward — start floored, end ceiled — so they are for orientation; the
handles are the exact thing.

## Resolving a selection

`editing_resolve_transcript_selection` turns handles into canonical, edit-safe
ranges packaged as a ready-to-execute payload. It never mutates the edit. It
requires an intent, and the intent decides both the payload and the tool that
consumes it:

For every preview-before-apply request, state the execution gate explicitly:
do not execute until the user approves **and** `readyToApply` is true, then pass
`payload.input` unchanged. A user approval never overrides false readiness or a
null payload.

- **remove** — a cut payload for `editing_cut_time_ranges`, sorted and merged.
- **keep** and **move** — proceed only when the resolver and current callable
  catalog expose the executor named by the returned payload. If that executor is
  absent or unavailable, say so, then follow the main skill file's rule for an
  unavailable operation and offer whichever alternative the guide names for it.
  Two things stay off the table regardless: never invert a keep selection into
  cuts, and never fabricate the missing call. Offer removal only if the user
  explicitly reframes the request as content to remove.

Prefer a boundary range (`boundary_range`) for a contiguous quote: an inclusive
start anchor and end anchor, resolved to the true first playable start and final
playable end with no manual arithmetic on your part. Handle-, text-, and
time-based anchors exist too — check the schema for the current set.

### When the text repeats

A text anchor matches normalized and case-insensitively and ignores surrounding
punctuation, so a common phrase will match in more than one place. When a quote
repeats, disambiguate deliberately: use the occurrence selector the schema
offers, or anchor on neighbouring words that are unique, or anchor on handles
taken from the word-level read. Do not guess which occurrence the user meant,
and do not silently take the first.

## The quote workflow

1. Read the transcript at word detail over a window around the phrase, and keep
   the `revision` that read returned.
2. Resolve the selection against **that same revision**, with the intent that
   matches what the user asked for. Handles are scoped to one edit and one
   revision.
3. Check `readyToApply`. If it is false, or the payload came back null, stop and
   report the warnings — a fail-closed result is an answer, not an obstacle to
   work around.
4. If the payload's named tool is currently callable, execute its input
   unchanged, threading the same revision as `expectedRevision`; otherwise stop
   and explain the unavailable operation.
5. Thread the revision that write returns into whatever comes next.

SHA-256: e86a50b584d66724dbb08117459672a7aca4566143682b15d107c2dece29186c