Skip to content

Releases: guillevc/yubal

🪄 v0.7.0 — Browser extension support

08 Mar 13:37

Choose a tag to compare

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.

Track view Playlist view Settings view

Get the add-on for Firefox Chrome manual install

✨ 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

08 Mar 13:27

Choose a tag to compare

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

📸 Screenshots

Track view Playlist view Settings view

🔐 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 guillevc

v0.6.3 — Bump yt-dlp

07 Mar 03:24

Choose a tag to compare

  • Bump yt-dlp to latest version. Fixes some "Requested format is not available." errors (#100)
  • Add /api/info endpoint and source code for the upcoming browser extension (planned for v0.7.0) (#68)

Full Changelog: v0.6.2...v0.6.3

v0.6.2 — Bugfix

24 Feb 15:15

Choose a tag to compare

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

18 Feb 23:24

Choose a tag to compare

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

15 Feb 17:47

Choose a tag to compare

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_SECONDS to 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

09 Feb 22:11

Choose a tag to compare

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 with Artist - Title [videoId] naming (#22)
    • Enable with YUBAL_DOWNLOAD_UGC=true (off by default — UGC tracks are still skipped unless enabled)
  • 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 — Renamed Playlists/ 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

08 Feb 21:35

Choose a tag to compare

Bug Fixes

Improvements

  • Increase job queue capacity from 20 to 200 (#61)

Full Changelog: v0.4.1...v0.4.2

v0.4.1 — HTTP fix

08 Feb 03:18

Choose a tag to compare

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

06 Feb 21:25

Choose a tag to compare

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örk instead of Bjork) (#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.txt files, 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