- YouTube, YouTube Music, SoundCloud, Bandcamp, Vimeo
- Output as MP3 (64–448 kbps, you pick) or MP4 (4K / 1080p / 720p / 480p)
- Titles, artists and album art parsed automatically — cover art embedded in ID3 tags and saved as
cover.jpgper folder - Numbered filename prefixes with configurable templates (
{000} -,EP{00} -, etc.) - Duplicate detection — tracks that already exist at the expected output path are skipped automatically
- Paste a single URL or an entire playlist — Nyro expands it automatically
- Playlists saved into their own named folder; albums into
Albums/Name (Year)/ - Retry failed downloads, open the source URL, or get a plain-English explanation of what went wrong
- Queue state persists across restarts
- Powered by the Taddy GraphQL API — search, browse episodes, add to queue in one click
- Podcast episodes organised into
Podcasts / Show Name /with cover art embedded - Responses cached for 6 hours to stretch the free-tier request limit
- Scans your output folder on demand, reads ID3 tags, extracts and caches cover art
- Browse by Albums (grouped by name, Various Artists for mixed), Artists, Podcasts, flat Tracks, or Videos
- Create custom Playlists, set manual covers, drag to reorder
- Scan results persisted to disk — library available instantly on next launch
- Built-in player with shuffle, repeat, repeat-one, playback speed control
- Scrub bar with click-to-seek
- Synced lyrics fetched from lrclib.net, saved as
.lrcsidecars, displayed karaoke-style - 10-band graphic EQ with preamp and frequency response curve
- 4-band multiband compressor with per-band threshold, ratio, attack, release and makeup gain
- FX chain: bass boost, treble enhance, stereo widener (M/S), reverb, crossfeed, limiter
- Play history page
- Method A (recommended): import a
cookies.txtfile exported from your browser — works while Chrome is open - Method B: read cookies directly from a live browser profile (Chrome must be fully closed)
- Checks the GitHub releases API at startup and silently updates the
yt-dlpbinary if a newer version is available
![]() |
![]() |
| Queue — completed item | Queue — download in progress |
![]() |
![]() |
| Podcast episode browser | Edit track metadata before download |
Head to the Releases page and grab the file for your OS:
| Platform | File | Notes |
|---|---|---|
| 🪟 Windows | Nyro-Setup-x.x.x.exe |
Standard installer |
| 🪟 Windows | Nyro-x.x.x-portable.exe |
No install needed |
| 🍎 macOS | Nyro-x.x.x.dmg |
Drag to Applications |
macOS first-launch note: Because the app isn't yet notarised with an Apple Developer certificate, macOS will block it on first open. Right-click (or Ctrl-click) the app → Open → Open again to allow it. You only need to do this once.
Prerequisites: Node.js 20+, npm
# Clone the repo
git clone https://github.com/mariusberget92/nyro.git
cd nyro
# Install dependencies
npm install
# Start in development mode
npm run dev
# Build a release for your current OS
npm run buildInstaller output lands in dist/.
Nyro shells out to yt-dlp and FFmpeg. Place the binaries in the resources/ folder before building:
resources/
├── yt-dlp # or yt-dlp.exe on Windows
└── ffmpeg # or ffmpeg.exe on Windows
| Binary | Download |
|---|---|
| yt-dlp | github.com/yt-dlp/yt-dlp/releases |
| FFmpeg | ffmpeg.org/download.html |
yt-dlp is auto-updated at startup — you only need to seed it once.
All settings live in Settings (cog icon in the sidebar). Nothing is stored in the repo — credentials are saved to your OS app-data folder.
- Sign up at taddy.org/signup/developers
- Copy your User ID and API Key from the dashboard
- Paste both into Settings → Taddy API and hit Save
The free tier gives 300 requests/month. Nyro caches responses for 6 hours to keep usage low.
Method A — cookies.txt file (recommended)
- Install the Get cookies.txt LOCALLY Chrome extension
- Navigate to youtube.com while logged in
- Click the extension → Export
- In Nyro: Settings → YouTube Cookies → Method A → Browse and select the file
Method B — read from browser directly
- Pick your browser in Settings → YouTube Cookies → Method B
⚠️ Chrome must be fully closed — it locks its cookie database while running
📁 Music/Nyro/
├── 📁 Albums/
│ └── 📁 Album Name (2024)/
│ ├── cover.jpg
│ ├── 001 - Artist – Track.mp3
│ ├── 001 - Artist – Track.lrc
│ └── 002 - Artist – Track.mp3
├── 📁 Playlists/
│ └── 📁 My Playlist/
│ ├── cover.jpg
│ └── 001 - Artist – Song.mp3
├── 📁 Podcasts/
│ └── 📁 Show Name/
│ ├── cover.jpg
│ └── Episode Title.mp3
├── 📁 Videos/
│ └── Artist – Video Title.mp4
└── Artist – Standalone Track.mp3
Lyrics (when available) are saved as .lrc sidecar files next to each audio file and displayed in the mini player. Cover art is embedded in ID3 tags and saved as cover.jpg per folder so it survives any tag editor.
| Layer | Technology |
|---|---|
| Shell | Electron 35 |
| Frontend | Vue 3 + Pinia + Vue Router 4 |
| Build | electron-vite + Tailwind CSS |
| Downloads | yt-dlp + FFmpeg |
| Tag reading/writing | node-id3 |
| Lyrics | lrclib.net API |
| Podcasts | Taddy GraphQL API |
| Audio engine | Web Audio API (EQ, multiband compressor, FX chain) |
| Settings | electron-store |
PRs and issues are welcome. Please open an issue first for large changes so we can align on direction.
Nyro is a tool for downloading content you have the right to download. Respect copyright law and the terms of service of the platforms you use. The authors are not responsible for how this software is used.
Made with ☕ and too many late nights




