github jessielw/DeeZy 1.3.1

latest releases: 1.3.13, 1.3.12, 1.3.11...
4 months ago

[1.3.1] - 2025-09-22

Added

  • Output filename templating (opt-in):

    • New CLI flag: --output-template — provide a lightweight template for auto-generated outputs when you don't supply --output explicitly. Supported tokens: {title}, {year}, {stem}, {source}, {lang}, {channels}, {worker}, {delay}.
    • --output-preview — preview the rendered filename without performing any work (safe dry-run for templates).
    • Template behavior mirrors the automatic filename generator's delay semantics (prefers mediainfo delay, falls back to filename parsing, and injects [DELAY 0ms] when a delay was stripped and ignore was requested).
  • Tests: Added unit tests covering the template renderer and delay flag helper to ensure consistent behavior across edge cases (token substitution, sanitization, filename delay parsing, TV season/episode handling, and delay injection behavior).

  • Default bitrates setting for AC4.

  • --parse-elementary-delay - When input is an elementary (demuxed) stream, parse any delay in the filename and reset it to zero.

  • --working-dir - Set a centralized working directory for job files, logs, and batch-results. Overrides config default when provided.

  • --batch-summary-output - Path to write a JSON summary for a batch run. When provided, a single JSON file with per-file metadata (status, durations, log file, output path) is emitted.

  • --batch-output-dir - When supplied, encoders will place generated outputs into this directory unless the user explicitly supplied --output for a job. Useful for centralized batch storage.

  • --overwrite - encode flag to allow overwriting existing output files. When not set, the CLI will fast-fail/skips jobs whose target outputs already exist.

  • --max-parallel - Integer (default 1). Controls how many files are processed concurrently in batch mode.

  • --max-logs - Integer to retain a maximum number of log files in the working logs directory; older logs are trimmed automatically.

  • --max-batch-results - Integer to retain a maximum number of batch result JSON files in the working batch-results directory; older results are trimmed.

  • Centralized atomic move helper in the DEE encoder base class to perform safe, fast output file placement. Uses an atomic replace when possible and falls back to a cross-filesystem-safe move when needed.

  • DRY refactor: replaced per-encoder unlink+move logic with the centralized helper across DD, DDP, Atmos and AC4 encoders. This unifies overwrite semantics and reduces duplicated code.

  • Automatic filename generation has been greatly improved:

    • Will check for common attributes via the mediainfo/input name and append that to the automatically generated file name.
    • Detects name, year, season, episode and adds them to the name when generating a new name.
  • CLI:

    • --temp-dir - When supplied, encoders now create a predictable per-input subfolder under the provided base directory: <temp-dir>/<input_stem>_deezy. This centralizes temporary artifacts while keeping them isolated per-source for safe reuse and selective cleanup.
    • --reuse-temp-files - Opt-in flag that enables reusing extractor outputs (FFmpeg / TrueHDD) when the extractor command signature matches a previously saved extraction. When --reuse-temp-files is used the encoder registers metadata about the extraction so subsequent runs can reuse it. This flag implies --keep-temp (temp files are preserved when reuse is requested).
  • Encoders / Internal:

    • Temporary artifact filenames are now codec-scoped (for example: {output_stem}.DD.wav or {output_stem}.DDP_BLURAY.wav) to avoid cross-variant collisions when a shared temp folder is used.
    • Per-encoder metadata is stored in a single metadata file inside the temp folder and now uses an "encoders" map to keep signatures and produced filenames isolated per encoder/format.
    • Metadata writes use atomic same-directory replace semantics (write a tmp file then os.replace) to avoid partially written files.
  • Concurrency & phase limits:

    • New CLI flags: --limit-ffmpeg, --limit-dee, --limit-truehdd allow fine-tuning concurrency for each heavy phase.
    • If per-phase flags are not provided, each phase defaults to the value of --max-parallel.
    • Exception: the DEE phase defaults to a conservative fraction of --max-parallel (roughly half) to avoid saturating CPU/IO on slower machines; users can override with --limit-dee.
    • Values greater than --max-parallel are capped to --max-parallel and a warning is emitted at startup.
    • --jitter-ms flag: introduces a small randomized delay before heavy phases to reduce thundering-herd spikes in high-parallel runs.
  • Added support for optional per-source default bitrate sections in the configuration file under [default_source_bitrates.<codec>] (for example [default_source_bitrates.ddp]).

    • Keys are ch_1..ch_8 and are opt-in (the generated deezy-conf.toml contains commented example blocks). Encoders will use these values when no CLI/preset bitrate is provided. Encoders validate config values and will select the closest allowed bitrate if a configured value is not permitted. Precedence is: CLI > per-source config > format-level config > built-in defaults.

Changed

  • Config Breaking Change:

    • [default_bitrates.ddp_bluray] needs to be renamed to [default_bitrates.ddp-bluray] to match the codec properly. This will be automatic if you generate a new config, otherwise you should make this change manually if using the config.
    • Updated some of the default bitrates in the generated config.
  • Config: Use platform-aware user config location and unified Windows folder

    • ConfigManager now prefers a stable user config location when no explicit
      config path is provided. The search order is: current working directory
      (per-project) → user config directory (platform default) → working dir
      beside the executable (for bundled/exe usage).
    • On Windows the user config file will be placed in a single deezy folder
      under your local app data (for example: %LOCALAPPDATA%\deezy\deezy-conf.toml).
    • deezy config generate now writes to the user config dir by default when
      no path is supplied. This makes config placement deterministic across
      installations while preserving portable per-executable configs.
  • Parsing delay from filename:

    • When a file is in it's elementary format (demuxed by itself) and there is a delay string we will parse it and zero it out if --parse-elementary-delay is used. This will effectively set the audio to 0ms delay during encoding as well as strip it from the filename.
      • If the user explicitly defines an output file name no logic will be ran on the output file (as to not change the users desired output name).
    • If --parse-elementary-delay is not used, delays will be handled like they was previously in containers and no logic will be ran against elementary files.
  • Improved language detection for elementary formats.

  • Updated default config.

  • Temp directories by default now get built beside the input file (but can go to a parent folder if specified by the user).

  • DEE json output files are now suffixed with input_file_name.encoder.json.

  • Refactor: DRYed up delay-handling logic across DEE encoders by adding a shared helper in the DEE base encoder. This centralized computation for template-related delay flags and reduced duplicate code across DD, DDP, Atmos and AC4 encoders.

Fixed

  • Codec channel/bitrate defaults from config was not being set.
  • Encoder DD doesn't support DPLII, so FFMPEG is used when DPLII is requested. This has been fixed.

Don't miss a new DeeZy release

NewReleases is sending notifications on new releases.