Skip to content

v0.11.1.0 — bug sweep: data safety, Apple playback, queue fixes

Latest

Choose a tag to compare

@mugurc mugurc released this 20 Oct 11:15

A bug-fix release, from a review of the whole plugin. If you use Replace in place, please update.

Which build is yours

Your server Use
Jellyfin 12.0 – 12.2 this release — .NET 10, targetAbi 12.0.0.0
Jellyfin 10.11 0.10.2.0 — the same fixes, built for 10.11

Installing from the plugin repository picks the right one for you.

Your files and settings

  • Replace in place no longer destroys a file that changed during the encode. If Sonarr/Radarr imported an upgrade under the same name while the old release was encoding, the upgrade was overwritten by an encode of the old one — or, for mkv → mp4, deleted. The plugin now checks the source again right before it touches anything; if it changed or was deleted, the encode is thrown away and the file left alone.
  • One stray character no longer wipes your whole configuration. A control character pasted into any text field saved fine, then made the file unreadable at the next start, and Jellyfin silently replaced it with defaults — every profile, rule and library override gone. Such characters are now removed on save, and if the file still can't be read at startup it is backed up first, with the recovery steps in the log.
  • Jobs for a deleted profile no longer run under the default profile (which could be replace-in-place). They fail with a message saying so.
  • mpegts and similar containers get extensions Jellyfin indexes (.ts instead of .mpegts), so replacing a recording no longer drops it from the library. A profile whose output Jellyfin would not index is refused before encoding.
  • If the original can't be deleted after a replace (a player had it open), the job no longer fails and piles up (1) copies on each retry. On case-insensitive disks (macOS, SMB shares, exFAT) GOPR0001.MP4 is no longer replaced as GOPR0001 (1).mp4.

Playback

  • Surround audio Apple devices dropped. With jellyfin-ffmpeg, AC-3/DTS 5.1 re-encoded to AAC came out with a channel layout Apple clients don't accept, so the track was silently missing on iPhone, iPad, Apple TV and Safari. It is now a standard 5.1. 6.1 becomes 5.1, because AAC has no seven-channel layout Apple plays.
  • HEVC in MP4 is tagged hvc1, which Apple clients need to direct-play.

Encodes that failed or were skipped

  • Portrait phone videos always failed verification after a full encode.
  • Odd frame sizes (720×303) failed in libx264/libx265.
  • Text subtitles made every job fail for containers like mpegts and avi.
  • H.264 High 10 and 4:2:2/4:4:4 files were skipped as "already compliant", although most devices can't play them.

Queue

  • After a restart, waiting jobs started before Jellyfin had set its ffmpeg path, and failed with "could not probe" wherever jellyfin-ffmpeg isn't on PATH — Docker and Debian included.
  • A server stop that also signals ffmpeg (systemd, Ctrl+C) recorded the running job as failed; three restarts locked the file out of automatic processing.
  • Requeueing two records of the same file encoded it twice.
  • A destination that can't be written (read-only mount, permissions, a name over 255 bytes) is found before encoding instead of after it.
  • A new file arriving where a finished replace-in-place had been was skipped forever as "already transcoded".

Settings page

  • Edits to the profile shown when the page opened were lost when you switched or added a profile.
  • The default-profile choice reset when you added or deleted profiles or presets.
  • Deleting a resolution preset lost other rows' edits, and could leave a profile pointing at nothing, which silently stopped downscaling.
  • A failed save no longer leaves the spinner up forever.

Things you may notice

  • Container conditions go by the file extension. mov no longer matches .mp4 files and mkv no longer matches .webm — ffprobe reports one name for both of each pair. matroska still covers both .mkv and .webm.
  • Files that were wrongly treated as compliant (H.264 High 10, 4:2:2/4:4:4) will be queued once.
  • Resolution caps treat portrait videos as portrait.

Verified

  • 570 tests, run against Homebrew ffmpeg 9.0.2, ffmpeg 6.1.6 and jellyfin-ffmpeg 7.1.4, and in CI.
  • Every Jellyfin API the plugin uses was checked against the 12.0.0 packages and the 12.2.0 server.
  • On a real Jellyfin 12.2 server with jellyfin-ffmpeg 7.1.4: upgrading from 0.11.0.0 keeps settings and history; the restart failure reproduced with 0.11.0.0 and is gone with this build; a source swapped mid-encode was left intact; a damaged configuration file was backed up and recovered; 5.1, 6.1, portrait, 720×303, High 10 and subtitles-with-mpegts all encode, verify, play on Apple decoders and show up as versions.

Install

Plugin repository users: the update appears in Dashboard → Plugins after a refresh. Manual install: download pre-transcode-0.11.1.0.zip and unpack it into plugins/Pre-Transcode_0.11.1.0/.

Known, not yet fixed

Hardware-encoder specifics (#18), deinterlacing (#19), tone-mapping of HDR files with untagged primaries (#20), name collisions in separate-directory mode (#21) and history trimming defeating the retry limit (#22).