Universal Downloader
Lokální web aplikace, která stáhne hudbu z většiny streamovacích služeb, uloží ji jako proper MP3 a slouží i jako přehrávač s cross-device sync. Pro vlastní použití, kód otevřený, bez deploye.
Vznikl u kamaráda doma během mixování. Vybíral tracky pro nový mix a každý si musel stahovat zvlášť, jeden po druhém. Padla otázka, jestli by tohle nešlo udělat batch: paste celý playlist a stáhne se všechno najednou. Druhý den jsem začal psát první verzi.
Začalo to jako wrapper kolem yt-dlp. Pak mě zaujalo, že když už mám tracky lokálně s embedded tagy, mohli by se rovnou přehrávat. Přibyl player. Pak playlisty, fronta, shuffle, synced lyrics. Nakonec sync přes Firestore, aby šlo na novém zařízení jedním klikem stáhnout celou knihovnu z předchozího. Audio přitom nikdy neopouští stroj, cloud drží jen metadata.
Paste URL z Spotify, SoundCloudu nebo YouTube (track, album nebo playlist). Spotify používá embed page scraping (žádný API key, žádný DRM circumvent), audio se routuje přes yt-dlp z YouTube searche. Všechno se konvertuje na MP3 320 CBR s embedded ID3 tagy a thumbnail artwork.
Vedle stahování je to plnohodnotná knihovna a přehrávač: grid s artwork, sort/search/tag filter, playlisty, fronta, shuffle, repeat, synced lyrics z LRCLib, Media Session API integrace (hardware buttony, system overlay). Volitelný cross-device sync přes Firebase přidává mezi-zařízenou viditelnost knihovny. Bez Firebase appka funguje stejně, jen lokálně.
Backend a frontend běží jako jeden `npm run dev`: Vite na :1420, Hono na :8787, Vite proxiuje `/api/*` přes Hono. yt-dlp a ffmpeg se auto-stáhnou do `./bin/` při prvním spuštění.
Browser :1420 ──► Vite dev server ──/api/*──► Hono on :8787
│ │
└── src/ (React) ├── ./bin/yt-dlp.exe + ffmpeg.exe
├── ./data/library.db (SQLite)
└── ~/Music/universal-downloader/Kód je open source, ale public instance (služba, která stahuje média za jiné lidi) je jiná legal kategorie a tenhle repo na to není designovaný. Lokální použití pro vlastní potřebu sedí ve stejné šedé zóně, ve které funguje yt-dlp samotný (úspěšně bráněný v EFF vs RIAA na základě „code is speech“).
Sám platím Spotify Premium. Kdyby tohle mohlo být legálně public, smysl by nebyl. Spotify a YouTube Premium oba nabízejí offline playback. Tenhle tool není náhrada, je to vlastní lokální archiv.
- build
- Vite
- framework
- React 19, TypeScript
- styling
- Tailwind v4, shadcn/ui, motion
- runtime
- Node.js 22+
- server
- Hono
- library db
- better-sqlite3
- downloader
- yt-dlp (auto-fetched)
- transcode
- ffmpeg (auto-fetched)
- tag rewrite
- node-id3
- lyrics
- LRCLib
- auth
- Firebase Auth, Google sign-in
- sync
- Firestore (metadata only)