636 Commits
Author SHA1 Message Date
zooqueen 6b2ed3a17f chore: release v0.7.83 2026-08-13 18:11:18 -07:00
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
zooqueen 375d1e2816 packages: publish as @hanzo/frame and talk to api.hanzo.ai
The npm scope becomes @hanzo: the CLI is @hanzo/frame, every library is
@hanzo/frame-<name>. Versions go to 0.7.82.

Credentials come from Hanzo IAM. `hanzo login` runs the IAM device flow and
writes ~/.hanzo/credentials.json; unattended runs read HANZO_API_KEY delivered
from Hanzo KMS. src/api.ts is the one place that knows the base URL and the
credential, replacing the OAuth client, PKCE flow, loopback server, token
store, and ~/.heygen credential file. `frames auth` keeps only `status`, since
this CLI no longer issues credentials.

Publish and feedback post to api.hanzo.ai/v1 without the HeyGen routing header.
The HeyGen-hosted `frames cloud` render target is gone; local, AWS Lambda, and
Google Cloud Run remain. Voice resolves to Hanzo speech (POST /v1/audio/speech)
before local Kokoro; music resolves to local MusicGen.

No analytics project is configured, so the CLI and studio send no events —
they previously reported to HeyGen's. Drops the HeyGen wordmark from the studio
header and the HeyGen promo render fixture with its brand assets and fonts.
2026-08-13 17:21:08 -07:00
zooqueenandHanzo Dev 70b41673a3 frames: rebrand the fork to Hanzo Frames
Forked from HyperFrames (Apache-2.0), full history preserved.

Hosts are mapped explicitly and BEFORE the identifier rename, because
hyperframes.heygen.com is not decoration: 175 of its occurrences are $schema
identifiers that a validator dereferences. A blind rename would have left them
naming a host that never serves them. The schema files are in this repo under
docs/schema, so the mapped host is one we can actually serve -- that is the
condition that makes the rewrite safe, and serving them is a deploy task, not
an edit. docs/schema/hyperframes.json is renamed to frames.json to match the
identifier it is now published under.

api.heygen.com and the CLI auth against heygen.com are left UNRENAMED on
purpose. They are a dependency on HeyGen's SaaS, not a name of ours to take,
and the right move is to remove that integration rather than rebrand it.

LICENSE and CREDITS.md are untouched; NOTICE records the lineage.

Co-authored-by: Hanzo Dev <[email protected]>
2026-07-28 23:42:24 -07:00
James 8d8a90ead1 chore: release v0.7.81 2026-07-29 06:11:11 +00:00
Miguel Ángel dec2313c2b chore: release v0.7.80 2026-07-29 02:22:54 +00:00
Miguel ÁngelandGitHub d570656010 Merge pull request #2855 from heygen-com/fix/secure-runtime-dependencies
fix: remove vulnerable runtime dependency paths
2026-07-29 01:14:46 +02:00
Miguel Ángel 493c941d12 chore: release v0.7.79 2026-07-28 23:06:45 +00:00
Miguel Ángel 3c1c2fc32d fix: remove vulnerable runtime dependency paths 2026-07-28 20:45:43 +00:00
Vance Ingalls fb5768366e chore: release v0.7.78 2026-07-28 05:27:29 -07:00
Vance IngallsandClaude Opus 5 b2b86395cf fix(engine): bucket gpu_renderer + cover the failure cohort (review)
Three review findings on the win32 drawElement PR:

1. gpu_renderer shipped the raw UNMASKED_RENDERER_WEBGL string — unbounded,
   driver-authored, GPU-model-specific, and |-joined across parallel
   sessions, i.e. high cardinality by construction, against this file's own
   convention of sanitizing engine-sourced strings (deGateReason is a
   bucket; error messages go through redactTelemetryString). Now bucketed at
   the source by classifyGpuRenderer to <backend>/<vendor>
   (metal/apple, d3d11/nvidia, swiftshader/other, ...), which is the whole
   analytic signal the win32 rollout needs and nothing else. The raw string
   never leaves the engine.

