hyperframes: add HTML/CSS/GSAP as a parallel composition runtime
Separates creative grammar (renderer_family) from technical engine (render_runtime) so HyperFrames can stand alongside Remotion as a first-class runtime instead of masquerading as a Remotion sub-case. Locks runtime choice at proposal stage and enforces it end-to-end: the schemas require it, video_compose routes by it, the reviewer fails closed on silent swaps, and a parametrized contract test walks every pipeline manifest to ensure each planning-stage skill explains the conversation to the user. Adds hyperframes_compose (scaffold/lint/ validate/render/doctor/add_block), a playbook -> CSS style bridge, and vendored HyperFrames Layer 3 skills from commit d291358, pinned via PROVENANCE.md for future re-sync. Final_review now records render_runtime_used and runtime_swap_detected so compose lies are catchable after the fact.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
.PHONY: setup install install-dev install-gpu test test-contracts lint clean preflight demo demo-list
|
||||
.PHONY: setup install install-dev install-gpu test test-contracts lint clean preflight demo demo-list hyperframes-doctor hyperframes-warm
|
||||
|
||||
# ---- One-command setup ----
|
||||
|
||||
@@ -12,11 +12,19 @@ setup:
|
||||
@echo "==> Installing free offline TTS (Piper)..."
|
||||
pip install piper-tts || echo " [skip] piper-tts install failed — TTS will use cloud providers instead"
|
||||
@echo ""
|
||||
@echo "==> Installing HyperFrames runtime (cache-warm via npx)..."
|
||||
@echo " Pulls the 'hyperframes' npm package into the local npx cache so the"
|
||||
@echo " first render doesn't pay a 30-60s cold-fetch penalty. ~20MB of disk."
|
||||
@npx --yes hyperframes --version >/dev/null 2>&1 && echo " HyperFrames CLI cached (npx)" || echo " [skip] HyperFrames cache-warm failed — offline or npm unavailable; first render will fetch on demand"
|
||||
@python -c "from tools.video.hyperframes_compose import HyperFramesCompose; HyperFramesCompose._npm_resolve_cache=None; c=HyperFramesCompose()._runtime_check(); print(f' HyperFrames runtime_available={c[\"runtime_available\"]}, npm={c.get(\"npm_package_version\") or c.get(\"npm_resolve_error\")}'); [print(f' note: {r}') for r in c['reasons']]" || echo " [skip] HyperFrames check failed — runtime can be set up later"
|
||||
@echo ""
|
||||
python -c "import shutil, os; e=os.path.exists('.env'); shutil.copy('.env.example','.env') if not e else None; print('==> Created .env from .env.example — add your API keys there.' if not e else '==> .env already exists — skipping.')"
|
||||
@echo ""
|
||||
@echo "Done! Open this project in your AI coding assistant and start creating."
|
||||
@echo " Optional: add API keys to .env to unlock cloud providers."
|
||||
@echo " Optional: run 'make install-gpu' if you have an NVIDIA GPU."
|
||||
@echo " Optional: run 'make hyperframes-doctor' to fully validate the HyperFrames runtime."
|
||||
@echo " Optional: run 'make hyperframes-warm' anytime to refresh the npx cache to the latest hyperframes version."
|
||||
|
||||
# ---- Individual installs ----
|
||||
|
||||
@@ -43,6 +51,16 @@ test-contracts:
|
||||
preflight:
|
||||
python -c "from tools.tool_registry import registry; import json; registry.discover(); print(json.dumps(registry.provider_menu(), indent=2))"
|
||||
|
||||
hyperframes-doctor:
|
||||
@echo "==> Probing HyperFrames runtime (node/ffmpeg/npx + hyperframes doctor)..."
|
||||
python -c "from tools.video.hyperframes_compose import HyperFramesCompose; r=HyperFramesCompose().execute({'operation':'doctor'}); import json; print(json.dumps(r.data, indent=2)); print('OK' if r.success else f'FAIL: {r.error}')"
|
||||
|
||||
hyperframes-warm:
|
||||
@echo "==> Refreshing the HyperFrames npx cache to latest..."
|
||||
@echo " Uses --prefer-online so npx picks up new releases since your last run."
|
||||
npx --yes --prefer-online hyperframes --version
|
||||
@echo "==> Cache warm complete."
|
||||
|
||||
demo:
|
||||
@echo "==> Rendering zero-key demo videos (no API keys needed)..."
|
||||
@echo " These use only Remotion components — animated charts, text, data viz."
|
||||
|
||||
Reference in New Issue
Block a user