MCPInstall

synthetic-ui-demo

Product demo and release-notes videos with no screen recording. Rebuild the app's screens as static React from its source code, then drive them in Remotion with a scripted cursor and camera (lib/components Stage + Cursor). Use when making a product walkthrough, feature demo, release-notes or changelog video for an app whose source you can read, or when a Playwright recording would be flaky, need test data, or go stale. Triggers include synthetic demo, rebuild the UI, release video, feature walkthrough, product demo from source, scripted cursor, camera zoom on UI, no screen recording.

Installs
51
Last 24h
+11
Trending rank
#8258
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/digitalsamba/claude-code-video-toolkit --skill synthetic-ui-demo
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads synthetic-ui-demo automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

Synthetic UI Demos

Nothing is screen-recorded. Claude Code reads the product's repo, rebuilds only the screens a scene shows as static React, and a scripted cursor and camera perform the flow in Remotion. Every click is a frame number, so a scene re-renders identically, never needs a seeded account or a live environment, and is updated by editing code when the product changes.

Reference builds (read them alongside this skill; both build without the product repos):

  • examples/ds-free-schedule-demo: one 26s flow (schedule a call) with a narrator tile. The simplest complete case. Its src/Demo.tsx is a single timeline with every cursor keyframe, click and camera move.
  • examples/ds-release-649: an 80s release-notes video, eight scenes across three apps. src/Release.tsx sequences the scenes, src/scenes/ has one file per release item, and src/room/ and src/ac/ are the screen kits.

When to use this vs. Playwright

Synthetic (this skill)Playwright recording (/record-demo)
You can read the app's sourceYou only have the running app
Release notes and feature tours that get redone every releaseOne-off capture of real behaviour or real data
The flow needs data you don't have (a full call, other users, an admin view)The real thing is easy to reach and looks right as is
Camera moves, exact click timing, re-renders after a voice changeLong, complex interactions that would be costly to rebuild

Building blocks (lib/components)

import { Stage, typed, cursorAt, near } from '../../../../lib/components';

<Stage
  url="app.example.com/settings"             // address bar; host darker than path
  camera={CAMERA}                             // [{ f, z, x, y }] in canvas px, eased, clamped to the window
  path={PATH}                                 // [{ f, x, y }] cursor keyframes in canvas px
  clicks={CLICKS}                             // frames that squash the cursor and throw a ripple
  aiNote                                      // "People shown are AI-generated" (or pass your own text)
  canvasWidth={1440} canvasHeight={810}       // the defaults
>
  <SettingsScreen field={typed(frame, 'Q4 Product Review', 128)} />
</Stage>
  • Stage draws browser chrome around a fixed-size app canvas, applies the camera, and puts the cursor on top at zIndex 100. At zoom 1 the window is fit (0.8625) of the frame width. Keyframes repeat a value to hold it.
  • Cursor and cursorAt work on their own for a non-browser scene; near(cursor, target) drives hover states.
  • Product-specific screen kits (theme, icons, layouts) stay in the project. They are not lib material.

Method

1. Pull a visual spec from the app repo, with subagents

