mirror of
https://github.com/storytold/filmcraft.git
synced 2026-10-25 10:37:34 -06:00
- 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>
28 lines
1.7 KiB
JSON
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}
|
|
]
|
|
}
|