wiseguru216 downloadsRecord or paste speech and have it transcribed and structured by AI.
An Obsidian plugin that captures speech (live recording or pasted transcript), runs it through a transcription provider, cleans and structures it with an LLM, and inserts the result into your vault.
You bring your own provider keys. Nothing is sent to a ReWrite server; the plugin only talks to the endpoints you configure. It can also run entirely on-device: pair the plugin-managed whisper.cpp transcription with a local OpenAI-compatible LLM (Ollama or llama.cpp) and no audio or text ever leaves your machine.
Community plugins (recommended): in Obsidian, Settings, Community plugins (Restricted mode off), Browse, search "ReWrite (Voice Notes)", Install, Enable.
Manual install: download main.js, manifest.json, and styles.css from the latest release, drop them into <YourVault>/.obsidian/plugins/rewrite-voice-notes/, then enable the plugin in Community plugins.
Open Settings, ReWrite (Voice Notes). Configure the profile active on this device: pick a transcription provider (audio to text) and an LLM provider (cleanup), enter the API keys, and choose a model for each. The first key you save sets up encryption at rest. Text-only? An LLM alone is enough.
In Settings, Templates, click Populate. This seeds ReWrite/Templates/ with 10 starter templates, plus SharedCore.md, AssistantPrompt.md, and KnownNouns.md. It is non-destructive. The template format is documented in Creating templates.
Click the mic ribbon icon (or run the Open command), pick the Daily note template, then Record your voice or Paste a transcript. The plugin transcribes, cleans the text, and writes a new dated note (Calendar / Goals / Tasks pulled out, then a Braindump). Recorded audio is saved to your attachments folder and linked back with an ![[...]] embed.
The full step-by-step, including faster capture and reprocessing existing audio, is in the Quick start wiki page.
"Tested" means a maintainer has run the full record/transcribe/cleanup/insert flow against that service. "Untested" means the adapter is implemented to the provider's documented API shape but not yet verified against a live account (unverified, not broken). For setup of each, see Providers.
| Transcription | Status | LLM (cleanup) | Status | |
|---|---|---|---|---|
| Local whisper.cpp (plugin-managed) | ✅ Tested | Anthropic Claude | ✅ Tested | |
| Mistral Voxtral | ✅ Tested | Mistral | ✅ Tested | |
| AssemblyAI | ✅ Tested | OpenAI-compatible (Ollama, LM Studio) | ✅ Tested (local Ollama) | |
| OpenAI Whisper | Untested | OpenAI GPT | Untested | |
| OpenAI-compatible (whisper.cpp) | Untested | Google Gemini | Untested | |
| Groq | Untested | DeepSeek / Kimi / Qwen / GLM | Untested | |
| Deepgram | Untested | |||
| Rev.ai | Untested |
Full documentation lives in the wiki:
secrets.json.nosync from each sync tool.These pages are maintained in the wiki/ folder of this repo and mirrored to the GitHub Wiki automatically.
requestUrl, which bypasses browser CORS.ReWrite lists the files in your vault for two features: finding audio files you can reprocess, and falling back to your most recently edited note when you run an insert with no editor open. It uses these listings for file paths only; it never reads a note's contents except the specific note or selection you act on, and it only writes the notes (and saved-audio attachments) produced by a run you trigger.
MediaRecorder patterns this plugin borrows.0BSD. See LICENSE.