Send one subagent per app or area, in parallel, and have each return a compact spec rather than file dumps:

  • Theme: palette, font stack, radii, spacing, shadows (from the theme file or CSS variables).
  • Strings: the exact English locale strings for every label, menu item, dialog and toast the scene shows (public/locales/en/*.json, src/i18n/locales/en/*). Never paraphrase UI text.
  • Icons: if the app uses an icon font, its icomoon/fontello selection.json holds each glyph's SVG paths. Extract the ones you need into a small JSON and render them as <svg><path d=...>. Otherwise copy the SVG components.
  • Layout and behaviour: component tree for the screens shown, toolbar order, defaults, what each control does.

Read the default branch from the remote (git show origin/main:path, or git fetch then read origin/<default>). Local checkouts are often stale and will give you last quarter's UI.

For release notes, trace each item to the commit and component that ship it first. That gives you the exact strings and the default values to show.

2. Rebuild only what a scene shows, on a fixed canvas

  • Lay every element out with absolute positions on a fixed canvas (1440x810 is a good default). Export the rects that matter as constants (SAVE_BTN = { x, y, w, h }), so click targets are arithmetic, not guesses.
  • Build only what the camera sees. A panel that is never in shot can be a flat colour.
  • Keep it static React: no state, no effects. Every visual change is a function of frame.
  • Put the kit in its own folder (src/ui/, src/room/) with a theme.ts for constants.

3. Voice first, then put the timeline in frames

  • Write one line per scene and generate per-scene audio first (voiceover.py --scene-dir ... --json, add --max-wpm 165). Read the measured durations.
  • Size each scene to its line plus a beat, and keep a header comment listing each line's start and length. That comment is the source of truth (see "Audio-Anchored Timelines" in CLAUDE.md).
  • Everything is a frame constant at the top of the scene file: cursor keyframes, CLICKS, camera keyframes, UI state switches (frame >= C.save shows the dialog). Export the click frames so the parent can place click SFX.
  • Time each click to land on the word that names it.

4. Split dense list lines at their pauses

A line that lists several things ("scheduling, contacts, recordings and transcripts") is too fast for one shot. Split the audio at its pauses into phrase files (07a, 07b, ...), give each phrase its own shot, and place each phrase on its own beat. ds-release-649's moreVo field does this.

5. Measure click targets from a contact sheet before the full render

A guessed coordinate is usually 20-50px off once the camera zooms. Render stills at every click frame and a few frames before it, tile them, and check the cursor tip sits on the target:

i=1; for f in 46 78 122 212; do npx remotion still MyComp out/stills/s$i.png --frame=$f; i=$((i+1)); done
ffmpeg -start_number 1 -i out/stills/s%d.png -vf "scale=640:-1,tile=2x2" -frames:v 1 out/contact.png

Fix the constants, re-render the stills, and only then render the video.

6. Label AI-generated people on screen

Any person who is not real (FLUX.2 portraits in tiles, avatars, a narrator) gets a visible label: aiNote on the Stage, or an "AI" badge on a narrator tile. Names, contacts and call data are invented too, so keep them plainly fictional.

7. Render, then normalise

tools/qc.py --project ... before rendering, then qc.py --render out/video.mp4 --fix for -14 LUFS.

Gotchas

  • Mono SVG logos render black. A logo_mono.svg usually has black fills; on a dark background use filter: brightness(0) invert(1).
  • Stale local branches. Read origin/<default>, not whatever branch the local checkout is on.
  • rsync --exclude src also drops node_modules/*/src. When copying a project or kit, anchor excludes to the transfer root with a leading slash: --exclude /src.
  • The camera clamps. A camera centre near the canvas edge is pulled in so the window edge never shows past the frame. If a zoom lands somewhere unexpected, that is why; aim at a point further in.
  • Menus and dialogs must sit inside the canvas. The canvas clips its children. Position a menu so it opens inward, as the real app does.
  • Hover states come from the cursor path. Use near(cursorAt(frame, PATH), target) rather than a second set of frame constants, so moving a keyframe moves the hover with it.
  • A changed voice line moves everything after it. Re-measure, update the header comment and the scene lengths, then re-check click stills. If a lip-synced narrator is driven by the assembled voice track, regenerate it too.

FAQ

What does the synthetic-ui-demo skill do?

Product demo and release-notes videos with no screen recording. Rebuild the app's screens as static React from its source code, then drive them in Remotion with a scripted cursor and camera (lib/components Stage + Cursor). Use when making a product walkthrough, feature demo, release-notes or changelog video for an app whose source you can read, or when a Playwright recording would be flaky, need test data, or go stale. Triggers include synthetic demo, rebuild the UI, release video, feature walkthrough, product demo from source, scripted cursor, camera zoom on UI, no screen recording.

How do I install synthetic-ui-demo?

Run npx skills add https://github.com/digitalsamba/claude-code-video-toolkit --skill synthetic-ui-demo in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/synthetic-ui-demo/ (personal) or .claude/skills/synthetic-ui-demo/ (project).

Which AI agents can use synthetic-ui-demo?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is synthetic-ui-demo safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains synthetic-ui-demo?

It is published by digitalsamba in digitalsamba/claude-code-video-toolkit. It has 51 recorded installs.

More from digitalsamba/claude-code-video-toolkit

View all →

ffmpeg

digitalsamba/claude-code-video-toolkit

Video and audio processing with FFmpeg. Use for format conversion, resizing, compression, audio extraction, and preparing assets for Remotion. Triggers include converting GIF to MP4, resizing video, extracting audio, compressing files, or any media transformation task.

Media & Creative11.8K installs

playwright-recording

digitalsamba/claude-code-video-toolkit

Record browser interactions as video using Playwright. Use for capturing demo videos, app walkthroughs, and UI flows for Remotion videos. Triggers include recording a demo, capturing browser video, screen recording a website, or creating walkthrough footage.

Testing & QA1.3K installs

elevenlabs

digitalsamba/claude-code-video-toolkit

Generate AI voiceovers, sound effects, and music using ElevenLabs APIs. Use when creating audio content for videos, podcasts, or games. Triggers include generating voiceovers, narration, dialogue, sound effects from descriptions, background music, soundtrack generation, voice cloning, or any audio synthesis task.

Media & Creative1.2K installs

remotion

digitalsamba/claude-code-video-toolkit

Toolkit-specific Remotion patterns — custom transitions, shared components, and project conventions. For core Remotion framework knowledge (hooks, animations, rendering, etc.), see the remotion-official skill.

Media & Creative1.2K installs

moviepy

digitalsamba/claude-code-video-toolkit

Python video composition with moviepy 2.x — overlaying deterministic text on AI-generated video (LTX-2, SadTalker), compositing clips, single-file build.py video projects. Use when adding labels/captions/lower-thirds to LTX-2 or SadTalker outputs, building short ad-style spots in pure Python without Remotion, or doing programmatic video composition. Triggers include text overlay on video, label LTX-2 clip, caption SadTalker output, lower third, build.py video, moviepy, Python video composition, sub-30s ad spot.

Media & Creative1K installs

qwen-edit

digitalsamba/claude-code-video-toolkit

AI image editing prompting patterns for Qwen-Image (Qwen-Image-Edit-2511 by default, Qwen-Image-2.1 as a non-commercial Modal opt-in). Use when editing photos while preserving identity, reframing cropped images, changing clothing or accessories, adjusting poses, applying style transfers, or character transformations. Provides prompt patterns, parameter tuning, and examples.

Media & Creative975 installs

Popular frontend & design skills

View category →

setup-matt-pocock-skills

mattpocock/skills

Configure this repo for the engineering skills: set up its issue tracker, triage label vocabulary, and domain doc layout. Run once before first use of the other engineering skills.

Frontend & Design1.1M installs

frontend-design

anthropics/skills

Guidance for distinctive, intentional visual design when building new UI or reshaping an existing one. Helps with aesthetic direction, typography, and making choices that don't read as templated defaults.

OfficialFrontend & Design1M installs

hyperframes-animation

heygen-com/hyperframes

All animation knowledge for HyperFrames — atomic motion rules, multi-phase scene blueprints, scene transitions, broader motion-design techniques, AND the seven runtime adapters (GSAP default, plus Lottie, Three.js, Anime.js, CSS keyframes, Web Animations API, TypeGPU). Use for any motion or animation task: pick 2-4 rules and compose, or load a blueprint, or look up runtime-specific API (e.g. GSAP eases / Lottie player / Three.js mixer). Also covers auditing an existing composition's choreography (animation map) and 24 named text-animation effects. HyperFrames-native: single paused timeline, seek-safe, deterministic.

prototype

mattpocock/skills

Build a throwaway prototype to answer a design question. Use when the user wants to sanity-check whether a state model or logic feels right, or explore what a UI should look like.

Frontend & Design999.2K installs

hyperframes-core

heygen-com/hyperframes

The HyperFrames composition contract — build one renderable project. Use for composition structure, the data- timing attributes, class="clip", tracks, sub-compositions, variables, framework-owned media playback, deterministic-render rules, and validation. Read before writing composition HTML.

Frontend & Design930.5K installs

vercel-react-best-practices

vercel-labs/agent-skills

React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.

OfficialFrontend & Design843.1K installs