From produck
Builds premium animated product-demo launch videos from a written brief as one seamless motion-graphics film with camera moves, UI mockups, and full sound design, rendered from HTML+CSS+GSAP to MP4 via HyperFrames.
How this skill is triggered — by the user, by Claude, or both
Slash command
/produck:demo-studioThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are building a **premium product-demo motion-graphics film**: one seamless timeline of
docs/ARCHITECTURE.mddocs/BRANDING.mddocs/HOW-IT-WORKS.mddocs/SETUP.mddocs/SOUND.mddocs/TUTORIAL.mdexample/hyperframes.jsonexample/index.htmlexample/meta.jsonscripts/render.shsetup.shsfx/boom.wavsfx/capture.wavsfx/click.wavsfx/coin.wavsfx/confirm.wavsfx/ding.wavsfx/dinghi.wavsfx/drag.wavsfx/implode.wavYou are building a premium product-demo motion-graphics film: one seamless timeline of
full-screen scenes telling the USER'S story (pick an arc that fits their product, e.g. problem →
product → payoff, before → after, or many inputs → one output; do not default to a feedback-capture
loop), with camera moves between beats. The whole video is ONE self-contained HyperFrames composition
(index.html = HTML + CSS + GSAP) that renders to MP4, then a single SFX track is muxed on.
Start from the example: example/index.html is a compact, commented, working scaffold that
shows the whole architecture (paused timeline, 3 scenes, a camera push, a flood, an endcard). Read
it first, then grow it into the real thing scene by scene.
const tl = gsap.timeline({paused:true}); register it on
window.__timelines["main"] = tl. HyperFrames seeks it per frame.<div>s inside #stage, overlapping in the DOM;
faded in/out by the timeline. Only the active one is visible at a given time.tl.* call is the start time in seconds.
Anchor scene offsets with named consts (e.g. S1, S2, END) so changing one shifts the rest.
A DUR const + the data-duration attrs (root, bg, stage) must all match the total length.Math.random() / Date.now() / argless new Date() — they break the
frame-seeked render. Use a seeded PRNG (see the mul()/rnd() helpers in the example).npx hyperframes lint # 0 errors required
npx hyperframes render --output out/raw.mp4 -q high
ffmpeg -i out/raw.mp4 -c:v libx264 -pix_fmt yuv420p -g 30 -keyint_min 30 \
-sc_threshold 0 -r 30 -crf 17 -movflags +faststart out/vNN.mp4 # ALWAYS re-encode
ffmpeg -ss <t> -i out/vNN.mp4 -frames:v 1 /tmp/f.png # verify by viewing frames
gsap.defaults({ease:"power3.out", duration:0.6}). Register MotionPathPlugin if used.Everything visual is driven by :root CSS vars. To make it your product's film, swap the tokens
and keep the system: one canvas colour, near-black ink, exactly ONE restrained accent, status
green/red/blue, a shadow style, and three fonts (display / body / mono). Keep one focal accent per
scene. Dark scenes use a deep navy + a warm radial glow, never flat black.
The full, code-level version is in docs/ARCHITECTURE.md. The set-pieces:
opacity/y/blur + stagger), count-up numbers (tl.call sets text + a scale punch).border-radius:50%; overflow:hidden + a name +
a role/credibility pill. Mix real faces with code-drawn identicons (deterministic 5×5 symmetric
pixel grid) for the natural "not everyone has a face" look.back.out; implode → click → burst on a ring.rotationY/rotationX/z + blur → flat), blur-out handoff, edge-on flip
to swap content unseen, HUD-pill flip to change a label cleanly.scale + x/y on the scene element. Push/pull, measured
dolly across a tall element, and a camera that follows a moving element.strokeDashoffset→0), a hub that grows a notch
per connection, +N badges riding the lines in, a counter ticking up.translate(-50%,…) + GSAP fight over transform — center with xPercent/yPercent or flex.t=0 or they flash early.#capture .btn) to avoid cross-scene collisions.overwrite:"auto" on tweens retargeting the same property (successive camera scales).transform-origin is unreliable — prefer strokeDashoffset draw-ons / explicit origins.The film renders silent; sound is a separate muxed layer you can re-roll independently.
sfx/ (25 sounds, every one synthesized —
see templates/make_kit.py). Regenerate any time with python3 templates/make_kit.py.templates/build_audio_kit.py (edit the CUES list of (time, token, dB, semitones))
→ master.wav → mux: ffmpeg -i video.mp4 -i master.wav -c:v copy -c:a aac -shortest out-sound.mp4.example/index.html into your project (or npx hyperframes init and paste the pattern in).:root brand tokens to your product (docs/BRANDING.md). Keep the system.master.wav, mux the -sound.mp4.npx claudepluginhub tryproduck/produck-skills --plugin produckCreates premium product launch videos with Hyperframes, guiding brand DNA extraction, art direction, and Apple-style motion design.
Builds marketing/explainer videos using Remotion with motion graphics, mocked UI, animated charts, and brand-matched design, stitched around one real product capture.
Turns product URLs, scripts, or briefs into promotional videos for SaaS launches, feature reveals, and product demos. Also handles site tours and showcases.