Add duo community skill - #8
Conversation
Composites any two HTML screens into a locked 1448x1086 photo plate of hands holding an open foldable phone, for side-by-side comparison and meme videos (app vs app, chat vs chat, before/after). The plate, screen geometry, hinge and camera are fixed; the agent authors only what plays inside the two screen slots. Includes the scaffolder (scripts/build.mjs, no dependencies, writes only inside --out), the locked template, measured screen-spec.json, TikTok/Instagram glyph symbol sheets, and references on geometry measurement, feed/swipe/chat recipes and sourcing real UI. Authored by @jmoran-heygen; submitted on his behalf. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
jrusso1020
left a comment
There was a problem hiding this comment.
APPROVED at 0e17b539 as code owner.
The licensing question is answered, not overlooked. CONTRIBUTING.md:15 asks contributors to confirm redistribution rights for every asset, and this skill ships two things that needed a human call rather than a reviewer's: the TikTok and Instagram glyph sheets (SKILL.md:161 — "trademarks of their owners… included for parody / commentary") and assets/plate.png, derived from a photo posted publicly on X by @A_Kapustin (SKILL.md:154). @miga-heygen raised it in the PR body rather than letting it pass silently, which was the right instinct. I held the stamp and put it to the repo owner; James Russo cleared it for publication as-is. Recording that here so the decision is attached to the merge rather than living in Slack.
On the engineering, which is what I can speak to. The provenance section is not boilerplate — it names the photographer, states the parody basis, and references/sourcing-real-ui.md carries the rights caveat where someone swapping in their own UI will actually meet it. SKILL.md:40 already says a different device means a different photo, so the structure treats the plate as replaceable rather than as the skill's identity.
Verified against the repo's own gates rather than the description: validate-skills.sh passes at 4 skills, the build.mjs scaffolder produces a 1448×1086 @ 30fps project and refuses bad --icons values, npx hyperframes check reports 0 lint / runtime / layout / motion issues on the scaffold, and Structure-and-safety (validator + TruffleHog) is green on this head. __MACOSX/._* metadata and the generated test snapshot were dropped; Jake Moran's content is otherwise untouched and credited.
One note for whoever picks up the next community skill, not a change request here: the glyph sheets are the reusable precedent, and the next contribution that traces a third party's marks will land on the same CONTRIBUTING line. Worth a sentence in CONTRIBUTING about what "parody / commentary" does and does not clear, so the next author knows before they build rather than at review.
— Rames
What
Adds
skills/duo/, a community skill authored by @jmoran-heygen and submitted here on his behalf. It composites any two HTML screens into a locked 1448×1086 @ 30fps photo plate of hands holding an open foldable phone, for side-by-side comparison and meme videos (TikTok vs Reels, two chats answering the same prompt, before/after, two apps racing). The plate, measured screen geometry, hinge divider and single camera push are fixed; the agent only authors what plays inside the two.contentslots (left 495×849, right 498×849) and adds tweens to the one shared GSAP timeline.Contents:
SKILL.md— when/when-not to use, requirements, complete network/side-effect list, flow, verification, rules, provenance.scripts/build.mjs— dependency-free Node 18+ scaffolder (writes only inside--out, refuses to write through symlinks, validates--durationand--icons).template/index.template.html— the locked rig with two empty slots and the timeline hook.assets/plate.png(398 KB),assets/plate-preview.jpg,assets/screen-spec.json,assets/icons-tiktok.svg,assets/icons-instagram.svg(plain-text<symbol>sheets).references/screen-geometry.md,references/feed-recipes.md,references/sourcing-real-ui.md.Files excluded from the author's zip and why:
__MACOSX/,._*,.DS_Store— macOS archive metadata, not skill content.TEST-scaffold-snapshot.png— a generated test artifact; CONTRIBUTING forbids generated output.Edits to the author's content: none. The
>folded-blockdescriptionin the frontmatter is the same form used byx-posting-license(#5) and passes the validator as-is.Why it belongs here
It is a single fixed-plate template for one specific meme format. Same shape as
x-posting-license(#5): a locked composition where the agent fills content and renders. Too narrow for the curated set, useful to share.Trust boundary
node scripts/build.mjs --out <dir> [--id] [--duration] [--icons tiktok,instagram], thennpx hyperframes@latest check|snapshot|renderon the output dir.build.mjsreads only the skill's owntemplate/andassets/, writes only inside--out(createsassets/andrenders/subdirs), refuses symlinked targets.registry.npmjs.org(HyperFrames CLI vianpx);cdn.jsdelivr.net(GSAP pinned3.14.2loaded by the template at preview/render time).build.mjsitself makes no network calls.references/sourcing-real-ui.mddocuments how an agent may pull real app UI/posts from TikTok/Instagram if the user's request calls for real content, with a rights caveat; that is user-directed, not something the scaffolder does.npx hyperframes@latestis mutable; the SKILL.md advises pinning a version for byte-identical re-renders. Reviewers may prefer a pinned example in the docs.Verification
bash .github/scripts/validate-skills.sh→Validated 4 skill(s).(exit 0).node skills/duo/scripts/build.mjs --out /tmp/duo-test --duration 10 --icons tiktok,instagram→ exit 0; producedindex.html,hyperframes.json(1448x1086 @ 30fps),assets/plate.png,assets/screen-spec.json,assets/icons-tiktok.svg,assets/icons-instagram.svg.--icons snapchat→unknown icon sheet "snapchat"exit 1, nothing written; no--out→ usage, exit 1.npx hyperframes@latest check /tmp/duo-test(Node 22, Linux, software GPU) → Lint 0/0, Runtime 0/0, Layout 0 issues across 9 samples, Motion 0/0, "Check passed". No render performed.w3.orgSVG namespace, the jsDelivr GSAP URL, the X status /pbs.twimg.comprovenance links inscreen-spec.json, and thetiktok.comexample in the sourcing reference.Licensing note for reviewers
Two items need code-owner judgment under CONTRIBUTING's "right to redistribute every dependency and asset" requirement:
assets/plate.pngis derived from a photo posted publicly on X by @A_Kapustin (status2097769962936868872), with both phone screens blanked to neutral. The SKILL.md andscreen-spec.jsondocument this provenance and tell users to credit the source where appropriate. No explicit license from the photographer is on file.assets/icons-tiktok.svgandassets/icons-instagram.svgreproduce TikTok's and Instagram's own UI glyphs, extracted from their public mobile web DOM, so mock screens look like the real apps. They are trademarks of their owners and are included for parody/commentary use only, as the SKILL.md states.If either is not acceptable for redistribution in this repo, the skill can be adapted (for example, ship without the icon sheets, or require the user to supply their own plate).
Checklist
SKILL.md.hyperframes@latestmutable, pinning advised; asset licensing flagged above).hyperframes check; no end-to-end render).bash .github/scripts/validate-skills.shpasses locally.🤖 Generated with Claude Code