Skip to content

feat: argo × hyperframes integration — 16 shaders, argo add, block pre-render, showcase - #30

Open
shreyaskarnik wants to merge 36 commits into
mainfrom
feat/hyperframes-integration-pr
Open

feat: argo × hyperframes integration — 16 shaders, argo add, block pre-render, showcase#30
shreyaskarnik wants to merge 36 commits into
mainfrom
feat/hyperframes-integration-pr

Conversation

@shreyaskarnik

Copy link
Copy Markdown
Owner

What

Full integration with HyperFrames (Apache-2.0), in four tracks:

1 · Shader transitions (5 → 16)

  • 11 fragment shaders ported from hyperframes' shader library into src/transitions/shaders/ (attribution headers; uniform names mapped to argo's harness at port time)
  • New export.transition.accent: '#hex' tints accent-aware shaders (domain-warp, ridged-burn, thermal-distortion, sdf-iris, ripple-waves); accent participates in the shader cache key
  • Boundary-frame extraction now clamps marks past the assembled video's end (jpeg-stitch mark drift previously crashed export with ENOENT)

2 · argo add + registry compatibility

  • argo add <name> | --list | --json | --registry <url> installs blocks/components from the hyperframes registry into blocksDir (default blocks/, git-tracked) — items stored as native HTML, verbatim, adapted at use time
  • Path-traversal guards on item names AND remote-declared file paths before any path.join()
  • Component adapter: { type: 'hf-component' } overlay cue + applyComponent()/removeComponent() script API — full-frame injection, CSS-custom-property params validated against injection
  • ARGO_BLOCKS_DIR env bridge at all three record() call sites; argo validate checks installs + accent hex

3 · Block pre-render adapter

  • { type: 'hf-block' } overlay cue: recording-time pacing no-op → export-time headless-chromium pre-render (drives window.__timelines via seek(t, false) — GSAP's default suppresses the onUpdate/.call() callbacks compositions use for label text) → alpha PNG sequence → ffmpeg overlay + enable=between() cutaway (never shifts placements/chapters/subtitles)
  • Content-addressed cache salted with RENDERER_VERSION; wired at all four export paths (pipeline ×2, CLI export, preview)
  • Known v1 limitation (documented): incompatible with export.speedRamp

4 · Showcase demo

demos/hyperframes-showcase.* — a 13-scene, 3:24 full-tour recorded by argo itself: multi-voice TTS, every overlay template, camera suite, a data-chart block cutaway, live vignette/shimmer grade, confetti + freeze-frame hold, whip-pan shader cuts, rebranded logo-outro end card.

🎬 The video artifact is distributed outside git (a 181MB intermediate cut is what keeps videos/ out of this branch — GitHub's 100MB history cap). Will attach the final MP4 to this PR after opening.

Verification

  • 720+ tests green (66 → 74 test files); every track's GLSL/registry/renderer code landed with TDD
  • Live-registry smokes: argo add vignette end-to-end; logo-outro pre-rendered 60 alpha frames from the real catalog
  • Specs and implementation plans in docs/superpowers/; per-task + whole-branch reviews ran on each track
  • Squashed from 35 local commits (full history preserved on the local working branch)

https://claude.ai/code/session_017pvzMoFKE6PbEmbaLT4q4K

Shader transition port, argo add + registry compat, block pre-render
adapter, and the 'better together' showcase demo. Approved 2026-07-06.
… chromatic-split, flash-through-white shaders
…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
shreyaskarnik marked this pull request as ready for review July 9, 2026 01:17
@shreyaskarnik
shreyaskarnik force-pushed the feat/hyperframes-integration-pr branch from 29cf749 to 893194e Compare July 27, 2026 04:04
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