docs(menus): rich menu editor plan with BD-ready foundations - #103
Conversation
Plans the next generation of menu authoring: motion backgrounds, animated buttons, richer imagery, and timeline editing, structured as six shippable slices (A-F). Reviews the current menu system (v0.3.0) and documents the gap between the authored model (which already expresses per-state styles, motion timing, video nodes, and themes) and the editor/build layers that only partially implement it. Binds eight design decisions that keep the editor extensible to BDMV: per-state rendered button visuals, Rust-evaluated animation property tracks, semantic menu roles over physical domains, per-format constraint profiles, design-space-only editing, semantic actions, a `MenuCompiler` backend seam, and flagged colour-management work. Adds a disc-aware UI section (format badge, per-family terminology map, honest target preview) and a review of `lib-igs-author-plan.md` against the actual state of libhdmv: the `igs` crate is decode-only today (the plan's assumed segment writers do not exist), Phase D should integrate from `MenuDocument` rather than the legacy `Menu`/`MenuButton` model, `ButtonImage` should be a frame sequence, and palette quantisation must be joint per display set. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CXZ2ehDJ1H6BWLWqtyzCAo
…u plan Expands the plan with concrete artefacts: - mermaid diagrams for the current pipeline (including the legacy-mirror and renderer-parity problem edges), animation-track lowering, the `MenuCompiler` backend fork, and slice/igs-author sequencing - Rust sketches for `AnimationTrack`/`Easing`, `MenuRole`, `FormatProfile`/`HighlightModel`, and the `MenuCompiler` trait - TypeScript sketch for the per-family terminology module - ASCII mocks of the format badge and the timeline strip - spumux DCSQ lowering sample and a theme-document JSON sample - revised `igs-author` API sketch (frame-sequence `ButtonImage`, `MenuDocument`-based integration) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CXZ2ehDJ1H6BWLWqtyzCAo
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6e12ecd977
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Codex review: mapping every `Vmgm` document to `Root` would misclassify additional VMGM pages (title-select, extras) that projects can already hold in `disc.globalMenus`. Only the disc's entry menu infers `Root`; remaining VMGM menus infer `TitleSelect`, and roles stay user-editable after the one-time inference. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CXZ2ehDJ1H6BWLWqtyzCAo
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6d41657625
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Codex review: spumux's `image`/`select`/`highlight` attributes are overlay image paths, not colour fields. The animated-highlight sample now bakes each keyframe's sampled colour/opacity into per-keyframe rendered overlay PNGs, and notes the lower-level DCSQ-writer fallback (covered by the player-compatibility research issue) if overlay swaps prove too coarse. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CXZ2ehDJ1H6BWLWqtyzCAo
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 73cd9a0ca4
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Codex review round 3: - Role inference can no longer lean on generation metadata alone: every generator currently writes `generatorId: 'menu-workspace'` (menuGenerators.ts), so it cannot discriminate chapter vs setup menus. The role slice now adds a `generatorKind` going forward and uses interaction-content detection (`PlayChapter` → chapter, `SetAudioStream`/`SetSubtitleStream` → setup) for existing projects before the entry-menu/`TitleSelect` fallbacks. - Design decision 6 no longer claims `PlaybackAction` ports to BD "as-is": `PlayNextInTitleset` is DVD-only and `PlayAllInTitleset` expands against titleset order, so each backend defines its mapping and `FormatProfile` gains a supported-actions list for validation. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CXZ2ehDJ1H6BWLWqtyzCAo
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 79688e95f6
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…rence Codex review round 4: - The animated-highlight spumux sample now carries `force="yes"`, `transparent`, and `<button>` children (matching what the existing still-menu builder emits), with the repeated rectangles marked as elided rather than silently missing. - Setup-role inference counts actions after recursively flattening `Sequence`: the audio/subtitle generators wrap `setAudioStream`/ `setSubtitleStream` inside a `sequence` with an optional `showMenu` return, so top-level counting would misclassify existing setup menus as `TitleSelect`. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CXZ2ehDJ1H6BWLWqtyzCAo
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ea66ce3f83
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…uttons Codex review round 5: - `compose_background` now takes the document and asset map, not just `RenderedMenu` + timing: motion menus need the background video (`scene.background.asset_id`) and audio bed to trim/loop/mux, and the audio bed today lives only on the legacy `Menu` (`resolved_motion_audio_asset_id()`), so the mirror-retirement scope now explicitly moves such fields onto `MenuDocument`. - Slice B acceptance now requires recursively flattening grouped buttons for authoring/interaction extraction — `AuthorableMenuRef::buttons()` only scans top-level `scene.nodes`, so rendering groups alone would produce visible-but-dead buttons. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CXZ2ehDJ1H6BWLWqtyzCAo
|
@codex review |
|
Codex Review: Didn't find any major issues. Bravo. Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
Summary
Adds
docs/rich-menu-editor-plan.md— the planning doc for the next generation of menu authoring: motion backgrounds, animated buttons, richer imagery, timeline editing, and disc-aware UI, structured as six shippable slices with BDMV-readiness decisions baked in.Highlights:
MenuRoleover physicalMenuDomain, per-formatFormatProfileconstraint tables, design-space-only editing (legacyMenu.buttonsmirror retirement), semantic actions, aMenuCompilerbackend seam, and flagged colour-management work.lib-igs-author-plan.mdreview against the actual state of libhdmv (checked 2026-07): theigscrate is decode-only today (the plan's assumedwrite_object_segment/write_palette_segmentdon't exist;hdmv-insnencode andpgs::encode_rledo), Phase D should integrate fromMenuDocument+ pre-rendered state bitmaps rather than legacyMenu/MenuButton,ButtonImageshould be a frame sequence, and palette quantisation must be joint per display set.Test plan
pnpm exec prettier --check docs/rich-menu-editor-plan.mdskia/scene.rsnode skips,planner/helpers.rsmotion block,CompileMode.tsx/SceneCanvas.tsxconstants) and against the libhdmv repo treemotion-menus.md,blu-ray-integration-plan.md,lib-igs-author-plan.md,dvd_bd_architecture_note.md) checked for consistency🤖 Generated with Claude Code
https://claude.ai/code/session_01CXZ2ehDJ1H6BWLWqtyzCAo