• v0.5.0 5011f2315f

    v0.5.0
    All checks were successful
    Release / Check if release needed (push) Successful in 4s
    Release / Release (push) Successful in 1m28s
    Stable

    Wuast94 released this 2026-05-02 15:43:07 +02:00 | 58 commits to pgsql since this release

    Bug Fixes

    • Re-analyze segments on settings change (#735)

    • Display full 4-part plugin version string

    • Fix

    • Fix2

    • Fix3

    • Use dotnet publish to include all runtime dependencies

    • Exclude design-time DLLs and enable dynamic loading

    • Db

    • Db2

    • Db3

    • Db4

    • Db5

    Features

    • Enhanced binary caching mechanism (#726)

    • Native PostgreSQL provider for Intro Skipper

    • Initial pgsql plugin release

    • Exclude Jellyfin framework assemblies from plugin package

    • Adopt upstream cache dashboard for pgsql

    Miscellaneous

    • Bump signpath/github-action-submit-signing-request from 2.0 to 2.1 (#732)

    • Bump Microsoft.NET.Test.Sdk from 18.3.0 to 18.4.0 (#733)

    • Update dashboard build artifacts

    • Update dashboard build artifacts

    • Update vite and related dependencies to version 8.0.8

    • Bump coverlet.collector from 8.0.1 to 10.0.0 (#744)

    • Bump github/codeql-action from 4.35.1 to 4.35.2 (#742)

    • Bump signpath/github-action-submit-signing-request (#743)

    • Replace analyzer filter logic with priority-based chain (#745)

    • Scope MediaSegments filter to itemId actions via convention

    • Add plugin fork management to build system

    • Update manifest for v1.10.11.17

    • Update manifest for v1.10.11.17 [skip ci]

    • Trigger release

    • Pull Jellyfin packages from Forgejo NuGet registry to match unsigned server build

    • Bundle meta.json with assemblies whitelist in release zip

    Other

    • Update README disclaimer to clarify data extraction and ownership risks (#729)

    Agent-Logs-Url: https://github.com/intro-skipper/intro-skipper/sessions/ee5e5ac8-a1a5-4ed4-ae0a-f7dccb838003

    Co-authored-by: copilot-swe-agent[bot] 198982749+Copilot@users.noreply.github.com
    Co-authored-by: AbandonedCart 1173913+AbandonedCart@users.noreply.github.com

    • Tighten README disclaimer wording per code review feedback (#730)

    Agent-Logs-Url: https://github.com/intro-skipper/intro-skipper/sessions/478ce14a-e660-4945-98a3-d608390b7b83

    Co-authored-by: copilot-swe-agent[bot] 198982749+Copilot@users.noreply.github.com
    Co-authored-by: AbandonedCart 1173913+AbandonedCart@users.noreply.github.com

    • Route DetectSegmentsTask through IMediaSegmentProvider (#731)
    • Route scheduled analysis through IMediaSegmentProvider; trigger Jellyfin extraction task on completion

    Agent-Logs-Url: https://github.com/intro-skipper/intro-skipper/sessions/c55336d3-8699-4e9e-b7ce-2839a53f8c94

    Co-authored-by: AbandonedCart 1173913+AbandonedCart@users.noreply.github.com

    • Update BaseItemAnalyzerTask.cs

    • Update PluginConfiguration.cs

    • Remove UpdateMediaSegments overlap with pushToJellyfin in analysis path; drop dead log method

    Agent-Logs-Url: https://github.com/intro-skipper/intro-skipper/sessions/8b2e5d52-1948-44e5-a28c-f0271c902a6b

    Co-authored-by: AbandonedCart 1173913+AbandonedCart@users.noreply.github.com

    • Add diagnostic logs for extraction task not found / not idle in DetectSegmentsTask

    Agent-Logs-Url: https://github.com/intro-skipper/intro-skipper/sessions/5f4bdd76-94ba-4127-b140-6410f8df3998

    Co-authored-by: AbandonedCart 1173913+AbandonedCart@users.noreply.github.com

    • Update BaseItemAnalyzerTask.cs

    It's not actually user facing, but this will silence review


    Co-authored-by: copilot-swe-agent[bot] 198982749+Copilot@users.noreply.github.com
    Co-authored-by: AbandonedCart 1173913+AbandonedCart@users.noreply.github.com

    • Fix scheduled task leaving stale segments after analysis (#734)

    Remove pushToJellyfin parameter from BaseItemAnalyzerTask.AnalyzeItemsAsync and
    the UpdateMediaSegments config gate from the analysis push path.

    Previously, DetectSegmentsTask passed pushToJellyfin: false and relied on
    Jellyfin's TaskExtractMediaSegments to pull updated segments. This approach
    could silently fail if the task wasn't found or wasn't idle, leaving users with
    stale segments after analysis.

    Now all callers (scheduled task, automatic task, ScanSeason) push newly-analyzed
    segments directly via UpdateMediaSegmentsAsync immediately after analysis,
    consistent with how the dashboard's ScanSeason option works. The Jellyfin
    extraction task trigger is kept as an additional sync for already-analyzed items.

    Agent-Logs-Url: https://github.com/intro-skipper/intro-skipper/sessions/b88f13fa-b316-42ed-81c2-fd76edf43fb7

    Co-authored-by: copilot-swe-agent[bot] 198982749+Copilot@users.noreply.github.com
    Co-authored-by: AbandonedCart 1173913+AbandonedCart@users.noreply.github.com

    • Respect config flag when updating media segments (#736)

    Gate the media segment update behind the _config.UpdateMediaSegments option. The code now checks both updateMediaSegments and the configuration flag before calling UpdateMediaSegmentsAsync, preventing unwanted updates when the feature is disabled in settings.

    • Add web dashboard and CI pnpm/node setup (#737)

    Co-authored-by: Kilian von Pflugk github@jumoog.io

    • Remove Jellyfin SDK; use direct API calls

    Remove the @jellyfin/sdk dependency (package.json + pnpm-lock.yaml) and refactor jellyfin-client to call the server via a getJson helper instead of the SDK. Add lightweight Jellyfin response types to types.ts (library/media/season/episode response shapes) and update getLibraries/getShowsInLibrary/getSeasons/getEpisodes to build query URLs, parse the simplified responses, and handle missing data. This reduces dependency surface and simplifies HTTP handling while preserving existing functionality.

    • Rename dashboard assets to introskipper.*

    • fix(web): log errors in jellyfin-client fetch helpers

    • Reformat web files for consistent indentation

    • Refresh anime Preview segment when credits shift on re-analyze (#741)
    • fix: refresh anime Preview segment when credits shift

    The anime-preview helper short-circuited whenever any valid Preview row
    existed, so when #735's AnalyzeAgain path re-analyzed Credits after a
    settings change the stale Preview (oldCreditsEnd → duration) was kept
    instead of being rewritten to the new credits.End.

    Extract the decision into a pure ComputeAnimePreviewFromCredits helper
    and skip only when an existing Preview's Start is within 0.5 s of the
    current credits.End (chromaprint quantises to ~0.124 s, so sub-second
    drift is noise). Also thread a guarded Plugin local through the call
    chain so AnalyzeItemsAsync no longer relies on Plugin.Instance!.

    Co-Authored-By: Claude Opus 4.7 noreply@anthropic.com

    • Address PR #741 review: respect user-provided Preview, inclusive tolerance
    • Skip the anime preview path entirely when the episode already has a
      user-provided Preview segment. UpdateTimestampAsync silently no-ops in
      that case, so the previous code emitted a misleading "Created anime
      preview" log and marked the episode Analyzed without a write
      (Copilot review feedback).
    • Switch tolerance comparison from < to <= so an exact 0.5 s drift is
      treated as equal, matching the doc text (Sourcery + Copilot feedback).
    • Add a boundary test for the inclusive comparison.

    Co-Authored-By: Claude Opus 4.7 noreply@anthropic.com

    • Also refresh anime Preview when episode duration changes

    Copilot review on PR #741: comparing only Preview.Start vs credits.End
    left a stale Preview.End if the episode file was replaced (different
    cut, file swap) and credits.End happened to match. Add a parallel
    tolerance check on existing.End vs the current episodeDuration.

    Co-Authored-By: Claude Opus 4.7 noreply@anthropic.com


    Co-authored-by: Claude Opus 4.7 noreply@anthropic.com
    Co-authored-by: TwistedUmbrellaX 1173913+AbandonedCart@users.noreply.github.com

    • Refactor BlackFrameAltAnalyzer: density gating, boundary refinement fix, and RefineCreditsBoundary toggle (#748)
    • fix: use preceding keyframe for RefineBoundary probe range

    FindBoundaryKeyframeTimes now returns the immediately preceding keyframe
    regardless of its black percentage, instead of searching backward for the
    last non-black keyframe. On dark shows where most frames exceed the black
    threshold, the old behavior produced overly wide probe ranges that could
    undo the transition-frame correction from DetectCreditScenes.

    Also renamed lastNonBlackTime to lastKeyframeTime throughout the boundary
    refinement pipeline (FindBoundaryKeyframeTimes, RefineBoundary,
    ConvertProbeTimestamp) for consistency.

    • feat: add RefineCreditsBoundary config option

    New toggle (default: true) allows users to disable frame-level boundary
    refinement in the alternative black frame analyzer, falling back to
    keyframe-only accuracy for faster analysis.

    • Update IntroSkipper.csproj

    • Add blackframe-alt fingerprint test files

    Add three new fingerprint files to IntroSkipper.Tests/fingerprints: blackframe-alt-3, blackframe-alt-4, and blackframe-alt-5. Each file contains parsed blackframe output used as test data for intro-skipping detection logic.

    • feat: add RefineCreditsBoundary toggle to Black Frame UI tab

    Visible only when the alternative black frame analyzer is enabled.
    Allows users to disable frame-level boundary refinement.

    • refactor: reuse production parser in tests, document searchStart invariants

    Address PR review feedback:

    • TestBlackFrames.ParseFingerprintFile now delegates to FFmpegWrapper.ParseBlackFrame instead of duplicating the blackframe regex

    • FFmpegWrapper.ParseBlackFrame changed from private to internal (InternalsVisibleTo already configured)

    • Added XML docs to HasMinimumBlackFrameDensity explaining searchStart contract and monotonic-advance invariant

    • Added inline comments at each searchStart usage site in DetectCreditScenes (density gating, merge pass, transition-frame search)

    • fix: tighten BlackFrameAltAnalyzer boundary refinement
    • keep RefineCreditsBoundary enabled by default
    • probe boundary refinement using a dynamic minimum threshold:
      min(scene start frame percentage, sceneChange)
    • reject probe results at the preceding keyframe
    • reject probe results after the transition-selected scene start
    • add regression tests for probe threshold selection and refinement window validation
    • Reject rooted fingerprint file paths

    • Add boundary refinement checks and tests

    • Remove unused using directives

    Clean up unused using directives across the project to reduce compiler warnings and improve code readability. Many redundant System., Collections., Linq, Threading, IO and related usings were removed from analyzers, controllers, data models, DB context, managers, scheduled tasks and services. No logic or behavior changes intended.

    • Target ES2018 for web dashboard build (#750)
    • Target ES2018 for web dashboard bundle to ensure broader compatibility with older environments

    Co-authored-by: rlauuzo 46294892+rlauuzo@users.noreply.github.com

    • Use mutating reducer for cached shows

    Co-authored-by: rlauuzo 46294892+rlauuzo@users.noreply.github.com


    Co-authored-by: rlauuzo 46294892+rlauuzo@users.noreply.github.com

    • Fix credits analyzer ordering

    Co-authored-by: rlauuzo 46294892+rlauuzo@users.noreply.github.com

    • Revert "Fix credits analyzer ordering"

    This reverts commit c62e910bfb.

    • Revert "Target ES2018 for web dashboard build (#750)"

    This reverts commit 4f13cf7c73.

    • [skip actions] update copyright headers to SPDX format across all files

    • [skip actions] update copyright headers to SPDX format across all files

    • Release v1.10.11.18

    Downloads