Individual skill
product-film
Make a showreel-grade product film (landing-page loop, launch video, promo, demo reel, social cut) in code with Remotion, built on the product's own design system, components and voice. Use when someone asks for a product video, landing video, promo, launch film, explainer or "motion design video" for their app, SaaS or codebase. It asks what to include, then covers design discovery, story, music sync, transitions, review loops and a verified final render.
plugins/product-film/skills/product-film/SKILL.md
Source commit fe11efc429d5903e37274d0b294e1b95745b2881
What was checked
- Matches the observed repository HEAD
- Yes
- Scanner rules are current
- Yes
- Repository scan complete
- Yes
- Skill scan complete
- Yes
- Observed behavior
- Local scripts
- Last checked
- Nov 10, 2026
These are observations at the recorded commit, not a guarantee of safety. Review the source before running it.
Install this skill
Choose an agent in your Stack or copy a command below. Commands fetch the pinned commit and copy only this skill directory. Existing destinations are refused. Copying a command does not install anything.
Claude Code
Destination .claude/skills/product-film
(
set -euo pipefail
destination='./.claude/skills/product-film'
if [ -e "$destination" ] || [ -L "$destination" ]; then printf '%s\n' 'Destination already exists; nothing overwritten.' >&2; exit 1; fi
work=$(mktemp -d)
trap 'rm -rf -- "$work"' EXIT
git clone --filter=blob:none --no-checkout -- 'https://github.com/Rieranthony/product-film-skill.git' "$work/repo"
git -C "$work/repo" checkout --detach fe11efc429d5903e37274d0b294e1b95745b2881
git -C "$work/repo" archive --format=tar 'fe11efc429d5903e37274d0b294e1b95745b2881:plugins/product-film/skills/product-film' > "$work/skill.tar"
mkdir -p -- './.claude/skills'
mkdir -- "$destination"
tar -xf "$work/skill.tar" -C "$destination"
)Codex
Destination .agents/skills/product-film
(
set -euo pipefail
destination='./.agents/skills/product-film'
if [ -e "$destination" ] || [ -L "$destination" ]; then printf '%s\n' 'Destination already exists; nothing overwritten.' >&2; exit 1; fi
work=$(mktemp -d)
trap 'rm -rf -- "$work"' EXIT
git clone --filter=blob:none --no-checkout -- 'https://github.com/Rieranthony/product-film-skill.git' "$work/repo"
git -C "$work/repo" checkout --detach fe11efc429d5903e37274d0b294e1b95745b2881
git -C "$work/repo" archive --format=tar 'fe11efc429d5903e37274d0b294e1b95745b2881:plugins/product-film/skills/product-film' > "$work/skill.tar"
mkdir -p -- './.agents/skills'
mkdir -- "$destination"
tar -xf "$work/skill.tar" -C "$destination"
)Cursor
Destination .cursor/skills/product-film
(
set -euo pipefail
destination='./.cursor/skills/product-film'
if [ -e "$destination" ] || [ -L "$destination" ]; then printf '%s\n' 'Destination already exists; nothing overwritten.' >&2; exit 1; fi
work=$(mktemp -d)
trap 'rm -rf -- "$work"' EXIT
git clone --filter=blob:none --no-checkout -- 'https://github.com/Rieranthony/product-film-skill.git' "$work/repo"
git -C "$work/repo" checkout --detach fe11efc429d5903e37274d0b294e1b95745b2881
git -C "$work/repo" archive --format=tar 'fe11efc429d5903e37274d0b294e1b95745b2881:plugins/product-film/skills/product-film' > "$work/skill.tar"
mkdir -p -- './.cursor/skills'
mkdir -- "$destination"
tar -xf "$work/skill.tar" -C "$destination"
)Gemini CLI
Destination .gemini/skills/product-film
(
set -euo pipefail
destination='./.gemini/skills/product-film'
if [ -e "$destination" ] || [ -L "$destination" ]; then printf '%s\n' 'Destination already exists; nothing overwritten.' >&2; exit 1; fi
work=$(mktemp -d)
trap 'rm -rf -- "$work"' EXIT
git clone --filter=blob:none --no-checkout -- 'https://github.com/Rieranthony/product-film-skill.git' "$work/repo"
git -C "$work/repo" checkout --detach fe11efc429d5903e37274d0b294e1b95745b2881
git -C "$work/repo" archive --format=tar 'fe11efc429d5903e37274d0b294e1b95745b2881:plugins/product-film/skills/product-film' > "$work/skill.tar"
mkdir -p -- './.gemini/skills'
mkdir -- "$destination"
tar -xf "$work/skill.tar" -C "$destination"
)GitHub Copilot
Destination .github/skills/product-film
(
set -euo pipefail
destination='./.github/skills/product-film'
if [ -e "$destination" ] || [ -L "$destination" ]; then printf '%s\n' 'Destination already exists; nothing overwritten.' >&2; exit 1; fi
work=$(mktemp -d)
trap 'rm -rf -- "$work"' EXIT
git clone --filter=blob:none --no-checkout -- 'https://github.com/Rieranthony/product-film-skill.git' "$work/repo"
git -C "$work/repo" checkout --detach fe11efc429d5903e37274d0b294e1b95745b2881
git -C "$work/repo" archive --format=tar 'fe11efc429d5903e37274d0b294e1b95745b2881:plugins/product-film/skills/product-film' > "$work/skill.tar"
mkdir -p -- './.github/skills'
mkdir -- "$destination"
tar -xf "$work/skill.tar" -C "$destination"
)OpenCode
Destination .opencode/skills/product-film
(
set -euo pipefail
destination='./.opencode/skills/product-film'
if [ -e "$destination" ] || [ -L "$destination" ]; then printf '%s\n' 'Destination already exists; nothing overwritten.' >&2; exit 1; fi
work=$(mktemp -d)
trap 'rm -rf -- "$work"' EXIT
git clone --filter=blob:none --no-checkout -- 'https://github.com/Rieranthony/product-film-skill.git' "$work/repo"
git -C "$work/repo" checkout --detach fe11efc429d5903e37274d0b294e1b95745b2881
git -C "$work/repo" archive --format=tar 'fe11efc429d5903e37274d0b294e1b95745b2881:plugins/product-film/skills/product-film' > "$work/skill.tar"
mkdir -p -- './.opencode/skills'
mkdir -- "$destination"
tar -xf "$work/skill.tar" -C "$destination"
)Repository context
- Repository stars (not skill ratings)
- 423
- Repository last updated
- Sep 26, 2026
- License
- MIT
Observed agent integration: No specific integration evidence. Standard SKILL.md installation does not imply verified compatibility.
- design Derived category
Files and excerpt
File metadata and permitted, redacted excerpts come from the recorded scan. Source links are pinned to that commit.
Browse files
SKILL.mdcore · 5,642 bytesreference/discovery.mddoc · 4,120 bytesreference/engine.mddoc · 6,226 bytesreference/ingredients.mddoc · 5,510 bytesreference/interview.mddoc · 2,297 bytesreference/music.mddoc · 3,107 bytesreference/render.mddoc · 2,010 bytesreference/review.mddoc · 2,698 bytesreference/story.mddoc · 2,544 bytesscripts/audio-edit.pyruns · 1,892 bytesscripts/beats.pyruns · 7,358 bytesscripts/render.tsruns · 4,343 bytesscripts/stills.tsruns · 2,013 bytesscripts/verify.pyruns · 3,178 bytestemplates/BRAND.mddoc · 3,309 bytestemplates/film-prompt.mddoc · 3,183 bytestemplates/kit/camera.tsruns · 1,525 bytestemplates/kit/cursor-path.tsruns · 2,178 bytestemplates/kit/cursor.tsxruns · 2,535 bytestemplates/kit/debug.tsxruns · 1,226 bytestemplates/kit/dither.tsruns · 2,450 bytestemplates/kit/move.tsruns · 1,261 bytestemplates/kit/punchlines.tsxruns · 3,179 bytestemplates/kit/spring.tsruns · 1,706 bytestemplates/kit/time.tsruns · 1,117 bytes
Read excerpt
# Product film
A film that looks like the product made it: its colors, type, components, logo and voice, cut to music. Built in Remotion inside (or beside) the product's codebase, so it reuses real components and stays editable.
## Non-negotiables
- **Their design wins.** Every rule comes from the product: its tokens, components, rules files, landing page and copy. Never carry another product's taste in, including anything in this skill that their design contradicts.
- **Ask, don't assume.** What the film shows and how it is made are the user's call. Interview them before writing the story ([reference/interview.md](reference/interview.md)). Offer options drawn from what you found in their code, never generic ones.
- **Every frame is a pure function of time.** No CSS transitions or keyframes, no timers, no `Date.now()`, no state carried between frames. A component that runs its own clock gets a frame-driven twin.
- **Measure, never guess.** Beats come from the audio, positions from the DOM (debug overlay), colors from decoded pixels of the final files.
- **Honest claims.** Show only what the product really does. Find its claims rules and approved lines before writing a word.
- **Ask first** before committing, pushing or publishing. Keep every rendered version (`out/<film>/v1`, `v2`, ...).
## Workflow