> Turn any X (Twitter) profile into a 10.3s animated "POSTING LICENSE" card animated dot-matrix ground, license text types on letter-by-letter, follower / following / post counters tick up, a diagonal glimmer sweeps as the card tilts in 3D, it flips to a fine-print back with a signature write-on, then crouches "make an X license for @handle", "license card video". The whole composition is a finished template — the agent only supplies profile data and renders.
npx skills add https://github.com/heygen-com/hyperframes-community-skills --skill x-posting-license
One fixed 1920×1080 @ 60fps, 10.35s composition. The motion is locked and
doctrine-verified (overlapped keyframes end to end, zero dead frames): do NOT
edit the timeline — fill the data tokens and render.
npx (fetched from npm; @latest ismutable — pin a version, e.g. npx [email protected], if you need
byte-identical re-renders over time).
export PRODUCER_BROWSER_GPU_MODE=hardware.Snell Roundhand system font (declared viasrc: local(...)); on Linux it falls back to generic cursive — still fine,
less pretty.
x.com/<handle> — profile page the agent reads (data gathering).pbs.twimg.com — the avatar image download (data gathering).api.fxtwitter.com/<handle> — post count; free, no credentials (data gathering).registry.npmjs.org — the HyperFrames CLI itself, via npx.cdn.jsdelivr.net — the composition loads GSAP (pinned 3.14.2) fromjsDelivr at preview/render time. Rendering is NOT fully offline.
No credentials, no paid operations, no telemetry. build.mjs writes only
inside the --out directory: it validates counters as plain non-negative
integers, strips control characters, caps lengths, HTML-escapes every profile
string before substitution, and refuses to write through symlinks.
<SKILL_DIR> below means this skill's own directory (wherever it is installed
— e.g. ~/.claude/skills/x-posting-license). Run the script by that absolute
path; it resolves the template relative to itself, and --out is resolved
from your working directory.
following, posts, one bio line, and the 400×400 avatar. Recipes in
references/profile-data.md.
node <SKILL_DIR>/scripts/build.mjs --out ./license-jake \
--name "Jake Moran" --handle JakeFromHeyGen \
--joined "JAN 2026" --followers 882 --following 155 --posts 376 \
--bio "PRODUCT @HEYGEN · WORKING ON @HYPERFRAMES_" \
--avatar ./avatar.jpg
--big "MORAN, JAKE" overrides the derived LAST, FIRST header — use it
when the display name isn't a normal name (keep unusual display names
verbatim: a user named ||| gets a license that says |||).
npx hyperframes@latest render ./license-jake -q high -o ./license-jake/renders/license.mp4
npx hyperframes@latest check ./license-jake passes with 0 errors, and the
rendered MP4 is ~10.3s: front card with the person's data counting up, flip at
~6.5s, their name writing on as the back signature, card leaps out at ~9.9s.
bios. Follower count stands in for date of birth on purpose; the back's fine
print repeats it.
·-separated fragments from the real bio.#000, white, #1D9BF0,borders #2f3336. It IS the brand treatment; do not restyle per user.
snapshot when a name exceeds ~14 characters.
build.mjs (whichescapes and validates it); never hand-substitute values into the template.
HyperFrames' seekable renderer, visually modeled on Originkit's
Dot Matrix component
(contributed by an Originkit license holder); no Originkit source code is
redistributed here. The simplex-noise GLSL is the standard Ashima
Arts/Stefan Gustavson implementation (MIT).
users of this skill publish the result at their own judgment.
Take heygen-com/x-posting-license from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference npx.
Without those the skill loads but fails at the first command.