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.
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.
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 demoto a colleague. Not a sales pitch.IMPORTANT: Reference the attached screenshots as visual context. The viewershould 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 requestsfiles = [{"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"]
The key advantage: when your product changes, re-run the pipeline with new screenshots.
# Automate: take screenshots programmatically with Playwrightfrom playwright.sync_api import sync_playwrightdef 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 UIcapture_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.