All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Docker: New
UMASKenvironment variable to control file creation permissions on bind-mounted volumes. Defaults to022(standard Linux:rw-r--r--). Set to000for UNRAID compatibility (rw-rw-rw-, matching UNRAID's sharednobody:usersmodel) or002for typical NAS / multi-user media setups (rw-rw-r--, group-writable).
- Docker: Fixed a font rendering issue in the web terminal that caused text to appear stretched or with excessive spacing between characters for many users. (ref: #40)
- Docker: Container now supports low PUIDs (e.g.
99for UNRAID, Synology) by overriding Debian's defaultUID_MIN=1000constraint during user creation.
Version 8.2 finally introduces the Backup & Restore feature. It allows you to backup the Dolby Vision enhancement layer before or during a conversion. You can then delete the original file and, as long as you keep the converted file, restore the original at any time using the backed up EL. Benefits: Save tons of disk space. Instead of keeping the original file around, you just store the enhancement layer, which is much smaller.
This release is dedicated to my cat Pixel. Rest in Peace.
- Backup & Restore:
- Use
dovi_convert backup movie.mkvto backup the enhancement layer tomovie.dovi. - Use
dovi_convert restore movie.mkvto restore the full DoVi 7.1 file using the convertedmovie.mkvand themovie.dovibackup archive. - Use
dovi_convert convert movie.mkv --backupto backup the enhancement layer during a conversion - Use
dovi_convert convert movie.mkv --backup --deleteto backup during conversion and delete the original in one go. - Supports
--outputflag to control where the backup archive is stored (Limitation: if backing up during a conversion, the backup archive AND the converted file will go to the output directory - will be improved in the next release). - Refer to the full documentation for more information.
- Use
- Improved signal handler to make it context-aware and print appropriate exit messages depending on command used
- Removed old, unused code
- Removed the macOS notification that was sent after conversions. The feature was never really built out and mostly useless. I may re-introduce a proper notification system in the future.
This is a maintenance release with some bug fixes and code improvements
- Removed unused code in the cleanup function.
- Refactored stats collection and batch summaries
- Streamlined batch pre-flight and summary UI
- Fixed
scanandinspectfailing on files in folders containing commas (e.g., "Movie, The (2025)"). (Fixes #36) - Fixed an issue where
CTRL-Cwasn't handled properly during batch conversions
- Compact Batch Output Mode:
convertbatch mode now displays a clean, table-based progress view by default.- Use
--verbose/-vflag to see the previous detailed per-file output.
- Use
- No-Color-Mode: dovi_convert now respects the NO_COLOR environment variable and disables CLI colors when set.
- Session Persistence in Docker: added tmux to the container for persistent sessions. For more information, read the Docker guide.
- Improved colors for light theme terminals (I was told they exist). Yellow is now Magenta and Cyan is now Blue. Should improve readability in terminals with light backgrounds.
scanoutput: cleaned up and fixed some text alignment and padding issues.
This is a major release that introduces significant changes to dovi_convert. Please read the docs and the release notes carefully before upgrading. Breaking: This version introduces a completely rewritten argument parser and command syntax, to align with Unix standards and to make the tool more user-friendly.
This release also merges the convert and batch commands into a single, unified convert command.
If you are scripting dovi_convert, you will need to update your scripts to use the new command syntax.
- Unified Convert Command: The
batchcommand has been merged intoconvert. You can now pass both files and directories toconvert:dovi_convert convert file.mkv- converts a single filedovi_convert convert dir/- scans directory, shows summary, asks for confirmation and converts files found (batch behavior)dovi_convert convert *.mkv- converts multiple files inline- Directories trigger the familiar batch-style pre-scan with summary and confirmation prompts.
- The
--recursiveflag now works withconvertwhen directories are provided.
--yesBehavior: When using--yesfor automated workflows, Simple FEL files are now skipped by default to avoid unexpected prompts. Use--yes --include-simpleto include them.- Command Syntax: The tool now distinguishes between commands and flags:
dovi_convert [command] [flags] [files]- for example:
dovi_convert convert --safe file.mkvinstead ofdovi_convert -convert file.mkv -safe. - Commands are now single words without leading hyphens, and flags use a double-hyphen.
- Some of them have short abbreviations (e.g.
-yfor--yes). - See
dovi_convert helpfor more info.
- for example:
- Command Validation: Added command flag validation to prevent invalid flag combinations.
- Code Organization: Reorganized some code for better maintainability.
- Help Text Refactor Refactored help text, separated from main app class (it shouldn't have been in there in the first place).
- Quick Help: Streamlined and shortened quick help output, with hint to use
dovi_convert helpfor all commands and flags.
batchcommand removed, merged intoconvert.
- old command syntax with
-[command](e.g.-convert)
This is a last "cleanup" release before the next major version 8.0.0
- Homebrew - you can now install dovi_convert via Homebrew (e.g.
brew install dovi_convert)
-cleanupincorrectly flagged valid backups as orphans when the original filename contained multiple dots.
- Critical: Fixed incorrect metadata interpretation in base layer peak brightness detection. The tool was reading the wrong HDR10 metadata field, which could affect FEL complexity verdicts in
-scanand-inspect.
-inspectnow indicates when MaxCLL metadata is unavailable and a default value is being used ("1000 nits (default)").
-
HDR10 Conversion: New
-hdr10flag for-convertto convert to HDR10 instead of Dolby Vision profile 8.1. Retains HDR10+ metadata if present in the source. Useful for Complex FEL files where you want to prevent devices like the Shield from converting to 8.1 when it shouldn't. Read the docs for more info. -
Scan Filter: New
-candidatesflag for-scanto show only files that can be converted, filtering out SDR, HDR10, Profile 8, etc. Useful for quickly identifying conversion targets in large libraries.
- Cleaned up
-helpmessage formatting. -scannow displays a clear message when no MKV files are found instead of an empty table.
- Custom Output Directory: New
-oflag to specify a custom output directory for converted files (-convert file.mkv -o /output). Works with-convertand-batch. Read docs for more info. (Ref #4)
- Improved error messages when tools like mkvmerge or mediainfo fail.
- Improved
-debuglogging - If more than 50% of probes fail during -scan, we now treat it as an error and exit.
- Batch Recursion Syntax: The shorthand
-batch 2no longer works. Use-batch -r 2instead, matching-scanand-cleanup.
- Multi-File Convert: Convert multiple files in one command (
-convert file1.mkv file2.mkv). Works with wildcards (-convert *.mkv). A summary is displayed at the end. - Target Directories: Point
-scanor-batchat specific directories instead of navigating there first (-batch /movies). Multiple directories are supported (-scan /movies /tv). - Recursive with Directories: The
-rflag works with target directories (-batch /movies -r 3). - Mixed Inputs for Scan: Combine files and directories in a single
-scancommand (-scan /movies file.mkv). - Temp Directory: New
-tempflag to redirect intermediate files to a fast drive (SSD). This dramatically improves conversion speed when source files are on slow storage like HDDs or network shares. Example:-convert movie.mkv -temp /mnt/ssd. Works with-convertand-batch. - Directory Grouping: Recursive scans now group files by directory with clear headers, making it easier to see which files belong where.
- Docker: The container no longer modifies permissions on bind-mounted directories. Users must ensure their
PUID/PGIDmatches the ownership of their files (standard Docker practice). - Docker: Users can now bind-mount a temp directory for the new
-tempfeature. Example:-v /mnt/ssd:/cachethen use-temp /cache.
- Better Error Handling: Fixed a bug where temporary files were not deleted if the script exited due to a conversion error (Ref #21).
- Conversion Verification: Implemented a fallback mechanism for frame verification. If
MediaInforeports a frame mismatch (common with inaccurate source metadata), the script now double-checks usingffprobestream analysis before failing (Ref #21). - WSL Path Limit: Improved handling of long file paths in WSL, which can exceed the 255 character limit (Ref #14).
- Windows: Improved exiting on native Windows (WSL required) (Ref #22).
This is a major release. The tool has been completely rewritten in Python, replacing the original Bash script.
- Python 3.8+ is now required. The Bash version is no longer maintained.
- Dependencies changed: Removed
jq,bc,curl. The script now only requires Python and core media tools. - Docker: The
:betatag will be deprecated. Switch to:latest.
- Complete Python rewrite for improved maintainability and cross-platform compatibility.
- 5x faster RPU analysis (
-inspect) due to native Python processing with streaming parser. - Reduced dependencies — no more shell utilities like
jq,bc,curl,sed,awk, orgrep. - Improved error handling — better detection of tool failures and MediaInfo issues.
- WSL Required — Native Windows is explicitly blocked. Windows users must use WSL2 or Docker.
- Process safety improvements for
-inspectcommand.
If you were using the :beta tag, please update to :latest. The :beta tag will be removed after a transition period.
- Process Safety: Fixed an issue where the
-inspectcommand could potentially give a false "safe" verdict if one of the internal tools crashed silently. It now correctly reports a failure in this scenario.
- Internal Optimization: Refactored core analysis commands to improve stability and make future feature updates safer.
- Error Handling: Improved detection and handling of MediaInfo-related issues.
- Windows: Added a hard error message when running on Native Windows (WSL required). Native Windows is not supported.
- UI: Removed misleading "(Slow)" label from export step and improved color contrast in scan advisory.
- Significantly reduced memory usage and improved speed during
-inspectanalysis (Streaming Parser).
- Improved Docker container compatibility (Temporary files now use bind-mount).
- Improved Docker container compatibility (Temporary files now use bind-mount).
- Interactive Batch Exclusion: Responding "No" to the "Include Simple-FEL" prompt now correctly filters those files from the queue instead of cancelling the entire batch.
- Ctrl+C Handling: Fixed an issue where the script would hang if interrupted during batch mode prompts.
- Redundant Prompts: Fixed an issue where Simple-FEL files would trigger a confirmation prompt for every single file even after being approved at the batch start.
- Terminology: Updated batch warning messages to refer to
-scaninstead of-check. - Messaging: Improved clarity of Simple-FEL inclusion messages ("Explicitly included").
- Rewritten from scratch: The entire tool has been rewritten in Python, replacing the original Bash script.
- Why? To ensure future maintainability, improve stability, and allow for more new features in the future (Bash was getting out of hand).
- Performance: RPU analysis (
-inspect) is 5x faster due to native Python processing. - Dependencies: Removed
jq,bc,curl,sed,awk,grep. The script now only uses the standard library and core media tools (ffmpeg, etc.). - Parity: Functionally identical to the v6 Bash version.
- New
-scancommand - A better-named alias for-check. Both commands work identically.-checkremains supported for backwards compatibility.
- README completely rewritten for clarity and structure.
- All "deep scan" terminology replaced with "scan" throughout the script.
- macOS: Homebrew no longer required if all dependencies are already installed.
- macOS: Added guidance for users without Homebrew during dependency check.
- dovi_tool install instructions now link to main repo page.
- Fixed
-include-simpleflag not suppressing per-file Simple FEL prompts during batch runs (Fixes #5).
- Cleanup release: Updated internal help text to better reflect features and changes from recent versions.
- Fixed
jqerrors when scanning directories containing macOS resource fork files. - Fixed random "File not found" errors and corrupted filenames during recursive scans.
- Scan commands now fully exclude macOS resource fork artifacts (
._*files and folders).
- Improved color theme of the -check output to better distinguish between different file types.
- Recursive scans now display filenames only (not folder paths) for cleaner output.
- Automatic Update Check: The tool now silently checks for updates in the background without slowing down execution (Zero-Latency). If a new version is found, a notification is displayed on the next run.
- Manual Update Check: Added
-update-checkcommand to manually check for the latest version and report status immediately. - Automatic Dependency Installation (Beta): If dependencies are missing, the tool now offers to install them automatically. Supports Homebrew (macOS), apt (Ubuntu/Debian), dnf (Fedora), and pacman (Arch).
- Simple FEL Warning: The
-convertcommand now prompts for confirmation when processing Simple FEL files to match the safety behavior of batch mode.
- Dependencies: Added
curlto the list of required dependencies (standard on most systems).
- Batch output now displays separate counts for MEL and Simple FEL files.
- Added warnings when "Simple FEL" files are detected in batch mode.
-include-simpleflag to allow automated processing of "Simple FEL" files in batch mode.- Added context to the check command explaining "Simple FEL" results.
- Improved detection logic to be more robust and accurate.
- Improved handling of titles mastered at 4000 nits.
- Batch mode now defaults to pausing if "Simple FEL" files are found, even with
-y. - Updated help text descriptions for clarity.
- Deep Scan FEL Detection: New analysis logic that inspects the RPU structure to deterministically identify "Complex" FEL titles (e.g. FEL that elevates luminance and shouldn't be converted to profile 8.1).
-forceFlag: Override safety warnings for Complex FEL titles (e.g.,dovi_convert -convert movie.mkv -force). Works for single file and batch mode.- Improved Batch Summary: Batch mode now tracks "Ignored" (Not Profile 7), "Skipped" (Unsafe), and "Converted" files separately. It also distinguishes between "Simple" and "Forced" conversions in the final report.
-inspectCommand: New standalone tool to inspect full RPU structure and verify Complex FEL verdicts by checking the entire file's brightness metadata.
- Default Behavior:
-checknow performs a Deep Scan on Profile 7 files by default. - Strict Enforcement: The tool now hard-fails if the input file is not Dolby Vision Profile 7 (removed interactive prompts for non-P7 files).
- Safe Mode UI: Progress numbering aligned to standard workflow (
[1/3] Extracting,[1/3] Converting) for consistency. - Arguments: Arguments can now be passed in any order. Fixed
-rargument parsing logic. - Safety: Conversion now defaults to skipping/warning on Complex FELs to prevent data loss.
- Piping Implementation: Standard conversion now pipes
ffmpegoutput directly todovi_tool. This eliminates temporary disk usage for the video stream and improves processing speed. - Batch Summary: The
-batchcommand scans the directory and displays total file count and size before requesting confirmation. - Smart Fallback: Added logic to detect specific stream errors (often caused by Seamless Branching) and offer Safe Mode as a retry option.
- Debug Logging: Added
-debugflag to write full tool output todovi_convert_debug.logfor troubleshooting. - Global
-yFlag: Added support for auto-confirming interactive prompts (batch start and cleanup). - Metrics: Script now reports space saved (EL discarded) and average FPS upon completion.
- Cleanup Scope:
-cleanupnow defaults to non-recursive scanning. Added-rflag to enable recursive mode. - Cleanup UI: The command now lists all files to be deleted before asking for confirmation.
- UI: Replaced static text with a spinner for progress indication.
- Validation: Added strict argument parsing to prevent syntax errors.
- Initial public release.