Introduction
Creating onboarding video content from feature documentation is a common problem. Your product team writes thorough documentation, but most users never read it. You know video works better for engagement, yet producing dozens of videos manually would consume months of time and thousands of pounds.
This is where combining Hour One, Resoomer AI, and Synthesia solves a real gap. Rather than hiring a video production team or spending weeks scripting and filming, you can automate the entire pipeline: extract key points from documentation, generate coherent scripts, and produce professional videos with AI presenters, all without anyone touching the work between steps.
The workflow I'll walk you through generates one polished video per feature, on schedule, without human intervention. You'll set it up once and it runs indefinitely as new documentation gets added to your knowledge base.
The Automated Workflow
Which Orchestration Tool
For this workflow, I recommend n8n. It offers better JSON handling than Zapier for managing Synthesia's complex video parameters, and you avoid Zapier's per-task pricing for a high-volume automation. Alternatively, Make works well if you prefer a visual builder with more robust error recovery.
The Complete Data Flow
Step 1: Your documentation (Markdown or plain text) arrives via a webhook or scheduled poll from your CMS.
Step 2: Resoomer AI extracts and summarises the key points.
Step 3: Hour One transforms that summary into a scripted narrative.
Step 4: Synthesia generates the final video with an AI presenter.
Step 5: The video uploads to your server or cloud storage, and a notification fires to Slack.
Setting Up the Trigger
Create a webhook in n8n that listens for new documentation. Your CMS or a form submission should POST to this endpoint:
POST https://your-n8n-instance.com/webhook/documentation-onboarding
Content-Type: application/json
{
"title": "How to Use Custom Reports",
"content": "Feature documentation text here...",
"feature_id": "reports-custom-001",
"created_at": "2024-01-15T10:30:00Z"
}
In n8n, create a Webhook node set to POST and specify the exact path. This becomes your entry point.
Step 1: Resoomer AI Summarisation
Once the webhook receives data, pass the documentation content to Resoomer AI. You'll need an API key from Resoomer. Their API endpoint is:
POST https://api.resoomer.com/api/v1/summarize
Authorization: Bearer YOUR_RESOOMER_API_KEY
Content-Type: application/json
{
"text": "{{ $node['Webhook'].json.content }}",
"language": "en",
"percentage": 40
}
The percentage parameter controls how much of the original text remains in the summary. For feature documentation, 40% usually yields a tight summary suitable for video narration, roughly 200–400 words.
In n8n, add an HTTP Request node, set the method to POST, paste the endpoint above, and map the body from your webhook data using expressions like {{ $node['Webhook'].json.content }}.
Step 2: Hour One Script Generation
Hour One's API accepts a summary and generates a full video script. You'll need your Hour One API credentials. The endpoint is:
POST https://api.hourone.ai/v1/video-scripts
Authorization: Bearer YOUR_HOURONE_API_KEY
Content-Type: application/json
{
"title": "{{ $node['Webhook'].json.title }}",
"content": "{{ $node['HTTP Request - Resoomer'].json.summary }}",
"tone": "professional",
"duration_seconds": 120,
"target_audience": "product_users"
}
Hour One will return a structured script object with sections, presenter cues, and timing markers. Store this output; you'll need it for Synthesia.
The HTTP Request node in n8n should extract the script from the response:
{
"script": "{{ $node['HTTP Request - Hour One'].json.script }}",
"duration": "{{ $node['HTTP Request - Hour One'].json.duration_seconds }}"
}
Step 3: Synthesia Video Generation
Synthesia is the final piece. It takes a script and generates a video with a photorealistic AI presenter. Their API requires:
POST https://api.synthesia.io/v2/videos
Authorization: Bearer YOUR_SYNTHESIA_API_KEY
Content-Type: application/json
{
"input": [
{
"type": "text",
"text": "{{ $node['HTTP Request - Hour One'].json.script }}",
"avatar": "john_mid_twenties",
"background": {
"type": "color",
"color": "#ffffff"
}
}
],
"output_format": "mp4",
"quality": "high",
"resolution": "1080p"
}
The avatar parameter selects which presenter appears in the video. Synthesia offers dozens; choose one that fits your brand. The quality setting affects processing time; "high" takes longer but produces sharper video.
This request is asynchronous. Synthesia will return a video ID immediately, and you'll need to poll for completion status using:
GET https://api.synthesia.io/v2/videos/{{ video_id }}
Authorization: Bearer YOUR_SYNTHESIA_API_KEY
In n8n, add a Wait node (or loop with retry logic) to check the video status every 30 seconds until the state changes to "completed". Once done, download the video from the URL Synthesia provides.
Step 4: Storage and Notification
After the video generates, upload it to your storage backend. If you use AWS S3:
PUT https://your-bucket.s3.amazonaws.com/onboarding-videos/{{ feature_id }}.mp4
Content-Type: video/mp4
[video file binary data]
In n8n, use the AWS S3 node to upload directly. Set the bucket name, key path, and binary data source from Synthesia's output.
Finally, send a Slack notification to alert your team:
POST https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK
Content-Type: application/json
{
"text": "Onboarding video generated",
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "Feature: *{{ $node['Webhook'].json.title }}*\nVideo: <{{ video_url }}|Watch here>\nStatus: Complete"
}
}
]
}
Full n8n Workflow Structure
Your n8n workflow nodes should follow this order:
- Webhook (trigger)
- HTTP Request (Resoomer summarise)
- HTTP Request (Hour One script)
- HTTP Request (Synthesia create video)
- Wait/Poll Loop (check Synthesia status)
- AWS S3 (upload video)
- Slack Notification
- Error handler (catch failures and alert)
In n8n's visual builder, connect these with arrows. Use conditional branches (Switch node) to handle failures gracefully; if Synthesia times out after 5 minutes, log the error and skip to Slack notification with a failure message.
The Manual Alternative
If you want to retain control over script quality or presenter selection, you can run the workflow up to Hour One, then pause for human review. Add a manual approval step in n8n: the script gets sent to Slack or email, a team member approves or edits it, and only then does it proceed to Synthesia.
This adds latency but ensures every video matches your messaging standards. Some teams prefer this for their first few videos, then let the automation run fully once they're confident in the output quality.
You can implement this with n8n's Email node or a simple webhook that waits for a POST confirmation before continuing.
Pro Tips
Rate Limiting and Throttling
Synthesia and Hour One both enforce rate limits. Hour One typically allows 50 requests per hour; Synthesia varies by plan. If you're generating many videos at once, add a delay node in n8n between requests. Set it to 1.5 seconds per video to stay comfortably under limits.
// In n8n, use a Function node to throttle requests
const delay = 1500; // milliseconds
await new Promise(resolve => setTimeout(resolve, delay));
Error Recovery
Synthesia video generation can fail mid-process if the script exceeds character limits. Hour One scripts typically stay within bounds, but add validation. In n8n, insert a Function node before Synthesia that checks script length:
const script = $node['HTTP Request - Hour One'].json.script;
if (script.length > 2000) {
throw new Error('Script exceeds 2000 characters; truncate in Hour One step');
}
return { valid: true };
Cost Savings Through Batching
If documentation changes frequently, running this workflow per document gets expensive. Instead, batch updates: every Friday at 5pm, collect all new documentation from the week and generate videos in one session. Set up a scheduled trigger in n8n using a Cron expression: 0 17 * * 5 (5pm Fridays).
Presenter Consistency
Synthesia offers many avatars. Choose one and lock it in your n8n configuration. This ensures every video in your onboarding series features the same presenter, reinforcing brand identity. Update the avatar parameter in your Synthesia call to use a fixed value rather than a variable.
Monitoring and Alerts
Add error handling to catch failures early. In n8n, enable detailed logging for each node. Set up a second Slack channel for errors; if any step fails, send a message with the error details and a link to the failed workflow execution. This lets your team quickly spot issues like invalid API keys or quota overages.
Cost Breakdown
| Tool | Plan Needed | Monthly Cost | Notes |
|---|---|---|---|
| Resoomer AI | Pro API | £15–30 | Based on requests; 10,000 requests/month covers ~250 videos |
| Hour One | API Plan | $150–300 | Depends on script volume; includes cloud storage |
| Synthesia | Starter API | $150–300 | Per-video cost; high-quality 1080p videos are mid-tier pricing |
| n8n | Self-hosted or Cloud Pro | £0–99 | Self-hosted is free; cloud Pro is £99/month for workflow complexity |
| AWS S3 Storage | Standard | £0–10 | Roughly 1p per GB; 100 videos at 50MB each = ~£5/month |
| Slack (if not already used) | Pro | £9.99/user/month | Optional; use for notifications only |
| Total Estimated Monthly Cost | — | £325–750 | Covers 250 videos; cost per video ≈ £1.30–3 |
For comparison, outsourcing video production at £200–500 per video would cost £50,000–125,000 annually for the same output.