Max2k downloadsYour notes, done when you stop talking. Dictate with structure by voice (headings, lists, to-dos), grab the keyboard mid-sentence, transcribe recordings. Mistral Voxtral, 13 languages.
Your notes, done when you stop talking.
Your thinking moves faster than your typing, and dictation tools hand you a wall of text to clean up afterwards. Voxtral Transcribe lets you talk, type and structure in one flow, so the note is done when you stop talking: dictate straight into your notes, add headings, lists, to-dos and tables by voice, and grab the keyboard mid-sentence whenever you want. The mic waits while you type and picks back up when you stop. Already have a recording (a lecture, a meeting, a voice memo)? Right-click it in your vault and the plugin transcribes it into a note you can search, link and build on.
We built this for people who think out loud: researchers, consultants, anyone whose best ideas arrive mid-sentence. It runs on Mistral's Voxtral, a speech model built for transcription from the ground up, with an automatic correction layer on top, on desktop and on your phone. Voice commands come localized in 13 languages, and the engine itself understands even more.
Install it, dictate one note, and see whether you still want to edit afterwards. Like it? ☕ Buy Me a Coffee
Talk, type and structure — in one flow. Dictation tools give you a wall of text to clean up later. Here, structure happens while you speak: headings, lists, to-dos and tables by voice, self-corrections ("no, not X but Y") understood, and the keyboard always one grab away — the mic simply waits its turn. With voice commands localized in 13 languages — and transcription in even more.
Quality that gives you your time back. Every misheard word is a correction you make later; every structure you add afterwards is a second editing pass. We deliberately run the best transcription model available for this job — purpose-built for speech, strong on background noise, accents and jargon, streaming-first so live text feels live, and multilingual by design rather than English-first — topped with an automatic correction layer. When you stop talking, your note is done. Your time goes to thinking, not to cleaning up. On your desktop and on your phone.
A deliberate trade on privacy. Your audio is processed by Mistral, a European company, using your own API key, directly — no middleman, nothing stored by the plugin, no telemetry. That is not 100% offline, and we say so honestly. Prefer fully local? An experimental local server mode (desktop) connects realtime dictation to your own vLLM server running Voxtral's open-weight realtime model — see the local server guide — with two honest caveats: it needs a ~16 GB GPU (Windows: WSL), and today's local models can't fully match the cloud's quality, especially outside English. Details in Privacy & permissions.
voxtral-language in a note's frontmatter to dictate that note in a different languagevoxtral-style in a note's frontmatter to nudge the tone of corrections (e.g. casual for a journal, terse for meeting notes)voxtral-vocabulary in a note's frontmatter to spell out names and jargon for that note![[recording]] embed — it finds the nearest or only audio embed in the note even if your cursor isn't right on it, and works in reading view too**Speaker 1:** …)voxtral-vocabulary frontmatter, name-like words from the file name, and the note's headings and links. Switch off what does not belong, add terms that only apply to this recording, and the chosen list is remembered for the next recording on that note — see Per-note vocabulary. Automatic watch-folder transcriptions never show itYou need Obsidian v1.11.4 or newer and a Mistral API key (free to create at console.mistral.ai).
From Community Plugins (recommended): Settings → Community plugins → Browse → search "Voxtral Transcribe" → Install, Enable, then enter your API key under Settings → Voxtral Transcribe.
Manual: download main.js, manifest.json, and styles.css from the latest release into .obsidian/plugins/voxtral-transcribe/ in your vault, restart Obsidian, and enable the plugin under Settings → Community plugins.
Real-time dictation works on mobile: Obsidian's mobile webview can't set the Authorization header the desktop connection uses, so on mobile the plugin instead mints a short-lived token with your API key and passes it via the WebSocket subprotocol — Mistral's ephemeral client tokens, added specifically to unblock this (see obsidian-voxtral#13). Your API key itself only ever goes to api.mistral.ai; it's never part of the WebSocket handshake. If a token mint ever fails, the plugin falls back to batch mode for that session with a clear notice — dictation still works, it just isn't live.
Batch mode with tap-to-send remains available on mobile too, as a deliberate choice or as that fallback:
Batch mode works on desktop too: press Enter while the mic is live (and you're not typing) to send a chunk, if Enter = tap-to-send is enabled.
Turn on Speaker labels (diarization) in settings to label who said what (off by default; for long files split into parts, labels are detected per part and a note at the top explains they don't carry across the whole transcript).
Getting good results from a recording — transcription quality follows recording quality, and with a file you only find out after it's transcribed. The pre-flight check warns about obvious problems, but the basics still matter:
Voice commands are recognized at the end of a sentence and automatically adapt to the selected language: equivalent phrases exist in all 13 supported languages. Open the help panel for the exact phrases in your active language: run Show voice help panel from the command palette, or click the microphone icon in the status bar (desktop); on mobile, swipe from the right to reach it. See Command reference below for the full list, grouped by category, with English example phrases.
Add a voxtral-language key to a note's frontmatter to dictate that note in a different language than your global Language setting, without changing the setting itself:
---
voxtral-language: en
---
Supported codes: nl, en, fr, de, es, pt, it, ru, zh, hi, ar, ja, ko (the same 13 languages as the Language setting).
Add a voxtral-style key to a note's frontmatter to nudge the correction step toward a particular tone — casual for a diary entry, tight and formal for meeting notes, flowing for a blog draft:
---
voxtral-style: casual, first person, contractions okay
---
voxtral-language — once, from the output-target note, and held for that recording session or file transcription.Add a voxtral-vocabulary key to a note's frontmatter to spell out names and jargon for that note — either a YAML list or a single comma/newline-separated string:
---
voxtral-vocabulary:
- Voxtral
- Kloosterman
---
Terms for this recording (file transcription). Before a file is transcribed, a dialog shows every term that will be sent as context bias, grouped by source: your custom vocabulary, the target note's voxtral-vocabulary frontmatter, name-like words from the file name ("Interview Jurre en Wouter" offers Jurre and Wouter), and the note's headings, links and backlinks (when Vault vocabulary is on). Switch off what does not belong, type names and jargon that only apply to this recording, and tick "Remember" to add the typed terms to your custom vocabulary. With "Save the list in the note" on (the default), the chosen terms minus your custom vocabulary are written into the transcript note's voxtral-vocabulary frontmatter, or merged into the note you insert into, so the next recording for that note starts from them. Terms you type, keep from the file name, or give to speakers in the review step also go into a learned vocabulary that the dialog offers again; a term you switch off loses weight and disappears. Terms are ranked (your own first, collected last) and capped at 100 only after ranking. The dialog is on by default for transcriptions you start yourself; "Don't ask again" or the setting under File transcription turns it off, and the automatic watch folder never shows it and never sends file-name terms unseen.
voxtral-language/voxtral-style — once, from the output-target note, and held for that recording session or file transcription.voxtral-vocabulary terms first, then the global custom terms, then collected vault terms — deduped and capped like the rest of the vocabulary list.When switching apps on mobile, you can configure what happens to an active recording:
Turn on Read text aloud under Settings → Voxtral Transcribe → Listen back to add three commands that use Voxtral text-to-speech: "Read selection aloud", "Read current paragraph aloud", and "Stop playback". Pick a Voice from the dropdown: the list is fetched from your account (presets plus any cloned voices) and can be refreshed without reopening settings; voices are multilingual, so an English voice still reads other languages in its own accent. Off by default; each listen makes an API call.
Run Export logs to file from the command palette to save the last 500 buffered log entries (warnings and errors are always recorded) to a new vault note, voxtral-logs-<timestamp>.md. Sensitive content (API keys, quoted transcription text) is redacted before export. Turn on Debug logging under Settings → Advanced to also capture verbose diagnostic entries for that export; leave it off unless you're troubleshooting, since it also prints to the developer console.
If a hard crash interrupts a file transcription (mobile OOM, WebView kill), the last completed step survives in a vault note, voxtral-crash-log.md, written incrementally as each step runs, so the crashed step is visible after the fact even without debug logging on.
Under Settings → Voxtral Transcribe → Connection, Test connection sends one cheap authenticated request (GET /v1/models) against your configured API key and base URL, and reports inline whether it succeeded, the key is invalid or revoked, there's a quota/billing issue, or the endpoint is unreachable. No need to start a recording just to check your setup.
After installing a minor or major update (never a patch release), a one-time notice links to that version's release notes. Turn this off under Settings → Help & shortcuts → Update highlights.
Instead of Mistral's cloud, Local server mode (Settings → Connection, desktop only) connects realtime dictation to your own OpenAI-compatible server (e.g. vLLM) running Voxtral's open-weight realtime model at the API base URL you configure: realtime only, no API key needed. A Local server status check confirms the server actually responds. See the local server guide for setup, hardware requirements, and the honest quality trade-offs versus the cloud.
| Command | What it does |
|---|---|
| Start/stop recording | Starts or stops dictation in realtime or batch mode |
| Send audio chunk (tap-to-send) | Sends the current audio chunk for transcription without stopping the recording (batch mode) |
| Show voice help panel | Opens the voice command help panel for your active language |
| Export logs to file | Saves buffered log entries (redacted) to a new vault note; see Export logs and debug logging |
| Correct selected text | Runs the correction pass on the current selection |
| Correct dictated text | Runs the correction pass on the text dictated this session |
| Undo last voice action | Reverts the last structural voice command (heading, bullet, slot, …) |
| Undo auto-correction | Reverts the correction layer's last replacement back to the raw dictation |
| Transcribe the audio embed on the current line | Transcribes the nearest ![[recording]] embed in the note |
| Read selection aloud | Listen back (experimental): reads the current selection |
| Read current paragraph aloud | Listen back (experimental): reads the paragraph under the cursor |
| Stop playback | Listen back (experimental): stops text-to-speech playback |
Transcribe audio file is not in the command palette: right-click an audio file in the file explorer instead.
The tables below show English trigger phrases; the same commands exist, with localized phrases, in all 13 supported languages. Open the help panel (Show voice help panel, or the microphone icon in the status bar on desktop) for the exact phrases in your active language.
Structure & punctuation
| Voice command | Example phrases | Result |
|---|---|---|
| New paragraph | "new paragraph" | Double line break |
| New line | "new line", "next line" | Single line break |
| Heading 1 | "heading one", "heading 1" | # |
| Heading 2 | "heading two", "heading 2" | ## |
| Heading 3 | "heading three", "heading 3" | ### |
| Colon | "colon" | Inserts : |
Lists and tasks
| Voice command | Example phrases | Result |
|---|---|---|
| Bullet point | "new item", "next item", "bullet", "bullet point", "new bullet" | - |
| To-do item | "new todo", "new to do", "todo item", "to do item" | - [ ] |
| Numbered item | "numbered item", "new numbered item", "next number" | 1. (auto-increments) |
Formatting slots (say the open phrase, dictate or type the content, then say the close phrase to close it)
| Slot | Open phrases | Close phrases | Wraps content in |
|---|---|---|---|
| Bold | "open bold", "bold open", "start bold" | "close bold", "bold close", "end bold" | **…** |
| Italic | "open italic", "italic open", "start italic" | "close italic", "italic close", "end italic" | *…* |
| Inline code | "open code", "code open", "start code" | "close code", "code close", "end code" | `…` |
| Tag | "open tag", "tag open", "start tag" | "close tag", "tag close", "end tag" | #… |
| Code block | "open code block", "code block open", "start code block" | "close code block", "code block close", "end code block" | A fenced code block (triple backtick) |
Links
| Voice command | Example phrases | Result |
|---|---|---|
| Wikilink | "wiki link", "wikilink", "link" | Inserts [[; Obsidian's own autocomplete handles the closing ]] |
Editing and undo
| Voice command | Example phrases | Result |
|---|---|---|
| Delete last paragraph | "delete last paragraph" | Removes the last paragraph |
| Delete last line | "delete last line", "delete last sentence" | Removes the last sentence |
| Undo | "undo" | Undoes the last editor action |
| Undo last voice command | "undo last command", "undo last voice command", "cancel last command" | Reverts the last structural voice command specifically |
Recording control
| Voice command | Example phrases | Result |
|---|---|---|
| Stop recording | "stop recording" | Stops the active recording |
Templates
| Voice command | Example phrase | Result |
|---|---|---|
| Insert template | "template {name}" | Inserts the named template from your configured Templates folder, with {{date}}, {{time}}, and {{title}} variables filled in |
Built-in commands (table, callouts)
Pre-configured, always-on voice commands (Settings → Voice commands → Custom voice commands; editable only by resetting to defaults, not by editing in place, since they're re-synced with the plugin):
| Command | Example phrases | Inserts |
|---|---|---|
| Table | "table", "new table" | A 3-column Markdown table skeleton |
| Callout (note) | "callout", "note block" | > [!note] |
| Callout (warning) | "warning", "warning block" | > [!warning] |
| Callout (tip) | "tip", "tip block" | > [!tip] |
Settings are grouped into eight collapsible sections in Settings → Voxtral Transcribe. Connection is open by default when something needs attention (e.g. no API key yet); Advanced and Support this project stay collapsed until you open them.
| Setting | Default | Description |
|---|---|---|
| Local server mode (experimental) | Off (desktop only) | Connect to a local vLLM-style server instead of Mistral's cloud; realtime only |
| Local server status | N/A | Checks whether the configured server responds (shown only in local server mode) |
| Local correction endpoint (advanced) | Empty | OpenAI-compatible server for the correction step in local mode (shown only in local server mode) |
| Local correction model | ministral-3:3b |
Model name sent to the local correction server above (shown only in local server mode) |
| Mistral API key | Empty | Stored in Obsidian's secret storage on this device, not in the vault |
| Test connection | N/A | Sends one request to confirm the API key and base URL work |
| API base URL | https://api.mistral.ai |
Base URL for a Mistral-compatible API; leave at the default for Mistral's cloud |
| Setting | Default | Description |
|---|---|---|
| Microphone | System default | Which microphone to use |
| Mode | Realtime | Realtime (streaming) or Batch (after recording) |
| Enter = tap-to-send | Off | In batch mode, Enter sends the current chunk while the mic is live |
| Typing cooldown | 800 ms | How long after you stop typing before the mic unmutes again |
| On focus loss | Pause immediately | What happens to an active recording when you switch apps |
| Pause delay (seconds) | 30 | Delay before pausing, shown only when "On focus loss" is set to "Pause after delay" |
| Language | Nederlands (nl) |
Language for transcription and voice commands; override per note, see Per-note language override |
| Auto-correction | Standard | Off / Light (spelling, capitalization, punctuation only) / Standard (also fixes clearly garbled words) |
| Noise suppression | Off | Browser-level noise suppression, echo cancellation, and auto gain control |
| Dual-delay mode (experimental) | Off | Realtime only: two parallel streams (fast preview + slow accuracy); uses 2x API bandwidth |
| Streaming delay | 480 ms | Latency vs. accuracy trade-off for realtime mode; hidden when dual-delay is on |
| Setting | Default | Description |
|---|---|---|
| Transcript destination | Insert into the active note | Active note (at the cursor) or a new linked note |
| Correct file transcripts | Off | Run a transcribed file through the correction pass (adds API cost on long transcripts) |
| Warn about low-quality or oversized files | On | Pre-flight check that warns before transcribing a likely-poor recording |
| Chunk length for long recordings | 10 minutes | Part length used when splitting recordings over the single-request limit |
| Speaker labels (diarization) | Off | Label different speakers in a transcribed file |
| Review before inserting | Off | Preview the transcript and rename detected speakers before it lands in the note |
| Ask for terms before transcribing a file | On | Show the names and jargon that go along as context bias (custom list, frontmatter, file name, note links), switch terms off or add some for this recording; never shown for automatic watch-folder transcriptions |
| Watch folder | Empty (off) | Vault folder to watch for new audio recordings |
| New audio in watch folder | Offer with a notice | Offer, or transcribe automatically (each automatic transcription costs an API call) |
| Setting | Default | Description |
|---|---|---|
| Read text aloud | Off | Adds commands to read selected text or the current paragraph aloud |
| Voice | en_paul_neutral |
Which text-to-speech voice to use; the list is fetched from your account |
| Setting | Default | Description |
|---|---|---|
| Show voice command feedback | On | Briefly shows which command just ran (status-bar flash on desktop, a notice on mobile) |
| Templates folder | Empty (off) | Vault path scanned for template notes, insertable by saying "template {name}" |
| Custom voice commands | N/A | Add, edit, and delete your own trigger phrases for inserting text or opening a slot; also where built-in commands (table, callouts) can be reset to their defaults |
| Setting | Default | Description |
|---|---|---|
| Auto-open on desktop | On | Opens the voice help panel in the right sidebar when recording starts |
| Auto-open on mobile | Off | Opens the voice help panel when recording starts on mobile |
| Update highlights | On | Shows a notice after a minor or major update, linking to the release notes |
| Customize hotkeys | N/A | Opens Obsidian's Hotkeys settings, pre-filtered to Voxtral commands |
| Setting | Default | Description |
|---|---|---|
| Realtime model | voxtral-mini-transcribe-realtime-2602 |
Model for real-time streaming transcription |
| Batch model | voxtral-mini-latest |
Model for batch transcription |
| Correction model | mistral-small-latest |
Model for text correction |
| Vault vocabulary | Off | Send vault term names (headings, link texts, titles, aliases, tags) as correction and transcription context |
| Custom vocabulary | Empty | Your own terms (names, jargon, abbreviations), always sent regardless of vault vocabulary |
| Learned vocabulary | Empty | Terms confirmed in the "Terms for this recording" dialog or given to speakers in the review step; offered again for later recordings, clearable here |
| Auto-link vault terms (experimental) | Off | Wrap exact matches of vault terms in [[wikilinks]] after correction; requires Vault vocabulary |
| Correction system prompt | Empty (default prompt) | Override the correction step's system prompt |
| Debug logging | Off | Record verbose diagnostic logs for "Export logs to file" |
| Setting | Default | Description |
|---|---|---|
| Buy me a coffee | N/A | Opens the donation page in your browser |
voxtral-crash-log.md in your vault root: it records the last completed step even through a hard crash, without needing debug logging on.What the plugin accesses and why. The Obsidian review page lists some of these without context.
api.mistral.ai (Mistral, an EU company) for transcription — and, if Auto-correct is on, dictated text for correction. That is the only place your content leaves your device. A custom API base URL can point this elsewhere — e.g. http://localhost:8000 for a self-hosted/local model — so nothing leaves your machine. buymeacoffee.com is a support link only, opened in your browser when you click it in Settings; no data is sent.btoa()) to include it in the API request. This is transport encoding, not obfuscation.data.json — so it stays out of your synced vault. The key is per-device: enter it once on each device you use.Parallax — from the same workshop. A transcript is raw thinking; Parallax turns it into structured research. Speak a messy problem statement or a research question, dictate it into your note, then select the transcript and run Parallax's Explore the problem: assumptions and counter-assumptions, reformulations, theoretical lenses, and graded multi-source literature research (free via OpenAlex). The two plugins share the same principles (your keys, local where possible, no telemetry) but stay deliberately separate tools: this plugin owns capturing speech, Parallax owns the reasoning.
Quadro — qualitative data analysis
(coding and extraction, a MAXQDA/atlas.ti alternative) in plain markdown. the plugin's file
transcription is a natural intake for Quadro's Data/ folder: record the interview,
right-click the audio → Transcribe audio file (with speaker labels on), move the transcript
note into Data/, and code it.
Quadro's conventions, confirmed by its maintainer (July 2026) — the plugin's file transcripts fit them out of the box, and a light edit pass makes them ideal:
**Speaker 1:** …. Split up very long turns into several
paragraphs if you want to code them at a finer grain.read (used by Quadro's Mark
current Data File as read), so don't set that one yourself. Anything else (interview date,
participant, a link to the source audio) is free to add and aggregates nicely with Obsidian
Bases.npm ci # from the repository root (npm workspaces)
cd obsidian-plugin
npm run dev # watch mode
npm run build # production build
GPL-3.0 — Copyright (c) 2026 Max Kloosterman