Install
$ agentstack add skill-praveentewatia26-award-grade-video-motion-studio ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Video Motion Studio — video as code, cut for the web, watched before shipped.
Mission
Treat video as a build artifact, not an export: composed in code, versioned in git, re-rendered when data changes, and budgeted like any other page weight. A product film that stutters on load or plays silent-and-captionless to 85% of viewers is not a film — it is a liability with a soundtrack. This skill makes video that earns its bytes.
When NOT to use
- A CSS/GSAP animation would do. If the motion is UI responding to the user, it belongs in
motion-choreographyorsignature-interactions— video is for authored, linear narrative. - One-off, never-revised, effects-heavy footage. Live-action grading, particle sims, 3D camera work: a motion designer in a dedicated NLE beats programmatic video. Remotion wins when video is data-driven, versioned, or personalized — not always.
- The page already has a signature moment. Per
../../references/awwwards-scoring.md, one memory per page. Autoplaying hero video next to a WebGL scene is two things screaming. - Background-texture video. Looping "ambience" video that carries no information is 4MB of decoration competing with content — the motion canon bans autoplaying loops near text for a reason.
Workflow
- Script on paper first. Write the beat sheet: hook, 3–5 feature beats, end card. One sentence per beat, timestamp each. No timeline work until the beat sheet reads well aloud in under the target duration.
- Pick the production path: Remotion (data-driven/versioned/multi-variant), screen-capture pipeline (product demo), Lottie/Rive (UI-embedded motion asset), or plain `` craft (footage already exists). Say which and why in one line.
- Build the master composition at the longest cut (60s). Structure every beat as a reusable component so shorter cuts are re-sequencing, not re-authoring.
- Author captions in parallel with picture — kinetic-type captions are part of the composition, not a post step, because muted autoplay is the default viewing condition.
- Render all variants + poster set, run the render-verification ritual (below), record file sizes and durations.
- Integrate on the page with poster,
muted playsinlineautoplay rules, lazy loading, and the ≤4MB above-the-fold budget from../../references/performance-budgets.md. - Gate through
award-judgebefore calling it done.
Technique library
Remotion fundamentals — React as timeline
Everything is a pure function of useCurrentFrame(). No hidden playhead state; a frame number in, pixels out. The three idioms that do 90% of the work:
const frame = useCurrentFrame();
const { fps, durationInFrames } = useVideoConfig();
// 1. interpolate — the workhorse. ALWAYS clamp; unclamped extrapolation is the #1 Remotion bug.
const opacity = interpolate(frame, [0, 20], [0, 1], { extrapolateRight: "clamp" });
// 2. spring — for entrances with weight. damping 200 = settle-no-bounce (product-safe).
const scale = spring({ frame, fps, config: { damping: 200 } });
// 3. Sequence — shifts child time so beats are self-contained components starting at frame 0.
Supporting cast: ` for layer stacking (every beat is layers, like a comp), staticFile() for assets, ` to embed real footage (screen captures, b-roll) inside a composition frame-accurately — this is how the capture pipeline and Remotion meet.
Register each cut as its own ` (id teaser-60, teaser-30, teaser-15) sharing beat components — render with npx remotion render `. When programmatic beats After Effects: numbers change (pricing, stats, dates), variants multiply (per-locale, per-customer, per-length), or video must stay in lockstep with a product that ships weekly. When it doesn't: see "When NOT to use."
Product-teaser grammar
The structure that survives a feed:
- **Hook 5s gets a visible pause control (vestibular rule).
- Delivery encode: H.264 in
yuv420p(the only universally-decodable pixel format — 4:4:4 renders black on many mobile players) with-movflags +faststartso playback starts before download finishes; offer AV1/HEVC as additional `entries for browsers that take them. Reserve layout with anaspect-ratio` box — a late-arriving video that shoves the page is a CLS defect, not a loading state. - Scroll-scrubbed video, two honest options:
currentTimescrubbing of a `: small payload, but seek latency depends on keyframe density — re-encode with all-keyframes (e.g., ffmpeg-g 1`) or scrubbing stutters on long GOPs. Fine for short clips ( 5s autoplay, flash safety (≤ 3 flashes/sec — check strobe-y cuts), captions as content parity, contrast ≥ 4.5:1 for text over footage tested on the worst frame.../../references/awwwards-scoring.md— video competes for the ONE signature moment; if it isn't the signature, it must be quiet. Content axis: a teaser with weak copy scores as weak content no matter the render quality.
Deliverables
- Composition source — Remotion project (or capture-pipeline project) with beats as components, variants as registered compositions, data as props.
- Rendered variants — 60/30/15s cuts at delivery resolutions, encode settings recorded (codec, bitrate, dimensions, file size per variant).
- Captions file — WebVTT (and/or SRT) matching the kinetic type, for players and platforms that ingest it.
- Poster set — chosen poster frame per variant plus 2–3 alternates, exported via
npx remotion stillor frame extraction.
Render-verification ritual (mandatory, before any "done"):
- [HUMAN] Watch every rendered variant start-to-end at 1× — the rendered file, not the preview. The preview lies about frame drops, asset 404s, and font fallbacks; the file doesn't. This is a human-perception check (does it feel right, does anything look wrong at real playback speed) — an agent has no eyes on a moving image, so request a human watch-through; do not report a skipped watch as done.
- [MEASURED] agent-runnable proxy when no human is available yet:
ffmpeg -i -vf "fps=2" frame_%03d.png(or similar, e.g. one frame per second) to extract a frame sequence, then run the legibility check (step 3 below) against the extracted frames. Disclose this as sampling frames, not watching the film — it catches static defects a still frame reveals (a caption that's mush, a frame with a dropped asset, a broken end card) but it CANNOT catch what only shows in motion: stutter, mistimed cuts, audio/caption drift, or a beat that reads wrong at speed. Label any claim from this proxy[MEASURED via ffmpeg frame extraction], never[HUMAN]. - Frame-check text legibility at 360p on every caption — if a caption aliases into mush at feed resolution, fix the type size, don't hope.
- Confirm poster, first frame, and end card each compose as standalone stills.
- Verify captions file timing against picture on at least the 60s cut.
- Record per-variant codec, dimensions, duration, and file size in the report. Claims without recorded numbers don't count as verification — a variant nobody watched end-to-end, or at minimum frame-sampled with the method disclosed, is not rendered, it is hoped.
Related skills
- wow-director — orchestrates this skill; owns the call on whether the page's signature moment is video at all.
- motion-choreography — the same timing canon applied to UI motion; kinetic-type easing lives there first.
- ux-narrative — writes the beat sheet's copy; a teaser is a narrative before it is a render.
- design-dna-forge — type, color, and art direction the film must inherit; video is the brand at 24fps, not a separate brand.
- webgl-shader-fx — the competing hero medium; never ship both loud on one page.
- award-judge — gates the output against the scoring rubric and the slop list.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: praveentewatia26
- Source: praveentewatia26/award-grade
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.