• v1.1.0 110062755b

    v1.1.0 Stable

    Jan released this 2026-07-22 22:46:21 +02:00 | 21 commits to main since this release

    musicfix v1.1.0

    Highlights

    Version 1.1.0 introduces incremental library processing, a restored cross-distribution installer, and built-in Apprise support.

    Normal maintenance runs no longer need to fully inspect the entire music library when only a small number of files have changed. Humanity may finally be spared one unnecessary full scan.

    Added

    Incremental library index

    • Added a SQLite-backed library index
    • Detects new, modified, and deleted audio files
    • Detects relevant artwork changes
    • Uses file path, size, and nanosecond modification time for change detection
    • Selects all audio files from affected album directories
    • Stores the index below the configured state directory as index.sqlite3
    • Updates the index automatically after successful write runs
    • Keeps pending changes available after dry runs
    • Falls back to a full run when no index exists

    Index commands

    musicfix index status
    musicfix index rebuild
    musicfix index clear
    

    Create the initial baseline:

    musicfix index rebuild
    

    Inspect pending changes:

    musicfix index status
    

    Delete the current index:

    musicfix index clear
    

    Incremental maintenance

    Normal complete runs are now incremental:

    musicfix all
    musicfix all --write
    

    Force a complete library pass:

    musicfix all --full
    musicfix all --full --write
    

    The following maintenance steps process only selected files during incremental runs:

    • FLAC repair
    • Title cleanup
    • Tag normalization
    • Filename normalization
    • Embedded cover extraction
    • Online cover lookup
    • Placeholder-cover generation

    Artist-image validation and cleanup remain global because they inspect directory-level library structure.

    Apprise notifications

    • Added Apprise as an automatic Python dependency
    • No separate Apprise installation is required
    • Added optional notifications after complete runs
    • Supports notifications for successful runs
    • Supports notifications for failed runs
    • Supports multiple Apprise service URLs
    • Uses the Apprise Python library directly
    • Notification failures do not change the musicfix run result

    Notification messages include:

    • Success or failure status
    • Dry-run or write mode
    • Run ID
    • Runtime
    • Audio-file count
    • Folder count
    • Total library size
    • Log-file path

    Example configuration:

    [notifications]
    enabled = true
    notify_on_success = true
    notify_on_failure = true
    urls = [
      "apprise://0.0.0.0",
    ]
    

    Installer

    • Restored install.sh
    • Added support for Arch Linux, CachyOS, EndeavourOS, Manjaro, Debian, Ubuntu, Linux Mint, Pop!_OS, Fedora, openSUSE, and Alpine Linux
    • Automatically installs required system packages when possible
    • Installs musicfix through pipx
    • Installs Python dependencies, including Apprise
    • Supports installing the latest branch or a specific Git tag
    • Prints Fish-specific PATH guidance when required

    Install the latest version:

    curl -fsSL \
      https://git.justdoit.network/Jan/musicfix/raw/branch/main/install.sh \
      | bash
    

    Install version 1.1.0:

    curl -fsSL \
      https://git.justdoit.network/Jan/musicfix/raw/branch/main/install.sh \
      | bash -s -- v1.1.0
    

    Changed

    • Complete maintenance runs now use incremental processing by default
    • Dry runs no longer consume pending index changes
    • Successful write runs rebuild the index after all file changes are complete
    • Apprise integration now uses the Python library instead of an external command
    • Generated configuration files include English comments describing supported options
    • README documentation now covers configuration, notifications, incremental processing, and installation
    • Configuration inspection remains read-only unless an actual setting changes

    Safety

    • No library changes are made without --write
    • Incremental index updates occur only after successful write runs
    • Interrupted or failed runs do not update the index
    • Suspiciously broad library roots remain blocked
    • Parallel write operations remain protected by a process lock
    • Logs, reports, backups, and run manifests remain available for recovery
    • Full scans remain available through --full
    Downloads