aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2026-03-30Apply review commentsShadowghost
2026-03-29Backport pull request #16369 from jellyfin/release-10.11.zBond-009
Fix nullref ex in font handling Original-merge: 41c2d51d8cb9b4f9bdf81be6e73f7ae2d447a8d7 Merged-by: Bond-009 <bond.009@outlook.com> Backported-by: Bond_009 <bond.009@outlook.com>
2026-03-29Only set IsAvc for video streamsBond_009
Also enables nullable for MediaStreamInfo Makes more properties nullable that aren't always present
2026-03-29recognize underscore and dot separators for multi-version grouping (#16465)upscaylman
* Add underscore and dot as multi-version file separators Extend IsEligibleForMultiVersion to recognize _ and . as valid separators between the base movie name and the version suffix. Common naming patterns like 'Movie_4K.mkv' or 'Movie.UHD.mkv' are now correctly grouped as alternate versions during library scan. * Address review: remove comment, add 3D recognition assertions --------- Co-authored-by: aimarshall615-creator <aimarshall615@gmail.com>
2026-03-29fix: cap GetVideoBitrateParamValue at 400 Mbps (#16467)scheilch
* fix: cap GetVideoBitrateParamValue at 400 Mbps The previous cap of int.MaxValue / 2 (~1073 Mbps) is far beyond any realistic transcode target and allows encoder parameters derived from it (e.g. -bufsize = bitrate * 4 for QSV) to grow to multi-gigabit values, which is incorrect regardless of whether the encoder tolerates it. 400 Mbps is a safe upper bound for all current hardware encoders: - Intel QSV H.264 peaks at ~300 Mbps (High 5.1 CPB = 168.75 Mbit) - HEVC High Tier Level 5.x supports ~240 Mbps - AV1 hardware encoders have no meaningful real-world constraint at this level The existing FallbackMaxStreamingBitrate mechanism (default 30 Mbps) provides a similar guard but only when LiveStreamId is set, covering M3U and HDHR sources. Plugin-provided streams and any source that bypasses the LiveTV pipeline are not subject to it and can pass unreasonably high values downstream. This cap closes that gap for all encoder paths. Suggested by @nyanmisaka in review of #16376. * Update MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs --------- Co-authored-by: Bond-009 <bond.009@outlook.com>
2026-03-29Add ignore patterns for Hungarian sample files (#16238)furdiburd
* Add ignore patterns for Hungarian sample files Added ignore patterns for Hungarian sample files. * Removed leftover spaces
2026-03-29More robust date handling in Library DB migration (#16474)Tim Eisele
* More robust date handling in Library DB migration * Apply review comment
2026-03-29Fix attachment extraction of files without video or audio stream (#16312)Tim Eisele
* Fix attachment extraction of files without video or audio stream * Apply review suggestions
2026-03-29Apply suggestions from code reviewTim Eisele
Co-authored-by: theguymadmax <theguymadmax@proton.me>
2026-03-28Add spec-compliant dvh1 HLS variant for Dolby Vision Profile 5 (#16362)NoFear0411
* Add spec-compliant dvh1 HLS variant for Dolby Vision Profile 5 DV Profile 5 has no backward-compatible base layer, so SUPPLEMENTAL-CODECS cannot be used. The master playlist currently labels P5 streams as hvc1 in the CODECS field, even though DynamicHlsController already passes -tag:v:0 dvh1 -strict -2 to FFmpeg for P5 copy-codec streams, writing a dvh1 FourCC and dvvC configuration box into the fMP4 init segment. This mismatch between the manifest (hvc1) and the bitstream (dvh1) causes spec-compliant clients like Apple TV and webOS 24+ to set up an HDR10 pipeline instead of a Dolby Vision one. Add a dvh1 variant before the existing hvc1 variant for P5 copy-codec streams. Both variants point to the same stream URL. Spec-compliant clients select dvh1 and activate the DV decoder path. Legacy clients that reject dvh1 in CODECS fall through to the hvc1 variant and detect DV from the init segment, preserving existing behavior. Fixes #16179 * Address review: support AV1 DoVi P10, add client capability check - GetDoviString: add isAv1 parameter, return dav1 FourCC for AV1 DoVi (P10 bl_compat_id=0) and dvh1 for HEVC DoVi (P5) - Remove redundant IsDovi() check; VideoRangeType.DOVI is sufficient and correctly limits to profiles without a compatible base layer - Replace IsDoviRemoved() with client capability check using GetRequestedRangeTypes(state.VideoStream.Codec) to only emit the dvh1/dav1 variant for clients that declared DOVI support - Update comments and doc summary to reflect P5 + P10/bl0 scope * Use codec string instead of boolean for DoVi FourCC mapping Replace bool isAv1 with string codec in GetDoviString for future-proofing when DoVi extends to H.266/VVC or AV2. * Move AppendDoviPlaylist next to AppendPlaylist * Fix SA1508: remove blank line before closing brace * Use AppendLine() instead of Append(Environment.NewLine)
2026-03-28reverse check for track changedPatrick Cunniff
Signed-off-by: Patrick Cunniff <pjcfifa@gmail.com>
2026-03-27Fix live stream consumer leak when PositionTicks is negativeWizardOfYendor1
When a stalled HLS client sends ReportPlaybackStopped with a negative PositionTicks (e.g. HLS.js reporting position on buffer stall), the ArgumentOutOfRangeException was thrown before GetSession was called, causing CloseLiveStreamIfNeededAsync to never run. This left the ILiveStream.ConsumerCount permanently incremented, permanently holding a tuner open with no active viewer. Fix by acquiring the session and performing live stream cleanup before throwing the validation exception, so tuner resources are always freed even when playback reporting fails with invalid position data. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-27Merge pull request #16471 from jellyfin/renovate/swashbuckle-aspnetcore-monorepoBond-009
Update swashbuckle-aspnetcore monorepo to 10.1.7
2026-03-27Merge pull request #16483 from jellyfin/renovate/pin-dependenciesBond-009
Pin chrisdickinson/setup-yq action to fa3192e
2026-03-27Merge pull request #16222 from tyage/fix/filename-truncation-bracketed-tagsBond-009
Fix filename truncation when bracketed tags appear mid-filename
2026-03-27Merge pull request #16442 from jellyfin/renovate/ci-depsBond-009
Update github/codeql-action action to v4.35.1
2026-03-27Fix BoxSet parentId being ignored in item queriestheguymadmax
2026-03-27Update github/codeql-action action to v4.35.1renovate[bot]
2026-03-27Merge pull request #15841 from JanzenJohn/feat/fix-ipv6-crashJoshua M. Boniface
fix crashes on devices that don't support ipv6
2026-03-26Pin chrisdickinson/setup-yq action to fa3192erenovate[bot]
2026-03-26Delete file-based playlists if empty/removedShadowghost
2026-03-26Add CACHEDIR.tag supportShadowghost
2026-03-26Fix triple digit episode number handlingShadowghost
2026-03-26Update Emby.Server.Implementations/Localization/LocalizationManager.csTim Eisele
Co-authored-by: theguymadmax <theguymadmax@proton.me>
2026-03-26Translated using Weblate (Chinese (Traditional Han script, Hong Kong))Lofuuzi
Translation: Jellyfin/Jellyfin Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/zh_Hant_HK/
2026-03-25Parse provider IDs from season and episode folder/file namesMarc Brooks
Season and episode directories/files can now include provider ID attributes in their names (e.g. "Season 01 [tvdbid=22222]" or "Show S01E01 [tmdbid=99999].mkv"), consistent with the existing behavior for series folders. Supported providers: imdbid, tvdbid, tvmazeid, tmdbid. Adds TmdbSeasonExternalId and TmdbEpisodeExternalId so that the TMDB season and episode IDs are surfaced in the metadata editor. Seasons do not have their own IMDb IDs, so we don't support imdbid parsing in SeasonResolver. Instead, generate IMDb season URLs via ImdbExternalUrlProvider using the parent series' IMDb ID and the season number, matching the IMDb URL format: imdb.com/title/{seriesId}/episodes/?season={N} Add tests for the ExternalUrlProviders.
2026-03-25Update swashbuckle-aspnetcore monorepo to 10.1.7renovate[bot]
2026-03-25Update swashbuckle-aspnetcore monorepo to 10.1.6 (#16461)Bond-009
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-25Fix #16308: Community ratings not updating after changing .nfo file.Francisco Ernesto Planas Pestana
When "replace all metadata" was issued on a film, with the Web metadata scrapers and "save to local metadata" disabled, after changing the .nfo file, 'Community rating' was not updated in the server, remaining the cached value. Fixed by changing the flag on the 'MergeData' call (line 809 - MetadataService.cs) to use the option defined by the user and not the erroneous absolute 'false' value. Also, in the .nfo parser an option for 'communityrating' was added along with value conformity verifiers. Validation tests were added.
2026-03-25split openapi workflows between pull request and mergedkanada
2026-03-24Lint for the Linter GodsJoshua M. Boniface
2026-03-24Fix linting issueJoshua M. Boniface
2026-03-24Update swashbuckle-aspnetcore monorepo to 10.1.6renovate[bot]
2026-03-24Fix int32 overflow in QSV rate-control parameter computation (#16376)scheilch
Fix int32 overflow in QSV rate-control parameter computation
2026-03-23Apply suggestions from code reviewJoshua M. Boniface
Co-authored-by: JPVenson <ger-delta-07@hotmail.de>
2026-03-23Properly define variable typeJoshua M. Boniface
2026-03-23Update FolderStorageInfo recordJoshua M. Boniface
2026-03-23Ensure ResolvedPath is sent on error tooJoshua M. Boniface
2026-03-23Fix FolderStorageInfo to show parent filesystemJoshua M. Boniface
A direct implementation using DriveInfo directly on a path does not work as expected. The method will return a DriveInfo object with the given path as both the Name and the RootDirectory, which is not helpful. Instead, add parsing logic to find the best possible match out of all filesystems on the system for the path, including handling edge cases involving symlinked paths in the chain. This ensures that the resulting DeviceId is a valid filesystem, allowing it to be used in the UI to show a better description. It also includes the new ResolvedPath which will show, if required, what the Path resolved to after all symlinks are interpolated. One possible issue here is that walking all drives as-is might become slow(er) on a system with many partitions, but even on my partition-heavy system with over a dozen ZVOLs and remote mounts, this takes under 0.4 seconds including runup time for `dotnet run`, so I imagine this should be fine.
2026-03-23Backport pull request #16449 from jellyfin/release-10.11.ztheguymadmax
Fix NFO saver using wrong provider ID for collectionnumber Original-merge: ce867f9834106e82d40a5ee59ff6f698b1dcabcb Merged-by: Bond-009 <bond.009@outlook.com> Backported-by: Bond_009 <bond.009@outlook.com>
2026-03-23Backport pull request #16423 from jellyfin/release-10.11.znyanmisaka
Fix readrate options in FFmpeg 8.1 Original-merge: 29b236185701091f6719862b05bd7bda58d88475 Merged-by: Bond-009 <bond.009@outlook.com> Backported-by: Bond_009 <bond.009@outlook.com>
2026-03-23Merge pull request #15593 from dkanada/book-provider-idsBond-009
include external IDs and URLs for book providers
2026-03-22Translated using Weblate (Dutch)lednurb
Translation: Jellyfin/Jellyfin Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/nl/
2026-03-20Translated using Weblate (Chinese (Traditional Han script, Hong Kong))Lofuuzi
Translation: Jellyfin/Jellyfin Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/zh_Hant_HK/
2026-03-19Recognize ".m4b", ".m4a", ".aac", ".flac", ".mp3", and ".opus" as an ↵Louis
audio-book formats (#15377) * Recognize ".m4b" as an audio-book format - Has the resolver recognize the ".m4b" format as book - Jellyfin reverts to seeing the file as a music file without this check * Recognize ".m4a", ".aac", ".flac", and ".mp3" as an audio-book formats - All the formats supported in the docs will now be marked as type "Book" * Add ".opus" as a supported Audiobook format --------- Co-authored-by: Louis Sandoval <louis@sandoval.family>
2026-03-19Translated using Weblate (Chinese (Traditional Han script, Hong Kong))Lofuuzi
Translation: Jellyfin/Jellyfin Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/zh_Hant_HK/
2026-03-18Translated using Weblate (Swedish)Ärik
Translation: Jellyfin/Jellyfin Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/sv/
2026-03-17Update dependency coverlet.collector to 8.0.1 (#16428)renovate[bot]
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-17Translated using Weblate (Chinese (Traditional Han script, Hong Kong))Lofuuzi
Translation: Jellyfin/Jellyfin Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/zh_Hant_HK/
2026-03-17Translated using Weblate (Chinese (Traditional Han script, Hong Kong))Lofuuzi
Translation: Jellyfin/Jellyfin Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/zh_Hant_HK/