Back to Alchemy
Alchemy RecipeIntermediateworkflow

SaaS feature documentation to interactive demo video pipeline

Your API documentation sits in a markdown file. Your product manager wants demo videos. Your engineering team doesn't have time to script, film, and edit. This gap between written documentation and visual learning wastes time and leaves customers confused during onboarding. Creating demo videos manually demands resources most technical companies don't have: scriptwriters, videographers, video editors, and weeks of back-and-forth. Yet video is where customer engagement actually happens. Support tickets spike when documentation exists only as text, especially for complex integrations or multi-step workflows. The solution is to automate the journey from documentation to video. By chaining together documentation tools, AI video generators, and voice synthesis, you can produce professional-looking demo videos directly from your existing feature guides with zero human intervention in the pipeline. What took a video team three weeks now takes minutes.

The Automated Workflow

This workflow pulls your documentation, transforms it into a structured script, generates video content, and adds narration, all triggered by a single action.

Step 1: Documentation ingestion and script generation

Your source is Mintlify-generated documentation. When you update a feature guide or API endpoint description in Mintlify, the workflow detects this change and extracts the relevant content. Claude Opus 4.6 then reformats the technical documentation into a video script broken into scenes, complete with cues for visual elements. Start with n8n, which offers reliable webhook support and handles long-running jobs better than Zapier for this use case. Set up a webhook that triggers whenever Mintlify publishes new documentation.

POST https://your-n8n-instance.com/webhook/documentation-to-video
Content-Type: application/json { "doc_id": "api-endpoint-create-user", "title": "Creating a User via API", "content": "The /users endpoint accepts POST requests...", "timestamp": "2026-03-15T10:45:00Z"
}

In n8n, add an HTTP Request node that calls the Anthropic API with Claude Opus 4.6 for script generation.

POST https://api.anthropic.com/v1/messages
Authorization: Bearer $ANTHROPIC_API_KEY
Content-Type: application/json { "model": "claude-opus-4.6", "max_tokens": 2048, "system": "You are a technical video scriptwriter. Convert API documentation into a concise video script. Structure it as JSON with scenes. Each scene has a title, narration text (under 100 words), and visual cues.", "messages": [ { "role": "user", "content": "Convert this documentation into a video script:\n\n{{$json.content}}" } ]
}

Claude returns structured JSON with scenes. A typical response looks like this:

json
{ "title": "Creating a User via API", "scenes": [ { "scene_number": 1, "title": "Introduction", "narration": "Learn how to create a new user account using our REST API. This endpoint handles user registration with built-in validation.", "visual_cue": "Show API endpoint URL and HTTP method" }, { "scene_number": 2, "title": "Request Payload", "narration": "The request body requires three fields: email, name, and password. Email must be unique.", "visual_cue": "Display JSON request example with field highlighting" }, { "scene_number": 3, "title": "Response", "narration": "On success, the API returns a 201 status code and the new user object with a unique ID.", "visual_cue": "Show JSON response with status code highlighted" } ]
}

Step 2: Video generation

Pass the script structure to Hour One's API. Hour One accepts a JSON payload describing your video scene-by-scene, including text overlays, presenter style, and background.

POST https://api.hourone.com/v1/videos
Authorization: Bearer $HOURONE_API_KEY
Content-Type: application/json { "project_name": "{{$json.title}}", "presenter": { "type": "avatar", "style": "professional", "avatar_id": "avatar_001" }, "scenes": [ { "scene_id": 1, "text": "{{$json.scenes[0].narration}}", "visual_overlay": "{{$json.scenes[0].visual_cue}}", "duration_seconds": 8 }, { "scene_id": 2, "text": "{{$json.scenes[1].narration}}", "visual_overlay": "{{$json.scenes[1].visual_cue}}", "duration_seconds": 10 }, { "scene_id": 3, "text": "{{$json.scenes[2].narration}}", "visual_overlay": "{{$json.scenes[2].visual_cue}}", "duration_seconds": 8 } ], "background": "gradient_blue", "aspect_ratio": "16:9", "output_format": "mp4"
}

Hour One responds with a video generation job ID. Store this in n8n and poll the status endpoint until the video is ready.

GET https://api.hourone.com/v1/videos/{{$json.video_job_id}}/status
Authorization: Bearer $HOURONE_API_KEY

