# Dictation & Transcription

Use the floating widget for system-wide dictation, transcribe pre-recorded audio, and separate speakers.

VoiceStudio provides local, privacy-focused speech-to-text tools. You can dictate system-wide using a floating recording widget, transcribe pre-recorded audio files, and separate multiple speakers using high-accuracy local diarization engines.

## System-Wide Dictation

System-wide dictation allows you to record audio with a global keyboard shortcut and automatically insert the transcribed text into whichever application has focus.

### Setup and Hotkeys

To configure and start using dictation:

1. **Select a Dictation Model**: Go to the **Model Catalogue** under the ASR tab, or select one from **Settings → Voice** (or **Transcription → Sherpa-ONNX dictation → Dictation model** in the top-bar engines menu). The default recommended model is `sherpa-whisper-tiny` (an int8 offline model, ~104 MB) because it supports auto-detecting over 90 languages.
2. **Configure the Shortcut**: Under **Settings → Hotkey**, set your preferred key combination and choose the recording behavior:
   * **Hold**: Recording runs while you hold down the hotkey, and stops instantly when you release it.
   * **Toggle**: Recording starts on the first press and stops on the next.
3. **Trigger Dictation**: Put your cursor in any text field, press the shortcut, speak, and stop the recording. 

### Floating Widget Controls

When dictation is active, a floating, non-focusing widget appears on your screen containing a multiline, live-scrolling preview of your transcribed text. The widget provides manual controls that let you manage active sessions:

* **Pause / Resume**: Temporarily disables the microphone track and freezes the elapsed recording timer without destroying your session.
* **Stop**: Finalizes recording and processes the final transcript.
* **Close**: Immediately cancels the active session and releases the microphone without outputting text.

### Platform Behavior and Insertion

Once transcription is complete, VoiceStudio attempts to insert the text directly into the target app. If automatic insertion fails, the text is copied to the clipboard instead.

| Platform | Insertion Method | Requirements & Fallbacks |
| :--- | :--- | :--- |
| **macOS** | Reactivates the captured application and sends Command-V. | Requires Accessibility permissions; otherwise, text stays copied. |
| **Windows** | Validates the target window/process, requests foreground activation, and sends Ctrl-V. | If Windows OS denies activation, text stays copied. |
| **Linux (X11)** | Reactivates the captured window using Extended Window Manager Hints (EWMH) and sends Ctrl-V. | Standard desktop focus behavior. |
| **Linux (Wayland)** | Copies text to the clipboard by default. | Advanced users can enable untargeted insertion with `VOICESTUDIO_WAYLAND_UNTARGETED_INSERT=1` using `wtype` (wlroots) or `dotool`/`ydotool` (GNOME/KDE). |
| **Browser Mode** | Copies text to the clipboard. | Browsers cannot trigger native desktop application insertion. |

> **Note:** To protect your clipboard contents during typing, VoiceStudio takes a temporary snapshot of your clipboard (text, HTML, images, or file lists), pastes the transcription, and then immediately restores your original clipboard once insertion completes.

### Vocabulary Prompts

To improve recognition of unique names, specialized jargon, or technical scripts, you can configure a vocabulary prompt under **Settings → Voice** (or write to the ASR configuration). This optional prompt supports up to 1,000 characters and is passed directly to the transcription engine as the `initial_prompt` on the dictation socket.

---

## Transcribing Pre-Recorded Audio

The **Transcriptions** page acts as a local workspace where you can upload pre-recorded audio files, playback media, and manage your text output.

### Upload and History Management

You can drag and drop or select an audio file to transcribe it with your selected active ASR engine. The workspace includes several features to review and export transcripts:

* **Vidstack Playback**: Use the built-in media player to listen to your audio alongside the text.
* **History Pane**: Lists your transcriptions in a newest-first feed with a 200-entry limit.
* **Search and Segments**: Search your history and inspect individual timestamps for each recognized text segment.
* **Clone Handoff**: Send any segment or full transcript directly to the cloning pipeline to use as reference text. For details on voice creation, see [Voice Cloning & Gallery](/guides/voice-cloning).
* **Exporting**: Export your transcriptions to external files. Exports retain date and language metadata and preserve segment timing bounds.

### Text Refinement and LLM Cleanup

You can enable optional post-processing settings to automatically clean up your transcriptions. These include:
* **Filler Word Removal**: Deletes conversational fillers like "um", "uh", or "like".
* **Self-Corrections**: Automatically edits out slips of the tongue and restarts.
* **Technical-Term Preservation**: Ensures industry jargon is spelled and formatted correctly.

When cleanup is active, raw text remains saved in your history and is used for reference-audio operations, while the polished LLM-refined text is stored in an expandable section with a quick copy button.

---

## Speaker Diarization

Speaker diarization splits an audio stream into distinct tracks based on who is speaking and when. This is essential for advanced workflows such as multi-speaker [Video Dubbing](/guides/video-dubbing), adding speaker-labeled subtitle styling (`SPEAKER_00:`, `SPEAKER_01:`) in exported SRT/VTT files, and editing multi-speaker timelines.

### Hugging Face Setup for Pyannote

VoiceStudio uses the high-accuracy `pyannote/speaker-diarization-3.1` model combined with WhisperX. Because Pyannote is a gated model on Hugging Face, you must complete a one-time license acceptance to install it:

1. Set up a Hugging Face account and obtain a User Access Token.
2. Enter your token in **Settings → API Keys**.
3. Visit the Hugging Face model pages in your browser and click **Agree and access repository** on both of the following pages:
   * [pyannote/speaker-diarization-3.1](https://huggingface.co/pyannote/speaker-diarization-3.1)
   * [pyannote/segmentation-3.0](https://huggingface.co/pyannote/segmentation-3.0)
4. Go to **Settings → Models → Diarisation** and click install to fetch the pipeline weights and embeddings. 

Once downloaded, the model runs completely offline and no longer requires an active Hugging Face token.

### Fallback Silence Heuristic

If Pyannote weights are missing or your system cannot load the model, VoiceStudio automatically falls back to a **silence-gap heuristic**. This heuristic detects gaps in speech to segment the audio. While less accurate than machine-learning diarization (especially for rapid conversations or speakers with similar vocal pitches), it allows audio transcription and video dubbing jobs to finish without failing.

### Native Sortformer Adapter

For a lightweight GGUF-based local alternative, you can install the **audio.cpp Sortformer v1** adapter:

* **Setup**: Go to **Settings → Models → Diarisation**, download the reviewed GGUF model and its checksummed native runtime, and select Sortformer as your active diarization engine.
* **Execution**: The adapter downsamples input to mono 16 kHz and processes audio with a 10-minute native timeout. It runs efficiently on both CPU and GPU via Vulkan acceleration.
* **Limitations**: Sortformer supports up to four speakers and does not support exact speaker count restrictions. It is optimized for audio clips under 120 seconds.
* **License**: Sortformer model usage is subject to its upstream CC-BY-NC-4.0 restrictive model license.
