Releases: guillevc/yubal
🪄 v0.7.0 — Browser extension support
This release adds API support for the new browser extension, letting you download tracks and subscribe to playlists directly from YouTube and YouTube Music.
🪄 Browser Extension (#68)
Download tracks and subscribe to playlists without leaving the page.
✨ Features
- Browser extension support — the API now accepts requests from the yubal browser extension for one-click downloads and playlist subscriptions
- Single track priority — URLs with both a video ID and
list=parameter now download the track instead of the playlist - Show unmatched track count in extraction summary
🐛 Bug Fixes
- Fix single track downloads failing in certain cases (#95)
- Use track title as album fallback for UGC/Unmatched tracks instead of "Unknown Album"
- Fix non-album playlists being incorrectly classified as albums in some cases (sigma67/ytmusicapi#854)
- Enforce consistent thumbnail sizing for UGC tracks in the web UI
📚 Documentation
- Added README.md for the new browser extension
Built by @guillevc · Full Changelog: v0.6.3...v0.7.0
🧩 Browser extension v0.1.0 — First release
First release of the yubal browser extension for Chrome and Firefox. Download tracks and subscribe to playlists directly from YouTube and YouTube Music without leaving the page.
✨ Features
- Download tracks — send the current track to your yubal instance with one click
- Subscribe to playlists and albums — subscribe directly from any YouTube Music playlist or album page
- Auto-detection — the extension activates only on YouTube and YouTube Music pages
- Configurable — set your yubal instance URL from the extension settings
📦 Install
- Firefox: Get the add-on
- Chrome: Download the
.zipfrom the assets below and install manually
📸 Screenshots
🔐 Build attestations
Each zip is signed with build provenance during CI.
| Artifact | Attestation |
|---|---|
yubal-extension-v0.1.0-chrome.zip |
view |
yubal-extension-v0.1.0-firefox.zip |
view |
Verify with the GitHub CLI:
gh attestation verify yubal-extension-v0.1.0-chrome.zip --owner guillevc
gh attestation verify yubal-extension-v0.1.0-firefox.zip --owner guillevcv0.6.3 — Bump yt-dlp
- Bump yt-dlp to latest version. Fixes some "Requested format is not available." errors (#100)
- Add
/api/infoendpoint and source code for the upcoming browser extension (planned forv0.7.0) (#68)
Full Changelog: v0.6.2...v0.6.3
v0.6.2 — Bugfix
Bug Fixes
- web: Use TanStack Router Link for SPA navigation. HeroUI's Link had a bug causing full page reloads instead of client-side routing
Full Changelog: v0.6.1...v0.6.2
v0.6.1 — Bugfixes
Mostly bugfixes this time around. The big one is URL handling: you can now paste mobile URLs, youtu.be share links, Shorts, and a bunch of other formats that were getting rejected before.
Bug fixes
- Accept m.youtube.com, youtu.be, Shorts, live, embed, and youtube-nocookie.com URLs (#84)
- Fix Pydantic validation error when playlist tracks have a null album ID, which was failing entire playlists (#81)
- Upscale small cover art thumbnails (e.g. 120x120) to 544x544 by rewriting the Google image URL (#80)
- Drop the 0000 year prefix from folder names when year metadata is missing, just use the album name (#80)
- Add cookie upload option to the mobile hamburger menu (#82)
Full Changelog: v0.6.0...v0.6.1
⚡ v0.6.0 — Extraction cache & configurable timeouts
This release adds an extraction cache to skip already-processed tracks and makes the job timeout configurable for large playlists. Both should help with large playlists that have many already downloaded items.
✨ What's New
- Extraction cache — SQLite-backed cache that remembers previously processed tracks, skipping re-extraction on repeated syncs for faster playlist updates (#75, #76)
- Configurable job timeout — Set
YUBAL_JOB_TIMEOUT_SECONDSto increase the default 30-minute timeout for large playlists (400+ tracks) (#73)
🐛 Bug Fixes
- Fixed max items limit on jobs page not matching backend validation (#79)
Full Changelog: v0.5.0...v0.6.0
🔊 v0.5.0 — UGC downloads & ReplayGain
This release adds support for user-generated content (UGC) downloads and ReplayGain volume normalization.
✨ What's New
- UGC track downloads — Download user-uploaded tracks to an
_Unofficial/folder withArtist - Title [videoId]naming (#22)- Enable with
YUBAL_DOWNLOAD_UGC=true(off by default — UGC tracks are still skipped unless enabled)
- Enable with
- ReplayGain tagging — Automatic volume normalization via rsgain for consistent playback levels (#49)
- Unmatched track routing — Tracks that don't match an album are saved to
_Unmatched/instead of being skipped (#32) - Mid-download cancellation — Cancel running downloads immediately via yt-dlp progress hooks instead of waiting for the current track to finish
- ASCII filename transliteration — Add back option to transliterate unicode filenames to ASCII via unidecode with
YUBAL_ASCII_FILENAMES=true(off by default) (#58)
🔧 Improvements
- CLI documentation — Added README with install and usage docs
_Playlists/folder sorting — RenamedPlaylists/to_Playlists/for top-sorted directory listing, to align with the introduced_Unmatched/and_Unofficial/folders.
🐛 Bug Fixes
- Fixed cookies being invalidated after being used by yt-dlp
Full Changelog: v0.4.1...v0.5.0
v0.4.2
Bug Fixes
- Fix crash when track artists are null (#60) — thanks @WarlockSyno
Improvements
- Increase job queue capacity from 20 to 200 (#61)
Full Changelog: v0.4.1...v0.4.2
v0.4.1 — HTTP fix
Bug Fixes
- Fix logs not showing when accessing the app over plain HTTP on a non-localhost address (#59)
Full Changelog: v0.4.0...v0.4.1
🕐 v0.4.0 — Playlist sync
This release introduces scheduled playlist sync — subscribe to playlists and let yubal keep them updated automatically on a cron schedule.
✨ What's New
- Playlist subscriptions — Register playlists to sync periodically with configurable track limits (#33)
- Cron-based scheduler — Set your preferred sync schedule (e.g.,
0 3 * * *for daily at 3 AM) - Unicode filename support — File and folder names now preserve special characters (e.g.,
Björkinstead ofBjork) (#44)
🔧 Improvements
- Format selection optimization — yt-dlp now prefers the configured codec when selecting source streams, avoiding unnecessary transcoding when the source is already in the desired format (#48 by @ergosteur 🚀 )
- Update yt-dlp to latest version — Fixes YouTube extraction failures caused by recent player JS changes (yt-dlp/yt-dlp#15818)
🐛 Bug Fixes
- Cookie authentication — Fixed failures with large or space-containing
cookies.txtfiles, and improved validation with clearer error logging (#30, #47)
⚠️ Heads Up
File and folder names now preserve unicode characters instead of transliterating them to ASCII. For example:
Before: data/Bjork/1997 - Homogenic/01 - Hunter.opus
After: data/Björk/1997 - Homogenic/01 - Hunter.opus
If you have existing downloads for artists with non-ASCII names, re-downloading or syncing will create new folders alongside the old ones. Check your library and merge any duplicates after upgrading.
Full Changelog: v0.3.1...v4.0.0


