synthetic-ui-demo
Product demo and release-notes videos with no screen recording.
Skill by digitalsamba
Chalk Labs
Need help deploying synthetic-ui-demo?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/digitalsamba-synthetic-ui-demo
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: design, frontend, testing, data, audio-video, marketing-content
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/synthetic-ui-demo
What's inside
- Skill name
synthetic-ui-demo- Description
- 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.
- License
- MIT
- Instructions
- 127 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# 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. `templates/ds-release-notes` is the
reusable shape of it (ships as release 650). `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 source | You only have the running app |
| Release notes and feature tours that get redone every release | One-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 change | Long, complex interactions that would be costly to rebuild |
## Building blocks (`lib/components`)
```tsx
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, **split at sentences** (one `.txt` per phrase), and generate the audio first
(`voiceover.py --scene-dir ...`). Three takes and `tools/pick_takes.py` beat a single take plus `--max-wpm`: a
clone copies its reference clip's pace and flatness, so if the lines come out rushed or monotone fix the clip with
`tools/voice_prosody.py expand` rather than stretching the output (see "Clone Prosody" in CLAUDE.md). Read the
measured durations, and `tools/captions.py` for word timings.
- 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:
```bash
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.
`qc.py --project ... --layout` checks the video's own text (captions, cards, the AI note) for size and contrast, and
lists the product UI's separately. `Stage` marks its window `data-qc="product"`; put the same attribute on any phone
or tablet mockup you build outside it, or its UI text is judged as the video's.
## GotchasFrom digitalsamba/claude-code-video-toolkit, MIT.
More from digitalsamba/claude-code-video-toolkit
- 0.833score
elevenlabs
digitalsamba
Generate AI voiceovers, sound effects, and music using ElevenLabs APIs.
SkillAFreshness: A★ 2.3KClaude Code +9 - 0.833score
acestep
digitalsamba
AI music generation with ACE-Step 1.5 — background music, vocal tracks, covers, stem extraction, audio repainting, and continuation for video production.
SkillAFreshness: A★ 2.3KClaude Code +9 - 0.833score
runpod
digitalsamba
Cloud GPU processing via RunPod serverless.
SkillAFreshness: A★ 2.3KClaude Code +9 - 0.833score
qwen-edit
digitalsamba
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).
SkillAFreshness: A★ 2.3KClaude Code +9 - 0.833score
ltx2
digitalsamba
AI video generation with LTX-2.3 22B — text-to-video, image-to-video clips for video production.
SkillAFreshness: A★ 2.3KClaude Code +9 - 0.833score
ideogram4
digitalsamba
Prompting patterns for Ideogram 4 text-to-image — best-in-class in-image text rendering and exact color/layout control via structured JSON captions.
SkillAFreshness: A★ 2.3KClaude Code +9 - 0.829score
ffmpeg
digitalsamba
Video and audio processing with FFmpeg.
SkillAFreshness: A★ 2.3KClaude Code +9 - 0.829score
remotion
digitalsamba
Toolkit-specific Remotion patterns — custom transitions, shared components, and project conventions.
SkillAFreshness: A★ 2.3KClaude Code +9 - 0.829score
playwright-recording
digitalsamba
Record browser interactions as video using Playwright.
SkillAFreshness: A★ 2.3KClaude Code +9 - 0.828score
moviepy
digitalsamba
Python video composition with moviepy 2.x — overlaying deterministic text on AI-generated video (LTX-2, SadTalker), compositing clips, single-file build.py…
SkillAFreshness: A★ 2.3KClaude Code +9 - 0.818score
remotion-best-practices
digitalsamba
Router for all Remotion skills
SkillAFreshness: A★ 2.3KClaude Code +9 - 0.704score
video_toolkit
digitalsamba
Create professional videos autonomously using claude-code-video-toolkit — AI voiceovers, image generation, music, talking heads, and Remotion rendering.
SkillAFreshness: A★ 2.3KClaude Code +9
Compare and alternatives
Featured in
Signals
- Stars
- 2,330
- Forks
- 395
- Open issues
- 2
- Last commit (this folder)
- Oct 21, 2026 (9 days ago)
- Last release
- Oct 21, 2026 (9 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from digitalsamba
- 0.833score
elevenlabs
digitalsamba
Generate AI voiceovers, sound effects, and music using ElevenLabs APIs.
SkillAFreshness: A★ 2.3KClaude Code +9 - 0.833score
runpod
digitalsamba
Cloud GPU processing via RunPod serverless.
SkillAFreshness: A★ 2.3KClaude Code +9 - 0.833score
qwen-edit
digitalsamba
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).
SkillAFreshness: A★ 2.3KClaude Code +9 - 0.833score
ltx2
digitalsamba
AI video generation with LTX-2.3 22B — text-to-video, image-to-video clips for video production.
SkillAFreshness: A★ 2.3KClaude Code +9 - 0.833score
ideogram4
digitalsamba
Prompting patterns for Ideogram 4 text-to-image — best-in-class in-image text rendering and exact color/layout control via structured JSON captions.
SkillAFreshness: A★ 2.3KClaude Code +9 - 0.833score
acestep
digitalsamba
AI music generation with ACE-Step 1.5 — background music, vocal tracks, covers, stem extraction, audio repainting, and continuation for video production.
SkillAFreshness: A★ 2.3KClaude Code +9
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get synthetic-ui-demo running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
synthetic-ui-demo skill. Agent Mart. https://agentmart.dev/skills/digitalsamba-synthetic-ui-demo (last updated 2026-10-24)