-
v1.2.3 Stable
released this
2026-07-23 15:42:28 +02:00 | 3 commits to main since this releasemusicfix 1.2.3
This release improves HTML notifications and fixes rich message delivery through an Apprise API gateway.
Highlights
- redesigned HTML notifications with a cleaner, email-friendly layout
- added clearly separated sections for run information, library statistics, changes, and details
- added status colors for successful and failed runs
- improved spacing, typography, path wrapping, and mobile readability
- preserved HTML and Markdown formatting when notifications are sent through an Apprise API gateway
- added direct delivery to the Apprise API
/notify/{key}endpoint - added support for forwarding configured Apprise tags
Fixed
- fixed labels and values appearing merged in some email clients
- fixed HTML notifications being converted into plain text by the Apprise gateway
- fixed long log and manifest paths breaking the notification layout
- fixed rich notification formats not being passed correctly to the Apprise API
Compatibility
Plain-text and Markdown notifications remain unchanged.
Existing notification configurations using URLs such as:
apprise://server:8000/key/?tags=allDownloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
v1.2.1 Stable
released this
2026-07-22 23:37:53 +02:00 | 16 commits to main since this releasemusicfix v1.2.1
Highlights
Version 1.2.1 adds a small but useful convenience command for opening the active musicfix configuration directly in Nano.
Users no longer need to repeatedly remember or search for the configuration path. A modest victory over hidden files and human memory.
Added
Configuration editor command
Open the active musicfix configuration file directly in Nano:
musicfix config --editThe command automatically uses the active configuration path, normally:
~/.config/musicfix/config.tomlIt respects the configuration file currently loaded by musicfix and exits with Nano's return status.
If Nano is not installed, musicfix displays a clear error message in the selected interface language.
Changed
- README configuration documentation now includes
musicfix config --edit - the project version has been updated to
1.2.1 - configuration editing no longer requires manually entering the full file path
Language support
The editor command includes messages in both supported interface languages:
- German
- English
Example German error:
FEHLER: nano ist nicht installiert.Example English error:
ERROR: nano is not installed.Usage
Open the configuration:
musicfix config --editValidate the configuration without editing it:
musicfix config --checkDisplay the active configuration:
musicfix configNotes
The generated configuration comments remain in English and continue to document:
- music and state paths
- interface language and color output
- retention periods
- cleanup extension protection
- library categories
- Apprise notification settings
- notification message formats
No new configuration option was required for this release because
--editis a command-line convenience feature rather than a persistent setting.Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- README configuration documentation now includes
-
v1.2.0 Stable
released this
2026-07-22 23:34:10 +02:00 | 17 commits to main since this releasemusicfix v1.2.0
Highlights
Version 1.2.0 introduces universal Apprise notification templates, configurable message formats, richer run summaries, and a clearer README introduction that explains the complete musicfix workflow.
Notifications are now designed to remain readable across email, Telegram, Discord, Slack, ntfy, Gotify, and plain-text destinations without depending on fragile service-specific formatting. A rare outbreak of sensible interoperability.
Added
Universal notification templates
musicfix now sends structured notifications for:
- successful runs
- failed runs
- Apprise test messages
The templates are available in German and English and include:
- run mode
- run ID
- runtime
- audio-file count
- folder count
- total library size
- new files
- modified files
- deleted files
- selected audio files
- affected albums
- log path
- manifest path
- installed musicfix version
Failure notifications additionally include:
- failed maintenance step
- exit code
Configurable notification format
The notification format can now be selected in the configuration:
[notifications] enabled = true notify_on_success = true notify_on_failure = true format = "markdown" urls = [ "apprise://172.16.3.150:8000/jarvis/?tags=all", ]Supported values:
format = "text" format = "markdown" format = "html"Recommended usage:
textfor maximum compatibilitymarkdownas the default for mixed serviceshtmlmainly for email and other rich-content destinations
Cross-service compatibility
Notification templates intentionally avoid:
- Markdown tables
- complex nesting
- service-specific markup
- formatting that becomes unreadable as plain text
The same message structure can therefore be used with:
- Telegram
- Discord
- Slack
- ntfy
- Gotify
- other Apprise-supported services
- plain-text notification targets
Apprise notification types
musicfix now sends the appropriate Apprise notification type:
successfor successful runsfailurefor failed runsinfofor test messages
Services that support notification types may use their own icons, colors, priorities, or visual indicators.
Realistic Apprise template preview
The existing test command now sends the same structured template used by real maintenance runs:
musicfix apprise testThe test message contains realistic example data, including:
- write mode
- example run ID
- example runtime
- library statistics
- incremental change counts
- example log path
- example manifest path
- installed musicfix version
This makes it possible to preview the selected format without running library maintenance.
Improved README introduction
The README now includes a concise English description of the project:
musicfixis a safety-focused command-line toolkit for maintaining large,
folder-based music libraries on Linux. It can validate and repair FLAC files,
clean metadata and titles, normalize filenames, manage album and artist
artwork, quarantine unwanted files, and keep detailed logs, reports, backups,
and reversible run manifests.The introduction also explains:
- dry-run and write behavior
- incremental SQLite indexing
- configurable cleanup protection
- support for audio, image, lyrics, video, and custom formats
- optional Apprise notifications
- compatibility with multiple notification services
Changed
- Markdown is now the default Apprise message format
- notification messages use a clearer section-based layout
- run notifications now include incremental change statistics
- failure notifications now identify the failed step and exit code
- notification details now include the manifest path
- notification footers now include the installed musicfix version
- the Apprise test command now previews the real notification template
- README documentation now reflects the complete current feature set
- notification configuration examples now include the
formatoption
Configuration example
[notifications] # Enable automatic notifications after complete musicfix runs. enabled = true # Send a notification when a run completes successfully. notify_on_success = true # Send a notification when a run fails. notify_on_failure = true # Message format: text, markdown or html. # Markdown is the recommended default across mixed services. format = "markdown" # One or more Apprise service URLs. urls = [ "apprise://172.16.3.150:8000/jarvis/?tags=all", ]Example Markdown notification
✅ musicfix completed successfully ## Run **Mode:** `Write` **Run ID:** `20260722-224502-815491` **Runtime:** `12 min 38 s` ## Library **Audio files:** `8,197` **Folders:** `705` **Library size:** `157.80 GiB` ## Changes **New:** `12` **Modified:** `4` **Deleted:** `1` **Selected audio files:** `23` **Affected albums:** `6` ## Details **Log:** `/home/user/.local/share/musicfix/logs/musicfix.log` **Manifest:** `/home/user/.local/share/musicfix/runs/example/manifest.json` --- musicfix 1.2.0Example failure notification
❌ musicfix failed ## Run **Mode:** `Write` **Run ID:** `20260722-224502-815491` **Runtime:** `8 s` ## Library **Audio files:** `8,197` **Folders:** `705` **Library size:** `157.80 GiB` ## Changes **New:** `2` **Modified:** `1` **Deleted:** `0` **Selected audio files:** `7` **Affected albums:** `2` ## Details **Failed step:** `flac-repair` **Exit code:** `1` **Log:** `/home/user/.local/share/musicfix/logs/musicfix.log` **Manifest:** `/home/user/.local/share/musicfix/runs/example/manifest.json` --- musicfix 1.2.0Testing
Verify the active configuration:
musicfix config --checkCheck required dependencies:
musicfix doctorPreview the selected notification format:
musicfix apprise testRun an incremental dry run:
musicfix allRun incremental maintenance with changes enabled:
musicfix all --writeForce a complete library pass:
musicfix all --full musicfix all --full --writeSafety
- notifications do not modify the music library
- notification failures do not change the maintenance run result
- dry runs remain read-only
- write operations still require
--write - failed or interrupted runs do not update the incremental index
- unsupported files are moved to quarantine instead of being deleted directly
- logs, reports, backups, and manifests remain available for inspection and recovery
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
v1.1.1 Stable
released this
2026-07-22 23:13:57 +02:00 | 19 commits to main since this releasemusicfix v1.1.1
Highlights
Version 1.1.1 improves cleanup safety, adds configurable file-extension preservation, expands video-file support, and introduces a dedicated Apprise test command.
The cleanup step is now far less likely to mistake a perfectly valid video file for digital litter, which is a reassuringly low bar that software still manages to trip over.
Added
Configurable cleanup allow-list
A new
[cleanup]section controls which file extensions must be preserved:[cleanup] keep_extensions = [ ".flac", ".mp3", ".m4a", ".jpg", ".png", ".mkv", ".mov", ".webm", ]The allow-list:
- is case-insensitive
- accepts extensions with or without a leading dot
- removes duplicate entries automatically
- can be extended with custom file formats
- can be reduced by removing or commenting out entries
Files whose extension is not included may be moved to quarantine during a cleanup write run.
Default video-file protection
Common video formats are now preserved by default:
.3gp.asf.avi.divx.flv.m2ts.m4v.mkv.mov.mp4.mpeg.mpg.mts.ogv.rm.rmvb.ts.vob.webm.wmv
Common audio, lyrics, and image formats also remain protected by default.
Apprise test command
A dedicated notification test command is now available:
musicfix apprise testThe command:
- sends a real test notification
- uses every URL configured in
[notifications].urls - works even when automatic notifications are disabled
- validates whether configured Apprise URLs can be loaded
- reports delivery success or failure
- supports German and English output
- does not modify the music library or incremental index
Example German output:
✓ Apprise-Test erfolgreich: 1 ZielExample English output:
✓ Apprise test successful: 1 targetChanged
- Cleanup now receives its protected extensions from the central configuration
- Generated configuration files include a documented
[cleanup]section - The README now explains cleanup behavior, quarantine safety, and extension customization
- Configuration output shows the number of protected cleanup extensions
- Cleanup reports configured file extensions as an explicit preservation reason
- Apprise testing no longer requires a complete maintenance run
Fixed
- Video files such as MKV, MOV, M4V, WebM, AVI, M2TS, TS, VOB, and WMV are no longer quarantined by default
- Custom file extensions can now be protected without changing source code
- Cleanup-extension matching now works consistently regardless of capitalization
- Extensions without a leading dot are normalized automatically
- New cleanup messages are available in both German and English terminal output
Configuration example
[cleanup] # Extensions that cleanup must preserve. Matching is case-insensitive. # Comment out an entry to stop preserving that format. # Add another extension to preserve additional file types. # The leading dot is optional, but recommended for readability. # Files not listed here may be moved to quarantine by cleanup --write. keep_extensions = [ # Audio ".aac", ".aif", ".aiff", ".alac", ".ape", ".flac", ".m4a", ".mp3", ".mp4", ".ogg", ".opus", ".wav", ".wma", ".wv", # Lyrics ".lrc", ".lyrics", # Images ".avif", ".bmp", ".gif", ".jpeg", ".jpg", ".png", ".webp", # Video ".3gp", ".asf", ".avi", ".divx", ".flv", ".m2ts", ".m4v", ".mkv", ".mov", ".mpeg", ".mpg", ".mts", ".ogv", ".rm", ".rmvb", ".ts", ".vob", ".webm", ".wmv", # Optional custom formats # ".cue", # ".nfo", ]Safety
Preview cleanup actions without changing files:
musicfix cleanupApply cleanup and move unsupported files to quarantine:
musicfix cleanup --writeRun the complete maintenance workflow:
musicfix all musicfix all --writeTest notifications independently:
musicfix apprise testFiles are never permanently deleted directly by cleanup. Unsupported files are moved to the configured quarantine directory first.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
v1.1.0 Stable
released this
2026-07-22 22:46:21 +02:00 | 21 commits to main since this releasemusicfix 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 clearCreate the initial baseline:
musicfix index rebuildInspect pending changes:
musicfix index statusDelete the current index:
musicfix index clearIncremental maintenance
Normal complete runs are now incremental:
musicfix all musicfix all --writeForce a complete library pass:
musicfix all --full musicfix all --full --writeThe 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 \ | bashInstall version 1.1.0:
curl -fsSL \ https://git.justdoit.network/Jan/musicfix/raw/branch/main/install.sh \ | bash -s -- v1.1.0Changed
- 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
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
v1.0.0 Stable
released this
2026-07-22 22:08:02 +02:00 | 25 commits to main since this releaserelease
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)