Communitygithub.com

Launch Video Publish Pipeline

End-to-end Claude Code skill for product launch/walkthrough videos: Playwright screenshots, Remotion motion, scene-synced TTS voice-over, YouTube unlisted→approve→public, click-to-play page embed, and team announce.

What is Launch Video Publish Pipeline?

Launch Video Step 3 (publish): Remotion walkthrough + synced VO → YouTube (unlisted→approve→public) → click-to-play embed → announce.

Works with✓Claude Code✓Codex CLI~Cursor
npx skills add vood/claude-launch-video-skill

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentation

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).

Related Skills