Skip to content

Audio tracks, subtitles, stream copying, HDR, plus safety fixes and tests - #1

Merged
RamenNuudlss merged 3 commits into
mainfrom
big-update
Nov 10, 2026
Merged

RamenNuudlss merged 3 commits into
mainfrom
big-update

Conversation

@RamenNuudlss

Copy link
Copy Markdown
Owner

One update covering the review list.

Features

  • Every audio track of a film can go on the disc (up to 8), switched with the remote's Audio button.
  • Subtitles: text subtitles (inside the file, or an .srt beside it) are drawn as Blu-ray picture subtitles; 1080p PGS is copied. Off until chosen with the remote.
  • Copy what's already Blu-ray: a film whose picture is already Blu-ray video is copied instead of re-encoded; Dolby Digital and DTS-core sound is copied with it.
  • HDR10 and HLG are converted to SDR instead of coming out washed out.
  • Frame rates: 24 and 30 fps are slowed 0.1% with every frame kept (24 fps used to drop frames); 30, 50, 59.94 and 60 fps are now accepted.
  • Update note: the app asks GitHub once at start whether a newer release exists and links to it. Nothing is downloaded.

Projects made before these settings existed keep the old behaviour until the new switches (Films tab, under Save space) are turned on, so films already encoded are not encoded again. Two exceptions, on purpose: 24.000 fps films and HDR films are re-encoded on the next build, because their output changes.

Safety and robustness

  • A project's own themes folder only loads after the user allows it.
  • Probe cache is JSON, not pickle.
  • App state is locked across request, probe, measure and build threads.
  • Theme fields can't overwrite a film's own fields.
  • File serving handles bad Range headers and Windows path case.
  • Free-space check before encoding; Windows is kept awake during builds.

Project hygiene

  • One settings.py shared by the app and the build (replaces two sets of defaults).
  • Release builds stamp the version from the tag (it was fixed at 0.1.0).
  • 49 tests: units plus short real encodes. CI runs them on Windows with the bundled FFmpeg, and now runs on pull requests.
  • Pinned: Python packages, FFmpeg 9.0.2 with checksum, GitHub Actions by commit; the WebView2 installer's Microsoft signature is checked.
  • Optional code signing when WINDOWS_CERT_PFX and WINDOWS_CERT_PASSWORD secrets exist.

Tested

  • All tests pass on Linux (FFmpeg 6.1).
  • Full command-line build of three generated films (multi-audio + subtitles + copy, 24 fps, 50 fps HDR); clips decode cleanly, playlists list the right languages, libbluray opens the menu and plays a title.
  • An older project rebuilt with no re-encoding.

Not tested

  • Anything on a real Windows PC or a hardware player: the new switches in the app window, subtitles and audio switching on a player, disc images and burning.
  • Real HDR footage and a real Blu-ray remux (only generated stand-ins).
  • Signing (needs a certificate).

Generated by Claude Code

- Project themes: a project's own themes folder is only loaded once the user
  allows it (Menu tab), so opening a project from someone else can't run the
  code that came with it. Projects the app creates are trusted; the command
  line is unchanged.
- Probe cache: JSON (build/probe.json) instead of pickle, so a build folder
  can't run anything and the cache survives changes to the Media class.
- App state: requests, probing, measuring and the job thread now take turns
  on the project, film facts, job status and settings. Concurrent edits used
  to collide on the project's .tmp file while saving.
- Film fields: a theme's extra field can no longer overwrite a film's own
  file, title, year, place or spin-off flag.
- File serving: bad Range headers no longer raise, ranges past the end get a
  416, and the allowed-folder check ignores case the way Windows does.
- Builds: check free disk space before encoding (stop when clearly short,
  warn when tight) and keep Windows awake while a build or disc image runs.
- Tests for all of the above (python -m pytest tests).

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QWNfnbj42fbmY3tZEnjd3r
Features
- Every audio track of a film can go on the disc (up to 8), not only the first.
- Subtitles: text subtitles (in the file or in a file beside it) are drawn as
  Blu-ray picture subtitles; 1080p PGS is copied.
- Films whose picture is already Blu-ray video are copied, not re-encoded, and
  Dolby Digital and DTS-core sound is copied with them.
- HDR10 and HLG are tone-mapped to SDR.
- 24 and 30 fps are slowed 0.1% instead of dropping frames; 30, 50, 59.94 and
  60 fps are accepted and converted.
- The app says when a newer release is out (one request to GitHub at start).

Projects made before these settings existed keep the old behaviour until the
switches are turned on, so nothing already encoded is encoded again.

Hygiene
- One settings module shared by the app and the build.
- The release build stamps the version from the tag.
- Unit tests and short real encodes; CI runs them on Windows with the bundled
  FFmpeg, on pull requests too.
- Pinned Python packages, FFmpeg (version and checksum) and GitHub Actions;
  the WebView2 installer's Microsoft signature is checked.
- Optional code signing when certificate secrets are present.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QWNfnbj42fbmY3tZEnjd3r
@RamenNuudlss
RamenNuudlss merged commit 4abdcbf into main Nov 10, 2026
1 check passed
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.

2 participants