Repository navigation
v0.7.0.0
Answers issue #4 with a debug switch — and fixes four defects that switch made visible.
Explain every decision in the log
A new General option. With it on, every library item logs what ffprobe found, each trigger-rule condition with its configured value, the value it was compared against and whether it passed, and the reason anything was skipped:
Pre-Transcode evaluation of /media/Movie.mkv:
video=hevc 1920x1080 @ unknown (probe reported none) kbps, fps=23.976,
audio=aac/2ch, container=matroska,webm, duration=118 min, size=4021 MB
rule 'h265 too big (2hr)' (match ALL) => MATCH
VideoCodec In 'HEVC' | actual: hevc => PASS
VideoDurationMinutes GreaterThanOrEqual '100' | actual: 118 => PASS
FileSizeMb GreaterThanOrEqual '950' | actual: 4021 => PASS
verdict: at least one rule matched
Previously the evaluator had eight silent exits and only logged on success, so a rule that did not fire was undiagnosable.
Fixes
- A matched rule could be silently vetoed. The compliance check compares codec, container, resolution, audio and HDR — never file size or bitrate — so a profile meant to shrink material that already carries the target codec found every such file "compliant" and dropped it. Profiles can now switch off Skip files already matching this profile. On by default, so nothing changes for existing setups.
- A profile could write its output over its own source (separate-directory mode, no output directory, container matching the source's extension). The result was a
Movie (1).mkvbeside the original, which Jellyfin indexed as a second movie and the next sweep re-encoded intoMovie (1) (1).mkv— one more generation every sweep. Now refused with an actionable message, on both the sweep and the manual single-item path. - 10-bit sources were flattened to 8-bit, and HDR with tone-mapping off produced 8-bit samples still tagged as HDR — the one combination that is always wrong. The chosen encoder is now asked which pixel formats it accepts (they differ:
yuv420p10lefor libx265,p010lefor the NVENC/QSV/AMF families, none at all forh264_qsv) and the depth is kept for HEVC/AV1/VP9 targets and for untone-mapped HDR. H.264 still gets 8-bit — its 10-bit profile is not hardware-decodable on most clients. Configurable per profile. - Duration rules died silently on files whose container reports no format-level duration. The probe now falls back to the longest stream, then to the Matroska
DURATIONtag.
Also
- A non-media file now fails with
could not probe source fileinstead of a raw ffmpeg error code. - An alternate version Jellyfin already groups by filename is no longer linked a second time — on 10.11 that made the version picker list the transcode twice.
- Pausing the queue survives a server restart.
- Optional cap on retained finished jobs (0 = keep everything, the default).
Verified
219 unit tests, plus 44 scenarios run against a live Jellyfin 10.11.11 with real ffmpeg: all three output policies, the discard-if-larger and compliance-skip paths, five failure paths, job trimming, cancel, pause/resume (confirmed to actually suspend the encoder process), concurrency, seven rule-condition combinations through a per-library override, and the alternate-version merge.