Produce a polished launch or walkthrough video for a product, feature, or page and publish it end-to-end: real product screenshots, a Remotion motion video, an emotive AI voice-over, a YouTube upload, a click-to-play embed on the page, and a team announcement. Use this whenever the user wants a launch video, feature video, demo video, walkthrough, product video, screen-recording, or "make a video" for a page/tool/feature — and whenever they want to publish/ship/upload a video to YouTube or ad...
Scanned 9/6/2026
Install to Claude Code
npx -y skills add vood/claude-launch-video-skill --skill launch-video --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Launch Video?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/vood-launch-video)More formats (shields.io, HTML) on the badges page.
---
name: launch-video
description: >-
Produce a polished launch or walkthrough video for a product, feature, or page and publish it
end-to-end: real product screenshots, a Remotion motion video, an emotive AI voice-over, a YouTube
upload, a click-to-play embed on the page, and a team announcement. Use this whenever the user wants
a launch video, feature video, demo video, walkthrough, product video, screen-recording, or "make a
video" for a page/tool/feature — and whenever they want to publish/ship/upload a video to YouTube or
add narration/voice-over to one. Also use it to add videos to top-traffic pages (from analytics) at
scale. Covers the whole pipeline, not just editing.
---
# Launch / Walkthrough Video
A repeatable pipeline for turning a product, feature, or page into a short motion video with
narration, then publishing it to YouTube, embedding it on the page, and announcing it. It exists
because doing this by hand means rediscovering a dozen non-obvious details every time (OAuth quirks,
voice-over sync math, the click-to-play embed, loudness targets).
Default output: a **1080p / 30fps** video, ~45–60s, with an emotive voice-over, uploaded **unlisted
first for the user to approve**, then flipped public. Never publish a video publicly without the
user hearing/seeing it — voices and pacing are subjective.
## Configure this for your project
Before first use, fill in `config.md` (a few IDs and paths). The skill reads those instead of
hardcoded values, so it works for any product. The values you need:
- Your YouTube **channel** (the OAuth account must have it selected)
- Your OAuth **client secret** path and **GCP project number** (YouTube Data API v3 enabled)
- Where finished-video announcements go (Slack channel, Discord, etc.)
- Your brand colors and the product URL pattern
## When to use it
Building any video for a page/feature/tool, adding a voice-over, or shipping a video to YouTube.
For a broad "add videos to our best pages" request, pull the top pages first (from your analytics),
then run this pipeline once per page — **pilot one, get approval on the format, then batch** the rest.
## The pipeline (7 steps)
Work top to bottom. Each step has detail in the referenced file or script.
1. **Understand the subject.** Read the implementation / docs so the steps shown match real behavior.
For a tool walkthrough, drive the live tool (Playwright) to see the actual input→output flow —
that IS the walkthrough.
2. **Capture real screenshots.** Playwright against production, 1920×1080. Hide any promo banners /
cookie bars first. See `references/video-production.md` → "Capturing screenshots".
3. **Build the Remotion video.** Copy the `remotion-scaffold/` structure. Scenes are frame-counted at
30fps in `src/theme.ts`. Size each scene to its narration length (step 4). Full scene/animation
patterns in `references/video-production.md`.
4. **Generate the voice-over.** `scripts/tts_voiceover.py` — OpenAI `gpt-4o-mini-tts`, voice `ash`,
with an **`instructions` prompt for emotion** (without it the read is flat and robotic — this is
the single most important VO detail). It generates per-scene clips, syncs them to each scene's
start frame, and loudness-normalizes the mixed track. Re-time scenes in `theme.ts` if a clip
overflows its scene, then re-render.
5. **Render + mux + encode.** `npx remotion render`, mux the VO track on with ffmpeg (`-c:v copy`),
then encode a `< 10 MB` upload cut (`libx264 -crf 25 -movflags +faststart`). Commands in
`references/video-production.md` → "Render, mux, encode".
6. **Publish to YouTube.** `scripts/youtube.py` (wraps `youtubeuploader` for the upload, uses the
Data API for everything else). Upload **unlisted**, get the user's OK, then set **public**. Read
`references/youtube-publishing.md` first — it has the auth setup, the OAuth redirect gotcha, the
API-not-enabled failure, quota limits, and the metadata template.
7. **Embed + announce.** Add a click-to-play facade section to the page (poster + play button; the
YouTube iframe only mounts on click — keeps it off initial load). Then post the link to your team
channel. Both patterns in `references/embed-and-announce.md`.
## Guardrails
- **Unlisted → approve → public**, every time. Uploading to the user's own channel needs their sign-off.
- The Google **OAuth consent is the user's to give** — you cannot click "Allow" for them. If auth
isn't set up, walk them through it (see `references/youtube-publishing.md`), don't try to bypass it.
- Keep the master render; only the upload cut is size-constrained.
- YouTube API quota ≈ **6 uploads / 24h**. A batch bigger than that must be spread across days —
say so instead of silently failing partway.
- CLI can't set a **thumbnail** — flag that the user should add one in Studio (or set via API separately).
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!