Engineering/2026/Active
Skyplayr
Premium universal Picture-in-Picture for Netflix and modern HTML5 video players.
Overview
Chrome's native Picture-in-Picture works fine on a plain <video> tag, but it falls apart on sites like Netflix that swap video elements dynamically, rebuild the player on every route change, and nest playback inside layers of shadow DOM. Skyplayr is a Manifest V3 extension built specifically around that failure mode: instead of a single requestPictureInPicture() call, it continuously rescans the page for candidate videos, survives single-page-app navigation, and retries PiP requests with staggered fallback timing when the first attempt doesn't stick.
It's built for people who keep a video running while they work — lecture platforms, streaming services, anything where the tab needs to shrink into a floating window without breaking every time the player re-renders.
Key Features
- Universal video discovery across visible HTML5 players, including traversal into shadow DOM trees and same-origin iframes
- Netflix-first resilience — designed to survive autoplay transitions, quality switches, subtitle changes, and route changes without losing PiP
- Layered retry timing — fallback PiP attempts fire at 0ms, 300ms, and 1000ms to catch players that aren't ready on the first try
- Recovery hooks for fullscreen changes and DOM mutations
- Three ways to trigger it — toolbar icon, keyboard shortcut (
Ctrl+Shift+P/Cmd+Shift+P), or a draggable in-page floating button - Synced options via
chrome.storage.sync(see Configuration below) - Site profiles tuned for Netflix, YouTube, Prime Video, Disney+, and Coursera, plus a generic fallback profile for everything else
Installation
git clone https://github.com/chethanyadav456/Skyplayr.git- Open
chrome://extensions - Enable Developer mode
- Click Load unpacked and select the
Skyplayrfolder - Pin Skyplayr in the toolbar
Or install the packaged build from the Chrome Web Store.
Configuration
Settings persist across a Chrome profile via chrome.storage.sync, editable from the extension's Options page:
| Setting | Default |
|---|---|
autoEnterOnTabSwitch | false |
restoreAfterAutoplay | true |
showOverlayButton | true |
How It Works
The content script injects a fixed pipeline into every frame at document_start: a shadow-DOM walker and a video scanner run first, followed by per-site profile scripts (Netflix, YouTube, Prime Video, Disney+, Coursera, and a generic fallback), then the main content script that ties it together. Because streaming SPAs frequently destroy and recreate the <video> element on route or quality changes, Skyplayr doesn't grab a reference just once — it keeps rescanning, and if a PiP request fails or the browser hasn't caught up with a re-render, it retries at 0ms, 300ms, and 1000ms rather than giving up after the first call. Fullscreen changes and DOM mutations both trigger the same recovery path.
Known Limitations
Documented directly in the project's README:
- Cross-origin iframe videos aren't script-accessible, so PiP can't reach them
- Some DRM policy environments block PiP regardless of what the extension does
- Sites that set
disablePictureInPicturecan reject the request outright - Native PiP behavior varies across Chrome versions