mp4forge 0.8.0

Rust library and CLI for inspecting, probing, extracting, muxing, and rewriting MP4 structures
Documentation
# 0.8.0 (May 26, 2026)

- Added the feature-gated mux release surface, including `MuxRequest`, path-first
  `MuxTrackSpec` parsing with selector suffixes, flat and fragmented output layout selection,
  segment or fragment duration modes, sync `mux_to_path`, `mux_into_path`, and
  `mux_fragmented_to_paths` helpers, Tokio async companions behind `mux` plus `async`, and the
  sync-only `mux` CLI route
- Added real MP4 mux writing for both flat and fragmented layouts on one shared mux event graph,
  with deterministic payload planning, chunk interleaving, duration-based chunking, sync-aligned
  fragment or segment boundaries, split init/media fragmented outputs, destination update or
  create-new behavior, preserved flat destination metadata where supported, and explicit
  validation for unsupported duration-mode or fragmented multi-video requests
- Added broad mux import coverage for MP4 track import with retained sample-entry bytes, selected
  AVI, MPEG-PS, MPEG-TS, DASH, NHML, NHNT, SAF, and VobSub-style inputs, plus demux-backed
  elementary or containerized audio, video, text, subtitle, image, raw-video, and PCM families
  across the public path-first request shape
- Added `mp4forge::mux::inspect`, `mp4forge::mux::sample_reader`, and
  `mp4forge::mux::rewrite` helpers for direct-ingest reporting, packet-focused exports,
  one-sample-at-a-time seekable or progressive reading, and elementary sample rewrite/export
  flows for AVC, HEVC, VVC, AV1, AAC ADTS, and MHAS data
- Expanded typed box and sample-entry coverage needed by the mux, probe, divide, and rewrite
  paths, including additional DTS, Dolby, IAMF, FLAC, MPEG-H, PCM, uncompressed-visual,
  codec-configuration, timing, and metadata structures
- Broadened `divide` and probe behavior for more video and audio sample-entry families while
  keeping the existing validation-first workflow for unsupported fragmented output shapes
- Reworked file-backed decrypt rewrite execution to use streaming root rewrite plans for the
  supported sync and async surfaces, refreshed affected top-level `sidx` data after clear-output
  rewrites, and kept progress-enabled decrypt surfaces byte-aligned with their non-progress
  companions
- Added mux-focused examples, expanded retained fixture coverage, moved test output helpers onto
  auto-cleaned temporary paths, and added fuzz targets for mux demuxing, sample rewrites, async
  API parity, decrypt byte-surface parity, extra box roundtrips, bit I/O boundaries, and `sidx`
  plan application
- Removed the deprecated `dump` command `-mdat` and `-free` shorthand options; use
  `-full mdat` or `-full free,skip` explicitly instead

# 0.7.0 (April 28, 2026)

- Added the feature-gated decryption release surface across sync library helpers, Tokio async
  file-backed companions, and the sync-only `decrypt` CLI, covering the Common Encryption family,
  PIFF compatibility, OMA DCF, Marlin IPMP ACBC and ACGK, and the retained IAEC protected-movie
  path
- Added the typed OMA DCF, Marlin, ISMA-IAEC, and descriptor-command box or descriptor support
  needed to drive the broader protected-format decryption paths without opaque byte-only shortcuts
- Expanded retained decrypt fixtures, parity harnesses, and cross-surface regression coverage so
  sync, async, CLI, fragmented, protected-movie, and broader-format decrypt behavior are locked
  against stable checked-in assets and comparison-backed expectations
- Extended the fragmented decrypt path to support multi-sample-entry track layouts with
  per-fragment sample-description switching and ordered zero-KID track-key binding, and verified
  the resulting clear fragmented output against the existing rebuild workflow
- Closed the older non-fragmented `sample_description_index` gap by preserving chunk-level sample
  description identity in shared layout helpers, positively covering valid Marlin layouts above
  `1`, and making the retained first-description-only OMA and IAEC protected-movie limit explicit
  where the reviewed higher-level behavior still keeps that scope

# 0.6.0 (April 26, 2026)