Step 3: Narration synthesis and final assembly

Once Hour One returns the video URL, extract the audio track and process it with ElevenLabs Turbo v2.5 for professional voice synthesis. First, generate the full narration script by concatenating all scene narration.

POST https://api.elevenlabs.io/v1/text-to-speech/{{VOICE_ID}}
Authorization: xi-api-key {{$ELEVENLABS_API_KEY}}
Content-Type: application/json { "text": "Learn how to create a new user account using our REST API. This endpoint handles user registration with built-in validation. The request body requires three fields: email, name, and password. Email must be unique. On success, the API returns a 201 status code and the new user object with a unique ID.", "model_id": "eleven_turbo_v2_5", "voice_settings": { "stability": 0.5, "similarity_boost": 0.75 }
}

ElevenLabs returns an audio file. Use ffmpeg (via n8n's Execute Command node) to overlay this audio onto the Hour One video, replacing or blending with the original presenter audio.

ffmpeg -i hour_one_video.mp4 -i elevenlabs_narration.mp3 -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 final_video.mp4

Step 4: Storage and notification

Upload the final video to cloud storage (AWS S3, Google Cloud Storage, or Vimeo) and trigger a notification to your team.

PUT https://s3.amazonaws.com/your-bucket/demo-videos/{{$json.doc_id}}.mp4
Authorization: AWS4-HMAC-SHA256 {{AWS_SIGNATURE}}
Content-Type: video/mp4 [binary video data]

Send a Slack message with the video URL and metadata.

POST https://hooks.slack.com/services/{{$SLACK_WEBHOOK_URL}}
Content-Type: application/json { "text": "New demo video generated", "blocks": [ { "type": "section", "text": { "type": "mrkdwn", "text": "*{{$json.title}}*\nVideo ready for review: {{$json.video_url}}" } } ]
}

The Manual Alternative

If you prefer more control or need custom styling, skip Hour One and use DALL-E 3 to generate key visual frames for each scene, then stitch them together with a video editor. Export the Claude-generated script and adjust it manually before sending to ElevenLabs. This adds 1-2 hours per video but lets you fine-tune visuals and tone. Alternatively, record your own presenter using Sora or Runway Gen-3 Alpha if you have video footage or storyboards ready.

Pro Tips

1. Rate limiting and quotas

ElevenLabs applies per-minute character limits on the free tier. If your documentation is dense, split narration into smaller chunks and stitch audio files together using ffmpeg before final assembly. Hour One processes videos asynchronously; build in polling logic with exponential backoff to avoid hammering their API.

2. Error handling for long documentation

Claude Opus 4.6 has a 200k token context window, but Mintlify exports can exceed token limits. Use Claude to summarise documentation first, then generate the script. If a single document is too large, split it into sections (e.g. "Authentication", "Pagination", "Error Handling") and create separate videos.

3. Cost optimisation

Use Claude Haiku 4.5 instead of Opus 4.6 for script generation if your documentation is straightforward. Haiku costs a fraction of Opus and handles simple summarisation well. Reserve Opus for complex technical guides. Cache the system prompt in Claude API calls to avoid re-processing identical instructions. For more on this, see Technical documentation generation from code.

4. Scheduling and batch processing

Run this workflow on a schedule (e.g. nightly) rather than on every Mintlify change. Batch multiple documentation updates into a single workflow run to reduce API calls and orchestration overhead.

5. Quality gates

Before uploading to S3, add a manual approval step in n8n where a team member reviews the generated script. This catches tone issues or inaccuracies early without slowing automation. Only proceed to video generation after approval.

Cost Breakdown

ToolPlan NeededMonthly CostNotes
MintlifyPro$300Documentation generation and hosting
Claude API (Opus 4.6)Pay-as-you-go$50-150Script generation; costs depend on documentation volume
Hour OneProfessional$500Video generation with avatars; includes monthly video quota
ElevenLabsProfessional$99Text-to-speech synthesis; 500k characters per month
n8n (self-hosted)Open-source$0Or $25/month cloud; handles orchestration
AWS S3Standard$20-50Video storage; assumes 100-500GB monthly uploads
Total$969-1,199Scales with documentation volume and video frequency