| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| ansimuz-0.1.2-1.fc43.x86_64.rpm | 2026-11-01 | 7.1 MB | |
| ansimuz-0.1.2-1.fc44.x86_64.rpm | 2026-11-01 | 7.1 MB | |
| ansimuz-0.1.2-1.fc45.x86_64.rpm | 2026-11-01 | 7.1 MB | |
| ansimuz-0.1.2-1.fc46.x86_64.rpm | 2026-11-01 | 7.1 MB | |
| ansimuz-git-0.1.2.r1.g5c6eb19-1-x86_64.pkg.tar.zst | 2026-11-01 | 9.7 MB | |
| SHA256SUMS | 2026-11-01 | 509 Bytes | |
| README.md | 2026-11-01 | 9.6 kB | |
| v0.1.2 source code.tar.gz | 2026-11-01 | 4.2 MB | |
| v0.1.2 source code.zip | 2026-11-01 | 4.2 MB | |
| Totals: 9 Items | 46.6 MB | 1 | |
ANSImuz v0.1.2 is a major reliability and structural release focusing on playback resilience, bulletproof MPV IPC lifecycle management, atomic zero-copy artwork caching, TOML settings migration, Unicode text formatting, and Python backend improvements.
Highlights
- Queue Continuation on Error: When a track encounters a playback or stream error in
MPV, ANSImuz now logs the failure to history and immediately advances to the next queued track instead of stopping and leaving the queue idle. - Piped MPV Diagnostics & Generation Sockets:
MPVstderr is now captured asynchronously to extract clear diagnostic errors (such as stream 403s or codec errors) rather than generic exit codes. Each playback generation receives an isolated IPC socket and atomic cancellation token, eliminating cross-talk from stale observer threads. - Atomic Zero-Copy Artwork Cache: Artwork in memory is now managed via
Arc<DynamicImage>, eliminating heavy pixel buffer copying on every 80 ms UI frame. Downloads are streamed with hard memory bounds (8 MB), writes use atomic temporary-to-final renames, and transient network failures are retried after a cooldown rather than permanently poisoning the cache. - TOML Configuration with Serde: Migrated
settings.tomlto structured TOML with Serde serialization and full error propagation, while retaining transparent backward compatibility for legacykey=valueconfiguration files. - Unicode-Aware Layouts: Upgraded string truncation across lists and modals to use
unicode-width, ensuring East Asian (CJK), full-width glyphs, and emojis never overflow column allocations or misalign terminal borders. - Python Backend Optimization: Lazy-initialized YouTube Music clients for Spotify resolution, added descriptive failure diagnostics, added type annotations to the
PyO3bridge, and introduced a dedicated test suite inbackend/tests/.
### What's Changed
#### Playback & MPV Lifecycle
- Automatic Queue Progression: Failing tracks no longer halt the entire queue; remaining tracks continue playing automatically.
- Repeat One Safety:
Repeat::Onerestarts tracks only after natural EOF completion, never after playback errors or crashes. - Process Reaping: Cache-dump processes that exceed the 600-second timeout are killed and reaped immediately, preventing orphaned background instances.
- Structured IPC with
serde_json: Replaced fragile string parsing withserde_json::Valueand request IDs (REQ_ID_VOLUME,REQ_ID_TIME_POS,REQ_ID_DURATION).
#### Artwork & Cache Manager
- Atomic Lookups: Unified cache lookup and insertion under a single lock to eliminate duplicate concurrent downloads for the same artwork.
- Streaming Limit: Replaced unbounded buffer downloads with an 8 KB chunked stream loop enforcing
MAX_IMAGE_BYTES(8 MB) mid-stream. - Decompression Safety: Configured
image::LimitsonImageReader(max_width = 4096,max_height = 4096,max_alloc = 64 MB) to prevent decompression bombs. - Centralized Atomic Writes: Introduced
write_cache_atomic()for all cache writes.
#### Search & State Management
- Search Generation IDs: Search requests now carry generation IDs (
SearchResponse) so late-arriving results from previous searches are discarded silently. - Preserved Results: Failed searches no longer blank the active screen; valid results from the previous search remain visible.
- Explicit
PlaybackStateEnum: Replaced overlapping booleans (is_resolving,paused,now_playing) with an explicit state machine (Stopped,Resolving,Playing,Paused). - Centralized Search Dispatcher: Unified asynchronous search spawning into
crate::music::spawn_search().
#### Python Backend & Packaging
- Lazy Initialization:
YTMusic()in the Spotify provider is now instantiated only when track resolution is actively needed. - Diagnostic Spotify Resolution: Rejections detail whether the failure was due to version conflicts, duration mismatch, or low similarity scores.
- Unbound Variable Fix: Fixed an
UnboundLocalErrorwhen all YouTube Music search attempts raised exceptions. - Dependency Sync: Fully aligned runtime dependencies across
requirements.txt,pyproject.toml, Arch LinuxPKGBUILD, and Fedora COPRansimuz.spec. - Smoke Tests: Added Python unit tests in
backend/tests/test_backend.pycovering imports, lazy initialization, resolution error reporting, and bridge routing.
Linux Packages
| Distribution | Package | Architecture |
|---|---|---|
| Arch Linux | ansimuz-git-0.1.2.*-x86_64.pkg.tar.zst |
x86_64 |
| Fedora 43-45 and Rawhide | ansimuz-0.1.2-1.fc*.x86_64.rpm |
x86_64 |
See the installation instructions in the README.
[!NOTE] The Arch package is the rolling
ansimuz-gitbuild. Fedora RPMs are versioned release packages.
Checksums
Download SHA256SUMS to verify package integrity.
Full Changelog: https://github.com/greenbugx/ANSImuz/compare/v0.1.1...v0.1.2