Skip to content

liminal-hq/libhdmv

Repository files navigation

libhdmv

A Rust-native HDMV navigation and menu engine for Blu-ray Disc.

What is HDMV?

HDMV ("HD Movie mode") is the non-Java interactive application model in the Blu-ray Disc ecosystem. It provides button-driven navigation, pop-up menus, and disc-level control logic through a small, deterministic, register-based command language ("movie objects") and a page-based interactive graphics scene model ("Interactive Graphics streams").

What is libhdmv?

libhdmv is a Rust workspace that implements the HDMV stack as a reusable library:

  • Parse BDMV disc structures (index.bdmv, MovieObject.bdmv, playlists, clip info, sound.bdmv)
  • Author complete BDMV disc structures with a high-level DiscBuilder API
  • Execute HDMV movie object command sequences in a deterministic VM
  • Decode Interactive Graphics (IGS) and Presentation Graphics (PGS) streams
  • Navigate BD menus with a scene engine (focus, activation, page transitions, popup toggle)
  • Render menu overlays as RGBA images for preview and inspection
  • Inspect disc structures from the command line with hdmv-inspect

It is designed to be consumed by Spindle (a desktop disc authoring workstation) via a Tauri v2 plugin, but can also be used standalone from CLI tools, other applications, or for fuzzing and testing.

Architecture

libhdmv-workspace/
  crates/
    bdmv-io/         # Filesystem abstraction (folder/ISO/UDF), path resolver
    bdmv-parse/       # index.bdmv, MovieObject.bdmv, MPLS, CLPI, sound.bdmv parsers & writers
    hdmv-insn/        # Instruction enums and 12-byte command word decoder
    hdmv-vm/          # VM executor, register file, event emission
    igs/              # IGS bitstream decode → pages/BOGs/buttons/effects
    pgs/              # PGS decode → palette + RLE overlay objects
    hdmv-scene/       # UI-agnostic menu scene model (focus, nav, timers)
    hdmv-render/      # Renderer traits + reference CPU compositor
    libhdmv/          # Umbrella crate re-exporting the stable API + DiscBuilder
  examples/
    hdmv-inspect/     # CLI tool for dumping/disassembling BDMV structures

Dependency flow

bdmv-io → bdmv-parse → hdmv-insn → hdmv-vm ─┐
                                               ├─→ hdmv-scene → libhdmv
                    bdmv-parse → igs, pgs ────┘
                                    └─→ hdmv-render → libhdmv

Scope

In scope

  • Parsing all BDMV control files (standard BD and UHD BD, versions 0100–0300)
  • HDMV VM execution with event emission (deterministic, no side effects)
  • IGS decode: pages, button overlap groups, button states (Normal/Selected/Activated), navigation commands, effects, timeouts
  • PGS decode: palette, RLE bitmap, composition state, window positioning
  • Menu scene engine: focus navigation, activation, popup toggle, timers, hit testing
  • Reference CPU renderer producing RGBA overlay frames
  • UHD BD-aware data models: HEVC stream type (0x24), VideoFormat 2160p, DynamicRangeType, ColorSpace, HDR flags

Explicitly out of scope

  • DRM/AACS/BD+ — operates on decrypted disc folders/ISOs only
  • BD-J — the Java-based BD application model is a separate runtime with fundamentally different threading and security characteristics
  • A/V codec decoding — delegate to ffmpeg/GStreamer/mpv
  • Disc playback — libhdmv is a navigation/menu engine, not a media player

Integration

libhdmv is consumed by Spindle through a thin Tauri v2 plugin:

liminal-hq/libhdmv              ← this repo (pure Rust, no Tauri dependency)
    ↑
liminal-hq/tauri-plugins-workspace
    └─ tauri-plugin-hdmv         ← thin Tauri command/event surface
    ↑
liminal-hq/spindle               ← desktop authoring app

Status

Alpha. Core parsing, writing, VM execution, IGS/PGS decoding, menu scene navigation, rendering, and disc authoring are implemented with 98 tests passing. See IMPLEMENTATION_PLAN.md for the phased development roadmap.

Licence

Licensed under the Apache License, Version 2.0. See LICENSE for details.

Copyright 2026 Liminal HQ.

About

A Rust-native HDMV navigation and menu engine for Blu-ray Disc — parse BDMV structures, execute movie object VMs, decode IGS/PGS streams, and render menu overlays.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages