Back

Changelog

Newest releases first. Installers are on GitHub Releases.

GitHub Releases

v0.2.1

  • Library: Rust library:: module is single authority for scan roots and media index; config persisted in tauri_plugin_store with one-shot localStorage import
  • Updater: boot verify strict getVersion() === pending.version only; corrupted pending localStorage cleared
  • Updater: download and install timeouts, failed full-window state with GitHub Releases link, post-install version verify
  • Updater UX: update available in expanded Dynamic Island instead of floating card or titlebar pill
  • Island: update island flex layout, compact version badge, pinned install footer, collapsed update {version} pill
  • Downloads: pause during pre-spawn simulate stays paused, not failed
  • Downloads: 2-minute watchdog scoped to audio-only auto-save jobs
  • Downloads: yt-dlp retries and fragment retries, 403 guidance, resume on manual retry
  • Music: playlist cover persisted to .ruforge-playlist-cover.jpg at download; album shelf and detail share local path

v0.2.0

  • Music playlists: batch downloads write `.ruforge-playlist.json` under Playlists with per-track roster and downloading/complete/incomplete status; Explore harvest path skips yt-dlp when webview roster is complete
  • Music Explore: SPA page context via History API in embedded WebView2; YTM header title polling; signed playlist coverUrl on album view with lazy sidecar heal
  • Music download dock: Ban cancel on expanded chip and collapsed orb; sidebar orbs for all active jobs even when panel never opened; cancel-all in panel header and collapsed stack
  • Music library: artist view immersive hero; canonical_album prefers yt-dlp info.json; album grouping strips date stamps and venue fallback; metadata backfill force re-process checkbox
  • Downloads: multi-item carousel hero (centered cards, plain progress, MB/s on active row); batch UI persists through playlist and Explorer multi-add; batch focus follows actively downloading job
  • Downloads: Deno JS runtime auto-install when yt-dlp reports no supported runtime; Settings Downloads shows status and install button; failed jobs in batch re-queue after install
  • Downloads: music batch retry-at-end (up to 3 attempts per failed track); Explorer mirrorHeroUrl and session queue restore on tab change
  • Scrub previews: parallel ffmpeg generation, global fleet cap, tail cell patch to duration; windowed sprite sheet preload on long videos; library backfill when auto mode on
  • Debugging: dev captures library under Settings Debugging (native screenshot, annotate, grid, drag-out); replay last download batch (Mode A real, Mode B simulate)
  • Crash recovery: root error boundary on every window; friendly hero with Reload app and collapsible details
  • Telemetry: Aptabase gated behind showDebuggingSettings; dev-gate.json boot mirror; public consent overlay removed
  • Authorize Cleanup: audio tracks use listen-snapshot percent; header item tally and goal progress bar; storage glyph warns at 50% cap
  • Window chrome: Win11 snap layout flyout on maximize hover; Explorer webview fills content shell below titlebar
  • Comments panel: thin fixed top scroll vignette when threads scroll
  • Music: playlist-in-library badge reads sidecar status complete by listUrl; stale bare-maxres coverUrl treated as empty
  • Music: manual download cancel shows red cancel celebration instead of green success; expanded cancel hold ring timing fixed
  • Music: artist context menu no longer crashes when display name lacks feat segment
  • Downloads: watchdog pre-transfer clock arms after yt-dlp spawn not before simulate
  • Downloads: stranded yt-dlp .temp.mp4 hard-skipped from gallery and swept on cleanup
  • Downloads: queue metadata hydration capped at 2 concurrent get_video_info; URL dedup uses normalizeYouTubeUrlForCompare
  • Scrub previews: Windows thumb subdirs strip trailing dots; hover thumb uses img not CSS url for # in paths; ffmpeg sidecar uses output() with -nostdin
  • Scrub hover: rAF-throttled hover; sprite paths cached at gallery scan; defer library backfill during playback
  • Windows taskbar: dev builds use separate AppUserModelID and HWND set_icon to avoid stale shell icon
  • SponsorBlock: skip button tracks player chrome height when controls hide
  • Video Library: scroll bulge only; active pill hidden while bulge visible
  • Media chrome: tab bulge fillets track --rf-titlebar-h on Video Library and Settings
  • Debugging: dev capture and crash preview resolve main window via boot-cached state not child webview invoke context

