Video Understand
calesthio/OpenMontage
Understand video content locally using ffmpeg frame extraction and Whisper transcription.
Add, replace, and optimize the looping demo videos in the onboarding "welcome" bento grid (packages/ui/src/features/onboarding).
$ npx skills add PostHog/code --skill onboarding-videos -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install PostHog/code onboarding-videos --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ 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-srcUse ~/.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/
Install the "onboarding-videos" agent skill from https://github.com/PostHog/code/tree/main/.claude/skills/onboarding-videos into .claude/skills/onboarding-videos/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "onboarding-videos", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/PostHog/code/tree/main/.claude/skills/onboarding-videosType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add PostHog/code --skill onboarding-videos -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install PostHog/code onboarding-videos --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/PostHog/code.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/onboarding-videos .agents/skills/onboarding-videos && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "onboarding-videos" agent skill from https://github.com/PostHog/code/tree/main/.claude/skills/onboarding-videos into .agents/skills/onboarding-videos/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "onboarding-videos", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add PostHog/code --skill onboarding-videos -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install PostHog/code onboarding-videos --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/PostHog/code.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/onboarding-videos .cursor/skills/onboarding-videos && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "onboarding-videos" agent skill from https://github.com/PostHog/code/tree/main/.claude/skills/onboarding-videos into .cursor/skills/onboarding-videos/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "onboarding-videos", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/PostHog/code.git --path .claude/skills/onboarding-videos--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add PostHog/code --skill onboarding-videos -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install PostHog/code onboarding-videos --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/PostHog/code.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/onboarding-videos .gemini/skills/onboarding-videos && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "onboarding-videos" agent skill from https://github.com/PostHog/code/tree/main/.claude/skills/onboarding-videos into .gemini/skills/onboarding-videos/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "onboarding-videos", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install PostHog/code onboarding-videosInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add PostHog/code --skill onboarding-videos -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/PostHog/code.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/onboarding-videos .github/skills/onboarding-videos && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "onboarding-videos" agent skill from https://github.com/PostHog/code/tree/main/.claude/skills/onboarding-videos into .github/skills/onboarding-videos/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "onboarding-videos", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add PostHog/code --skill onboarding-videos -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install PostHog/code onboarding-videos --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/PostHog/code.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/onboarding-videos .opencode/skills/onboarding-videos && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "onboarding-videos" agent skill from https://github.com/PostHog/code/tree/main/.claude/skills/onboarding-videos into .opencode/skills/onboarding-videos/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "onboarding-videos", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
onboarding-videosAdd, 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). 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.
2 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit a4c32df. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
pnpmffmpegffprobenpxbrewgitFrom the folder's file list and the shell code blocks in SKILL.md.
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.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
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.
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.
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.
The full file from PostHog/code at commit a4c32df, republished under its MIT licence (© PostHog). 744 words, ~1,706 tokens.
.claude/skills/onboarding-videos/SKILL.md (or your agent's skills folder).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.
| Thing | Where |
|---|---|
| Clips + posters | packages/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 logic | packages/ui/src/features/onboarding/components/FeatureBentoCard.tsx |
| Optimizer script | scripts/optimize-onboarding-videos.mjs (pnpm optimize:onboarding-videos) |
Raw screen recordings hitch in this UI for two reasons, both fixed by re-encoding:
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.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.
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.
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.
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.
Name + drop the files as assets/<feature>-light.mp4 and
assets/<feature>-dark.mp4. Two things bite every time:
foo.mp4, only foo-dark.mp4 is tagged). Rename it to foo-light.mp4.~/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.
Optimize: pnpm optimize:onboarding-videos.
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:
ffmpeg -y -i assets/<feature>-<theme>.mp4 \
-frames:v 1 -vf "scale=1000:-2:flags=lanczos" -q:v 3 \
assets/<feature>-<theme>.jpgWire 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.
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.
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.
# 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 typecheckTo 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
Just SKILL.md in .claude/skills/onboarding-videos of PostHog/code.
Open the folder on GitHubat commit a4c32df
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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Onboarding Videos this skillPostHog/code | 179 | — | ~1.7k | Automated safety check: Pass | MIT | |
| Video Understandcalesthio/OpenMontage | 66k | — | ~841 | Automated safety check: Pass | AGPL-3.0 | |
| HyperFrames Video Entry Pointheygen-com/hyperframes | 60k | 3 repos | ~5.2k | Automated safety check: Pass | Apache-2.0 | |
| Video Shotseternityspring/reelbench-skills | 878 | 1 repos | ~1.8k | Automated safety check: Notes | Apache-2.0 | |
| Mobile Demo Film Editorsuperset-sh/superset | 15k | — | ~1.8k | Automated safety check: Pass | Custom licence | |
| Video Editcalesthio/OpenMontage | 66k | — | ~855 | Automated safety check: Notes | AGPL-3.0 |
calesthio/OpenMontage
Understand video content locally using ffmpeg frame extraction and Whisper transcription.
heygen-com/hyperframes
Entry point for making, editing and rendering videos from HTML compositions with HyperFrames, routing each request to the right workflow.
eternityspring/reelbench-skills
拉片:把一条成片拆成逐镜头的分析表——每个镜头的时长、景别、类别、运镜、画面. An agent skill from eternityspring/reelbench-skills.
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.
calesthio/OpenMontage
Edit videos locally using ffmpeg. An agent skill from calesthio/OpenMontage.
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.
PostHog/code
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…
PostHog/code
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.
PostHog/code
Install, configure, authenticate, and troubleshoot MCP (Model Context Protocol) servers for this agent.
PostHog/code
Merge a PR into main through the Trunk merge queue and babysit it until it lands.
PostHog/code
Edit the @posthog/quill design system locally and consume the change in this repo (posthog-code) before it is published to npm.
PostHog/code
Write Storybook stories for PostHog UI components. An agent skill from PostHog/code.
Works with
Categories
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).
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.
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.
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.
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.
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:*).
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.
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.
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.
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.
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.
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.