Skip to content

chore: bump hyperframes to 0.9.26 - #16

Merged
jrusso1020 merged 1 commit into
mainfrom
chore/bump-hyperframes-0.9.26
Nov 9, 2026
Merged

jrusso1020 merged 1 commit into
mainfrom
chore/bump-hyperframes-0.9.26

Conversation

@jrusso1020

Copy link
Copy Markdown
Contributor

What changed

  • container/package.json: hyperframes ^0.4.14 to ^0.9.26 (a fresh build was resolving 0.4.45).
  • package.json + bun.lock: @hyperframes/core and @hyperframes/player ^0.5.3 to ^0.9.26.

Two fixes the bump needed:

  1. ffprobe in the render container. hyperframes 0.9 checks for ffprobe before every render and exits with FFprobe not found if it is missing. The image only had ffmpeg-static, so every render failed. I added ffprobe-static to container/package.json and link its binary to /usr/local/bin/ffprobe in the Dockerfile, the same way ffmpeg is linked. The path comes from require('ffprobe-static').path, so it also works on arm64 builds. README build steps updated to match.
  2. lintHyperframeHtml is async in 0.9. src/lib/server/lint.ts called it synchronously and read .findings off a Promise. tsc caught it. At runtime it would have thrown on .filter of undefined, so the AI panel's lint step would have failed. lintFiltered now awaits it, and lintComposition awaits lintFiltered.

The container's render args (render <dir> -o <file> --workers auto) are unchanged. Both flags still exist in hyperframes render --help for 0.9.26.

How I verified

All of the CI scripts pass with bun 1.3.14: bun install --frozen-lockfile, bun run lint, bun run format:check, bun run typecheck, bun run test (23 tests, 3 files), bun run prepare-assets (no diff in src/composition-manifest.json), and bun run build.

Render container, built with docker build . and run with the standard-4 limits (--cpus=4 --memory=12g):

  • GET /healthz returns ok.
  • node scripts/test-render.mjs 18080 out.mp4 sends the bundled composition the same way the Worker does (POST /render with { files }). It returned 200: h264 1920x1080, 270 frames, 9.0 s, 727 KB, with 3 workers in 22.7 s. A frame from the middle renders correctly.
  • A single index.html payload (the shape htmlToFiles sends for generated HTML) also returned 200: a 3.0 s, 352 KB MP4.

Lint in workerd: I ran lintFiltered under wrangler dev (nodejs_compat, same compatibility date). A valid composition returns no errors. A broken one returns the expected findings, including invalid_inline_script_syntax: Unexpected token.

Notes

  • 0.9's linter now flags the bundled cloudflare-intro composition with font_family_without_font_face for SFMono-Regular. The render still succeeds and falls back to the next monospace font, same as before. I left the composition alone.
  • In workerd, 0.9's inline-script syntax check no longer throws "Code generation from strings disallowed", so the filter in lint.ts no longer matches anything. It does no harm, so I kept it.
  • The server bundle grows from about 0.54 MB to about 0.79 MB gzipped, mostly from the newer @hyperframes/core.

— Rames

🤖 Generated with Claude Code

- container: hyperframes ^0.4.14 to ^0.9.26
- app: @hyperframes/core and @hyperframes/player ^0.5.3 to ^0.9.26
- container: add ffprobe-static and link it onto PATH. hyperframes 0.9
  refuses to render without ffprobe.
- lint: await lintHyperframeHtml, which is async in 0.9.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@jrusso1020
jrusso1020 merged commit c6dae93 into main Nov 9, 2026
4 checks passed
@jrusso1020
jrusso1020 deleted the chore/bump-hyperframes-0.9.26 branch November 9, 2026 02:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant