Files
filmcraft/crates/edit/tests/fixtures/interview.transcript.json
Brandon ThomasandClaude Opus 5.5 fc18a6962e M10.5: Text-based editing / transcripts
- crates/speech (L2): Transcriber trait, FixedTranscriber, Whisper model catalogue (pinned,
  SHA-256 verified) with optional downloader (feature `download`: ureq + rustls + RustCrypto),
  pure-Rust Whisper inference on candle with word timestamps (feature `whisper`), log-mel, VAD
  word tightening, MFCC speaker clustering. Both features off by default and for wasm.
- project: per-media-item transcripts (Project::transcripts); schema v9 with a no-op v8->v9
  migration and a v8 fixture.
- edit::transcript: sequence transcript derived from clip transcripts, search, paragraphs,
  word ranges, pause/filler detection, ripple delete of many ranges, caption layout.
- engine: transcript.* commands (generate, set, delete, inspect, search, select, extract, lift,
  renameSpeaker, removeFillers, removePauses, createCaptions, models, downloadModel);
  Session::transcriber for hosts/tests; features `whisper` / `speech-download` (also on the
  desktop and CLI apps). Without whisper, transcript.generate fails with a clear error.
- ui: Text panel Transcript tab (Transcribe button, speaker paragraphs of clickable words,
  Shift+click selection -> In/Out, extract/lift/remove fillers/create captions, search) with
  text.transcript.* automation ids; headless UI test.
- docs/transcripts.md, crates/speech/README.md, architecture and project-files updates.
  whisper-tiny measures 12.2% WER over 797 words on local samples.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 23:25:49 -04:00

28 lines
1.7 KiB
JSON

{
"language": "en",
"source": "manual",
"speakers": [{"name": "Speaker 1"}, {"name": "Speaker 2"}],
"words": [
{"text": "Welcome", "start": 127008000000, "end": 228614400000, "speaker": 0},
{"text": "to", "start": 228614400000, "end": 266716800000, "speaker": 0},
{"text": "the", "start": 266716800000, "end": 304819200000, "speaker": 0},
{"text": "show.", "start": 304819200000, "end": 431827200000, "speaker": 0},
{"text": "Um,", "start": 939859200000, "end": 1016064000000, "speaker": 0},
{"text": "today", "start": 1041465600000, "end": 1143072000000, "speaker": 0},
{"text": "we", "start": 1143072000000, "end": 1181174400000, "speaker": 0},
{"text": "talk", "start": 1181174400000, "end": 1257379200000, "speaker": 0},
{"text": "about", "start": 1257379200000, "end": 1346284800000, "speaker": 0},
{"text": "rivers.", "start": 1346284800000, "end": 1498694400000, "speaker": 0},
{"text": "Thanks", "start": 1625702400000, "end": 1727308800000, "speaker": 1},
{"text": "for", "start": 1727308800000, "end": 1765411200000, "speaker": 1},
{"text": "having", "start": 1765411200000, "end": 1854316800000, "speaker": 1},
{"text": "me.", "start": 1854316800000, "end": 1930521600000, "speaker": 1},
{"text": "I", "start": 2032128000000, "end": 2057529600000, "speaker": 1},
{"text": "uh", "start": 2082931200000, "end": 2159136000000, "speaker": 1},
{"text": "love", "start": 2184537600000, "end": 2260742400000, "speaker": 1},
{"text": "rivers,", "start": 2260742400000, "end": 2387750400000, "speaker": 1},
{"text": "you", "start": 2413152000000, "end": 2451254400000, "speaker": 1},
{"text": "know.", "start": 2451254400000, "end": 2540160000000, "speaker": 1}
]
}