avatar-ad-director
Turn a SaaS project's brand + screenshots into a ≤60s 9:16 UGC-style ad — one HeyGen realistic-avatar clip as the spine, composited in Remotion with…
Skill by baldiga
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/baldiga-avatar-ad-director
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, marketing
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/avatar-ad-director
What's inside
- Skill name
avatar-ad-director- Description
- Turn a SaaS project's brand + screenshots into a ≤60s 9:16 UGC-style ad — one HeyGen realistic-avatar clip as the spine, composited in Remotion with screenshots, phrase keyword-pop captions, and a quieter ducked music bed, rendered locally as captioned + clean MP4s. The one paid step (the HeyGen avatar render) is hard-gated. Use when the user asks for an avatar ad, UGC ad, talking-head promo, or a vertical/Reels/TikTok-style ad for a web app.
- License
- MIT
- Instructions
- 187 lines in SKILL.md · view on GitHub
Agent Skills spec issues
- files: referenced but missing: scripts/heygen.ts, scripts/capture.ts, scripts/build-v2-storyboard.ts, scripts/media.ts, assets/zooq/manifest.json
Files (10)
- SKILL.md
- ad-script-playbook.md · references/
- cost-gate.md · references/
- heygen-cli.md · references/
- hyperframes-editing-rules.md · references/
- layout-library.md · references/
- script-quality-checklist.md · references/
- scriptwriting-methodology.md · references/
- v2-assets-layer.md · references/
- zooq-video-runbook.md · references/
SKILL.md (first lines)
# AvatarAdDirector
You are directing a ≤60s, **9:16 (1080×1920)** UGC-style ad for a real SaaS app. A single HeyGen
realistic-avatar clip is the **spine** (it carries the entire voiceover — video *and* audio); every
other element (screenshots, keyword-pop captions, layout regions, music) is a time-windowed overlay
composited over that clip in Remotion. CLI scripts do the mechanics; you do the judgment. All
commands run from the repo root; all artifacts live in `jobs/<slug>/`.
Read `references/ad-script-playbook.md` BEFORE writing the script and `references/layout-library.md`
BEFORE authoring the storyboard. Follow them mechanically.
## Two hard rules (never violate)
1. **COST GATE.** The only paid action is the HeyGen avatar render (`scripts/heygen.ts generate
<job> --confirm`). NEVER run it without printing the cost estimate AND getting the user's explicit
"yes" in the same turn. The default **Jibran digital-twin look bills at ~$4/min** (not $1/min);
the gate quotes the $4/min tier for any non-`standard` engine. Everything else — ingest, the Kokoro
placeholder, transcription, storyboard, compose, re-render — is **free** and runs on the cached
clip. See `references/cost-gate.md`.
2. **NO EM-DASHES.** No on-screen text — captions, keyword pops, CTA — may contain `—` (U+2014) or
`–` (U+2013). They are an AI tell. Use commas or periods. `AvatarAdSchema` rejects them at parse
time and Stage 6 greps the SRT to confirm. Also humanize the script (apply the `humanizer`
guidance) and keep on-screen text ≤7 words.
The iteration loop is: edit storyboard/captions/music → `ad-compose.ts` → review. Regenerate the
paid avatar clip **only when `ad-script.md` changes**.
## Stage 0 — Brief & assets
1. Ask the user (one message, all questions): product name + URL; audience; the ad's **goal**,
**offer**, and **CTA** (text + url); an **asset folder path** (screenshots, logos); optional music
file path. Reuse an existing `brand.json` if the project already has one, else curate one.
2. Print the HeyGen balance and the cost-gate notice: `heygen auth status` (free, read-only) shows
`remaining_balance`.
3. Write `jobs/<slug>/ad-project.json` matching `AdProjectSchema` (see `src/ad-schemas.ts`). Slug is
lowercase-kebab. Defaults you usually keep: `heygen.group`
`YOUR_AVATAR_GROUP_ID` (Jibran), `heygen.voiceId`
`YOUR_VOICE_ID` (**Jibran's own default voice** — prefer this for the Jibran
look so the voice matches the face), `resolution` `1080p`, `music.gain` `0.2`,
`music.duckRatio` `16`, `viewport` `1080×1920`, `fps` `30`. Set `brandBgHex` from the brand
background (solid color the avatar renders against).
4. **Risky-word respelling (`pronunciations`).** Brand names and odd spellings often get mispronounced
by the TTS. Add a `pronunciations` map (correct spelling -> spoken spelling) to the project, e.g.
`{ "ZOOQ": "Zuk" }` (the default). This is applied **only to the spoken script** before the HeyGen
render (case-insensitive whole-word, plus `zooq.dev`/`zooq dev` -> `Zuk dev`). **On-screen text,
captions, and the CTA card always keep the correct spelling** — never respell them. The respelling
lives in `scripts/heygen.ts` (`applyPronunciations`) and runs automatically in `generate`.
5. Copy `brand/brand.json` and the chosen screenshots into the job. Then catalog the assets:
```
npx tsx scripts/ingest-assets.ts <job>
```
This writes `<assetDir>/asset-catalog.json` (path, dims, alpha, kind, `usable`). Anything with
`usable: false` is below 600px on its short side — flag it and offer a crisp Playwright re-capture
(`scripts/capture.ts`) rather than zooming a low-res shot until text clips.
## Stage 1 — Script (then GATE 1)
Read all three scripting references first: `references/scriptwriting-methodology.md` (the authoritative
DR / PAS / hook / CTA reference), `references/ad-script-playbook.md` (the six-step flow that applies it
here), and `references/script-quality-checklist.md` (the human gate). The de-slop gate is mandatory: the
script cannot reach the avatar until `script-lint.ts` reports 0 hard issues and the checklist passes.
1. **Write per the methodology.** Following the six-step flow in `ad-script-playbook.md`, write
`jobs/<slug>/ad-script.md`: a ~<=150-word, <=60s first-person UGC ad. Hook from a real formula (not
"Everyone's building X") -> problem + agitate (specific, felt) -> creator-voice solution -> specific
proof -> one CTA -> de-slop pass. No em-dashes, no corporate or AI vocabulary. The whole file is
spoken by the avatar, so write it as clean prose (no stage directions, no headings the TTS would
read aloud).
2. **Run the lint gate.** It must report 0 hard issues:
```
npx tsx scripts/script-lint.ts jobs/<slug>/ad-script.md
```
Hard issues (dashes, banned words) fail the gate, fix them all. Treat each soft issue (rule-of-three
stacks, no-first-person, repeated openers, filler) as a question to answer, not an order.
3. **Pass the checklist.** Walk `references/script-quality-checklist.md`, reading the script aloud.
"Would the creator actually say this out loud?" is the gate the linter cannot automate.
4. Sketch the **beat/layout plan** in your head or as a comment: which beats are full-bleed avatar
(hook, CTA) vs split-screen (demo, proof), and which screenshot appears where. You will encode it
in the storyboard at Stage 4. See `references/layout-library.md`.
5. **GATE 1 — script approval.** Show the user the full script and the beat/layout plan. Get explicit
approval. Only then generate the avatar. NOTHING paid happens before this gate.
## Stage 2 — Avatar
You have two paths. **Always dry-run first.**
**Dry-run placeholder ($0, the iteration default):**
```
npx tsx scripts/heygen.ts placeholder <job>
```
Kokoro TTS speaks the script over a solid brand-background 9:16 video and writes
`jobs/<slug>/avatar/clip.mp4` + `jobs/<slug>/avatar/clip.timing.json`. NO HeyGen call. Use this clip
to build and verify the entire compose path for free. The placeholder already emits timing, so you
can skip Stage 3 while dry-running.
**Paid real render (GATE — explicit user go required):**
```
npx tsx scripts/heygen.ts generate <job> # prints the estimate, then EXITS 2 (no spend)
npx tsx scripts/heygen.ts generate <job> --confirm # actually spends — ONLY after the user says yes
```
Without `--confirm` it resolves the look, prints `estimated cost: $N`, and refuses (exit 2). The
estimate is `ceil(durationSec / 60) × rate`, where rate = 1 **only** for an explicit `standard`
engine; the default **Jibran digital-twin look bills at the ~$4/min tier**, so any unset/default
engine quotes $4/min (never under-quoted). The spoken script is respelled via `pronunciations` before
this render; on-screen text is untouched. Re-print the estimate and the remaining balance, get the
user's explicit "yes", THEN add `--confirm`. The script downloads to `jobs/<slug>/avatar/clip.mp4`.
See `references/heygen-cli.md` and `references/cost-gate.md`. Cache the clip; never regenerate unless
the script changed.
## Stage 3 — Caption timing (real clip only)From baldiga/headless-studio, MIT.
More from baldiga/headless-studio
- 0.517score
demo-director
baldiga
Turn a SaaS web app into a polished 60-90s marketing demo video — explore the app with Playwright, extract its brand, write a playbook-driven script, narrate…
SkillCFreshness: C★ 11Claude Code +9 - 0.294score
headless-studio
baldiga
No description from the publisher yet.
SkillCFreshness: C★ 11Claude Code +9
Signals
- Stars
- 11
- Forks
- 6
- Open issues
- 0
- Last commit (this folder)
- Jun 29, 2026 (4 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/baldiga/headless-studio
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from baldiga
- 0.517score
demo-director
baldiga
Turn a SaaS web app into a polished 60-90s marketing demo video — explore the app with Playwright, extract its brand, write a playbook-driven script, narrate…
SkillCFreshness: C★ 11Claude Code +9 - 0.468score
ZOOQ - LinkedIn Data for AI Agents
baldiga
Live LinkedIn data for AI agents: profiles, companies, jobs, posts, email finding.
ConnectorBFreshness: BRemoteRead-onlyClaude Code +3
Cite this page
avatar-ad-director skill. Agent Mart. https://agentmart.dev/skills/baldiga-avatar-ad-director (last updated 2026-10-24)