HyperFrames Animation Production — HF-PCHEM-001 (Codex edition) You are working in an empty project folder. Part A tells you how to work; Part B is the specification. Follow both. Part A comes from producing and reviewing this same video once; it lists the traps we actually hit, so treat it as requirements, not suggestions. PART A — HOW TO WORK A1. Environment (do this first, then report what you found) * Check Node.js (HyperFrames needs version 22 or later), FFmpeg and FFprobe. * Install the framework locally and pin the version that produced the reference video: npm init -y npm install -D hyperframes@0.8.208 * Run `npx hyperframes doctor`. If it reports no Chrome, run `npx hyperframes browser` (see its --help) to install the headless browser used for rendering. * Set DO_NOT_TRACK=1 for every hyperframes command. * Learn the framework from its own documentation before writing code: `npx hyperframes --help`, `npx hyperframes docs` (topics: compositions, gsap, rendering, troubleshooting, data-attributes, examples) and node_modules/hyperframes/README.md. Scaffolding with `npx hyperframes init --non-interactive` is allowed. * If a command needs network access or a permission you do not have, ask me. If a required tool is missing, stop and tell me. Do not switch to another video tool or skip the render. A2. Architecture * One file (for example js/physics.js) computes every physical number that appears on screen. The markup holds placeholders that are filled from it. Never type a physical number by hand into the HTML. * Everything that moves or depends on the physics is drawn by one pure function render(t) of the root-timeline time t, called from the onUpdate of a single GSAP tween that spans the whole film. Seeking to any frame must paint that frame. * Determinism: seeded random generator only. No Math.random, Date, performance.now, timers, requestAnimationFrame or network calls in any script. * HyperFrames 0.8.208 traps: - Register the root timeline (window.__timelines[...] = tl) in an inline