Releases: jwu-au/FreeBird
Releases · jwu-au/FreeBird
Release list
v3.6.1
Changed
fb watchdefault--poll-intervalis now30s(was5s). The old 5-second default polled far too aggressively for large libraries where each file (especially.ncm/ FLAC with L3 integrity) takes much longer than 5s to decode — every poll just hit the "previous cycle still running" guard. 30s is a saner default; override with--poll-intervalas before.
Fixed
fb watchno longer spams "Previous cycle still running, skipping this poll". The skip-warning was designed to ramp to silence (one WARN, then debug, then quiet), but the counter reset at every cycle boundary — so a continuously-busy watcher (back-to-back long decodes) re-emitted the WARN on almost every poll. The ramp now persists across a sustained-busy stretch and only resets once the watcher genuinely catches up, so you see the warning once (plus the long-running hint), then quiet.
v3.6.0
Added
.ncmfile support — FreeBird now decodes NetEase's downloaded.ncmfiles in addition to the existing.uc/.uc!stream-cache files.fb scanandfb watchpick up.ncmfiles automatically (same commands, no new flags); each input is routed to the right decoder by extension. Unlike cache files,.ncmfiles carry their own metadata and cover art, so they decode fully offline — no NetEase API call is made for them.- Embedded metadata + naming. Title, artist(s), and album are read straight from inside the file; output is named
Artist - Title.flac(multi-artist joined with&), falling back to the original filename when the embedded metadata is absent. - Embedded cover art. The album cover stored in the
.ncmis written into the output — FLAC viametaflac(PCM-MD5 preserved), MP3/M4A via TagLibSharp.--no-write-tagssuppresses both tags and cover. - Same safety guarantees as the
.ucpath. Atomic staging writes, integrity checks (off/l1/l3/auto), quarantine-with-sidecar on a corrupt/undecodable file, and resolution markers sofb watchdecodes each.ncmexactly once and skips it thereafter. Inputs are never modified.
- Embedded metadata + naming. Title, artist(s), and album are read straight from inside the file; output is named
v3.5.2
Fixed
- Stale
<musicId>fallback files are now cleaned up even when the resolved file already exists. When a file was first decoded offline (producing a<musicId>.<ext>fallback) and later re-resolved to its proper<artist> - <title>.<ext>name, the superseded fallback was only removed on the fresh-write path. If the resolved-named file already existed on disk (the common state after a reboot), FreeBird took the collision-skip path and left the stale<musicId>file behind forever. The same best-effort cleanup (with all its safety checks) now also runs on the collision-skip path. (Pre-existing orphans from older versions are not retroactively removed; delete those once by hand.) scanandwatchno longer re-request metadata for already-resolved files. Previously everyfb scaninvocation — and everyfb watch/service initial sweep (e.g. on reboot) — re-hit the NetEase API for all cache files, even ones already successfully decoded in a prior run (their<artist> - <title>output and resolution marker already on disk). With no network at boot this produced a burst of API failures,MetadataFetchFailedmarkers, fallback<musicId>skips, and ~1-minute-later retries; with network it meant N redundant API calls (rate-limit risk). Both paths now consult the resolution marker before any API call and skip already-resolved files immediately. Failed-status markers still honor their retry-after backoff (a file due for retry is still re-processed), and a changed source or naming template still re-processes.scanandwatchnow follow the exact same skip rule (a single sharedResolvedMarkerGate).
v3.5.1
Fixed
- Windows flac auto-download now works for
scan/watch, not justinstall-flac. Previously the auto-installer was only reachable viafb install-flac;scan/watchdefaulted the install URL to null, so on Windows--integrity autosilently fell back to L1 and--integrity l3failed even though the (SHA-pinned) download path existed. FreeBird now auto-downloads the officialflacbinaries on Windows when none is found; macOS/Linux are unchanged (a hint to install viabrew/aptis shown).--no-auto-download/FREEBIRD_NO_AUTO_DOWNLOADstill disable it.
Changed
- License is now MIT (
LICENSEadded). - README rewritten for general users (simple-to-deep structure; implementation detail folded into collapsible sections). Contributor/architecture docs moved to
CONTRIBUTING.md.
Documentation
- Added an Information-level
Signal handlers ready.log in watch/service mode once OS signal handlers are installed — a useful readiness signal for service operators.