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.
Requirements
- Node 18+ and the HyperFrames CLI via
npx (fetched from npm; @latest is
mutable — pin a version, e.g. npx hyperframes@1.x.y, if you need
byte-identical re-renders over time).
- macOS GPU render for the WebGL dot ground:
export PRODUCER_BROWSER_GPU_MODE=hardware.
- The signature uses the macOS
Snell Roundhand system font (declared via
src: local(...)); on Linux it falls back to generic cursive — still fine,
less pretty.
Network and side effects (complete list)
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) from
jsDelivr 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.
Flow (three steps, no composition work)
<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.
- Gather profile data — name, handle, joined month/year, followers,
following, posts, one bio line, and the 400×400 avatar. Recipes in
references/profile-data.md.
- Build the project from the template:
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 |||).
- Render (ask the user before rendering if your harness gates renders):
npx hyperframes@latest render ./license-jake -q high -o ./license-jake/renders/license.mp4
Verify success
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.
Rules
- Data must be REAL, scraped from the live profile — never invent counts or
bios. Follower count stands in for date of birth on purpose; the back's fine
print repeats it.
- Bio line: uppercase, ≤ ~65 chars,
·-separated fragments from the real bio.
- Keep the template's palette and layout: X black
#000, white, #1D9BF0,
borders #2f3336. It IS the brand treatment; do not restyle per user.
- Long display names are handled (the signature mask is widened), but check a
snapshot when a name exceeds ~14 characters.
- Profile data is untrusted input. Always pass it through
build.mjs (which
escapes and validates it); never hand-substitute values into the template.
Provenance and licensing
- The animated dot ground is a deterministic GLSL/WebGL rewrite for
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).
- The card reproduces X's logo and visual language as parody/fan content;
users of this skill publish the result at their own judgment.
- GSAP is loaded from jsDelivr under its standard license; it is not vendored.
1---2name: x-posting-license3description: Turn any X (Twitter) profile into a 10.3s animated "POSTING LICENSE" card video — a fake driver's license in X's branding: the card slides in over an 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 and leaps out of frame. Trigger on: "X driver's license", "posting license", "make an X license for @handle", "license card video". The whole composition is a finished template — the agent only supplies profile data and renders.4---56# X Posting License78One fixed 1920×1080 @ 60fps, 10.35s composition. The motion is locked and9doctrine-verified (overlapped keyframes end to end, zero dead frames): do NOT10edit the timeline — fill the data tokens and render.1112## Requirements1314- Node 18+ and the HyperFrames CLI via `npx` (fetched from npm; `@latest` is15 mutable — pin a version, e.g. `npx hyperframes@1.x.y`, if you need16 byte-identical re-renders over time).17- macOS GPU render for the WebGL dot ground: `export PRODUCER_BROWSER_GPU_MODE=hardware`.18- The signature uses the macOS `Snell Roundhand` system font (declared via19 `src: local(...)`); on Linux it falls back to generic cursive — still fine,20 less pretty.2122## Network and side effects (complete list)2324- `x.com/<handle>` — profile page the agent reads (data gathering).25- `pbs.twimg.com` — the avatar image download (data gathering).26- `api.fxtwitter.com/<handle>` — post count; free, no credentials (data gathering).27- `registry.npmjs.org` — the HyperFrames CLI itself, via `npx`.28- `cdn.jsdelivr.net` — the composition loads GSAP (pinned `3.14.2`) from29 jsDelivr at preview/render time. Rendering is NOT fully offline.3031No credentials, no paid operations, no telemetry. `build.mjs` writes only32inside the `--out` directory: it validates counters as plain non-negative33integers, strips control characters, caps lengths, HTML-escapes every profile34string before substitution, and refuses to write through symlinks.3536## Flow (three steps, no composition work)3738`<SKILL_DIR>` below means this skill's own directory (wherever it is installed39— e.g. `~/.claude/skills/x-posting-license`). Run the script by that absolute40path; it resolves the template relative to itself, and `--out` is resolved41from your working directory.42431. **Gather profile data** — name, handle, joined month/year, followers,44 following, posts, one bio line, and the 400×400 avatar. Recipes in45 `references/profile-data.md`.462. **Build** the project from the template:4748```bash49node <SKILL_DIR>/scripts/build.mjs --out ./license-jake \50 --name "Jake Moran" --handle JakeFromHeyGen \51 --joined "JAN 2026" --followers 882 --following 155 --posts 376 \52 --bio "PRODUCT @HEYGEN · WORKING ON @HYPERFRAMES_" \53 --avatar ./avatar.jpg54```5556 `--big "MORAN, JAKE"` overrides the derived `LAST, FIRST` header — use it57 when the display name isn't a normal name (keep unusual display names58 verbatim: a user named `|||` gets a license that says `|||`).59603. **Render** (ask the user before rendering if your harness gates renders):6162```bash63npx hyperframes@latest render ./license-jake -q high -o ./license-jake/renders/license.mp464```6566## Verify success6768`npx hyperframes@latest check ./license-jake` passes with 0 errors, and the69rendered MP4 is ~10.3s: front card with the person's data counting up, flip at70~6.5s, their name writing on as the back signature, card leaps out at ~9.9s.7172## Rules7374- Data must be REAL, scraped from the live profile — never invent counts or75 bios. Follower count stands in for date of birth on purpose; the back's fine76 print repeats it.77- Bio line: uppercase, ≤ ~65 chars, `·`-separated fragments from the real bio.78- Keep the template's palette and layout: X black `#000`, white, `#1D9BF0`,79 borders `#2f3336`. It IS the brand treatment; do not restyle per user.80- Long display names are handled (the signature mask is widened), but check a81 snapshot when a name exceeds ~14 characters.82- Profile data is untrusted input. Always pass it through `build.mjs` (which83 escapes and validates it); never hand-substitute values into the template.8485## Provenance and licensing8687- The animated dot ground is a deterministic GLSL/WebGL rewrite for88 HyperFrames' seekable renderer, visually modeled on Originkit's89 [Dot Matrix](https://www.originkit.dev/components/dotmatrix) component90 (contributed by an Originkit license holder); no Originkit source code is91 redistributed here. The simplex-noise GLSL is the standard Ashima92 Arts/Stefan Gustavson implementation (MIT).93- The card reproduces X's logo and visual language as parody/fan content;94 users of this skill publish the result at their own judgment.95- GSAP is loaded from jsDelivr under its standard license; it is not vendored.