Files
filmcraft/crates/speech/Cargo.toml
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

36 lines
1.4 KiB
TOML

[package]
name = "filmcraft-speech"
description = "FilmCraft speech-to-text: the Transcriber trait, the Whisper model catalogue and downloader, pure-Rust Whisper inference (candle) with word timestamps, and speaker labelling"
version.workspace = true
edition.workspace = true
license.workspace = true
rust-version.workspace = true
[lints]
workspace = true
[features]
default = []
# Whisper inference on the CPU via candle (pure Rust). Off by default (and in wasm builds).
whisper = ["dep:candle-core", "dep:candle-nn"]
# Model downloads over HTTPS (pure-Rust TLS: rustls + RustCrypto, OS certificate verification).
download = ["dep:ureq", "dep:rustls", "dep:rustls-rustcrypto", "dep:sha2"]
[dependencies]
filmcraft-time = { workspace = true }
filmcraft-project = { workspace = true }
serde = { workspace = true }
serde_json = { workspace = true }
thiserror = { workspace = true }
candle-core = { version = "0.9", default-features = false, optional = true }
candle-nn = { version = "0.9", default-features = false, optional = true }
rayon = { workspace = true }
ureq = { version = "3", default-features = false, features = ["rustls-no-provider", "platform-verifier"], optional = true }
rustls = { version = "0.23", default-features = false, optional = true }
rustls-rustcrypto = { version = "0.0.2-alpha", optional = true }
sha2 = { version = "0.10", optional = true }
[[example]]
name = "transcribe"
required-features = ["whisper"]