mirror of
https://github.com/storytold/filmcraft.git
synced 2026-10-25 18:48:09 -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>
36 lines
1.4 KiB
TOML
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"]
|