Files
zooqueen 75094e0d60 frames: publish the toolchain as @hanzo/frames
@hanzo/frame is taken by the hero video primitive — one full-bleed video
element — which has held that name on npm since it shipped. This repo is the
video toolchain: a CLI, a renderer, a studio, a player. Plural is what it is,
so the CLI publishes as @hanzo/frames and the workspace packages follow it
(@hanzo/frames-core, @hanzo/frames-engine, and the rest).

The binary stays `frames`, and now actually ships. The manifest mapped it to
bin/frames.mjs while the file on disk was bin/hyperframes.mjs, so a global
install produced no working command.

The paths that name a package to fetch were pointing elsewhere. The update
check read registry.npmjs.org/frames, a different author's package, and the
npm, bun and pnpm installers would have pulled it over the CLI; the render
image installed the upstream hyperframes; scaffolded projects and the docs
pinned the unscoped name. All of them now name @hanzo/frames.
2026-08-13 18:10:14 -07:00
..

HDR Regression Suite

HDR10 (BT.2020 PQ) regression suite with four back-to-back windows (A–D) covering the highest-value HDR compositing shapes. 10s / 300 frames at 30fps.

Windows

# Window Pipeline aspect under test
A Baseline HDR + direct opacity HDR pass-through with a GSAP opacity tween directly on the <video> element.
B Z-order sandwich (DOM → HDR → DOM) Orange background, HDR video in the middle, blue overlay on top. Tests z-ordered layer compositing.
C Transform + border-radius HDR <video> with transform: rotate() scale() + border-radius clipping. Tests affine blit pipeline.
D Shader transition (HDR → HDR image) Shader transition between an HDR video and an HDR PQ image. Tests HDR image transfer cache + shader path.

Fixtures

  • src/hdr-clip.mp4 — short HEVC Main10 / BT.2020 PQ clip with a moving bright gradient (see NOTICE.md for attribution). Reused across windows A–G and as scene A of the window-H shader transition.
  • src/hdr-photo-pq.png — 256×144 16-bit RGB PNG with a hand-injected cICP chunk (primaries=BT.2020, transfer=SMPTE ST 2084, matrix=GBR, range=full). Used as scene B of the window-H shader transition.

ffmpeg is not used to generate the PNG because it does not embed cICP in PNGs — without that chunk Chromium would not treat the file as HDR and the test would silently fall back to SDR.

To regenerate the PNG fixture (deterministic, byte-for-byte stable):

python3 packages/producer/tests/hdr-regression/scripts/generate-hdr-photo-pq.py

Running

cd packages/producer
bun run test:regression hdr-regression
bun run test:regression:update hdr-regression

In CI it runs in the hdr shard alongside hdr-hlg-regression (see .github/workflows/regression.yml).