2. gpu_renderer reached render_complete only, so a crashed render — the
   cohort the field exists to attribute — carried no backend. It now rides
   RenderCaptureObservability (deGpuRenderer, sourced from the live probe
   session like the de_* counters), so both render_complete and
   render_error carry it and a hard failure still reports its GPU backend.
   On render_complete the perfSummary value still wins by spread order.

3. Restore the fallow-ignore-next-line suppression above
   __resetDeParallelRouterTrialStateForTests: CLI test files are not fallow
   entry points, so removing it fails the CI dead-code audit (local
   pre-commit passed only because of its changed-file scope).

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-07-28 00:55:10 -07:00
Vance IngallsandClaude Opus 5 c4adeb6cf8 feat(engine): open drawElement fast capture to Windows hardware GPU
Widen the default-on drawElement clamp from darwin-only to darwin|win32
(still requiring a non-software-GPU browser). The darwin restriction was a
validation envelope, not an architectural limit — the CanvasDrawElement
Chrome flag ships on every platform, and every safety layer that made the
macOS default-on release (v0.7.38) survivable is platform-neutral:
compile-time gates, the SwiftShader init gate, per-render worker-encode
self-verification with screenshot fallback, and the blank guard. Worst case
on an unvalidated D3D11 backend is the same as on Metal: verify catches a
bad frame and the render re-runs on the screenshot baseline.

Why now: 30-day telemetry shows ~206k non-CI hardware-GPU Windows renders
(~78% of the win32 fleet, 18k installs) held on the slow screenshot path by
the clamp — the second-largest perf population after macOS, carrying ~1,550
capture-hours/month in the DE-eligible >=700-frame band alone at a measured
~2x speedup opportunity.

Instrumentation for the new cohort: drawElement session init now records the
raw WebGL UNMASKED_RENDERER_WEBGL string (detectSwiftShader generalized to
detectGpuBackend — same single evaluate, the string was previously read and
discarded) and threads it session -> CapturePerfSummary -> RenderPerfSummary
-> render_complete as `gpu_renderer`. drawElement damage proved
compositor-backend-specific throughout the macOS rollout, so D3D11-cohort
failures must cluster by ANGLE backend + GPU vendor (NVIDIA/AMD/Intel), not
just `os`.

The two DE clamp branches are extracted into a pure, unit-tested
`resolveDefaultDrawElement` (platform + GPU mode + worker-encode + explicit
opt-in), which also drops resolveConfig's cyclomatic complexity. The win32
streaming-encode compound tests collapse onto one shared helper.

