Repository navigation
feat: argo × hyperframes integration — 16 shaders, argo add, block pre-render, showcase - #30
Merged
Merged
Conversation
Shader transition port, argo add + registry compat, block pre-render adapter, and the 'better together' showcase demo. Approved 2026-07-06.
… swirl-vortex shaders from hyperframes
… chromatic-split, flash-through-white shaders
…reaking git diff)
…paths Adds resolveHfBlockCues (maps hf-block overlay cues onto scene placement windows, allowing durationMs to extend past the scene into the following gap) and renderHfBlocks (per-cue cache-hit-cheap PNG sequence rendering sharing a single lazily-launched chromium instance) to src/hf/block-render.ts. Wires all four export call sites that must stay in sync per the repo's four-path invariant: pipeline.ts primary + variants, cli.ts export command, and preview.ts export (threading blocksDir through PreviewExportConfig from both cli.ts preview/dashboard call sites, mirroring how shaderTransition config already reaches that code).
Dogfoods all three integration tracks: domain-warp shader (accent-tinted) at every boundary, vignette + grain-overlay applied live during recording, rebranded logo-outro block composited as the end card. Story page + live-catalog hybrid recording per the Track 4 spec.
13 scenes covering every major feature of both systems: multi-voice TTS, all overlay templates + x-post block, camera suite, post-export zoom, data-chart hf-block cutaway, live vignette/grain/shimmer components, confetti + freeze-frame hold, 16-shader grid, rebranded logo-outro. Recording hardening learned the hard way: pages with autoplaying <video> saturate the jpeg-stitch frame writer (10-min stalls) — the catalog scene rides the static catalog page + one bounded preview at q88 instead.
…under jpeg-stitch) Wall-clock marks can outrun the assembled video when frames drop during capture; an out-of-range boundary made ffmpeg extract nothing -> ENOENT. Clamp to the probed duration with a warning. Plus: choreography-thesis VO rewrite, grain removed, outro tail buffer, grain-overlay opacity var.
…cache salt GSAP's seek() default suppresses callbacks, freezing composition label text written in onUpdate/.call() (data-chart percentages stuck at 0.0%). RENDERER_VERSION now salts the block cache hash so behavior changes invalidate stale frames automatically. Demo: whip-pan transitions (VO, grid highlight, and config now agree), 15-min test budget + retries for slow-machine screencast runs.
shreyaskarnik
marked this pull request as ready for review
July 9, 2026 01:17
shreyaskarnik
force-pushed
the
feat/hyperframes-integration-pr
branch
from
July 27, 2026 04:04
29cf749 to
893194e
Compare
|
when you plan to release this? |
…ate block cues Three fixes found reviewing this branch against current main. 1. hf-* overlays crashed two code paths. `renderTemplate` deliberately throws for `hf-component` (injected live) and `hf-block` (composited at export), but the preview and the imported-video PNG pre-pass passed every manifest overlay to it. So `argo preview` returned 500 for any demo using the catalog, this branch's showcase included, and saving overlay edits failed too. Every export of an imported video with such a cue also failed before ffmpeg ran. `isZoneTemplateCue()` in templates.ts is now the one check both paths use. The recording-side `showOverlay`/`withOverlay` already branched on these types. 2. hf-block cues were used unvalidated outside `argo validate`. `name` was passed straight to `path.join(blocksDir, name)`, which breaks the repo's validate-before-join invariant, and a malformed `fit` became `scale=NaN:NaN`, rejected by ffmpeg only after TTS and recording had run. `resolveHfBlockCues` now skips such cues with a warning, matching its documented best-effort contract, and `renderHfBlocks` refuses a bad name before touching the filesystem. The name rule is shared with `argo add` via `isValidItemName`, so installing and referencing accept the same names. 3. New browser and ffmpeg tests skipped silently. The Chromium suites had no guard, and shader-render used `it.runIf`, which skips silently in CI. Both now use the capability helpers: skip locally, fail in CI. `itWithCapability` is new, for suites that mix guarded and unguarded tests. `apply-component`'s browser lifecycle moves into the describe that needs it, so `resolveBlocksDir`'s pure tests stop depending on Chromium. Each fix has a test that fails without it; the guards were checked by forcing the capability false under CI=1. 866 tests pass, all 16 shaders ship. Not addressed: `fit: 'cover'` stretches rather than cover-crops (block-filter.ts), e.g. a 16:9 block in a 9:16 variant renders squashed.
…s fix, cover-crop blocks Found by checking this branch against the live hyperframes registry (399 installable items) and upstream main since the July port. `argo add` corrupted binary assets. Item files were fetched with `res.text()` and written as UTF-8, which replaces every invalid byte with U+FFFD: a real 74,455-byte registry PNG was written as 135,320 bytes, with the install reporting success. 13 items were affected, all present at port time. `fetchItemFile` now reads `arrayBuffer` and the bytes are written unchanged. `argo add` refused nested asset paths. The flat-name rule rejected any `/`, and 64 items keep assets under `assets/…`, 17 of them already in July. Each `/`-separated segment is now checked against the same rule, which still rejects `..`, `.`, empty segments (absolute paths, `a//b`, trailing `/`), dotfiles and backslashes; a resolved-path check backs it up. Blocks load their HTML over file://, so their relative assets resolve at render time. `gravitational-lens` started darkened. Its horizon mask applied at full strength from progress 0, turning the frame centre black on the first frame of every boundary. Ported upstream dd06b321 (#3660). A new test checks that all 16 shaders start on the outgoing frame and end on the incoming one, since every future port can break that and nothing else would catch it. `fit: 'cover'` stretched. It scaled blocks straight to the output size, so a 16:9 block in a 9:16 variant rendered squashed. It now fills keeping the aspect ratio and centre-crops; a no-op when aspects already match. Checked with a real ffmpeg render, not only the filter string. `argo validate` now also rejects a non-finite fit or a scale <= 0, matching the render-path check added earlier, so validate cannot pass a cue that export would skip. Known limitation, not fixed: components inject their HTML into the recorded page, so a component's relative asset URLs (e.g. the hw-* handwriting fonts) resolve against the demo app, not blocksDir. Those 8 components install correctly but render with fallback fonts/assets.
Upstream moved large binary assets off the git registry: 396 files across 25 items now declare `url` (static.heygen.ai) and nothing exists at the registry path, so `argo add carousel-circle-1` failed with a 404 on its first image. A file's source is now its `url` when present, otherwise the registry path. Following the hyperframes CLI, only an absolute `https://` url is honoured, since the manifest is third-party input, and each file is capped at 128 MB. Every source is validated before the first request, so a bad manifest fails before anything is written. Verified against the live registry: - 6 real items installed, including CDN-hosted carousel images, nested fonts and audio, and top-level PNGs. All 26 files byte-identical to upstream. - all 399 installable manifests pass installItem's path and url checks (previously 64 rejected and 13 corrupted).
…nent asset limitation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Full integration with HyperFrames (Apache-2.0), in four tracks:
1 · Shader transitions (5 → 16)
src/transitions/shaders/(attribution headers; uniform names mapped to argo's harness at port time)export.transition.accent: '#hex'tints accent-aware shaders (domain-warp,ridged-burn,thermal-distortion,sdf-iris,ripple-waves); accent participates in the shader cache key2 ·
argo add+ registry compatibilityargo add <name> | --list | --json | --registry <url>installs blocks/components from the hyperframes registry intoblocksDir(defaultblocks/, git-tracked) — items stored as native HTML, verbatim, adapted at use timepath.join(){ type: 'hf-component' }overlay cue +applyComponent()/removeComponent()script API — full-frame injection, CSS-custom-property params validated against injectionARGO_BLOCKS_DIRenv bridge at all threerecord()call sites;argo validatechecks installs + accent hex3 · Block pre-render adapter
{ type: 'hf-block' }overlay cue: recording-time pacing no-op → export-time headless-chromium pre-render (driveswindow.__timelinesviaseek(t, false)— GSAP's default suppresses theonUpdate/.call()callbacks compositions use for label text) → alpha PNG sequence → ffmpegoverlay+enable=between()cutaway (never shifts placements/chapters/subtitles)RENDERER_VERSION; wired at all four export paths (pipeline ×2, CLI export, preview)export.speedRamp4 · Showcase demo
demos/hyperframes-showcase.*— a 13-scene, 3:24 full-tour recorded by argo itself: multi-voice TTS, every overlay template, camera suite, adata-chartblock cutaway, live vignette/shimmer grade, confetti + freeze-frame hold, whip-pan shader cuts, rebrandedlogo-outroend card.Verification
argo add vignetteend-to-end;logo-outropre-rendered 60 alpha frames from the real catalogdocs/superpowers/; per-task + whole-branch reviews ran on each trackhttps://claude.ai/code/session_017pvzMoFKE6PbEmbaLT4q4K