Skip to main content

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.