Stream multiple videos simultaneously across browser tabs without auto-pausing or "streaming on another device" lockouts.
Many online learning platforms, course portals (e.g. PhysicsWallah, Coursera, Udemy, Panopto), and streaming websites intentionally restrict playback to only one tab at a time. When you open a second lecture or switch tabs, they:
- Automatically pause the video.
- Show intrusive lockout popups: "Playback Interrupted. Your account is already streaming on another device."
- Freeze or mute background tabs.
PolyStream eliminates these restrictions using a client-side API interception engine available as both a Firefox / Chrome Extension (Manifest V3) and a 1-click Userscript.
- 👁️ Visibility & Focus Lock: Spoofs
document.hidden = falseanddocument.visibilityState = 'visible'. Suppressesvisibilitychangeand window blur listeners so background tabs remain active. - 📡 BroadcastChannel Tab Isolator: Scopes
BroadcastChannelinstances per tab (__mte_${TAB_ID}__...), preventing tabs from transmitting pause/stop commands to each other. - 💾 Per-Tab Storage Virtualization: Isolates player heartbeat keys in
localStorageso concurrent tabs never detect each other claiming active playback. - 🔒 Web Locks API Shim: Bypasses
navigator.locksexclusivity, granting playback locks concurrently to all tabs. - 🛑 WebSocket Concurrency Shield: Intercepts server-sent WebSocket interrupt signals and silently drops concurrency kick notices before the frontend UI can react.
- 🎯 Modal Annihilator (MutationObserver): Instantly detects and deletes "Playback Interrupted / streaming on another device" dialogs within 0 milliseconds, cleans up backdrops, and restores unhindered mouse clicks.
- 🛡️ Anti-Pause Shield: Blocks programmatic background
video.pause()calls while preserving genuine user clicks and spacebar controls.
Works with Violentmonkey, Tampermonkey, Greasemonkey, and mobile browsers like Kiwi / Orion.
- Install Violentmonkey or Tampermonkey in your browser.
- Open the userscript dashboard and click "Create a new script".
- Copy the raw contents of
multi-tab-enabler.user.js. - Paste it into the editor and press
Ctrl + Sto save. - Open your streaming portal (e.g. PhysicsWallah) in multiple tabs—they will now stream side-by-side without interruptions!
- Clone or download this repository:
git clone https://github.com/pdev-labs/polystream.git
- Open
chrome://extensions(oredge://extensions). - Turn on Developer mode (top-right toggle).
- Click Load unpacked and select the
polystreamdirectory. - Pin PolyStream to your browser toolbar to access the dark-mode popup dashboard and live telemetry counters!
- Open Firefox and navigate to
about:debugging#/runtime/this-firefox. - Click "Load Temporary Add-on...".
- Select
manifest.jsonfrom this folder. - The extension with full popup UI is now active in Firefox!
For a zero-extension solution:
- Install Mozilla's Firefox Multi-Account Containers.
- Open your first video in your default container.
- Open your second video in a different container (e.g. "Work" or "Personal").
- Firefox isolates cookies,
localStorage, andBroadcastChannelat the browser engine level, completely hiding each tab from the other!
PolyStream includes a built-in test laboratory simulating the 4 most common stream restrictions:
- Open
test/test-page.htmlin your browser. - Duplicate the tab into a second window.
- Test procedural canvas video playback, visibility changes, and cross-tab pause broadcasting.
Run the automated interception test suite:
# Validate JavaScript syntax
npm run lint
# Run interception unit tests
npm testExpected output:
--- Loading inject.js ---
Test 1: Visibility Spoofing
✓ Test 1 passed: Document appears always visible and focused
Test 2: BroadcastChannel Tab Isolation
✓ Test 2 passed: BroadcastChannel name is safely scoped
Test 3: Anti-Pause Shield
✓ Test 3 passed: Background script pause attempt was prevented!
Test 4: Web Locks Concurrent Shim
✓ Test 4 passed: Web Lock request was successfully scoped and acquired
Test 5: Storage Virtualization (PW active-tab bypass)
✓ Test 5 passed: Player key virtualization functional
Test 6: WebSocket Concurrency Interruption Dropping
✓ Test 6 passed: WebSocket interruption event was intercepted and dropped!
======================================
ALL INTERCEPTION TESTS PASSED CLEANLY!
======================================┌─────────────────────────────────────────────────────────────┐
│ WEBPAGE TAB │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Target Video Player │ │
│ │ <video> / MediaSession │ │
│ └──────────────────────────┬──────────────────────────┘ │
│ │ │
│ ┌──────────────────────────▼──────────────────────────┐ │
│ │ PolyStream Injected Engine │ │
│ │ │ │
│ │ • document.hidden = false │ │
│ │ • document.visibilityState = 'visible' │ │
│ │ • BroadcastChannel Scoped Namespace │ │
│ │ • localStorage Player Key Virtualization │ │
│ │ • WebSocket Concurrency Message Dropper │ │
│ │ • MutationObserver Modal Annihilator │ │
│ │ • HTMLMediaElement.prototype.pause Shield │ │
│ └──────────────────────────┬──────────────────────────┘ │
│ │ postMessage │
│ ┌──────────────────────────▼──────────────────────────┐ │
│ │ Content Script Bridge (ISOLATED) │ │
│ └──────────────────────────┬──────────────────────────┘ │
│ │ chrome.runtime │
│ ┌──────────────────────────▼──────────────────────────┐ │
│ │ Extension Popup Dashboard │ │
│ │ Live telemetry & module toggles │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
This project is licensed under the MIT License © 2026 pdev-labs.