A complete AI multimedia production studio — not just a media player.
OpenAI Whisper (offline subtitles) · Sandytalks AI (music chatbot) · Dolby.io (cloud mastering)
LibVLC engine · PyQt6 glassmorphism UI · 15 lyrics sources · 48-band visualizer
Windows 10 / 11 · 64-bit · Self-contained · No Python install needed
|
|
|
Whisper local subtitles |
10 Speaker Output Modes |
LibVLC 3.x + NVDEC |
|
12 glassmorphism themes |
Music (5 sources) |
Auto-save every 2 min |
The most advanced open-source lyrics system built into a media player — 3-tier parallel pipeline with guaranteed results.
|
Tier 1 — Synced LRC (8s parallel deadline) Tier 2 — Plain Lyrics (12s parallel deadline) Tier 3 — AI Fallback (always works) |
How it works:
|
View lyrics pipeline flowchart
flowchart TD
A(["🎵 Track Starts"]) --> B{"📂 Disk Cache?"}
B -- Hit --> Z(["✨ Display Lyrics"])
B -- Miss --> C{"📄 Sidecar .lrc?"}
C -- Found --> Z
C -- None --> D
subgraph D["⚡ TIER 1 — Synced LRC"]
D1["LRCLib"] & D2["Kugou"] & D3["NetEase"] & D4["Textyl"] & D5["Megalobiz"]
end
D --> E{"Best LRC?"}
E -- Yes --> Z
E -- No --> F
subgraph F["📝 TIER 2 — Plain Lyrics"]
F1["JioSaavn · Gaana"] & F2["Vagalume · Lyrics.ovh"] & F3["Musixmatch · AZLyrics"] & F4["SongLyrics · ChartLyrics · Happi · Lyrist"]
end
F --> G{"Plain found?"}
G -- Yes --> Z
G -- No --> H["🤖 TIER 3 — Sandytalks AI"]
H --> Z
Z --> I(["💾 Cached"])
Natively powered by LibVLC, SANDYPLAY supports virtually every media format without requiring external codec packs.
Speaker Output Modes:
|
Video Control:
|
|
300+ curated stations across 9 genres:
|
Live channels from 10 public sources:
Sources: iptv-org · Free-TV · PlutoTV · Samsung TV+ |
Stream dubbed anime across 8 languages — powered by AniNeko & AnimeSalt.
|
|
|
YouTube Music |
YouTube Trending |
iTunes Discovery |
Built-in Browser |
| 📥 1 | Download the installer above |
| 🛡️ 2 | SmartScreen warning? → Click More Info → Run Anyway |
| 🚀 3 | Launch from Desktop shortcut |
| 🎵 4 | Drag & drop files, or Ctrl+O / Ctrl+D |
| 🤖 5 | First AI subtitle use downloads Whisper model (~1.5 GB, one-time) |
| Minimum | Recommended | |
|---|---|---|
| OS | Windows 10 64-bit | Windows 11 64-bit |
| CPU | Dual-core 2 GHz | Quad-core 3 GHz+ |
| RAM | 4 GB | 8 GB+ |
| GPU | Integrated | NVIDIA GTX 1060+ (NVDEC) |
| Disk | 500 MB | 3 GB+ (with Whisper model) |
| ✅ Bundled | LibVLC + all codecs, Python runtime, SoX, VC++ runtimes |
| ⬇️ Auto-download | Whisper AI model (~1.5 GB on first use) |
| 🔑 Optional | Google Account (for AI Chat) · Dolby.io credentials (cloud audio) |
Do I need a GPU?
No. CPU works fine. An NVIDIA GPU unlocks NVDEC hardware acceleration for smoother 4K — but it's optional.
Does Whisper work offline?
Yes, 100% offline after the one-time model download. Subtitles are cached per file — instant on replay.
What API keys do I need?
None for core playback, EQ, DTS, visualizer, lyrics, radio, IPTV, anime, and all online studios. A simple Google Account sign-in gives you access to the Sandytalks AI chatbot. Dolby.io (free tier) is optional for cloud mastering.
Why aren't lyrics showing?
Check the status bar for search progress. Try Misc → Search Lyrics Manually with a cleaned title. For Indian music, JioSaavn/Gaana have the best coverage. You can also drop a .lrc sidecar file next to your audio.
Can I stream YouTube?
Yes. Ctrl+U → paste any URL. yt-dlp supports 1000+ sites. Playlists auto-expand and mix with local files.
Linux / macOS support?
Currently Windows-only. The stack is cross-platform but some components are Windows-specific. Community PRs welcome.
⌨️ Keyboard Shortcuts
| Key | Action | Key | Action |
|---|---|---|---|
Space | Play / Pause | N / B | Next / Previous |
→ / ← | Seek ±10s | ↑ / ↓ | Volume ±5% |
M | Mute | F | Fullscreen |
V | Visualizer | P | Playlist |
L | Loop | ] / [ | Speed ±0.1× |
Ctrl+L | Lyrics | Ctrl+T | Translate |
Ctrl+O | Open File | Ctrl+U | Open URL |
Ctrl+Alt+F | Favorite | Ctrl+Alt+S | Snapshot |
? | All Shortcuts |
🏗️ Architecture
graph TB
subgraph INPUT["📥 Input"]
L["Local Files"] & S["Streams"] & R["Radio/TV"] & O["Online Studios"] & AN["Anime"]
end
subgraph CORE["⚙️ LibVLC Engine"]
VLC["Decoder + A/V Sync"] & DSP["DSP + EQ"] & DL["yt-dlp + FFmpeg"]
end
subgraph AI["🤖 AI"]
W["Whisper"] & G["Sandytalks AI"] & LY["Lyrics 15+"] & AE["Audio Energy"]
end
subgraph NET["🔒 Network"]
VPN["GoodbyeDPI"] & DOH["DoH Fallback DNS"] & PROXY["HLS Proxy"]
end
subgraph UI["🖥️ PyQt6 UI"]
VW["Video + Music Widgets"] & VIS["Visualizer"] & CB["Controls"]
end
INPUT --> CORE --> AI --> UI
CORE --> NET --> UI
🛠️ Tech Stack
| Technology | Purpose | |
|---|---|---|
| 🖥️ | PyQt6 | Glassmorphism UI |
| 🎬 | LibVLC 3.x | Media engine + NVDEC |
| 🤖 | faster-whisper | Offline AI subtitles |
| 🧠 | Gemini 1.5/2.5 | Sandytalks AI chatbot, translation |
| ☁️ | Dolby.io | Cloud audio mastering |
| 📡 | yt-dlp | 1000+ site streaming |
| 🛡️ | DoH + GoodbyeDPI | ISP bypass via Alibaba/Cloudflare |
| 🏷️ | mutagen | Media tag reading |
🗂️ Project Structure
SANDYPLAY/
├── sandyplay.py # Entire app — single Python file
├── vpn/goodbyedpi.exe # ISP bypass (optional)
├── rtl-sdr/x64/rtl_fm.exe # Hardware FM (optional)
└── ~/.sandyplay/ # Auto-created
├── config.json # Settings
├── plus/ # Sessions & snapshots
├── lyrics/ # Cached lyrics
├── subtitles/ # Cached Whisper SRTs
├── cache/images/ # Thumbnails
└── dolby/ # Enhanced audio
| Milestone | Version | |
|---|---|---|
| ✅ | Lyrics engine · Dolby · Whisper · DTS · FM radio | v1.13 |
| ✅ | Music studio · IPTV · session persistence | v1.14 |
| ✅ | Anime · ISP bypass · Video/Podcast studios · Mini player · AI chat | v1.15 |
| 📋 | Linux native build | v1.16 |
| 📋 | Podcast chapters · Watch Party (LAN sync) | v1.17–18 |
| 💡 | Discord presence · Cloud sync · DJ Mode · macOS · Android remote | Future |
SANDYPLAY is a solo project — every contribution makes a difference.
⭐ Star the repo · 🐛 Report bugs · 💡 Suggest features · 📻 Add radio stations · 🎌 Fix anime scrapers · 📣 Share with friends
MIT License — Copyright © 2026 Sandytalks
Third-party: VLC (LGPL) · FFmpeg (LGPL/GPL) · Whisper (MIT) · PyQt6 (GPL) · yt-dlp (Unlicense) · Dolby.io · Gemini API · GoodbyeDPI (MIT)