Belmont Labs · Multi-Screen YouTube Player powered by mpv + yt-dlp
╔══════════════════════════════════════════════════════════════════╗
║ B E L M O N T L A B S ║
║ Stereo-Panel Amplification Nexus · S.P.A.N. ║
║ ║
║ Spans YouTube video across multiple screens via mpv + yt-dlp ║
║ Built-in remote control server — send URLs from your phone ║
╚══════════════════════════════════════════════════════════════════╝
S.P.A.N. is a Python GUI frontend that lets you launch YouTube (and other yt-dlp-supported) streams through mpv with precise multi-monitor control — including spanning video across two screens (or cheap outdoor projectors, in my needs-case) as one seamless canvas. It also runs a local web server so you can send URLs wirelessly from your phone.
Currently there is a known issue with starting new streams while another stream is playing. It wants to start another stream rather than taking control from MPV and starting the new stream as intended. This is something that I am working on and if you have any ideas, feel free to let me know because my head hurts from hitting it on the desk.
Local UI![]() |
Mobile UI![]() |
- Multi-screen playback — span video across multiple monitors, fullscreen on either, or windowed
- Stretch mode — fill the full window/canvas with no black bars (no horizontal/vertical blank space)
- Quality selection — Best, 1080p, 720p, 480p
- Built-in remote control — phone-accessible web UI at
http://<your-ip>:8765with URL history - QR code — scan from the app to open the remote on your phone instantly
- yt-dlp stream resolution — separate best-video + best-audio streams for maximum quality
- Hardware decoding —
--hwdec=autofor smooth playback - Aggressive buffering — 300 MiB read-ahead cache for stutter-free streams
- Desktop launcher — installs to KDE/GNOME app menu via
--install
| Tool | Purpose |
|---|---|
mpv |
Video playback engine |
yt-dlp |
Stream URL resolution |
python3-tkinter |
GUI framework |
python3-qrcode + python3-pillow |
QR code generation (optional but recommended) |
python3 span.py --installThis will:
- Install
mpv,yt-dlp,python3-tkinter,python3-qrcode,python3-pillowviadnf - Update yt-dlp to the latest version
- Copy
span.pyto~/.local/bin/span - Create a
.desktoplauncher for KDE/GNOME app menus
After installation, launch with:
spanOr search S.P.A.N. in your application launcher.
- Paste a YouTube URL into the URL field (or send one from your phone via the remote)
- Select a Display mode:
Span both screens— video fills both monitors as one canvasFullscreen – Screen 1 / 2— fullscreen on a specific monitorWindowed – Screen 1 / 2— 1280×720 windowed on a specific monitor
- Set the Combined resolution & offset for span mode (defaults to
3840×1080 +(-1920)+0for two 1920×1080 screens with screen 2 on the left) - Choose Quality and whether to Stretch the video
- Hit ▶ TRANSMIT
Open http://<your-local-ip>:8765 on any device on the same Wi-Fi network, or scan the QR code shown in the app. Paste a URL and tap TRANSMIT — the video starts immediately on the main display.
| Layout | W | H | X | Y |
|---|---|---|---|---|
| Screen 2 left of Screen 1 (2×1080p) | 3840 | 1080 | -1920 | 0 |
| Screen 1 left of Screen 2 (2×1080p) | 3840 | 1080 | 0 | 0 |
| Two 4K screens side-by-side | 7680 | 2160 | 0 | 0 |
S.P.A.N. is developed on Fedora / KDE Plasma / Wayland. It auto-detects the session type and sets --vo=gpu --gpu-context=wayland or x11egl accordingly. It has not been tested on other distributions, though it should work on any Linux system with the dependencies installed.
MIT — do whatever you want with it.
Belmont Labs · belmontlabs.dev

