Glyn Darkin64 downloadsSend notes to Noctua to be converted into audio episodes in your personal podcast feed.
Send any note (or selection) to Noctua and listen to it later as an episode in your personal podcast feed. Noctua turns your text into natural-sounding audio with text-to-speech (TTS), so you can listen to your notes on the go, and you can save episode transcripts back into your vault.
Send note to your podcast feed — command, ribbon icon, or right-click a note in the file explorer
Send selection to your podcast feed — convert just the highlighted text
Shows progress while Noctua prepares the audio, and confirms when the episode is in your feed
Optionally writes noctua_id and noctua_url into the note's frontmatter so the same note isn't sent twice by accident
Save episode transcripts to your vault — optionally save the transcript automatically once an episode is ready, or on demand:
noctua_id)Transcripts are saved as notes in the Transcript folder (default Noctua transcripts) with noctua_transcript_of, noctua_url, source and created properties. Saving the same episode again refreshes the existing note rather than creating a duplicate. When sent-note marking is on, the sent note gets a noctua_transcript link to its transcript.
Works on desktop and mobile (requires Obsidian 1.13.0+)
The plugin is published in the Obsidian community plugin directory: Noctua on community.obsidian.md.
To install it from inside Obsidian:
To run a build from this repository instead, see Installing a local build in Obsidian.
You can save the transcript of any episode in your Noctua account, not just notes you sent from Obsidian. This includes episodes made from web articles, emails or the Noctua web app.
Open the command palette (Ctrl/Cmd + P) and run Noctua: Save episode transcripts from your podcast feed.
A window lists your episodes, newest first. Each one shows its date, and also:
processing or expired) if it isn't completedFailed episodes aren't listed because they have no transcript.
Type in the Filter episodes by title box to narrow the list. Each word you type must appear in the title, in any order.
Tick the episodes you want. Ticks are kept when you change the filter, so you can search for one episode, tick it, clear the search and look for another. To select several at once:
The line above the list shows how many episodes are selected and how many are shown.
Click Save N transcripts. The button stays disabled until at least one episode is ticked.
The transcripts are saved one at a time, with a progress message such as Saving transcript 2 of 5: "Weekly review"…. When they're done:
Noctua transcripts). If the episode already has a transcript note, that note is updated wherever you've moved it, and any properties you added are kept.A few things to know:
This plugin sends data to the Noctua API (api.cast.noctua.uno) — this is its entire purpose and it only happens when you explicitly trigger a send:
obsidian:// link containing your vault name and the note's path (stored with the episode to identify its source; it is not included in your podcast RSS feed or on public share pages)The plugin reads and writes files in your vault only through Obsidian's API, and only for these tasks:
noctua_id, noctua_url and noctua_transcript to the frontmatter of a sent note (if sent-note marking is on), and creating or updating transcript notes in your Transcript folder.noctua_transcript_of property to find transcripts you've already saved. That's how saving the same episode twice updates your existing note (even if you've moved it out of the transcript folder), and how the picker marks episodes as transcript saved. It reads the frontmatter from Obsidian's metadata cache, not the note contents.None of this vault information is sent to Noctua or anywhere else. The only data sent is what's listed above.
A Noctua account is required, and each conversion consumes one Noctua credit (new accounts include free credits; more can be purchased). See Noctua's privacy policy and terms.
Your API key is stored in Obsidian's secret storage, so it is never written to the plugin's data.json inside your vault and is not picked up by vault syncs or backups. Secret storage needs Obsidian 1.11.4+, and the plugin's settings use the declarative settings API added in 1.13.0, so 1.13.0 is the minimum supported version. A key saved by an earlier plugin version is migrated into secret storage and removed from data.json on first run.
npm install
npm run dev # esbuild watch mode
npm test # vitest unit tests
npm run build # type-check + production bundle (main.js)
Obsidian loads community plugins from <vault>/.obsidian/plugins/<plugin id>/. For this plugin the folder must be named noctua, to match the id in manifest.json. The folder needs three files: main.js, manifest.json and styles.css.
It's best to test in a separate vault rather than your everyday one. If the published version is already installed in that vault, the local build replaces it, because both use the same folder.
1. Build the plugin
npm install
npm run build # writes main.js to the repository root
2. Put the plugin in your vault using one of these options.
Option A: link the repository (best while developing). Obsidian then loads the files straight from your checkout, so every rebuild is picked up:
mkdir -p "<vault>/.obsidian/plugins"
ln -s "$(pwd)" "<vault>/.obsidian/plugins/noctua"
Obsidian writes the plugin's settings to data.json in this folder. That file is in .gitignore, so it won't be committed.
Option B: copy the files.
mkdir -p "<vault>/.obsidian/plugins/noctua"
cp main.js manifest.json styles.css "<vault>/.obsidian/plugins/noctua/"
Copy the files again after each build.
.obsidian is a hidden folder. On macOS, press Cmd + Shift + . in Finder to show hidden files.
3. Enable the plugin in Obsidian
4. Load your changes
npm run dev to rebuild main.js automatically whenever you save a source file.npm version <patch|minor|major> bumps package.json, manifest.json and versions.json together. Push the tag (no v prefix, so it matches manifest.json) and the release workflow builds and drafts a GitHub release with main.js, manifest.json and styles.css attached:
npm version patch
git push && git push --tags
MIT