v0.1.10

  • Website release automation: site version from root package.json at build time; npm run prep:website-release generates changelog from updater.json and copies signed NSIS for same-origin download
  • Listen-event log: append-only track_played JSONL in app data; dual-surface session coordinator (main + music-mini) with handoff; listen stats and play history from Rust snapshot; legacy localStorage import; music_listen_clear command
  • Music profile screen: YouTube identity, glance stats, highlights, liked songs, recent plays, storage; titlebar chip opens profile; Home stats strip removed in favor of profile entry
  • Music storage strip: bottom library storage bar on Home and Library (used GB, cap progress on internal vault); hides during playback, Explore bar, active downloads, or expanded player
  • YouTube titlebar profile chip: Log in pill when signed out; avatar-ratio spinner until PFP loads; session cached in localStorage; chip in titlebar across all modes; hover expands to @handle
  • Music Explore auto-save: queue download only after 15s on the same track; skip cancels pending timer for the previous song
  • Download complete animation: global job-completion celebrations (auto-save and pick tracks); green/yellow ring and checkmark from first completion frame; auto-save thumbs on enqueue
  • Download watchdog: progress lines that do not advance bytes or percent no longer reset idle; audio-only stalls yellow-timeout; 30s pre-transfer, 45s audio idle, 2m wall clock from downloadingSince; re-arms after sleep, HMR, or foreground; timed_out status advances batch with yellow warning on Explore orb
  • Listen log integrity: accumulate uses deltas; end closes with server total only; v2 JSONL events; cutover in music-listen-integrity.json; scoring gates pre-cutover listenTimeSec
  • Music mini: clean transparent window corners; skip next/prev preserves play state
  • Music stats and profile UI: anti-pattern visual pass; plain labels; top track time and plays on cover hover only; responsive Home Quick picks grid; Liked Songs full-width banner row
  • Storage glyph: sidebar storage ring opens Authorize Cleanup on click (matches Music storage strip)
  • YouTube profile @handle: probe scoped to topbar and account menu only; brief account menu open to read real handle from DOM; hover shows @handle not Your channel

v0.1.11

  • Player comments: sliding drawer in PlayerView; v1 comments sidecar on single-video download when Download comments is on; ensure sidecar command with cookie parity; Top 25 threads cap
  • Music metadata: track sidecars schema v2 with genres and artistMbId from cached MusicBrainz artist lookup; stampTrackSidecarArtistTags setting (default on); backfill pass 2 for legacy sidecars
  • Windows taskbar: thumbnail transport toolbar on main HWND; white alpha icons; like button with heart-to-check morph; play/pause sync fix
  • Music Home: Recently added / Recently listened toggle; playlist glass rows, singles grid, albums vinyl shelf; listen history tab
  • Music detail: immersive gatefold track page; liner notes credits accordion in footer archive; Watch on YouTube via openUrl
  • Activity island (E-audio): owner-aware hasLivePlayback; expanded transport, volume hover slider, waveform bars from cover art with AGC
  • Playback (music nav): video keeps playing across music-mode enter; hoisted off-tab PlayerView; parks on audio claim
  • Playback scrub: Spotify model (preview while dragging, seek on release); beginScrub/releaseScrub API
  • Onboarding: alt-radial island demo starts expanded; portal fix for radial center-click
  • Boot splash: Siri-style edge gradient orbs (default + music modes)
  • Download comments: max_comments grammar fixed (all,25,all,5,2); sidecar path strips yt-dlp .f### suffix; dedup no longer deletes shared comments.json
  • Music library: single-track downloads stay standalone; lone yt-dlp playlist entries save under Music/ not Playlists/
  • Music playback: cold start always 0:00; expanded now-playing close no longer silences audio
  • Activity island: transport dead-zones fixed; scrub drag preview-only until mouseup; play/pause icon follows live bridge
  • Windows taskbar: thumbbar clicks no longer dismiss taskbar preview
  • Player: video play/pause icon no longer overwritten by idle music host sync
  • Window chrome: rounded outer shell when not maximized; edge resize strips restore borderless drag-resize

