Documentation
A direct path to a verifiable dictation session.
Voice Transcriber v1.0 is a focused Linux GTK desk. The supported Flatpak uses a user-managed Groq key; the interface, devices, diagnostics, and privacy boundary remain inspectable without one.
Install the v1.0 Flatpak
Add Flathub for the GNOME runtime, then download the public bundle and matching checksum:
flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
curl -LO https://github.com/OthmaneBlial/audio-capture/releases/download/v1.0.0/voice-transcriber-1.0.0-x86_64.flatpak
curl -LO https://github.com/OthmaneBlial/audio-capture/releases/download/v1.0.0/voice-transcriber-1.0.0-x86_64.flatpak.sha256
sha256sum --check voice-transcriber-1.0.0-x86_64.flatpak.sha256
flatpak install --user ./voice-transcriber-1.0.0-x86_64.flatpakRun the app or inspect its privacy-safe diagnostics first:
flatpak run --command=voice-transcriber io.github.othmaneblial.audio_capture --doctor --json
flatpak run --command=voice-transcriber io.github.othmaneblial.audio_capture --list-devices
flatpak run io.github.othmaneblial.audio_captureFirst run, Settings, and device discovery work without a provider key. Start remains blocked until configuration is valid; there is no fake transcript path. See the complete update, removal, and source-mapping guide.
Support boundary
| Surface | v1.0 status |
|---|---|
| x86_64 Flatpak, GTK 3 | Primary package; automated build/install/remove proof |
| Groq cloud provider | Supported path with a user-managed key |
| PipeWire/PulseAudio, X11/Wayland | Declared and smoke-tested; real-device reports still collected |
| Python 3.9, 3.11, 3.14 | CI-proven source boundary |
| Local whisper.cpp | Experimental source-only prototype; disabled in Flatpak |
| Debian package, AppImage, macOS, Windows, mobile, browser | Not supported |
“Expected” is weaker than “supported”: an API or sandbox can pass without proving a physical microphone on that exact desktop. See the full evidence matrix and use the privacy-safe compatibility form for real hardware.
Configure
Settings resolve in a predictable order:
defaults < ~/.config/voice-transcriber/config.json < environment variablesGROQ_API_KEY overrides any saved key and is never logged. Settings are atomically written with owner-only permissions where supported. Cloud onboarding asks you to acknowledge that completed speech segments leave the device.
Use Settings to choose a microphone, language, optional English translation, focused push-to-talk, copy-on-final, text size, opacity, window behavior, export, and opt-in text-history retention. A source session can expose user-supplied whisper.cpp files with an explicit feature flag, but that prototype is not packaged support.
Use
- Choose a microphone and confirm it with the local signal meter.
- Select Start listening or press Ctrl + Enter. The desk shows listening, detected speech, pending, complete, and error states.
- Speak normally, then stop; one valid in-progress segment is flushed.
- Edit directly with undo/redo and clear confirmation. Copy with Ctrl + Shift + C, or export plain, Markdown, or timestamped text to a destination you confirm.
- Leave history off, or opt into text-only retention for 1–365 days with per-entry deletion and clear-all.
Privacy and data flow
Voice activity detection runs locally. Raw frames stay in a bounded memory queue and are not stored by the app. In Groq mode, only a completed speech segment is encoded in memory and submitted. The transcript remains in the desk until you clear, copy, export, or explicitly enable text history.
The supported package is not fully offline. Provider handling, clipboard managers, explicit exports, backups, the operating system, and user-supplied local executables are separate boundaries. Voice Transcriber has no analytics, crash upload, project server, or automatic transcript sync.
Read the plain-language privacy page, field-level data flow, and threat model.
Architecture and release proof
The desktop process separates GTK, microphone capture, local VAD, and a typed provider contract. Capture and provider work are bounded; external work stays off GTK's main loop; failures become normalized visible states.
The v1 release maps one source tag to one Flatpak and publishes a checksum, deterministic test report, CycloneDX SBOM, provenance, and SBOM attestation. This automated evidence does not replace the physical-microphone compatibility gate. Read the architecture note and release evidence.
Troubleshoot
Provider is not ready
Add a plausible user-managed Groq key in Settings, then rerun --doctor --json. Only --doctor --probe-provider contacts Groq, and it sends no audio.
Microphone cannot open or is the wrong source
Run --list-devices, choose the intended input in Settings, and check the desktop PipeWire/PulseAudio permission. Start a new session after changing devices.
Network or rate-limit failure
Check connectivity and key status, then wait before speaking again. The request queue is deliberately bounded instead of accumulating work.
Need to report it?
Read the FAQ, then use the structured bug or compatibility form. Never attach credentials, recordings, transcripts, config files, private paths, or full environment dumps.