ffvoice-transcription — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited ffvoice-transcription (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
ffvoice is an offline speech toolkit: speech-to-text (Whisper), speaker diarization ("who spoke when"), and live captioning. Everything runs locally — no audio leaves the machine, no API key.
Check ffvoice is installed: pip show ffvoice.
pip install 'ffvoice[mcp]'. For speaker diarization addthe extra: pip install 'ffvoice[mcp,diarization]'.
~/.cache/ffvoice/ on first use — no manual setup. The first run of a given model is slower while it downloads.
ffvoice MCP server is connected (tools namedtranscribe_file, list_audio_devices, etc. are available), call those tools directly. Preferred path for agent use.
ffvoice command-line tool. Works forbatch/scripted use without an MCP connection.
| Tool | Use it for |
|---|---|
transcribe_file | Transcribe one audio file → text + timestamped segments. Supports language, model size, word timestamps. |
transcribe_file_with_diarization | Transcribe and label speakers — every segment gets a speaker_id. Use when the user asks "who said what". |
capture_and_transcribe | Record from a microphone for N seconds and transcribe it. |
capture_and_caption | Live streaming captions from the microphone (partial + final events). |
list_audio_devices | Enumerate audio input devices. Call this FIRST whenever a microphone task needs a device index. |
Workflow:
transcribe_file(or transcribe_file_with_diarization when the user wants speakers).
list_audio_devices first, then capture_and_transcribeor capture_and_caption with the chosen device.
ffvoice command)The CLI uses flag-style options (not subcommands). Confirm with ffvoice --help. Common forms:
# transcribe a file to a transcript / subtitle
ffvoice --transcribe speech.wav --format srt -o speech.srt
ffvoice --transcribe speech.wav --format json -o speech.json # segments + word timestamps
ffvoice --transcribe speech.wav --language zh -o out.txt # force a language
# transcribe + speaker diarization
ffvoice --transcribe meeting.wav --diarize --format json -o meeting.json
ffvoice --transcribe meeting.wav --diarize --num-speakers 2 --format srt -o meeting.srt
# live captions while recording from the microphone
ffvoice --record -o talk.wav --live-captions -t 60
# list audio input devices
ffvoice --list-devices--format accepts txt, srt, vtt, json. --diarize adds a speaker_id to each segment (visible in JSON output).
See examples.md for more invocations and reference.md for install options, the model cache, and environment variables.
working rather than going silent.
transcribe_file_with_diarization (MCP) and --diarize (CLI) need thediarization backend: pip install 'ffvoice[diarization]', or a source build with -DENABLE_DIARIZATION=ON. If it is unavailable the tool returns a clear error — relay it to the user, do not guess.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.