Skip to main content

Documentation Index

Fetch the complete documentation index at: https://heygen-1fa696a7.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

The Problem

Product demos require screen recording, narration, and editing. They go stale with every UI update. Most teams have a backlog of features that should have demo videos but don’t, because production can’t keep up.

How It Works

Screenshots + feature specs → Video Agent prompt → Narrated walkthrough → Update by regenerating
Attach your product screenshots as file inputs. Video Agent creates a narrated walkthrough with an avatar presenter. When your UI changes, take new screenshots and re-run.

Build It

1

Capture your product screenshots

Take screenshots of each feature or flow you want to demo. Name them descriptively — the file names won’t matter to the API, but they help you organize.
features = [
    {
        "name": "Dashboard Overview",
        "screenshot": "https://your-cdn.com/screenshots/dashboard.png",
        "description": "Main dashboard showing key metrics, recent activity, and quick actions",
    },
    {
        "name": "Kanban Board",
        "screenshot": "https://your-cdn.com/screenshots/kanban.png",
        "description": "Drag-and-drop task management with customizable columns and filters",
    },
    {
        "name": "Analytics",
        "screenshot": "https://your-cdn.com/screenshots/analytics.png",
        "description": "Team performance metrics with trend charts and export options",
    },
]
2

Build a feature-by-feature prompt

Structure the prompt around your features, not around a generic “product overview.” Each feature gets its own segment.
def build_demo_prompt(product_name, features, duration="60 seconds", audience="product managers"):
    feature_list = "\n".join(
        f"- {f['name']}: {f['description']}"
        for f in features
    )

    return f"""Create a {duration} product demo video for {product_name}.

Target audience: {audience}

Walk through these features using the attached screenshots as visual reference:
{feature_list}

Structure:
- Hook (5s): "{product_name} helps you [key value prop] — let me show you how."
- Feature walkthrough (80% of duration): Cover each feature with the presenter
  pointing out the key elements visible in the screenshots. Explain the benefit,
  not just what it does.
- CTA (5s): "Start your free trial at [url]"

Tone: Knowledgeable but approachable — like a product manager giving a live demo
to a colleague. Not a sales pitch.

IMPORTANT: Reference the attached screenshots as visual context. The viewer
should see the product interface while the presenter explains each feature.
"""

prompt = build_demo_prompt("TaskFlow", features)
3

Submit with screenshots as file inputs

Attach your screenshots so Video Agent can use them as visual context.
import requests

files = [{"type": "url", "url": f["screenshot"]} for f in features]

resp = requests.post(
    "https://api.heygen.com/v3/video-agents",
    headers={
        "X-Api-Key": HEYGEN_API_KEY,
        "Content-Type": "application/json",
    },
    json={
        "prompt": prompt,
        "files": files,
    },
)
video_id = resp.json()["data"]["video_id"]
See Video Agent → File Input Formats for all supported file types and upload methods.
4

Poll and download

Wait for rendering, then download. See Video Agent docs for the polling pattern.

Demo Styles

Generate different versions for different audiences:
StyleDurationAudiencePrompt focus
Quick overview30sSocial media, adsOne key value prop, fast-paced, visual-heavy
Feature walkthrough60–90sProspects, landing pageFeature-by-feature with benefits
Deep dive2–3minEvaluators, tech buyersDetailed functionality, integrations, edge cases
What’s new30–45sExisting usersJust the new/changed features from latest release

Staying Current

The key advantage: when your product changes, re-run the pipeline with new screenshots.
# Automate: take screenshots programmatically with Playwright
from playwright.sync_api import sync_playwright

def capture_screenshots(urls, output_dir="screenshots"):
    with sync_playwright() as p:
        browser = p.chromium.launch()
        page = browser.new_page(viewport={"width": 1280, "height": 720})

        for name, url in urls.items():
            page.goto(url)
            page.screenshot(path=f"{output_dir}/{name}.png")

        browser.close()

# Run this before each demo generation to always use current UI
capture_screenshots({
    "dashboard": "https://app.taskflow.com/dashboard",
    "kanban": "https://app.taskflow.com/board",
    "analytics": "https://app.taskflow.com/analytics",
})
Combine this with Docs to Video to trigger demo regeneration automatically when your product releases a new version.

Variations

  • Comparison videos: “TaskFlow vs. Competitor” — show side-by-side screenshots
  • Customer-specific demos: Customize the prompt with the prospect’s industry and pain points for personalized demos at scale (see Personalized Outreach)
  • Interactive follow-up: After the pre-recorded demo, offer a Live Avatar interactive demo for Q&A

Next Steps

Interactive Product Demo

Add live Q&A to your demos with a Live Avatar.

Prompt Engineering

Write prompts that make your demos shine.