v0.1.9

  • Music mode: Spotify-style local library shell with Home, Explore, and Library tabs, persistent now-playing bar, vinyl expanded player, and embedded tag metadata (ID3, FLAC, Vorbis via lofty)
  • YouTube Music Explore: embedded music.youtube.com webview (shared Explorer cookies) with floating download strip, Pick tracks panel, Paste URL intake, per-track orb progress dock, and audio-only batch downloads
  • Music detail pages: artist view with MusicBrainz lookup, album mosaic hero, and vinyl album cards; album and song pages with Play, Shuffle, and navigation stack
  • Music metadata enrichment: {stem}.musicmeta.json sidecars written at download time and via Settings backfill (MusicBrainz match, cover art, canonical titles)
  • Music right panel: Queue, Recently played, and Segments tabs with manual queue, drag-reorder, play history rings, and music-only SponsorBlock skip toggle
  • Music listen stats and smart shuffle: play counts and listen time in localStorage, Home stats strip, dedicated Stats view (all-time and this-week top 10), weighted shuffle on Play, Shuffle, and end-of-queue
  • Liked Songs: heart on now playing and detail tracklists; virtual playlist with collage cover; Library tab and Home shelf; liked tracks influence Quick picks and Rediscover
  • Radial navigation: Alt-hold menu with per-mode palettes (default, movie, music), 56px icon rail, center click cycles nav mode including Music
  • Media library buckets: Videos, Music, Movies, Shows, and Playlists folder layout; Settings migration tool moves flat libraries into the new structure
  • Delete and Recently Deleted: library delete sends media and full sidecar set to OS Recycle Bin; title-bar trash opens restore-from-bin when recoverable
  • Export bundle: copy video and sidecars to timestamped RuForge Export folder; USB title-bar button on removable drives; panel from media context menus and Settings
  • Settings debug logging: per-category tree toggles for Rust terminal and JS DevTools with boot sync to Tauri log filter (lofty TRACE off by default)
  • App-wide YouTube profile chip in titlebar when signed in; music row context menus (Play, queue, go to song/artist/album, show in folder)
  • Website and mobile: full ruforge.app refresh with Obsidian-style docs, six feature pages, download flow, and 94-page mobile shell at /m/
  • Music Explore: webview lifecycle and HMR reattach; download path honors internal vault; album tracklist harvest from ytmusic-browse-response before yt-dlp fallback; single-track watch URLs in Paste link
  • Music layout and UI: Home and Library panels fill column height; delayed tooltips replace native title; right panel tab clipping; mini player full-bleed cover; queue drag no longer starts playback on release
  • Music liked UX: liking no longer jumps rows to top of shelves; Home Liked shelf restored without scroll jolt; heart sizing matches transport icons
  • Gallery scan: duplicate download sweep moved off scan_gallery hot path; poster backfill skips audio with embedded cover
  • Library migrate moves musicmeta sidecars; artist metadata disk cache prevents repeat MusicBrainz fetches on revisits
  • Mini player: pop-out works from music mode; library pick stops main music; transparent corners; hover raises z-order without stealing focus
  • Chapter scrubber: playhead and hover aligned to segment grid; Explorer webview reattaches after HMR; radial Alt-release hover-to-select
  • Music mini dual-play: main playback stops popped-out music mini when both would play
  • Downloader: cookie-last yt-dlp (no cookies first, retry with Internal live CookieManager export); public videos work with Explorer open; raw yt-dlp stderr and export diagnostics in download.ytdlp debug log
  • Notifications no longer flash brown before enter animation