- Added an additive Tokio-based `async` feature for the library, covering seekable async traversal, extraction, typed codec decode and encode, writer flows, rewrite flows, probe surfaces, and top-level `sidx` helpers while keeping the CLI on the established synchronous path
- Strengthened the async rollout so the supported library paths are multithread-safe under normal `tokio::spawn` use for independent-file workloads, with dedicated worker-thread and concurrent-file parity coverage
- Added a focused Tokio async example, updated crate and README guidance for the supported async scope, and preserved the default sync build without changing the existing non-async public API
- Expanded regression and comparison-backed parity coverage to lock sync-versus-async behavior across shared MP4, fragmented, encrypted, and metadata-rich fixture sets

# 0.5.0 (April 25, 2026)


- Added first-class encrypted metadata coverage for typed `senc`, typed `sgpd(seig)`, resolved sample-encryption helpers, and broader encrypted fragmented fixture coverage across extraction, rewrite, and probe flows
- Added additive top-level `sidx` analysis, planning, rewrite, documentation, and example support for the supported fragmented-file layouts
- Expanded typed box coverage across fragmented timing, metadata, and codec families, including `clap`, `SmDm`, `CoLL`, `dec3`, `dac4`, `vvcC`, AVS3, FLAC, MPEG-H, `subs`, `elng`, `ssix`, `leva`, `evte`, `silb`, `emib`, `emeb`, `ID32`, loudness boxes, `prft`, typed `tref` children, `sthd`, `nmhd`, `kind`, `mime`, `cdat`, and selected legacy `uuid` payloads
- Improved low-level robustness by preserving legal trailing bytes in `VisualSampleEntry` layouts and carrying those bytes cleanly through traversal and rewrite paths
- Added `prft` timestamp and flag helpers, richer examples, and broader regression coverage for fragmented, encrypted, metadata-rich, and legacy MP4 layouts

# 0.4.0 (April 22, 2026)


- Added richer additive probe surfaces for broader codec families, codec-specific details, media-characteristics reporting, and lighter-weight probe controls for large-file inspection
- Added deterministic structured dump and `psshdump` JSON/YAML export, field-level dump payload reporting, and repeatable path or protection filters shared across text and structured output
- Expanded CLI path ergonomics with parsed-path extraction, subtree-scoped dump selection, path-scoped typed edit flows, and richer `psshdump` filtering by box path, system ID, and KID
- Improved `divide` by deriving playlist signaling from probed metadata and adding a first-class validation mode for unsupported fragmented layouts before any output is written
- Added optional `serde` support for reusable report types, including nested probe and dump companion data intended for library-side embedding
- Expanded checked-in fixture coverage for AV1, VP9, AAC, Opus, and PCM, and added dedicated high-level fuzz targets for probe, structured dump, and typed rewrite surfaces
- Refined README guidance, examples, tests, and goldens across the newer higher-level library and CLI workflows while preserving the existing low-level usage paths

# 0.3.0 (April 22, 2026)


- Added byte-slice convenience helpers for typed extract, rewrite, and probe workflows so higher-level integrations can stay in-memory without dropping to the lower-level APIs
- Added exact raw box-byte extraction helpers for full-box and payload-only reads, including registry-aware variants for custom box decoding workflows
- Added additive `BoxPath` string parsing with `BoxPath::parse`, `FromStr`, and `TryFrom<&str>` so ergonomic path construction can build on the existing low-level API
- Expanded examples, tests, and comparison coverage around the new ergonomic helpers while preserving the existing low-level usage paths
- Refined public docs and README guidance for the new helper surface

# 0.2.0 (April 21, 2026)


- Added typed path-based extraction helpers for common read flows: `extract_box_as`, `extract_boxes_as`, and `extract_boxes_as_with_registry`
- Added typed path-based rewrite helpers for common edit flows: `rewrite_box_as`, `rewrite_boxes_as`, and `rewrite_boxes_as_with_registry`
- Improved matched payload diagnostics so extraction and rewrite failures report the path, box type, and byte offset that triggered the error
- Added higher-level examples for the ergonomic helper layer while preserving the existing low-level examples
- Polished public docs, README coverage, packaging metadata, and release validation around the new helper surface

# 0.1.0 (April 21, 2026)


- Initial crate release