Helps diagnose why a Trailer Pre-Roll/Feature Pre-Roll bumper isn't
playing by logging invalid library IDs, empty library results, and
the movie picked.
Adds two optional IIntroProvider bumper slots, mirroring CherryFloors'
cinema mode plugin: a "Trailer Pre-Roll" played before the trailer block
and a "Feature Pre-Roll" played right before the movie/episode. Each is
configured by picking an existing Jellyfin Movie library, from which a
random Movie is injected as the bumper.
Bump version to 1.0.0.5.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Download trailers for TV shows from TMDB with separate sources and an
independent max-count cap (0 disables a category)
- Play trailers before TV episodes via IIntroProvider, limited to the first
episode a user watches each day
- Tag TV show trailers in their NFO so movies only get movie trailers and
episodes only get TV show trailers
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Trailer selection now supports three optional filters:
- Genre match: prefer trailers whose fake-movie genre overlaps with the
feature being played (requires TMDB genres in NFO)
- Age rating ceiling: exclude trailers rated higher than the feature
(requires TMDB certification in NFO)
- Avoid repeats: cycle through all trailers before replaying any;
resets per-user once the pool is exhausted
Genre and certification are fetched from TMDB at download time via a
single /movie/{id}?append_to_response=release_dates call and written
into the fake-movie NFO as <genre> and <mpaa> tags. All filters fall
back to the full unfiltered pool when no match is found.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Registers TrailerIntroProvider as IIntroProvider. Queries fake-movie
items in the output folder and returns their local trailer extras
(LocalTrailers) as IntroInfo — mirroring jellyfin-plugin-cinemamode's
proven pattern so Wholphin plays the actual trailer, not the 3-second
black placeholder.
Recursion guard: items whose path starts with the output folder are
excluded from intro injection, so Wholphin's getIntros call on the
intro item itself returns empty. Server-scoped query bypasses library
visibility restrictions so hidden trailer libraries still work.
Adds TrailersPerMovie config option (default 1, 0 = disabled).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Two issues prevented fake-movie generation:
- ffmpeg was invoked by bare name, but only /usr/lib/jellyfin-ffmpeg/ffmpeg
exists on the host (Jellyfin's bundled copy, not on PATH). Now probing that
path first with fallback to PATH.
- The temp file extension .tmp caused ffmpeg to fail with "Unable to choose an
output format" since it auto-detects the container from the extension. Added
-f mp4 to specify the format explicitly.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adapted from Trailers4Jellyfin: keeps TMDB/YouTube trailer downloading,
the scheduled task, language/source/date filters, and trailer rotation,
but drops cinema-mode/IIntroProvider entirely. Each trailer now ships in
its own fake-movie folder (placeholder video + locked NFO + trailer) for
use with a Cinema Mode / trailer pre-roll plugin.