Persistent Player

approvedunreviewed

by Quang Nguyen

Keep audio playing when its embed scrolls out of view, and pick up where you left off when you return.

↓ 28 downloadsUpdated 9d agoMIT

Persistent Player

Persistent Player keeps an audio embed playing when you scroll it out of view. Play an audio file in a note, then keep reading, editing, or scrolling: the sound continues from a compact player pinned to the top of the view, and the position is remembered per note.

No network requests, no telemetry. Everything runs locally inside the vault.

Usage

Play any embedded audio file as you normally would. Instead of the inline embed, Persistent Player takes over playback with a now-playing bar at the top of the view:

  • Play or pause the active note's audio.
  • Skip back or forward 5 seconds for quick re-listening.
  • Drag the progress track to seek anywhere in the file.
  • Click the speed label to cycle through 0.5x, 0.75x, 1x, 1.25x, 1.5x, and 2x.
  • Close to stop playback and release the note's audio.

Scrolling the embed out of view does not interrupt playback. The player remembers each note's position, so returning to a note picks up where you left off.

Video embeds are left untouched and play natively.

Commands

The following commands are available from the command palette. Bind your own hotkeys in Settings -> Hotkeys:

  • Play or pause
  • Skip back 5 seconds
  • Skip forward 5 seconds
  • Skip back 15 seconds
  • Skip forward 15 seconds

Build

npm install
npm run build

The build runs TypeScript and Obsidian's official ESLint rules before producing main.js.

Copy manifest.json, main.js, and styles.css into <vault>/.obsidian/plugins/persistent-player/, then enable Persistent Player in Obsidian.

Development

The source uses the official Obsidian API and keeps obsidian external during the esbuild bundle. Run npm install, then npm run dev to rebuild on change. npm run check runs the linter, the type checker, and a production build.

License

MIT

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.