---
name: chart-relay
description: Compose an editable two-series comparison with a continuous speaker shot and coordinated exchanges of the speaker and chart regions.
version: 1.0.1
---

# Chart Relay

This is a parameterized 8.6-second renderer for 1920 × 1080 at 30 fps. It combines a local continuous video with two numerical series. The narrow video window and wide evidence window exchange places twice; each series appears while the layout is at rest. It does not generate footage, verify claims, or synchronize speech.

## Prepare the input

Write a JSON brief with `heading` (up to 44 characters), `context` (38), `unit` (24), `takeaway` (90), `ticks` (2–8 labels, 12 characters each), `range` (two increasing numbers), and `traces` (exactly two objects with `name` and `samples`). Each trace must have one in-range number per tick. Use concise labels; character limits are guards, not a guarantee that any writing fits. Inspect the resulting lines before delivery.

Choose `palette` from chalk, deep, rose, or mono. Set `footage` to a local MP4 path relative to the brief, and `focus` to the horizontal crop position from 0 to 100. Supply at least 8.6 uninterrupted seconds of footage with permission to use it. Keep faces within the crop throughout both moves. The package has no stock footage or example movie.

## Build and render

Use Node.js 22 or later, npm, FFmpeg and ffprobe, and a compatible Chromium installation. Install the pinned toolchain with `npm ci`. If Chromium is not auto-detected, set `PUPPETEER_EXECUTABLE_PATH` to its executable.

Run `node scripts/compose.mjs /absolute/brief.json /absolute/new-project`. The destination must not already exist. Render it with `./node_modules/.bin/hyperframes render /absolute/new-project --output /absolute/movie.mp4 --fps 30 --quality high --strict --workers 1`. `hyperframes inspect /absolute/new-project --json` supplies diagnostic metadata. Generated HTML, SVG and GSAP remain editable; local assets are copied into the project.

## Review the result

See `references.md` for timing and reuse limits. Inspect time zero, both exchanges, each stroke's first and final visible state, and the closing hold. Scrub forward and backward, verify actual font glyphs and local asset responses, then play the encoded film once at normal speed and record real dropped frames. Full decode and successful rendering do not establish content acceptance.

English uses Manrope; Han text selects Noto Sans SC across the composition. Third-party notices accompany the included assets. Video audio is intentionally muted and no soundtrack is supplied. Add any separately authorized audio through an explicit editable workflow and verify the final mix before describing it as audible.
