jtcorrin54 downloadsTransform notes into AI-narrated audio. Select text for instant narration or create multi-voice character scripts.
Transform your markdown notes into professional narration with AI-powered voices
Narrator brings your Obsidian vault to life with real-time streaming audio narration. Whether you're reviewing notes on the go, creating audiobooks from your writing, or bringing multi-character stories to life, Narrator makes it effortless.
Click the image above to watch the demo video
Dictate into your Markdown notes on Obsidian desktop. Narrator transcribes your microphone audio into text at the cursor as words arrive, using the same Narrator API key as narration.

API Keys Needed
Choose Scribe ($9/month, 30,000 narrated words) or Author ($24/month, 100,000 narrated words) at narrator.corrin.ai. Both paid plans include the full voice collection. After Stripe checkout, copy and save the API key shown in the same browser, then paste it into Narrator's settings and click Refresh voices. The key is not sent by email.
Open Subscription and usage → Manage billing in plugin settings to check usage, update payment details, view invoices, or cancel. Enter your Narrator API key on that page. Cancellation keeps access until the end of the paid period. Monthly words do not roll over; OpenRouter charges are separate.
The Free plan provides an API key with 2,500 narrated words per UTC calendar month and 10 voices, with no payment details required. Save the key shown in your browser; it is not sent by email. The public speech demos are available without a subscription.
main.js, manifest.json, and styles.css from the latest GitHub releasenarrator inside your vault's .obsidian/plugins/ directoryThat's it! Your narration will be saved to your configured audio output folder
(default: narration-audio/).
Microphone transcription currently requires the desktop app. It uses your Narrator API key; an OpenRouter key is not required. Developers can use the same ASR WebSocket API.
While Narrator settings are open, Speech startup checks readiness automatically. It shows when the service is warming up or ready, with Retry and Pause checks controls. Preview voice waits for readiness before generating audio and displays its progress in settings. The stop control cancels a queued preview, and closing settings stops readiness polling. Generated previews use your narration allowance.
After inactivity, the speech service may need a minute or more to warm up before narration or transcription responds. Startup time varies; immediate playback is not guaranteed. If a request times out, wait briefly and try again. During transcription, text can also arrive after you stop recording while the final audio is processed.
Perfect for reviewing long documents or creating audiobook chapters.
.md file in the file explorer{filename}-{voice}-{timestamp}.wavGreat for checking specific passages or getting quick feedback on your writing.
{filename}-selection-{voice}-{timestamp}.wavTransform prose into dialogue-ready scripts with automatic character detection.
{filename}-script.mdThe generated script includes:
Bring scripts to life with different voices for each character.
-script.md)---
narrator_script: true
NARRATOR VOICE: "Compassion"
JOHN VOICE: "Drowsy"
SARAH VOICE: "Wonderstruck"
---
Scripts use a simple, readable format:
---
narrator_script: true
NARRATOR VOICE: "Compassion"
ALICE VOICE: "Drowsy"
BOB VOICE: "Wonderstruck"
---
[NARRATOR] It was a dark and stormy night.
[ALICE] Did you hear that noise?
[BOB] Relax, it's just the wind.
[NARRATOR] But Alice knew better.
Key elements:
narrator_script: true and voice assignmentsNARRATOR or ALICE before each line of dialogue
Access Narrator features via Cmd/Ctrl + P:
Access settings via Settings → Narrator
Narrator API Key
OpenRouter API Key (optional)
Voice Selection
Audio Output Folder
narration-audio/Model Selection
gpt-4o-mini (cost-effective)Popular models:
NARRATOR or ALICE)narrator_script: true# Development mode (watches for changes)
pnpm run dev
# Production build
pnpm run build
# Deploy to your vault
pnpm run deploy
# Lint code
pnpm run lint
MIT License - see LICENSE for details.
Found a bug or have a feature request?
Created by JTCorrin
Built with:
If something breaks or a voice sounds wrong, open an issue with the note type you were narrating and the steps that led to the problem.
Narrator requires Obsidian 1.4.0 or later. On Obsidian 1.13+, its settings
participate in settings search; earlier supported versions render the same controls
through a fallback tab. Keep manifest.json and the current versions.json entry
aligned when changing the minimum version.
pnpm lint runs the official Obsidian recommended rules with TypeScript type
checking and treats warnings as failures. CI and release builds already invoke
this command. Run pnpm test:ci and pnpm build before submitting updated assets.
The linter currently uses ESLint 9 to match its dependency support; Obsidian 1.13
SDK types are needed for the searchable settings API despite the linter package's
older Obsidian peer declaration.
Free accounts include ten selected voices. Paid accounts unlock the full voice collection. The Voice setting loads the permitted catalogue from Narrator API; use Refresh voices after changing your plan. If a saved voice is no longer available, the plugin selects the first permitted voice. Script frontmatter must also use voices included with your account; the API enforces this for every request.
Monthly transcription allowances are separate from narrated words: Free: 10 minutes, Scribe: 120 minutes, and Author: unlimited transcription. Accepted audio, including silence, counts toward usage; waiting for a worker to warm up does not. Free allowances reset each UTC calendar month; paid allowances reset each billing period. When the limit is reached, recording ends and the plugin displays a notice while keeping the transcript received so far.