-
Understand the concept, density, style/preset, and metaphor. Read
frame.md §§1–2 and design.md §Themes And Presets.
If the user has not implied a detail level, ask:
"How dense should this be: sparse, balanced, or dense?"
sparse — clean high-level summary
balanced — default explainer
dense — more complete, but must pass stricter proof-checking
If the user has not implied a visual style, ask:
"Which visual style should this use?"
Polish themes (same hues, different finish):
editorial-light — clean default infographic
technical-blueprint — sharper, cooler, more diagram-like
product-polish — warmer, presentation-ready
Bold color stories (a visibly different color scheme):
sunset (warm) · ocean (cool) · forest (earthy) · berry (vivid)
When an ask-question / choice tool is available, use it for these choices so
the user can pick density and style quickly. Otherwise ask the same questions
in plain chat. If the user does not answer, default to balanced and
editorial-light.
If the output type is clear, prefer a preset over manual style choices:
executive-explainer — sparse stakeholder summary
engineering-map — technical or architecture reference map
product-workflow — staged product or PM workflow
social-share — punchier sparse shareable GIF
linkedin-grid / linkedin-steps / linkedin-funnel / linkedin-compare
— bold, save-worthy LinkedIn-infographic cards (the creator-pop look);
each sets its card metaphor for you.
Then decompose the topic into groups, picking the metaphor by the shape of
the idea. Two diagram metaphors:
galaxy — groups orbit a center (anatomies, taxonomies, "N pillars of X").
flow — groups are stages a thing passes through top→bottom (architectures,
pipelines, request flows).
…and four creator-card metaphors (bold LinkedIn-infographic style, à la
Vincent Pierri — use with creator-pop / the linkedin-* presets):
grid — a matrix of buckets (frameworks, "the N Ps", 2×2s).
steps — an ordered, numbered checklist or process.
funnel — progressive filtering / qualification (items drop out per stage).
compare — two sides weighed against each other (before/after, old vs new).
-
Scaffold a project. Copy the engine into a new folder:
cp -r <skill>/concept-gif/engine my-gif && cd my-gif
It contains index.html (engine), design.js, frame.js, vendor/gsap.min.js.
Add a hyperframes.json if you want npx hyperframes niceties (optional —
copy one from examples/).
-
Write frame.js. This is the only file you author per topic. Follow the
schema and density budget in frame.md. Prefer preset, theme,
and semantic role fields first; add explicit color, icon, and motion
only where the defaults do not fit.
-
Apply any focused design overrides in frame.js. Use theme, preset,
or a small design: { ... } override. Edit design.js only when adding a
reusable theme, preset, role, or palette for future GIFs. If you change the
title/label font, also edit the two font-family lines in index.html
(HyperFrames embeds fonts from static CSS) and use a supported font.
-
Verify the source. Always run before rendering:
npx hyperframes lint && npx hyperframes validate && npx hyperframes inspect
Fix errors; address contrast warnings; inspect must report 0 layout issues.
-
Render + make the GIF.
npx hyperframes render --quality standard --resolution square -o renders/out.mp4
./render-gif.sh renders/out.mp4 renders/out.gif
-
Proof-check the rendered GIF. Use proof-check.py to sample the actual
GIF and catch clutter, blocked connector lanes, jitter, and loop seam jumps:
python3 ../../concept-gif/proof-check.py renders/out.gif --out renders/proof/out
A proof.json manifest is optional, but recommended whenever arrows or
connector paths matter. It defines the colored lanes that should remain
visible through the loop.
-
Look at it. Review the proof contact sheet and the GIF itself. Iterate on
frame.js positions/angles if labels crowd, paths are hidden, or motion reads
as jitter instead of a smooth loop.