Hi all,
I’ve built a custom integration that shows what the YouTube app on your TV is playing, and lets you control it from Home Assistant.
Why
TV integrations usually only report that “YouTube” is the active app, not what’s on screen. This one connects to the TV the same way the YouTube phone app does when you cast (YouTube’s Lounge protocol, via pyytlounge). The TV pushes updates instantly: no polling, no Google account, no API key.
What you get
- Media player with title, channel, thumbnail, duration, position and play/pause state
- Play, pause, seek, next/previous, and
media_player.play_mediawith any video id or YouTube URL, which opens YouTube on the TV if it’s closed - Turn the player on/off to open and close YouTube on the TV
- Ad playing sensor and a Skip ad button that becomes available as soon as the ad can be skipped
- Autoplay and Subtitles switches, a Playback speed select, plus Video quality, Subtitles and Up next sensors
- Auto-discovery of TVs (DIAL/SSDP) with no pairing code; a TV code works as a fallback
Auto-skipping ads is one small automation:
automation:
- alias: Skip YouTube ads
triggers:
- trigger: state
entity_id: button.youtube_on_samsung_neo_qled_skip_ad
from: unavailable
actions:
- action: button.press
target:
entity_id: button.youtube_on_samsung_neo_qled_skip_ad
Testers wanted
It’s developed and tested on a Samsung Tizen TV (Neo QLED QN900F). LG webOS, Android/Google TV, Chromecast with Google TV, Fire TV and Roku use the same protocol and should work, but none are confirmed yet. If you have one, a quick report here or in Issues would help a lot: did discovery find the TV, and do the states look right?
Install
HACS → ⋮ → Custom repositories → add the repo as type Integration, download, restart. Requires Home Assistant 2026.3 or newer.
Thanks to FabioGNR for pyytlounge, and to iSponsorBlockTV, whose DIAL discovery work made code-free pairing possible.
Not affiliated with Google or YouTube. It relies on an undocumented protocol that YouTube may change at any time.
Feedback and ideas welcome!