What's Changed
- Record the media file version with each analysis so a replaced file is re-analyzed by @rlauuzo in #977
- Trust credits chapters by default and make combined enhancement opt-in by @rlauuzo in #976
- Resolve seasons per series and drop the published analysis queue by @rlauuzo in #978
- Add full series timestamp management by @AbandonedCart in #980
- Stabilize gray-source blackframe FFmpeg test across builds by @AbandonedCart with @Copilot in #986
- Run every analysis pass through one scheduler and drop the scan semaphore by @rlauuzo in #983
- Add per-season analysis window overrides by @AbandonedCart in #994
- Add first-episode modes and season preview overrides by @AbandonedCart in #995
- chore: Bump Microsoft.NET.Test.Sdk from 18.7.0 to 18.10.0 by @dependabot[bot] in #988
- ci(deps): Bump the codeql-action group across 1 directory with 4 updates by @dependabot[bot] in #990
- ci(deps): Bump advanced-security/filter-sarif from 1.0.1 to 1.1 by @dependabot[bot] in #991
- ci(deps): Bump anchore/sbom-action from 0.24.0 to 0.24.2 by @dependabot[bot] in #992
- ci(deps): Bump signpath/github-action-submit-signing-request from 2.3 to 3.0 by @dependabot[bot] in #993
- Support bundle lists failed fingerprint files, Tools tab gets reset to defaults by @rlauuzo in #1003
- Declare each dashboard setting in one place by @rlauuzo in #1004
- Give every dashboard view one AbortSignal by @rlauuzo in #1005
- Make card credits a credits candidate instead of a black-frame fallback by @rlauuzo in #969
- Classify credit cards by luma percentiles instead of entropy by @rlauuzo in #1011
- Fold the black-frame and card analyzers into one keyframe analyzer by @rlauuzo in #1012
- Let dashboard form controls take their store by @rlauuzo in #1010
- fix(db): journal legacy-imported segments for projection by @rlauuzo in #1014
- chore: Bump xunit.runner.visualstudio from 3.1.5 to 4.0.0 by @dependabot[bot] in #989
- ci(deps): Bump the codeql-action group with 4 updates by @dependabot[bot] in #1023
- ci(dependabot): group Jellyfin.* nuget updates by @jumoog in #1024
- chore: Bump Microsoft.NET.Test.Sdk from 18.10.0 to 18.10.1 by @dependabot[bot] in #1022
- chore: Bump the jellyfin group with 4 updates by @dependabot[bot] in #1025
- Probe multiple sparse credit scenes with blackdetect by @AbandonedCart in #1016
- Gate black keyframes on their background and black scenes on a text page by @rlauuzo in #1017
- Read a letterboxed dark lead-in from the 90th percentile by @rlauuzo in #1029
- Place the start after a lead-in on the frame between the keyframes by @rlauuzo in #1027
- Read a cut keyframe just before blackdetect's start as the scene's first page by @rlauuzo in #1035
- Make every accepted black scene a credits candidate by @rlauuzo in #1036
- Build credits fixtures from one keyframe scan and pin every probe by @rlauuzo in #1038
- Pair the keyframe scan's rows and visuals once, into pages by @rlauuzo in #1039
- Set each page's card kind once, after probing by @rlauuzo in #1040
- Drop credits pass tests that replay combiner and card-run rules by @rlauuzo in #1042
- Drop credits helper tests the analyzer tests already cover by @rlauuzo in #1041
- Drop the unused Jellyfin.MediaEncoding.Keyframes package reference by @rlauuzo in #1043
- Keep the keyframe snap inside its search window by @rlauuzo in #1044
- Stop storing a dim scene before the roll as credits by @rlauuzo in #1045
- ci(deps): Bump the codeql-action group with 4 updates by @dependabot[bot] in #1047
- chore: Bump coverlet.collector from 10.0.1 to 10.1.0 by @dependabot[bot] in #1046
- fix(analyzer): log when a real shared region is discarded for exceeding the max duration by @AbandonedCart in #1048
- fix(ffmpeg): filter VP9 analysis to keyframes by @AbandonedCart in #1049
- Wait for Jellyfin to probe an item before analyzing it, and skip a failing season by @jumoog in #1028
- fix(ffmpeg): cached keyframe scans no longer spawn a VP9 probe by @rlauuzo in #1051
- feat(tools): score keyframe credits detection against labeled real files by @rlauuzo in #1052
- refactor(segments): route every bulk erase through ISegmentEraser by @rlauuzo in #1060
- refactor(db): move the automatic-segment admission rules into their policy by @rlauuzo in #1059
- refactor(segments): drop the projection adapter and the mirror's second lock by @rlauuzo in #1058
- refactor(db): drop the single-implementation database interfaces by @rlauuzo in #1061
- refactor: delete small single-use helpers and wrappers by @rlauuzo in #1062
- fix(credits): require visual evidence for multi-scene results by @capy-ai[bot] in #1063
- fix(tools): print a negative error that rounds to zero as +0.00 by @rlauuzo in #1065
- perf(ffmpeg): decode HEVC keyframes with slice threads by @rlauuzo in #1066
- Fix atomic bulk media segment writes by @AbandonedCart in #1067
- docs: rewrite the stale docs and test that their references exist by @rlauuzo in #1069
- ci(deps): Bump anchore/sbom-action from 0.24.2 to 0.24.3 by @dependabot[bot] in #1070
Full Changelog: 12.0/v12.0.4.0...12.0/v12.0.5.0