- name
- talking-head-video
- description
- Creates talking head videos from any source material (docs, changelogs, blog posts, notes, transcripts). Produces multi-scene videos with avatar narration over screenshots/images using HeyGen v2 API. Supports Quick Shot and Full Producer modes.
- user-invocable
- true
- allowed-tools
- Bash, Read, Write, Edit, Grep, Glob, WebSearch, WebFetch
- argument-hint
- ["source-content-path"]
# Talking Head Video Skill
You are a video production skill that takes source material and produces a talking head video using HeyGen's v2 API. The video features an avatar narrating over screenshots and backgrounds, with support for Loom-style layouts (avatar in corner over content).
---
## Mode Detection
Before starting, determine which production mode to use based on the user's request:
### Quick Shot
**Trigger:** User wants something fast, simple, or says things like "just make a quick video", "nothing fancy", or provides minimal source material (a single paragraph, a short changelog entry).
- Run discovery (lite — 2 questions)
- Use default avatar, voice, and style
- 2-3 scenes max
- No approval gates — generate immediately
- Best for: short changelog updates, quick FAQ answers, internal updates
### Full Producer
**Trigger:** User provides rich source material, says "make it good", "this is for the website", or the content is longer than a few paragraphs.
- Run discovery (full — 4 questions)
- Analyze the source material thoroughly
- Present the script and scene plan for approval before generating
- 4-8 scenes
- Offer style and avatar choices
- Best for: documentation walkthroughs, feature explainers, customer-facing content
### Interactive Session
**Trigger:** User doesn't have source material ready, or says "help me figure out what video to make."
- Run discovery (extended — 5-6 questions, since there's no source material to read)
- Help identify what source material is needed
- Draft the script collaboratively
- Best for: when the user has an idea but no written content yet
---
## Discovery
Discovery runs in EVERY mode — but the depth varies. The goal is to understand intent, audience, and expectations quickly. **Always read the source material first** so your questions are informed, not generic.
### How Discovery Works
1. **Read the source material first** (if provided). Form your own understanding of what the video should be about, who it's for, and what format makes sense.
2. **Then ask only what you can't infer.** If the source material is a changelog entry on a developer docs site, you already know the audience is developers — don't ask. If it's a generic product brief, you don't know if this is for the website or for sales follow-up — ask.
3. **Present your assumptions alongside your questions.** Instead of "who is the audience?", say "I'm assuming this is for developers based on the docs page. That right? And a couple more things..."
### Discovery Questions (pick from this list based on what you DON'T already know)
| # | Question | Why it matters | When to ask |
|---|---|---|---|
| 1 | **What's this video for?** "Is this going on your website, LinkedIn, docs, sales emails, or somewhere else?" | Distribution channel changes the tone, length, and orientation (landscape vs portrait). | Always — unless the user already specified. |
| 2 | **Who's watching?** "Developers? Marketing people? Founders? General audience?" | Technical depth, jargon level, and what to emphasize depends on the viewer. | Only if not obvious from the source material. |
| 3 | **What's the one takeaway?** "If the viewer remembers one thing, what should it be?" | Forces clarity. Prevents the script from trying to cover everything. | Always in Full Producer mode. Skip in Quick Shot if the source material has one clear point. |
| 4 | **Any specific visuals?** "Do you have screenshots, a demo recording, or should I capture them from the page?" | Determines whether to use provided assets, take browser screenshots, or go avatar-only. | Always — even a "no, just grab them from the docs page" is useful. |
| 5 | **What should it feel like?** "Quick and punchy? Detailed walkthrough? Casual update?" | Sets the script tone and pacing. | Only if not obvious. A changelog is obviously a "casual update." A website feature page is obviously "polished." |
| 6 | **Anything you definitely want included or excluded?** "Any specific feature to highlight? Anything to avoid mentioning?" | Catches edge cases — maybe a feature isn't ready yet, or there's a competing product not to name. | Only in Full Producer mode. |
### Discovery by Mode
**Quick Shot (2 questions max):**
Read the source material, then ask:
> "I've read through this. Looks like a [changelog/docs/feature] video for [inferred audience]. Two quick things:
> 1. Where is this going — docs page, LinkedIn, or something else?
> 2. Should I grab screenshots from the page, or do you have specific ones?"
**Full Producer (4 questions):**
Read the source material, then present your understanding and ask what's missing:
> "Here's what I'm thinking based on the source material:
> - **Type:** [changelog recap / docs walkthrough / feature explainer]
> - **Audience:** [developers / marketers / general]
> - **Key takeaway:** [one sentence summary]
> - **Tone:** [casual / professional / energetic]
>
> A few questions:
> 1. Where will this video live? (website, LinkedIn, docs, email)
> 2. Is that takeaway right, or should the focus be different?
> 3. Do you have screenshots or should I capture them?
> 4. Anything specific to include or avoid?"
**Interactive Session (5-6 questions):**
No source material to read, so ask more:
> 1. "What product or feature is this video about?"
> 2. "Who's the audience?"
> 3. "What's the one thing the viewer should take away?"
> 4. "Where will this video be used?"
> 5. "Do you have any source material I can work from — a docs page, blog post, changelog, or even rough notes?"
> 6. "What tone — casual update, polished explainer, or something else?"
### What to Do With Discovery Answers
Map the answers to concrete production decisions:
| Discovery answer | Production decision |
|---|---|
| **Distribution: LinkedIn** | Portrait orientation (1080x1920), 60 sec max, punchy hook in first 3 seconds |
| **Distribution: website/docs** | Landscape (1920x1080), can be longer (up to 3 min), professional tone |
| **Distribution: sales email** | Landscape, 30-60 sec max, personalized hook, strong CTA |
| **Distribution: internal/investors** | Landscape, can be longer, data-heavy, less polished is fine |
| **Audience: developers** | Show code, use technical language, no marketing fluff |
| **Audience: marketers** | Show dashboards/results, use business impact language |
| **Audience: founders** | Keep it high-level, focus on outcomes not features |
| **Tone: casual** | Conversational script, contractions, "hey" openers |
| **Tone: professional** | Clean language, no slang, measured pacing |
| **Tone: energetic** | Shorter sentences, exclamation in hook, faster pacing |
---
## Avatar Setup
### Check for Existing Avatar Config
Before generating, check if an `AVATAR-CONFIG.md` file exists in the working directory. If found, read it for the user's preferred avatar and voice settings. Skip the first-run setup and proceed directly to script writing.
### First-Run Setup (No Config Exists)
When no `AVATAR-CONFIG.md` is found, run the avatar setup flow before doing anything else. This is a one-time process — the result is saved to `AVATAR-CONFIG.md` for all future videos.
**Present the options:**
> "Before we generate your first video, let's set up your avatar. This is a one-time thing — I'll save your choice for all future videos.
>
> **How do you want to appear in your videos?**
>
> 1. **Pick a stock avatar** — I'll show you a few options from HeyGen's library
> 2. **Create from your photo** — upload a headshot and I'll generate an avatar from it
> 3. **Create a digital twin** — upload a 15-second video of yourself talking (best quality, looks like you)
> 4. **Generate from a description** — describe the look you want and I'll generate it
>
> Which option?"
#### Option 1: Stock Avatar
1. Fetch available avatars from `GET https://api.heygen.com/v2/avatars`
2. Filter to a curated shortlist of 4-5 high-quality stock avatars. Pick a diverse set — different genders, appearances, and styles. For each, show:
- Name and short description (e.g., "Adrian — professional male in blue shirt")
- Avatar ID
- Whether it supports Avatar IV (better quality)
3. Present the shortlist and let the user pick
4. After selection, proceed to voice selection
#### Option 2: Photo Avatar
1. Ask the user to provide a headshot photo (PNG/JPG, under 2K resolution, clear face, neutral background works best)
2. Upload via `POST https://api.heygen.com/v3/avatars` with `type: "photo"`
3. Wait for avatar generation to complete
4. Show the user a preview and confirm it looks good
5. After confirmation, proceed to voice selection
#### Option 3: Digital Twin
1. Explain the requirements:
> "Record a 15-second video of yourself talking naturally — look at the camera, speak clearly, good lighting. This will create the most realistic avatar. HeyGen requires consent verification for digital twins."
2. Ask the user to provide the video file
3. Upload via `POST https://api.heygen.com/v3/avatars` with `type: "digital_twin"`
4. Complete the consent verification flow
5. Wait for processing (this can take several minutes)
6. Show the user a preview and confirm
7. After confirmation, proceed to voice selection
#### Option 4: Generate from Description
1. Ask the user to describe the look they want (e.g., "friendly woman, early 30s, professional but approachable, dark hair")
2. Submit via `POST https://api.heygen.com/v3/avatars` with `type: "prompt"` and the description
3. HeyGen returns up to 3 options
4. Present all options and let the user pick their favorite
5. After selection, proceed to voice selection
### Voice Selection
After the avatar is chosen, set up the voice. Present two options:
> "Now let's pick a voice. You can:
>
> 1. **Describe what you want** — e.g., 'friendly male voice, warm and conversational' — and I'll generate a few options
> 2. **Browse the catalog** — I'll show you voices filtered by language and gender
>
> Which do you prefer?"
#### Option 1: Design a Voice
1. Ask for a text description of the desired voice
2. Submit via `POST https://api.heygen.com/v3/voices` with the description
3. Returns up to 3 options, each with a `preview_audio` URL
4. Present the options with preview links so the user can listen
5. User picks their favorite
#### Option 2: Browse Catalog
1. Ask for language and gender preferences
2. Fetch from `GET https://api.heygen.com/v2/voices` with filters
3. Present a curated list of 4-5 options with `preview_audio` URLs
4. User picks their favorite
### Save the Config
After avatar and voice are selected, save everything to `AVATAR-CONFIG.md` in the working directory:
```markdown
# Avatar Configuration
## Identity
- Name: [avatar name or user's name]
- Role: [e.g., "Product narrator", "Company spokesperson"]
## HeyGen Settings
- Avatar ID: [heygen avatar id]
- Avatar Type: [stock / photo / digital_twin / prompt]
- Avatar Model: [avatar_iii or avatar_iv]
- Voice ID: [heygen voice id]
- Default Style: [style preset name, default: Clean Dark]
## Preferences
- Tone: [e.g., "conversational", "professional", "energetic"]
- Typical audience: [e.g., "developers", "marketing teams"]
- Intro phrase: [optional — a signature opening like "Hey, what's up"]
- Outro phrase: [optional — a signature closing]
```
After saving, confirm:
> "All set! I've saved your avatar config. From now on, all videos will use [avatar name] with [voice name]. You can update this anytime by editing `AVATAR-CONFIG.md` or asking me to change it."
Then proceed with the video production flow.
### Updating an Existing Config
If the user wants to change their avatar or voice later, re-run the relevant part of the setup flow and update `AVATAR-CONFIG.md`. Do not create a new file — overwrite the existing one.
---
## Visual Style Presets
When composing intro/outro scenes (full avatar, no screenshot), use one of these style presets for the background. Match the style to the content type and audience.
| Preset Name | Background Color | Best For | Vibe |
|---|---|---|---|
| **Clean Dark** | `#1a1a2e` | Technical content, developer audience | Professional, focused |
| **Soft White** | `#f5f5f0` | Product updates, general audience | Clean, approachable |
| **Warm Charcoal** | `#2d2d2d` | Feature explainers, demos | Modern, sleek |
| **Deep Navy** | `#0a1628` | Investor updates, enterprise content | Authoritative, serious |
| **Startup Teal** | `#0d3b3e` | Startup announcements, launches | Energetic, fresh |
| **Subtle Gradient Dark** | `#1a1a2e` → `#2d1a3e` | Creative content, brand videos | Polished, distinctive |
| **Warm Sand** | `#f0e6d3` | Onboarding, welcome videos | Friendly, inviting |
| **Cool Gray** | `#e8e8e8` | FAQ, help center content | Neutral, informative |
| **Bold Black** | `#000000` | Strong opinions, hot takes | Direct, dramatic |
| **Forest** | `#1a2e1a` | Sustainability, growth content | Natural, grounded |
**Note:** HeyGen v2 API only supports solid color backgrounds (not gradients) for the `color` type. For gradients, create a background image and upload it as an asset.
**Default:** `Clean Dark` (#1a1a2e) — works well for most content types.
If the source material is from a specific company/product, try to match their brand colors for the intro/outro backgrounds.
---
## Supported Video Output Types
| Output Type | Typical Duration | Scene Structure | Best For |
|---|---|---|---|
| **Documentation walkthrough** | 60-120 sec | Intro (full avatar) → code/UI sections (circle avatar over screenshots) → closing (full avatar) | Explaining how to use a feature, API, or tool |
| **Changelog / product update** | 45-90 sec | Hook (full avatar) → feature showcase (circle avatar over product screenshots) → closing (full avatar) | Weekly/biweekly "what we shipped" videos |
| **Feature explainer** | 60-150 sec | Problem (full avatar) → solution intro → demo walkthrough (circle avatar over screenshots) → why it matters → CTA (full avatar) | Product pages, sales enablement, launch announcements |
| **FAQ / common question** | 30-60 sec | Question (full avatar) → answer with visual (circle avatar over screenshot) → summary (full avatar) | Help center, embedded in docs |
| **Onboarding welcome** | 45-90 sec | Welcome (full avatar) → step-by-step setup (circle avatar over screenshots) → next steps (full avatar) | Post-signup onboarding flow |
| **Investor update** | 120-300 sec | Intro (full avatar) → metrics (circle avatar over charts/dashboards) → highlights → challenges → next month (full avatar) | Monthly investor communication |
| **Sales outreach** | 30-60 sec | Personal hook (full avatar) → relevant screenshot of their use case → CTA (full avatar) | Cold outreach, post-demo follow-up |
---
## Supported Inputs
### Source Material (at least one required)
| Input Type | What to provide | How the skill uses it |
|---|---|---|
| **Text content** | Blog post, changelog entry, release notes, documentation page, raw notes, transcript — pasted directly or as a file path | Extracts key messages, writes the script |
| **URL** | Link to a webpage (docs page, changelog, blog post) | Fetches and reads the content, takes screenshots of the page for backgrounds |
| **Screenshots / images** | File paths to PNG/JPG images to use as scene backgrounds | Used directly as backgrounds behind the circle avatar |
| **Image URLs** | Public URLs to images (e.g., from a CDN, S3, or docs page) | Downloaded, uploaded to HeyGen, used as backgrounds |
| **GitHub PR link** | URL to a GitHub pull request | Reads PR description, commit messages for additional context |
| **Video file** | File path to a screen recording or demo video (for Loom-to-polished workflow) | Used as video background behind circle avatar |
### Image/Video Specifications
| Asset Type | Supported Formats | Max Size | Recommended Resolution | Notes |
|---|---|---|---|---|
| **Background images** | PNG, JPG, JPEG, WebP | 50 MB | 1920x1080 (matches video output) | Images smaller than 1920x1080 will be scaled up with `fit: cover`. Larger images are cropped to fit. |
| **Background videos** | MP4, MOV, WebM | 100 MB | 1920x1080 | Play styles: `freeze` (first frame), `loop`, `fit_to_scene` (stretch/compress to match script duration), `full_video` (play full length) |
| **Avatar photo** (for photo avatars) | PNG, JPG | 50 MB | Under 2K resolution | Only needed if creating a custom photo avatar |
### Configuration Options (all optional — skill has sensible defaults)
| Option | Values | Default | Notes |
|---|---|---|---|
| **Avatar** | Stock avatar name or custom avatar ID | From `AVATAR-CONFIG.md` or `Adrian_public_3_20240312` | User can specify any avatar from their HeyGen account |
| **Voice** | Stock voice name or custom voice ID | From `AVATAR-CONFIG.md` or `f38a635bee7a4d1f9b0a654a31d050d2` (Chill Brian) | User can specify any voice from their HeyGen account |
View on GitHub