Linux stays excluded: that fleet is headless/Docker SwiftShader, where DE
has no speedup and known rendering defects. Kill switches unchanged:
PRODUCER_EXPERIMENTAL_FAST_CAPTURE=false, --experimental-fast-capture=false.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-07-28 00:00:21 -07:00
Miguel Ángel fcd9a82b64 chore: release v0.7.77 2026-07-28 02:12:41 +00:00
James cfe8467b58 chore: release v0.7.76 2026-07-27 05:08:40 +00:00
James 4548c34f64 chore: release v0.7.75 2026-07-27 03:38:16 +00:00
James bcbe7f1104 fix(producer): fallback distributed capture safely 2026-07-27 03:08:40 +00:00
James RussoandGitHub d9c8651082 chore: release v0.7.74 (#2818) 2026-07-26 21:57:54 -04:00
James RussoandGitHub a24b078df9 fix(producer): accept partial color metadata in plan v2 (#2814)
* fix(producer): accept partial color metadata in plan v2

* test(engine): make partial color probe hermetic

* fix(producer): validate plan v2 sentinels in fallback mode
2026-07-26 21:48:51 -04:00
James 05549e631b fix(gcp): enforce effective BeginFrame capture 2026-07-27 00:02:37 +00:00
James 1164b321ad chore: release v0.7.73 2026-07-26 21:25:03 +00:00
James 66e44e77dc fix(render): aggregate extraction launch failures 2026-07-26 19:47:33 +00:00
James a142085ca2 fix(producer): narrow extraction error shapes honestly 2026-07-26 19:47:33 +00:00
James 18ff1f885f fix(producer): type video extraction failures 2026-07-26 19:47:33 +00:00
James 3d93eb037a fix(engine): block future-use IPv4 downloads 2026-07-26 19:00:41 +00:00
James c8b749b10d fix(engine): close downloader trust-boundary gaps 2026-07-26 19:00:41 +00:00
James bf89116243 fix(engine): narrow network error shapes honestly 2026-07-26 19:00:41 +00:00
James 15696acf90 fix(engine): make video downloads atomic and retry transient failures 2026-07-26 19:00:41 +00:00
James RussoandGitHub 4868240ab0 chore: release v0.7.72 (#2800) 2026-07-26 02:01:10 -04:00
Miguel Ángel ea1b4d6e77 fix(producer): normalize padded audio on sample timeline 2026-07-25 21:14:18 +00:00
Miguel Ángel 1a791b17f1 fix(engine): stop mux at shortest normalized stream 2026-07-25 21:14:18 +00:00
Miguel Ángel 6a5608777d test(render): cover duration-capped audio mux 2026-07-25 21:14:18 +00:00
Miguel Ángel ed0755e5b2 fix(render): cap final mux to video duration 2026-07-25 21:14:18 +00:00
Miguel Ángel d6a2efd745 fix(render): scope M4A priming preservation to trims 2026-07-25 21:14:17 +00:00
Miguel Ángel 45f59fe5c8 fix(render): preserve normalized M4A edit timing 2026-07-25 21:14:17 +00:00
James RussoandGitHub 4214f36cb3 fix(engine): preserve bounded ffprobe diagnostics (#2772)
* fix(engine): preserve bounded ffprobe diagnostics

* test(engine): harden ffprobe diagnostic redaction
2026-07-25 17:12:43 -04:00
James RussoandGitHub 02fe77b2f9 fix(audio): preserve causes and use portable padding (#2769)
* fix(audio): preserve causes and use portable padding

* fix(audio): address failure taxonomy review
2026-07-25 17:12:31 -04:00
Ular KimsanovandGitHub 4d69cedb25 Merge pull request #2752 from heygen-com/feat/media-treatment-runtime
feat(runtime): render media treatments deterministically
2026-07-24 12:05:14 -07:00
James 4a9235f6e6 chore: release v0.7.71 2026-07-24 19:03:16 +00:00
ukimsanov 0d27b5fbe6 feat(runtime): render media treatments deterministically 2026-07-24 11:17:22 -07:00
Vance Ingalls 1509c1b3c6 chore: release v0.7.70 2026-07-23 20:59:30 -07:00
Vance Ingalls 69f7439992 fix(engine): lazy-promisify execFile in psnr so partial child_process mocks don't crash at import 2026-07-23 17:57:15 -07:00
Vance Ingalls 1fd80dbad4 fix(producer): verify sequential disk drawElement samples too 2026-07-23 15:07:35 -07:00
Vance Ingalls 1117a7a08d fix(engine): self-verify parallel disk drawElement samples (PRINFRA-352) 2026-07-23 14:41:25 -07:00
James dfd89b2252 chore: release v0.7.69 2026-07-23 12:03:36 -07:00
Vance IngallsandGitHub e3f03a17b0 Merge pull request #2723 from heygen-com/07-21-fix_engine_worker_autoscaler_memory_budget
fix(engine): realistic worker memory budget + sizing/feedback telemetry
2026-07-21 21:44:35 -07:00
James cdd8f3bb4b chore: release v0.7.68 2026-07-22 04:41:54 +00:00
Vance Ingalls a8085e6a6d fix(producer): emit heap advisory at orchestrator, lock message + telemetry props with tests 2026-07-21 20:39:06 -07:00
Xuanru LiandGitHub 429c15387e Revert "feat(producer): renderStretch to re-time short compositions across longer scenes (#2676)" (#2730)
This reverts commit a2166bc726.
2026-07-21 19:39:03 -07:00
James 58084a9d07 chore: release v0.7.67 2026-07-21 23:51:05 +00:00
Vance Ingalls 74dd4eafee fix(engine): realistic worker memory budget + sizing/feedback telemetry 2026-07-21 14:31:14 -07:00