Skip to main content
This page describes the crates in crates/ that handle audio capture, transcription and meeting detection. It helps you know which code drives which documented behavior. The end-to-end flow is described in Architecture. In the Cargo.toml files, these crates are referenced by the workspace alias syntheo-<name> (for example syntheo-audio-actual), except owhisper-client, owhisper-interface and openai-transcription, which keep their name.

Main chain

  1. apps/desktop/src-tauri creates the audio provider: syntheo-audio-actual (ActualAudio), or syntheo-audio-mock in a development build.
  2. plugins/transcription goes through syntheo-transcription-core, which re-exports syntheo-listener-core (live listening) and syntheo-listener2-core (batch import).
  3. Both listeners talk to the STT server through owhisper-client, which relies on openai-transcription and syntheo-ws-client.
  4. syntheo-transcript assembles the received words into segments and speakers.
  5. plugins/dictation reuses syntheo-audio and owhisper-client for dictation.

Audio capture

crates/audio-actual

  • Role: the only audio provider in published builds. apps/desktop/src-tauri/src/lib.rs (create_audio_provider) instantiates it, unless MOCK_AUDIO is set in a dev or devtools build.
  • API: ActualAudio, AudioInput, AudioOutput, AudioSource, AudioStream; re-exports AudioProvider, CaptureConfig, CaptureFrame, CaptureStream from crates/audio.
  • System audio capture: src/speaker/ contains one implementation per platform. On Linux, it relies on PulseAudio (libpulse-binding) and PipeWire; on Windows, on wasapi; on macOS, on cidre. The output chosen in the settings is used, otherwise the default output.
  • Capture: src/capture/ combines microphone and system audio (joiner.rs), applies echo cancellation (echo_gate.rs) and handles recovery after errors (recovery.rs).
  • Internal dependencies: aec, audio, audio-device, audio-interface, audio-sync, audio-utils, resampler.
  • Affected doc pages: /en/meetings, /en/troubleshooting (audio on Linux and Windows), /en/data-and-privacy (audio never kept).

Voice activity detection

Affected doc pages: /en/meetings for vad-masking; none for vad and onnx taken on their own.

Listening sessions

crates/listener-core

  • Role: live listening engine. Actors (src/actors/) manage the session (session/), the audio source (source/, with mutes and device tracking), the STT connection (listener/), the audio sweep (audio_sweep.rs) and reading a file at real-time pace (file_stream/).
  • API: State, Snapshot, TranscriptionMode, StartSessionError, DegradedError, the events (events.rs) and live transcription (live_transcript).
  • Guarantee: the supervisor_writes_no_audio_to_session_dir test checks that no audio file appears in the session folder.
  • Internal dependencies: audio, audio-device, audio-utils, device-monitor, language, storage, supervisor, transcript, vad-masking, owhisper-client, owhisper-interface.
  • Affected doc pages: /en/meetings, /en/automatic-capture, /en/data-and-privacy, /en/offline, /en/troubleshooting.

crates/listener2-core

  • Role: batch transcription of an imported file. src/batch/ offers a simple mode and a progressive mode; upload.rs splits the audio into in-memory MP3 segments before sending.
  • API: BatchRuntime, BatchParams, BatchEvent, BatchRunMode; is_supported_languages_live / _batch, suggest_providers_for_languages_live / _batch, list_documented_language_codes_batch; subtitle reading and export (parse_subtitle_from_path, export_words_to_vtt_file).
  • Internal dependencies: audio-utils, language, mp3, user-error, owhisper-client, owhisper-interface.
  • Affected doc pages: /en/import-recordings, /en/languages.

crates/transcription-core

  • Role: single facade for plugins/transcription. The listener and listener2 modules re-export listener-core and listener2-core. The realtime_file module imports a file through the real-time stream: in-memory decoding, passing through file_stream, then rendering in batch format, without writing anything to disk.
  • Internal dependencies: listener-core, listener2-core, owhisper-interface.
  • Affected doc pages: /en/meetings, /en/import-recordings.

crates/supervisor

  • Role: actor supervision: restart budget (RestartBudget, RestartTracker), retry with strategy (RetryStrategy, spawn_with_retry), dynamic supervisor (dynamic).
  • Used by: listener-core (audio source restart).
  • Affected doc pages: /en/meetings (recovery without restarting the capture).

STT clients

Affected doc pages: /en/ai-setup, /en/meetings, /en/dictation, /en/import-recordings, /en/offline, /en/troubleshooting, /en/conformite/rgpd.

Transcription and languages

crates/transcript

  • Role: turns the words received from STT into a transcript: processing (TranscriptProcessor), post-processing, segments (build_segments), speaker labels (SpeakerLabeler, render_speaker_label), speaker context, post-batch refinement (batch_refine), live materialization and rendering.
  • Internal dependencies: template-app, owhisper-interface.
  • Used by: listener-core, plugins/transcription, agent-access (CLI and MCP server).
  • Affected doc pages: /en/meetings, /en/notes, /en/contacts, /en/reference/cli, /en/reference/mcp.

crates/language

  • Role: ISO 639-1 language codes (ISO639, Language), lists of supported languages (whisper_multilingual, parakeet_tdt_v3_languages), detection (detect, through whatlang) and dominant language of a text (dominant_language).
  • Internal dependencies: whisper (whisper feature, enabled by default).
  • Used by: detect, listener-core, listener2-core, owhisper-client, owhisper-interface, plugins/tantivy, plugins/template (dominant_language command), plugins/transcription.
  • Affected doc pages: /en/languages.

crates/whisper

No Whisper model: the crate only contains the Language enum of the Whisper tokenizer’s languages (whisper_index). Only crates/language uses it. Affected doc pages: none.

Meeting detection

crates/detect

  • Role: watches the computer to trigger automatic capture. Modules behind features: mic (microphone used by another app; PulseAudio on Linux), list (installed apps), app, zoom, sleep (sleep mode), screen (screen capture through xcap), language. meeting_ax reads macOS accessibility.
  • API: Detector, DetectEvent, DetectCallback, new_callback, BackgroundTask.
  • Internal dependencies: language; bundle on macOS.
  • Used by: plugins/detect (features mic, list, language, sleep, screen).
  • Affected doc pages: /en/automatic-capture.

macOS-specific crates

No macOS build is published (see Architecture). These crates call Swift code through swift-rs and only have an effect on macOS. Affected doc pages: none, as long as macOS is not distributed.

Auxiliary crates

Pointers for the documentation