Official agent skill

Onboarding Videos

by PostHog in PostHog/code

Add, replace, and optimize the looping demo videos in the onboarding "welcome" bento grid (packages/ui/src/features/onboarding).

OfficialMITAuto-check passedMedia & Creative

Install Onboarding Videos

skills CLI
$ npx skills add PostHog/code --skill onboarding-videos -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install PostHog/code onboarding-videos --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/PostHog/code.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/onboarding-videos .claude/skills/onboarding-videos && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
onboarding-videos
GitHub stars
179
Token cost
~1.7k tokens
SKILL.md length
744 words
Files
1
Skills in repo
10
Repo updated
First seen
Licence
MIT

At a glance

Add, replace, and optimize the looping demo videos in the onboarding "welcome" bento grid (packages/ui/src/features/onboarding).

  • Works in 2 steps: moov atom at the end of the file.… → Resolution far larger than it renders.…
  • Onboarding demo clips feel laggy
  • SKILL.md covers Why clips need optimizing (the…, Canonical encode target, Optimize existing clips and Add or replace a clip, plus 2 more sections
  • Calls pnpm, ffmpeg and ffprobe

What it does

Onboarding Videos is an agent skill from PostHog/code, published by the product's own GitHub organization. Add, replace, and optimize the looping demo videos in the onboarding "welcome" bento grid (packages/ui/src/features/onboarding). Covers the ffmpeg compression workflow (the scripts/optimize-onboarding-videos.mjs wrapper), the faststart + right-size best practices that keep playback smooth, the first-frame poster convention, and how to wire a new clip into WelcomeScreen. Use when onboarding demo clips feel laggy, when a clip is being added/swapped/re-recorded, or when posters and videos drift out of sync.

Its SKILL.md is about 1.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Media & Creative, covering Video production. It works with FFmpeg. The repository describes itself as: The era of self-driving development is here. The licence is MIT.

When your agent uses it

  • Onboarding demo clips feel laggy
  • A clip is being added/swapped/re-recorded
  • Posters and videos drift out of sync

Example prompts

  • “welcome”
  • “/onboarding-videos”

Requirements

  • Node.js
  • Pre-approved tools (allowed-tools): Bash(node scripts/optimize-onboarding-videos.mjs:*), Bash(pnpm optimize:onboarding-videos:*), Bash(ffmpeg:*), Bash(ffprobe:*), Bash(npx biome check:*), Bash(pnpm --filter @posthog/ui typecheck:*)

Workflow steps

2 steps, taken from the first numbered list in SKILL.md.

  1. moov atom at the end of the file. Without faststart the player must read
  2. Resolution far larger than it renders. The featured slot is never wider than

What it can do on your machine

Read from SKILL.md and the folder at commit a4c32df. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Bash(node scripts/optimize-onboarding-videos.mjs:*)
    • Bash(pnpm optimize:onboarding-videos:*)
    • Bash(ffmpeg:*)
    • Bash(ffprobe:*)
    • Bash(npx biome check:*)
    • Bash(pnpm --filter @posthog/ui typecheck:*)

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • pnpm
    • ffmpeg
    • ffprobe
    • npx
    • brew
    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use pnpm, npx and git, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Onboarding Videos loads about 1.7k tokens when it runs. Until then it costs about 132 tokens; SKILL.md has 744 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~132
When it runs · the whole SKILL.md, loaded when a task matches
~1.7k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from PostHog/code at commit a4c32df, republished under its MIT licence (© PostHog). 744 words, ~1,706 tokens.

Download SKILL.mdSave it as .claude/skills/onboarding-videos/SKILL.md (or your agent's skills folder).
name
onboarding-videos
description
Add, replace, and optimize the looping demo videos in the onboarding "welcome" bento grid (packages/ui/src/features/onboarding). Covers the ffmpeg compression workflow (the scripts/optimize-onboarding-videos.mjs wrapper), the faststart + right-size best practices that keep playback smooth, the first-frame poster convention, and how to wire a new clip into WelcomeScreen. Use when onboarding demo clips feel laggy, when a clip is being added/swapped/re-recorded, or when posters and videos drift out of sync.
allowed-tools
Bash(node scripts/optimize-onboarding-videos.mjs:*), Bash(pnpm optimize:onboarding-videos:*), Bash(ffmpeg:*), Bash(ffprobe:*), Bash(npx biome check:*), Bash(pnpm --filter @posthog/ui typecheck:*)

Onboarding bento demo videos

The first onboarding step (WelcomeScreen) shows a bento grid of feature cards. A card with a media entry plays a short, muted, looping screen recording; cards without one show a static placeholder. The featured (large, top-left) card is the only one that plays at a time — hover just moves the highlight.

ThingWhere
Clips + posterspackages/ui/src/features/onboarding/assets/<feature>-<light|dark>.{mp4,jpg}
Wiring (MEDIA map, startTime)packages/ui/src/features/onboarding/components/WelcomeScreen.tsx
<video> element + play/seek logicpackages/ui/src/features/onboarding/components/FeatureBentoCard.tsx
Optimizer scriptscripts/optimize-onboarding-videos.mjs (pnpm optimize:onboarding-videos)

Why clips need optimizing (the "it feels laggy" fix)

Raw screen recordings hitch in this UI for two reasons, both fixed by re-encoding:

  1. moov atom at the end of the file. Without faststart the player must read to EOF before it can start, so first-play and every seek stutter. We seek on mount and on every loop (FeatureBentoCard parks the clip on videoStartTime), so this bites constantly. Fix: -movflags +faststart.
  2. Resolution far larger than it renders. The featured slot is never wider than ~500 CSS px (the grid is max-w-[760px]). Even at 2× retina that's ~1000px, but recordings come in at ~1876px. Decoding huge frames and downscaling them — on every play and during the framer-motion slot reflow — is wasted work. Fix: cap width at 1000px (which also matches the poster width exactly).

Bitrate/size are usually already modest; decode cost and startup are the lag, not bytes. Don't chase file size at the expense of width/faststart.

Canonical encode target

H.264 · yuv420p · ≤1000px wide (keep aspect, even height) · CRF 23 · +faststart · no audio. These live as constants at the top of scripts/optimize-onboarding-videos.mjs — change them there, not ad-hoc.

Optimize existing clips

bash
pnpm optimize:onboarding-videos          # encode any clip not already optimized
pnpm optimize:onboarding-videos --dry-run   # show what would change
pnpm optimize:onboarding-videos --force     # re-encode all (after changing the target constants)

Requires ffmpeg (brew install ffmpeg). The script tags each output with a comment marker, so re-runs skip already-optimized files — it's safe to run any time, including right after dropping in a new clip. It rewrites files in place; review the git diff --stat and the printed before/after sizes.

Add or replace a clip

  1. Record light + dark variants at ≥1000px wide. The optimizer downscales to 1000px but never upscales, so anything narrower ships soft — resolution is the one thing it can't fix for you. Keep it short (~10–13s); it loops.

  2. Name + drop the files as assets/<feature>-light.mp4 and assets/<feature>-dark.mp4. Two things bite every time:

    • Recordings almost always arrive with the light variant unsuffixed (foo.mp4, only foo-dark.mp4 is tagged). Rename it to foo-light.mp4.
    • The source filename (e.g. whatever's in ~/Downloads) is irrelevant — the <feature> prefix must be the media id you'll use in WelcomeScreen and follow the existing convention, not whatever the file was called.

    No assets.d.ts change needed — *.mp4/*.jpg are wildcard modules.

  3. Optimize: pnpm optimize:onboarding-videos.

  4. Make the poster — the still shown before play. Use the clip's first frame and leave startTime at 0, so the poster, the first played frame, and the loop point are all the same with nothing to keep in sync:

    bash
    ffmpeg -y -i assets/<feature>-<theme>.mp4 \
      -frames:v 1 -vf "scale=1000:-2:flags=lanczos" -q:v 3 \
      assets/<feature>-<theme>.jpg
  5. Wire it up in WelcomeScreen.tsx. For a new media id, four edits, all keyed by the same slug: import the .mp4 + .jpg, add the id to the MediaId union, add its entry to the MEDIA map (startTime: 0), and set media: "<id>" on the target FeatureDef.

Show full SKILL.md (226 more words)Show less
Replacing an existing clip

Keep the same asset filename and the wiring is untouched — none of step 5 applies. Drop the new file over assets/<feature>-<theme>.mp4, run the optimizer (a fresh drop carries no skip-marker, so it re-encodes without --force), and regenerate that poster (step 4). If you replace only one theme, re-check that light and dark still share an aspect ratio — a clip with stray padding frames differently from its sibling, and the gap shows when the user toggles theme.

Poster = first frame (and startTime = 0)

FeatureBentoCard shows the poster while a card rests, then seeks the <video> to MEDIA[id].startTime on mount and loops back there (not necessarily to 0). The simple, default contract: the poster is the clip's first frame and startTime is 0, so the still, the first played frame, and the loop point are all identical — nothing to keep in sync. Keep the poster the same pixel width as the clip (1000px) so the poster→video swap is seamless.

startTime can start/loop mid-clip if you ever need it (the code-review clip uses 3s) — but then the poster MUST be that exact frame (ffmpeg -ss <startTime> -i …), or the still jumps the instant playback starts. Prefer the first-frame default unless you have a specific reason.

Verify

bash
# clips: moov should print BEFORE mdat, width ≤ 1000:
ffprobe -v trace <clip>.mp4 2>&1 | grep -o -m2 -E "type:'(moov|mdat)'"
ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=p=0 <clip>.mp4

# wiring: a grown MediaId union may need a formatter reflow, so let biome fix it:
npx biome check --write packages/ui/src/features/onboarding/components/WelcomeScreen.tsx
pnpm --filter @posthog/ui typecheck

To confirm playback feels smooth in the real app, use the test-electron-app skill to drive the running onboarding flow.

© PostHog, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/onboarding-videos of PostHog/code.

Open the folder on GitHubat commit a4c32df

Compare with similar skills

Onboarding Videos next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Onboarding Videos compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Onboarding Videos this skillPostHog/code179—~1.7kAutomated safety check: PassMIT
Video Understandcalesthio/OpenMontage66k—~841Automated safety check: PassAGPL-3.0
HyperFrames Video Entry Pointheygen-com/hyperframes60k3 repos~5.2kAutomated safety check: PassApache-2.0
Video Shotseternityspring/reelbench-skills8781 repos~1.8kAutomated safety check: NotesApache-2.0
Mobile Demo Film Editorsuperset-sh/superset15k—~1.8kAutomated safety check: PassCustom licence
Video Editcalesthio/OpenMontage66k—~855Automated safety check: NotesAGPL-3.0

Similar skills

  • Video Understand

    calesthio/OpenMontage

    Understand video content locally using ffmpeg frame extraction and Whisper transcription.

    66k GitHub stars~841 tokensUpdated 7 days ago
    Media & CreativeAuto-check passed
  • HyperFrames Video Entry Point

    heygen-com/hyperframes

    Entry point for making, editing and rendering videos from HTML compositions with HyperFrames, routing each request to the right workflow.

    60k GitHub starsUsed in 3 repos~5.2k tokens
    Media & CreativeAuto-check passed
  • Video Shots

    eternityspring/reelbench-skills

    拉片:把一条成片拆成逐镜头的分析表——每个镜头的时长、景别、类别、运镜、画面. An agent skill from eternityspring/reelbench-skills.

    878 GitHub starsUsed in 1 repo~1.8k tokens
    Media & CreativeAuto-check: notes
  • Mobile Demo Film Editor

    superset-sh/superset

    Edits real mobile screen recordings into a configurable demo video with phone framing, title cards, cutaways and an end card, using a bundled renderer.

    15k GitHub stars~1.8k tokensUpdated today
    Media & CreativeAuto-check passed
  • Video Edit

    calesthio/OpenMontage

    Edit videos locally using ffmpeg. An agent skill from calesthio/OpenMontage.

    66k GitHub stars~855 tokensUpdated 7 days ago
    Media & CreativeAuto-check: notes
  • Lemo-Opuscar Short Film Director

    lemomo-ai/lemo-opuscar

    Directs a short film made entirely in code in one of the Lemo-Opuscar library's named visual styles, from fetching the library through production and delivery.

    1.8k GitHub stars~596 tokensUpdated yesterday
    Media & CreativeAuto-check passed

More from PostHog/code

All 10 skills in this repo
  • Canvas Templates

    PostHog/code

    Official

    How PostHog "canvas" dashboards work end-to-end — the two rendering tiers (json-render vs freeform React-in-iframe), the agent system prompts that steer each, and the RIGHT way to fetch PostHog data…

    179 GitHub stars~2.2k tokensUpdated 2 mo ago
    Auto-check passed
  • Dynamic Workflows

    PostHog/code

    Official

    How to write JavaScript workflow scripts for the workflow tool - fanning work out across many isolated subagents with agent(), parallel(), and pipeline(), then synthesizing one result.

    179 GitHub stars~2.3k tokensUpdated 2 mo ago
    Auto-check passed
  • MCP Servers

    PostHog/code

    Official

    Install, configure, authenticate, and troubleshoot MCP (Model Context Protocol) servers for this agent.

    179 GitHub stars~1.9k tokensUpdated 2 mo ago
    Auto-check passed
  • Merging PRs

    PostHog/code

    Official

    Merge a PR into main through the Trunk merge queue and babysit it until it lands.

    179 GitHub stars~1.3k tokensUpdated 2 mo ago
    Auto-check passed
  • Quill Code

    PostHog/code

    Official

    Edit the @posthog/quill design system locally and consume the change in this repo (posthog-code) before it is published to npm.

    179 GitHub stars~1.1k tokensUpdated 2 mo ago
    Auto-check passed
  • Storybook Stories

    PostHog/code

    Official

    Write Storybook stories for PostHog UI components. An agent skill from PostHog/code.

    179 GitHub stars~929 tokensUpdated 2 mo ago
    Auto-check passed

Works with

Questions about Onboarding Videos

What does Onboarding Videos do?

Add, replace, and optimize the looping demo videos in the onboarding "welcome" bento grid (packages/ui/src/features/onboarding). Onboarding Videos is an agent skill from PostHog/code, published by the product's own GitHub organization. Add, replace, and optimize the looping demo videos in the onboarding "welcome" bento grid (packages/ui/src/features/onboarding).

When should I use Onboarding Videos?

Onboarding Videos fits situations like: onboarding demo clips feel laggy; A clip is being added/swapped/re-recorded; posters and videos drift out of sync.

How do I install Onboarding Videos in Claude Code?

Run `npx skills add PostHog/code --skill onboarding-videos -a claude-code`. Or copy the skill folder (.claude/skills/onboarding-videos in PostHog/code) into .claude/skills/onboarding-videos in your project. Claude Code loads it when a task matches its description.

How do I install Onboarding Videos in Codex?

Run `npx skills add PostHog/code --skill onboarding-videos -a codex`. Or copy the skill folder (.claude/skills/onboarding-videos in PostHog/code) into .agents/skills/onboarding-videos in your project. Codex loads it when a task matches its description.

Can I use Onboarding Videos in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add PostHog/code --skill onboarding-videos -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/onboarding-videos, .gemini/skills/onboarding-videos, .github/skills/onboarding-videos and .opencode/skills/onboarding-videos in your project.

What does Onboarding Videos need to run?

Going by SKILL.md and its folder, Onboarding Videos needs the command-line tools its instructions call (pnpm, ffmpeg, ffprobe, npx, brew and git). Our summary lists: Node.js. Its frontmatter pre-approves these tools: Bash(node scripts/optimize-onboarding-videos.mjs:*), Bash(pnpm optimize:onboarding-videos:*), Bash(ffmpeg:*), Bash(ffprobe:*), Bash(npx biome check:*), Bash(pnpm --filter @posthog/ui typecheck:*).

Does Onboarding Videos access the network?

SKILL.md contains no URLs. Its commands use npx and git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Onboarding Videos safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Onboarding Videos use?

Onboarding Videos is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Onboarding Videos use?

About 1.7k tokens (SKILL.md is roughly 6.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Onboarding Videos?

Skills that share tags, products or a category with Onboarding Videos: Video Understand (calesthio/OpenMontage, 66k stars), HyperFrames Video Entry Point (heygen-com/hyperframes, 60k stars), Video Shots (eternityspring/reelbench-skills, 878 stars) and Mobile Demo Film Editor (superset-sh/superset, 15k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Onboarding Videos?

PostHog (a GitHub organization, an official publisher) maintains it in PostHog/code, which has 179 GitHub stars. The repository holds 10 skills in this directory. The repository was last updated on August 5, 2026.

Source: PostHog/code on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.