README file from
GithubTranscription Audio(Beta) Plugin for Obsidian
Turn your audio into structured Markdown notes inside Obsidian. This plugin detects an audio file linked in your current note, transcribes it with Gemini's dedicated speech-to-text model, optionally summarizes the transcript, and links the transcript and embeds the summary back into your note. A right-hand progress panel shows what’s happening step by step.
Features
- Smart audio detection from links or embeds in the active note, or transcribe an open audio file directly
- Transcription with Google's dedicated speech-to-text model (
gemini-3.5-transcribe), with optional speaker labels, timestamps, custom vocabulary and language hints - Optional summarization of the transcript with a Gemini model of your choice, with category-specific prompts, saved to its own summary file and embedded in the note
- "Summarize transcript" command to summarize an existing transcript, from the transcript file or a note that links it
- Long-audio transcription with speech-aware chunking and per-chunk retry
- Reusable transcript file creation and transcript file links
- Progress panel (sidebar) with live status:
- Links to the audio, target note, transcript and summary files
- Speech chart with each chunk's upload and transcription status, and Retry for failed chunks
- Timestamped log of every step, folded inside the progress area
- Gemini usage logs (prompt/output/total tokens, plus cached tokens when the API reports them; the transcription model reports its output as 0)
- Classification and summarization status, with the prompt that was sent; edit it and summarize again from the panel
- Cancel button to stop upload/API request in progress
- Success/error result
- Records kept across plugin reloads and updates, each stamped with when the run started and removable individually
- "Open progress panel" command reopens the panel with those records, without starting a transcription
- Writes the transcript link and summary embed at the cursor where you started the command
Requirements
- A Google AI API key for Gemini. You can obtain one at https://aistudio.google.com/api-keys
Getting started
- Open Obsidian Settings
- Navigate to "Community plugins" and click "Browse"
- Search for "Transcription Audio" and click Install
- Enable the plugin in Community plugins
- Set up your API key in plugin settings
Configuration
Open Settings → Transcription Audio. Settings are grouped into four sections.
General:
- API Key: Configure the Gemini API key to use. The deprecated plain-text API key input has been removed.
- On older Obsidian versions, API key storage is disabled and you will see an update-required message (Obsidian 1.11.4+)
Transcription — always done by Google's dedicated speech-to-text model, gemini-3.5-transcribe. It does not follow prompts; only these options shape the transcript:
- Mode (default: Verbatim): Verbatim keeps fillers, repetitions and false starts. Smart removes them and tidies punctuation and lists, but cannot be combined with speaker labels or timestamps, so those two options are hidden while Smart is selected.
- Speaker labels (default: off): A labelled paragraph per speaker, up to 8 speakers (3 or more is experimental). Labels restart in every 20-minute chunk of a recording over 30 minutes. Turning this on disables custom vocabulary.
- Timestamps (default: off): Each paragraph starts with its time in the recording. May lower overall accuracy. Turning this on disables custom vocabulary.
- Custom vocabulary: Terms to recognize, one per line (up to 1,000; best around 100). Hidden while speaker labels or timestamps are on, since the API rejects the combination.
- Language hints: Comma-separated BCP-47 codes such as
ko-KR, en-US. Leave empty to detect the language automatically. - Speaker labels and timestamps limit a request to 30 minutes, and Free Tier keys are limited to 10,000 input tokens per minute (about 7 minutes of audio).
Summary:
- Summarize after transcription (default: on): Summarize automatically once a transcript is created. When off, only the transcript is saved and linked; the "Summarize transcript" command still works, so the summary settings below always stay visible.
- Model: The model that writes the summary (
gemini-3.8-flash(default),gemini-3.7-flash,gemini-3.6-flash,gemini-3.5-flash,gemini-3.5-flash-lite,gemini-3.1-pro-preview,gemini-3-flash-preview) gemini-3-pro-previewis deprecated by Google and shuts down on March 9, 2026. Existing settings are automatically migrated togemini-3.1-pro-preview.- Summary prompt: which instruction writes the summary.
- Category classification: When enabled, each transcript is classified first and the matching category prompt is used. The
Generalcategory is not included; unmatched transcripts use the default prompt. - Default prompt: Used for every summary when classification is off, and when no category matches.
- Category prompts: Shown while classification is on.
- Category classification: When enabled, each transcript is classified first and the matching category prompt is used. The
Run history:
- Keep run history: Keeps the progress panel's records across plugin reloads and updates. Turning it off stops new records being saved; records already on disk are left alone and come back when you turn it on again.
- Auto-remove old records: Drops the oldest records once the panel passes the limit.
- Records to keep: How many runs stay in the panel (1-200, default 20). A run in progress is always kept.
Usage
- In a note, linked file before your cursor, for example:
- Wiki link:
![[example_audio.wav]]
- Wiki link:
- Place the cursor after the link.
- Run the command: "Transcribe audio".
- A progress panel will automatically open in the right sidebar, showing each chunk's upload and transcription, then classification and summarization. Click a run's status row to fold its progress area and log.
- When complete, a link to the transcript file is inserted at your starting cursor position. When
Summarize after transcriptionis on, the summary is written to its own file next to the transcript (_summary_<audio name>_<time>.md) and embedded under the link, e.g.![[_summary_Recording_2026-10-12T00-23-21#Summary]].
To summarize an existing transcript, run "Summarize transcript" in either of two places. Its progress and log appear in the panel like any other run.
- In a note that links the transcript: place the cursor after the link. The last transcript link before the cursor is used (or the first one in the note), and the summary embed goes under that link's line.
- In the transcript file (
_transcription_…md) itself: only a new summary file is created; no note is changed.
In the panel, the summary section shows the prompt that was sent. Edit it and press "Summarize again" to rewrite that run's summary file; notes that embed it update with it.
If classification or summarization fails, its row in the summary section gets a Retry button. While the run is still waiting, Retry continues it. After the run has ended (the wait timed out, it was cancelled, or a reload interrupted it), Retry finishes what was left: the summary file and, for a run started from a note, the transcript link and summary embed at the original cursor.
You can also open the audio file itself (mp3, mp4, mpeg, mpga, m4a, wav, webm) and run "Transcribe audio" from the command palette. With no note to write into, this only creates the transcript file next to the audio; the summary step is skipped even when Summarize after transcription is on.
To bring the panel back later, run the command "Open progress panel". It reveals the panel in the right sidebar and restores the saved run history.
Privacy & Data
Audio content is sent to Google’s Gemini API for transcription, and the transcript is sent again when it is summarized. The plugin does not store your audio or transcripts outside your vault. Keep your API key secure and review your organization’s data policies before use.
Run history is written to progress-sessions.json inside the plugin's own folder, alongside its settings. It holds the progress log — file paths, model names, API error messages and the summary prompt that was sent — but never your API key or transcript text. Switch off "Keep run history" if you would rather nothing were written. Opening the same vault in two windows at once can leave whichever window writes last as the one that wins.
Changelog
Version 0.10.0
- Progress panel redesign
- Each run gets a progress area under its status row: the speech chart (a placeholder while the audio is prepared), and every chunk's upload, transcription, done or failed state with Retry and Transcribe buttons
- The log moves inside that area with a date and time on every line. Click the status row to fold the area
- The info rows are now Audio, Target, Transcript and Summary
- Summary files
- The summary is written to its own
_summary_<audio name>_<time>.mdnext to the transcript, and the note gets![[…#Summary]]under the transcript link instead of the pasted text - The panel shows classification and summarization with the prompt that was sent. Edit it and summarize again to rewrite the summary file; Retry a failed step, even after the run has ended
- The summary is written to its own
- New ways to run
Transcribe audioworks from an open audio file and saves only the transcript- New
Summarize transcriptcommand: from a transcript file it saves only a summary file; from a note linking a transcript it also embeds the summary under the link
- Settings
Summarize transcriptis nowSummarize after transcriptionand only decides whether a summary runs automatically. The summary settings always stay visible- Category classification, the default prompt and the category prompts are grouped under
Summary prompt - Options the API rejects together are hidden: Smart mode hides speaker labels and timestamps, and either of those hides custom vocabulary
- Lower summary cost
- Classification and summarization now share the transcript as a common prefix, so the summary request can reuse Gemini's implicit cache. Usage logs show cached tokens
- Heads-up
- Notes now embed the summary file rather than containing the summary text. Earlier notes are not changed
Version 0.9.0 — release notes
- Dedicated transcription model: transcription always runs on
gemini-3.5-transcribe - Transcription options: mode, speaker labels, timestamps, custom vocabulary and language hints
- Settings layout: grouped into General, Transcription, Summary and Run history
Version 0.8.1 — release notes
- Settings layout: run history settings got their own heading and no longer disappear when
Summarize transcriptis off
Version 0.8.0 — release notes
- Mobile support
- Simplified transcription settings
- Run history
- Model updates: added
gemini-3.8-flash, the new default - Fixes
Version 0.7.1 — release notes
- Failed chunks no longer discard the run
- Model updates: added
gemini-3.7-flash(then the default),gemini-3.6-flash, andgemini-3.5-flash-lite - Fixes: skipped ranges no longer inflate the chunk numbering or show their note in reading view
Version 0.7.0 — release notes
- Speech-aware chunking: plans chunks around where people actually talk, so silent stretches are never sent to the model
- Per-chunk retry: each chunk's log line gains a Retry button that rewrites only that chunk's region
- Progress log: added a speech-activity sparkline, chunk boundaries, skipped ranges, and a per-chunk timeline
Version 0.6.0 — release notes
- Transcription workflows
- Long-audio support
- Category prompts
- Model and settings updates
- Fixes
Version 0.5.0 — release notes
- Transcription mode enhancements
- Gemini 3 Pro Preview migration
Version 0.4.1 — release notes
- Gemini 3 Pro Preview migration
Version 0.4.0 — release notes
- Secure API key support
- Cancelable transcription flow
- Progress panel navigation improvements
- Progress log improvements
- Gemini usage visibility
Version 0.3.0 — release notes
- Add gemini-3-flash-preview(default) model to settings
- Enhanced Progress Tracking: Improved transcription process with detailed progress tracking and UI updates
- Updated Default Settings: Updated default settings with new model and refined prompt structure
License
This project is licensed under the MIT License.