[](https://github.com/Galeas/recording-transcript-player/actions/workflows/release.yml)
# Recording Transcript Player
Recording Transcript Player is an Obsidian plugin for opening audio files with a synchronized sibling SRT transcript.
## Usage
Place an `.srt`, `.vtt`, or DOTe `.json` file beside an audio file with the exact same basename:
```text
Recordings/2026.05.09.m4a
Recordings/2026.05.09.srt
```
Open the audio file in Obsidian. The plugin shows the native audio player above the transcript, highlights the active subtitle during playback, and lets you click timestamps to seek.
Supported subtitle formats:
- SRT blocks with optional `Speaker: text`
- WebVTT cues with optional `` voice spans
- DOTe JSON exports with a `lines` array containing `startTime`, `endTime`, `speakerDesignation`, and `text`
Supported audio extensions by default:
```text
m4a, mp3, wav, aac, flac, ogg, opus
```
## Matching Rules
The plugin only checks sibling subtitle files with the same basename as the audio file. By default, it checks `.srt`, `.vtt`, then `.json`; the extension priority can be changed in settings.
If no matching subtitle file is found, the audio player still opens, and the transcript area shows as audio-only.
## Search
While the plugin view is focused, press `Cmd+F` (`Ctrl+F` on Windows/Linux) to open the in-transcript search bar. The query is matched as a case-insensitive substring against both speaker labels and cue text. All matches are highlighted inline, and a counter (`current/total`) is shown.
- `Enter` jumps to the next match, `Shift+Enter` jumps to the previous one
- The current match is highlighted in the accent colour and auto-scrolled into view
- `Esc` (or the close button) clears the query and hides the bar
Search does not seek audio. Clicking a cue's timestamp still seeks playback as before.
## Settings
- Subtitle extension priority
- Supported audio extensions
- Auto-scroll transcript
- Resume playback
- Open matched recordings in the plugin view
- Fall back to the default media view when no subtitle (sub-option)
- Save position interval
Playback progress is saved per vault-relative audio path. Saved positions in the final 10 seconds of a recording are not restored.
The automatic plugin-view option is disabled by default. When enabled, opening a supported audio file normally in Obsidian will switch that active tab to the transcript player only if a matching sibling subtitle file exists.
The sub-option "Fall back to default media view when no subtitle" (also disabled by default, and only effective when the parent option is enabled) controls what happens when a supported audio file is loaded into the plugin view but has no matching subtitle. When enabled, the file is moved to Obsidian's default media view instead.
## Privacy
This plugin does not make network requests, send telemetry, or use Node/Electron-only runtime APIs. Audio and subtitle files are read through Obsidian vault APIs.
## Mobile Support
The plugin is intended to work on Obsidian desktop and mobile. It uses browser audio APIs and Obsidian-safe vault APIs only.
## Dependency Policy
Runtime dependencies are intentionally zero. Development dependencies are limited to TypeScript, esbuild, Obsidian types, and test/build tooling.
## Development
```bash
npm install
npm test
npm run build
```
The build emits `main.js` at the repository root. Obsidian loads `main.js`, `manifest.json`, and `styles.css`.
## Release
Tagged releases should attach:
- `main.js`
- `manifest.json`
- `styles.css`
Before submitting to the Obsidian community plugin registry, test the release assets in a clean vault and confirm the version tag matches `manifest.json`.