v0.1.8

  • Playlist downloader: URL intake from clipboard, paste, and drop; per-row audio toggle and sizes; duplicate summary before Download; batch jobs land in a numbered playlist subfolder with one Media stack card
  • Regroup flat playlist files into a numbered folder from Settings Debugging tab (library match by id, url, or title)
  • SponsorBlock fetches all skip, chapter, and POI categories (not sponsor-only API default); stale sidecars refresh on next play
  • Color-coded scrub hover pill for every SponsorBlock segment type (skip, chapter, POI, music off-topic, etc.)
  • Settings Downloads: yt-dlp Check & Update checks GitHub and installs a newer user copy automatically
  • Settings Advanced: Check for updates auto-downloads and installs RuForge when a newer build is available
  • General settings toggle reveals Debugging tab (group playlist tool and updater UI cycle)
  • Post-install What's New modal clamps to the viewport with a scrollable notes body
  • Simple (no-chapter) seek bar no longer clips scrub hover previews
  • Scrubber sprite sheets reload after Generate Previews; sidecar duration from ..info.json for sprite timing
  • Mini player large mode: video frame no longer washed by stacked blur or idle ambient blur
  • Playlist regroup scans internal and custom library roots and matches entries by id, url, or title

v0.1.7

  • Audio-only player hero with full-canvas LED equalizer and glass side waveforms
  • Music badge on audio library cards; hover preview keeps cover art instead of a blank tile
  • SponsorBlock skip button, scrub segment overlays, chapter and POI bar colors, and a Playback settings tree
  • Segmented chapter scrubber with hover thumbnail preview, active chapter title, and prev or next jumps
  • Frosted player control dock: primary actions visible, secondary actions in a More menu
  • Settings Playback tab for auto-advance audio, prefetch, and SponsorBlock controls
  • Floating bottom-right download queue drawer with crossfading hero and row thumbnails
  • Per-job download stall watchdog that fails stuck jobs and notifies you
  • Auto scrubber preview sprites on video download (Settings, Downloads toggle, default on)
  • Dual yt-dlp simulate for separate audio vs video size estimates and smoothed ETA on the queue
  • Windows volume mixer shows RuForge as the app name with the RuForge icon
  • Mini player large layout: tooltips clamp inside the window and volume icons match mute level tiers
  • Audio visualizer bars follow playback in WebView2 instead of staying frozen while audio plays
  • Audio-only downloads prefer m4a and no longer match full video file size from bestaudio fallback
  • Duplicate library cards after muxed downloads: leftover audio, .fNNN rows, and cross-folder dedupe
  • WebView playback syncs store volume and mute on load; mini player handoff no longer inherits autoplay mute
  • Download pause updates the queue only after Rust confirms the job actually paused
  • Processing phase stays latched for multi-fragment HLS so post-process progress still shows
  • Duration labels no longer show NaN when yt-dlp or catalog metadata is incomplete
  • Preview sprite generation avoids an ffmpeg nested-lock deadlock; delete cancels in-flight preview work
  • Download hero URL and metadata clear when a job finishes or is removed from the queue
  • Explorer embedded bounds stay synced during sidebar resize without tearing down listeners

v0.1.6

  • Mini player micro and tiny layouts down to 70px height with marquee title and compact controls
  • Mini player Video Library browse mode locks window size until a file is selected
  • Compact mode with morphing audio visualizer, borderless cover art, and accent-colored play button
  • Explorer title bar back, forward, and reload controls flush at the sidebar edge
  • Audio toggle tooltip describes the action you will take, not the current mode
  • Video poster attribute loads library thumbnails immediately when swapping videos
  • Audio visualizer SVG path crash when toggling play/pause in mini player
  • Mini player cover art visibility and alignment across small, compact, and large modes
  • Sidebar collapse label no longer flashes at the top while the rail narrows

v0.1.5

  • Audio-only download toggle wired through to Rust DownloadOptions
  • Processing phase label on queue row and hero while ffmpeg post-processes
  • In-app delete confirmation dialog replaces native confirm in WebView2
  • Duplicate download skip shows transient "Already in library" feedback
  • Deleting a library file removes matching ghost rows from the download queue
  • Download finish clears hero URL and metadata when the finished URL matches
  • Sidecar info.json path resolves both single-dot and double-dot filename variants