Repository navigation
feat: add YouTube playback as an optional provider plugin #136
Description
Activity
- addedenhancementNew feature or requestNew feature or request
on Sep 23, 2026 - added 9 commits that reference this issue
on Sep 24, 2026 - added 5 commits that reference this issue
on Sep 24, 2026 Scope update from Rowan (24 Sep):
- Discord: yes for YouTube, but not for Shorts. Shorts and ads are ignored everywhere (no card, no Discord). Spotify stays card-only.
- Distribution: load unpacked for now. A Chrome Web Store listing comes later (Rowan will set up the account).
- Repo: the extension lives in its own repo, https://github.com/rowkavdev/nowplaying-youtube. The app side (bridge, pairing token, settings API) stays here.
Done so far:
- feat(providers): YouTube bridge and provider for the browser extension (#136) #395 bridge, feat(server): opt-in open write paths for self-authenticating handlers (#136) #405 open write path, feat(youtube): browser extension skeleton for YouTube and YouTube Music (#136) #407 skeleton (moved in Extension skeleton, moved from nowplaying nowplaying-youtube#1)
- Wire the YouTube extension bridge into the app (#136) #420 bridge wired into the app: pairing token in the credential store, POST /bridge/youtube, card source with most-recent-start wins
- Settings API for the YouTube pairing token (#136) #425 settings API: POST /api/settings/youtube/pairing and /pairing/reset
- Open: Move the YouTube extension to rowkavdev/nowplaying-youtube (#136) #426 removes extension/youtube from this repo; Show YouTube on Discord, never Shorts (#136) #427 YouTube on Discord (Watching for videos, Listening for YouTube Music)
Still to do: the pairing-code section on the settings page (web UI lane), then finishing the extension in nowplaying-youtube (pairing entry on the options page, sending to the app, end-to-end check on a dev build).
- added 7 commits that reference this issue
on Sep 24, 2026 Done. YouTube and YouTube Music now show on the card, the hosted card and Discord (Watching for videos, Listening for YouTube Music). Shorts and ads are ignored. When YouTube, Spotify and a media server overlap, whichever started most recently shows.
The extension is in its own repo, https://github.com/rowkavdev/nowplaying-youtube. Install it with load unpacked for now; the Chrome Web Store comes later.
PR map:
- feat(providers): YouTube bridge and provider for the browser extension (#136) #395 bridge (token, extension origin, 30 s TTL, most recent tab wins)
- feat(server): opt-in open write paths for self-authenticating handlers (#136) #405 http-server open write path for the bridge
- feat(youtube): browser extension skeleton for YouTube and YouTube Music (#136) #407 extension skeleton (moved in Extension skeleton, moved from nowplaying nowplaying-youtube#1)
- Wire the YouTube extension bridge into the app (#136) #420 wired into the app: pairing token in the credential store, POST /bridge/youtube, card source
- Settings API for the YouTube pairing token (#136) #425 settings API for the pairing code (read and reset)
- Move the YouTube extension to rowkavdev/nowplaying-youtube (#136) #426 extension removed from this repo
- Show YouTube on Discord, never Shorts (#136) #427 YouTube on Discord, never Shorts
- feat(settings): YouTube pairing code on the settings page (#136) #428 pairing code on the settings page (web UI lane)
- docs(wiki): Connect YouTube page for the pairing flow and extension (#136) #431 wiki: Connect YouTube (docs lane)
- Check the pairing code with the app before saving nowplaying-youtube#3: options page checks the code with the app before saving
End-to-end check (24 Sep, main f849c93 plus nowplaying-youtube 6a0c4ad), in headless Chrome 151 with the extension loaded unpacked:
- The pairing code came from the settings API.
- A wrong code was refused on the options page; the real code gave "Paired." and was stored.
- A real YouTube video playing showed on /card.svg as "Rick Astley - Never Gonna Give You Up …" within 8 s.
- Closing the tab took it off the card.
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsDone
Goal
Add YouTube as an optional provider plugin while keeping the media core provider-neutral and being explicit about what YouTube's APIs can and cannot detect.
Integration reality
The YouTube Data API can fetch metadata for a known video ID, but it does not expose a reliable "what this user is watching right now" endpoint. OAuth/watch-history polling is not a dependable real-time playback source.
Chosen architecture (confirmed by project owner):
Documented alternatives (not the implementation target):
Scope
Done when
feat, producing the next minor release under the project versioning rule.Official references