Skip to content

Fix Jellyfin HEVC HLS packaging and add private corpus testing workflow - #306

Merged
jlipworth merged 3 commits into
mainfrom
codex/jellyfin-hevc-hls-corpus
Sep 14, 2026
Merged

Fix Jellyfin HEVC HLS packaging and add private corpus testing workflow#306
jlipworth merged 3 commits into
mainfrom
codex/jellyfin-hevc-hls-corpus

Conversation

@jlipworth

@jlipworth jlipworth commented Sep 13, 2026

Copy link
Copy Markdown
Owner

Summary

  • Fix Jellyfin HEVC-at-quality-ceiling black video by requesting fMP4 in its streaming profile and HLS URL overrides; preserve copy, bitrate/audio/subtitle behavior and Emby dialect.
  • Add private, resumable metadata-only corpus inventory with bounded probing and hermetic tooling tests. No media or credentials are committed.
  • Make Jellyfin/Emby debug probes fail closed on missing/ambiguous exact titles instead of silently selecting fuzzy results.
  • Add opt-in normal-UI iPhone authentication helpers; default test runs skip without credentials.
  • Update canonical CLAUDE.md (AGENTS.md stays its pointer), testing strategy and published corpus guide with frame evidence, in-app browser auth, privacy, CI and release gates.

Refs #303. Separate Emby issues #304 and #305 are being investigated in another task; this PR does not claim to fix them. Unrelated HDR/display and host-deployment edits are excluded.

Validation

  • 1,698 hermetic PMSKit tests passed; corpus tooling tests passed.
  • Repository hygiene and strict MkDocs/link/Mermaid validation passed.
  • Fresh iPhone build-for-testing; all three live-auth tests skip by default before app launch (zero failures).
  • Earlier controlled A/B/A on the reported HEVC8 SDR sample: TS gave zero decoded capped frames; fMP4 gave four visible frames; restoring TS reproduced missing video.
  • Expanded Jellyfin corpus covers HEVC8/10, H.264 and AV1. One initial H.264 transition failed, then two repeats passed; not claiming full stability.
  • Fresh builds passed for iOS, visionOS, macOS and tvOS. Explicit install hash matched the fresh iOS product. Exact-title live run passed with four visible frames before/after capped quality; fuzzy-only query blocked with zero new frames.
  • Local native validation used the preserved working checkout, which also contains unrelated pre-existing HDR/host edits excluded from this PR. Hermetic CI validates the committed PR state.
  • CI passed on final revision fbc808cc: PR docs, hygiene, PMSKit and push hygiene/PMSKit (all five successful).

Remaining acceptance / scope

  • Physical Vision Pro confirmation and deep-seek/reopen acceptance remain open. Simulator validation does not establish release readiness.
  • Frame inspection remains an explicit visual review; transport passed is not a perceptual-quality oracle.
  • Exact title matching is bounded to returned search results, not yet a backend-ID manifest runner.
  • Private-server CI remains opt-in future work; no private-network credentials or permission expansion in public PR CI.

Please review for merge; no automatic merge requested.

Jonathan Lipworth added 2 commits September 13, 2026 12:14
Use fMP4 for Jellyfin HLS profiles and capped playback URLs while preserving copy, bitrate, audio, and subtitle choices. Add regression coverage and keep the Emby dialect unchanged. Refs #303.
Document release-frame evidence, normal UI authentication, CI review gates, and remaining headset/seek acceptance. Keep live auth opt-in and inventory gitignored; preserve AGENTS.md as the pointer to canonical CLAUDE.md.
@jlipworth
jlipworth merged commit 8ba24f5 into main Sep 14, 2026
5 checks passed
@jlipworth
jlipworth deleted the codex/jellyfin-hevc-hls-corpus branch September 14, 2026 01:02
jlipworth added a commit that referenced this pull request Sep 14, 2026
## Summary
- Mitigate #305's reproduced cold AV1 encode / CoreMedia deadline /
server teardown cycle by prewarming the same Emby session before
AVPlayer attaches.
- Scope the 20-second soft warm-up to AV1 transcodes at absent/zero
resume. Direct/copy, other codecs, positive-offset handling, Jellyfin,
and existing retry limits are unchanged.
- Add fail-closed expected item/source identity assertions to the Emby
probe and pure regression tests.

## Evidence and validation
- Exact item/source baseline failed before video; warm control ready in
~6.6s.
- Shipping-path candidate and clean-build repeat passed bounded
seek-to-zero/hold checks with four initial and four post-hold visible
frames; no remaining server encoder after stop.
- Forced early preparation timeout stopped during warm-up; no late item
attachment or remaining encoder.
- 1,700 hermetic PMSKit tests; hygiene, strict MkDocs, links/anchors,
Mermaid checks passed.
- Fresh iOS, visionOS, tvOS and isolated macOS builds; iPhone browse,
visionOS fixture, tvOS/macOS signed-out smoke inspected. Other-platform
smokes are not AV1 live-playback acceptance.

## Review notes
- Reconciled with main after #306 landed using a merge commit (no
history rewrite). Current canonical corpus guidance and Jellyfin
implementation/tests are retained unchanged; the obsolete duplicate
corpus plan is removed. Net diff is eight AV1/identity-guard files.
- Fresh post-integration exact-bound AV1 repeat reached warm readiness
in 7.4s, passed with 4+4 inspected visible frames, and repeated the
early-cancellation cleanup check.
- #304 remains a separate HEVC visual investigation; #303 stays
Jellyfin-only. HDR paused.
- Physical-device, deep-seek, server-version and release gates remain
open. No automatic issue closure or merge.
- Raw identifiers, media names, paths, addresses, credentials, and
frames remain private and are not attached.

---------

Co-authored-by: Jonathan Lipworth <[email protected]>
jlipworth added a commit that referenced this pull request Sep 14, 2026
## Summary
- Fix #304's reproduced HEVC 10-bit SDR quality-reopen corruption with
full-timeline native resume/seek, preserving negotiated
session/audio/container and bitrate ceilings.
- Rebased onto the landed #306/#307 changes; dropped duplicate
tooling/identity commits and preserved AV1 warm-up before the disjoint
HEVC lane.
- Condense corpus, AV1 and HEVC Markdown; retain current policy in
playback architecture and unresolved evidence/gates in research notes.

## Validation
- 1,704 hermetic PMSKit tests; hygiene, strict MkDocs, links/anchors and
Mermaid checks.
- Four fresh native builds and owned serial platform smokes; installed
simulator binaries match products.
- Post-rebase exact-source Original → 8 Mbps preserved progress with 4+4
inspected clean HEVC frames; native seek back to 10 minutes also passed
with 4+4 clean frames.
- HEVC 8-bit and H.264 transition controls passed without selecting the
HEVC lane. H.264 post-transition frames include a dark title fade, not a
broad scene-quality claim.
- AV1 integration regression warmed in 6.539s and passed zero-seek/hold
with 4+4 inspected visible frames. No remaining server encoder after
stop.

## Limits
The reproduced boundary is legacy offset priming/proxy startup, not a
proven fragment/init/decoder mechanism or a shared cause with #291.
Physical-device, broader server-version and full lifecycle/seek
acceptance remain open. HDR is excluded. Known nonfatal simulator
audio-session/GroupActivities warnings remain outside this fix.

Private source identifiers, names, addresses, paths, credentials and
frames are not attached. No automatic issue closure or merge.

---------

Co-authored-by: Jonathan Lipworth <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant