Corporate training module creation from employee handbook
- Published
Employee handbooks are essential documents, but they're rarely used for training. They sit in a shared drive, gathering dust, whilst new hires wade through dense PDFs and seasoned staff struggle to remember policies buried on page 47. The real missed opportunity is this: your handbook already contains everything you need to build professional training modules. You simply need a way to extract it, structure it, and turn it into engaging video content that your team will actually watch....... For more on this, see Employee handbook to training module and onboarding video....
Traditional approaches require manual work at every stage. Someone reads the handbook, writes a script, records video, adds voiceover, syncs timing, uploads to your LMS. Each step is a potential bottleneck. If your handbook changes, you start over. If you need modules in multiple languages, multiply your work. This is where workflow automation makes a genuine difference; not as a buzzword, but as a practical way to reclaim hours spent on repetitive tasks.
This guide shows you how to wire together three specialised AI tools into a single, hands-off pipeline. Your handbook PDF goes in one end; polished, narrated video training modules come out the other. No manual handoffs between systems, no copy-pasting scripts, no waiting for external vendors. Just structured automation that runs whenever you need it.
The Automated Workflow
What you'll build
A workflow that takes a PDF employee handbook, extracts relevant sections, generates a narrated video script, produces a synthetic human presenter video, and delivers the final module ready for your learning management system. The entire process runs with minimal human input; just upload the handbook and specify which topic you want trained.
Choosing your orchestration platform
For this workflow, n8n is the strongest choice. Whilst Zapier and Make both work, n8n gives you more granular control over API responses and better error handling for complex data transformations. You can self-host n8n on your own infrastructure if data governance is a concern, or use the cloud version. The workflow involves chaining four distinct steps with conditional logic and file handling, which n8n handles more elegantly than its competitors.
Architecture overview
The pipeline works like this: user submits a handbook PDF and topic name, Chat with PDF extracts relevant content, Claude generates a polished training script, ElevenLabs converts script to audio, Hour One creates a video of a presenter speaking that script, and n8n orchestrates everything, managing files and passing data between services.
Step 1: Extract handbook content with Chat with PDF
Chat with PDF by Copilotus accepts a PDF and returns extracted text based on your query. You'll start by uploading the handbook, then sending targeted prompts to extract sections relevant to your training topic.
The API endpoint is straightforward:
POST https://api.chatpdf.com/v1/chats/message
Content-Type: application/json
Authorization: Bearer YOUR_CHATPDF_API_KEY
{
"sourceId": "src_abc123xyz",
"messages": [
{
"role": "user",
"content": "Extract the section on 'Health and Safety Procedures' as a structured list of key points suitable for a training module. Include definitions and examples."
}
]
}
First, you'll need to upload your handbook once and store the returned sourceId. In n8n, use the HTTP Request node to send this request. The response contains the extracted handbook content in the content field. Store this in a variable for the next step.
{
"status": "ok",
"data": {
"content": "Health and Safety Procedures:\n1. Emergency Evacuation...",
"model": "[gpt](/tools/gpt)-4"
}
}
Step 2: Generate a training script with Claude
The handbook extract is raw and often repetitive. You need Claude to transform it into a proper training script; conversational, paced for video narration, broken into logical segments. Claude's API allows you to specify output format, which is crucial here.
Create a prompt that instructs Claude to generate a script in a specific structure:
POST https://api.anthropic.com/v1/messages
Content-Type: application/json
x-api-key: YOUR_CLAUDE_API_KEY
{
"model": "claude-3-5-sonnet-20241022",
"max_tokens": 2048,
"messages": [
{
"role": "user",
"content": "Convert the following employee handbook extract into a professional training script for a corporate video. The script should:\n\n1. Be 2-3 minutes long when read aloud at normal pace (roughly 300-400 words)\n2. Open with a hook that explains why this topic matters\n3. Use clear, direct language; avoid jargon\n4. Break content into numbered segments separated by [PAUSE]\n5. Include speaker cues like [LOOK AT CAMERA] or [GESTURE TO SCREEN]\n6. Close with a summary and next steps\n\nHandbook content:\n\n" + HANDBOOK_EXTRACT
}
]
}
Parse the response and extract the content field. This becomes your training script. In n8n, use the HTTP Request node pointing to Anthropic's API endpoint, then extract the script text.
Step 3: Generate narration audio with ElevenLabs
ElevenLabs converts text to speech with remarkable naturalness. You'll send the script and receive an MP3 file. ElevenLabs offers multiple voice options; for corporate training, voices like "Rachel" (professional, clear) or "James" (authoritative) work well.
POST https://api.elevenlabs.io/v1/text-to-speech/21m00Tcm4TlvDq8ikWAM
Content-Type: application/json
xi-api-key: YOUR_ELEVENLABS_API_KEY
{
"text": "Welcome to our Health and Safety training module. In this video, we'll cover the essential procedures you need to know...",
"model_id": "eleven_monolingual_v1",
"voice_settings": {
"stability": 0.75,
"similarity_boost": 0.75
}
}
The response is binary audio data. In n8n, use the HTTP Request node with response type set to "Binary". The node will save the MP3 file in a temporary location. Capture the file path; you'll need it for the next step.
ElevenLabs charges per character, so monitor usage. A 400-word script costs roughly 0.01 credits; at their standard pricing, that's about £0.15 per module.
Step 4: Generate video with Hour One
Hour One creates videos of a photorealistic presenter speaking your script. The API accepts a script, presenter ID, and background, then returns a video file. This is where your training module truly becomes professional; no longer just audio, but a full video with a presenter on screen.
First, you need to create a presenter. Log into Hour One's dashboard and create a custom presenter or choose from their library. Note the presenter_id. You also need to upload or select a background. For corporate training, a simple branded background or office setting works well.
POST https://api.hourone.ai/api/v1/videos
Content-Type: application/json
Authorization: Bearer YOUR_HOURONE_API_KEY
{
"presenter_id": "presenter_abc123",
"script": "Welcome to our Health and Safety training module. In this video, we'll cover the essential procedures you need to know...",
"background_id": "bg_office_001",
"voice_config": {
"voice_id": "en_us_professional_male",
"speed": 1.0,
"language": "en-US"
},
"aspect_ratio": "16:9",
"quality": "720p"
}
Hour One returns a video_id. This is asynchronous; the video generation takes 2-5 minutes. In n8n, you'll need to poll the status endpoint every 30 seconds until the video is ready.
GET https://api.hourone.ai/api/v1/videos/{video_id}
Authorization: Bearer YOUR_HOURONE_API_KEY
The response includes a status field; when it reaches "completed", a download_url is available. Download the video file and store it.
Wiring it together in n8n
Create a new n8n workflow. Add nodes in this sequence:
-
Webhook Trigger: receives a POST request with
handbook_pdf_urlandtopic_nameparameters. -
Chat with PDF HTTP Request node: sends the topic to the handbook and captures the extracted content.
-
Claude HTTP Request node: sends the extracted content to Claude and captures the script.
-
ElevenLabs HTTP Request node: sends the script for voice synthesis and captures the MP3 file.
-
Hour One HTTP Request node: sends the script and captures the video generation request.
-
Polling Loop: uses a "Wait" node set to 30 seconds, then a conditional "IF" node that checks the Hour One status endpoint. If the video is not ready, it loops back to the Wait node. If ready, it continues.
-
Download Hour One Video: uses HTTP Request with response type "Binary" to download the completed video file.
-
Upload to Cloud Storage (optional): uses Google Drive, AWS S3, or OneDrive to store the final video, or sends it directly to your LMS API.
-
Notification: sends an email or Slack message confirming the module is ready.
Here's the basic workflow structure in JSON format:
{
"nodes": [
{
"parameters": {
"httpMethod": "POST",
"url": "https://api.chatpdf.com/v1/chats/message",
"authentication": "predefinedCredential",
"credentialType": "apiKey",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer {{ $credentials.chatpdfApiKey }}"
}
]
},
"contentType": "applicationJson",
"body": {
"sourceId": "{{ $env.HANDBOOK_SOURCE_ID }}",
"messages": [
{
"role": "user",
"content": "Extract the {{ $json.topic_name }} section as a structured list of key points suitable for a training module."
}
]
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.1,
"position": [300, 200],
"name": "Extract Handbook Content"
},
{
"parameters": {
"httpMethod": "POST",
"url": "https://api.anthropic.com/v1/messages",
"authentication": "predefinedCredential",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "x-api-key",
"value": "{{ $credentials.claudeApiKey }}"
}
]
},
"contentType": "applicationJson",
"body": {
"model": "claude-3-5-sonnet-20241022",
"max_tokens": 2048,
"messages": [
{
"role": "user",
"content": "Convert this handbook extract into a professional training script (2-3 minutes, 300-400 words): {{ $json.handbook_content }}"
}
]
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.1,
"position": [550, 200],
"name": "Generate Training Script"
}
]
}
The full workflow is more extensive, but this shows the core pattern: each node makes an HTTP request, captures the response, and passes data to the next node.
The Manual Alternative
If full automation feels premature, a hybrid approach works well. Extract the handbook content manually using Chat with PDF's web interface, then automate only the video generation pipeline. Use Claude to refine your script, ElevenLabs to generate narration, and Hour One to produce the video. This takes roughly 1-2 hours per module instead of 15 minutes with full automation, but requires less setup and gives you more editorial control over script quality.
Alternatively, generate scripts and narration manually, then use only Hour One to create videos. This eliminates the PDF and Claude steps, reducing complexity and cost, though you lose the efficiency gains of automated extraction.
Pro Tips
1. Template your Claude prompts
Don't just ask Claude to "create a training script". Provide detailed instructions about tone, length, target audience, and structure. A good prompt specifies pacing (minutes), word count, formatting requirements, and even emotional tone. The more detailed your prompt, the fewer revisions you'll need.
2. Monitor ElevenLabs character limits
ElevenLabs charges per character, not per module. A 400-word script costs the same whether it's used once or a hundred times. Cache your audio; store the MP3 in cloud storage and reuse it if you create multiple videos of the same module in different presenter styles. This cuts costs significantly if you maintain a library of modules.
3. Handle Hour One timeouts gracefully
Hour One video generation sometimes takes longer than expected, especially for high-quality output. Set your n8n polling timeout to at least 15 minutes, not 5. Better still, implement exponential backoff; start polling every 30 seconds, then 60 seconds, then 90 seconds. This reduces API calls and prevents unnecessary failures.
4. Validate handbook content before Claude
Add a Claude step that checks whether the extracted handbook content is actually relevant. If Chat with PDF returns content that doesn't match your topic (which happens occasionally), reject it and retry with a more specific prompt. This prevents wasting ElevenLabs and Hour One credits on bad input.
5. Version your modules
Store the handbook extract, script, audio file, and video in a structured folder or database. Tag each with the handbook version, generation date, and topic. If your handbook updates, you can regenerate only affected modules without losing previous versions. This is invaluable for audit trails and compliance.
Cost Breakdown
| Tool | Plan Needed | Monthly Cost | Notes |
|---|---|---|---|
| Chat with PDF | Paid API access | £20-50 | Depends on handbook size and extraction frequency; ~0.05 credits per page |
| Claude | Pay-as-you-go API | £10-30 | ~£0.003 per 1k input tokens; typical script generation costs £0.02-0.05 |
| ElevenLabs | Pay-as-you-go API | £15-50 | ~£0.30 per 1,000 characters; 400-word script costs ~£0.12 |
| Hour One | Pay-as-you-go API | £5-20 per video | Pricing varies by resolution and presenter; 720p video ~£5-8 each |
| n8n | Cloud free tier or self-hosted | £0-20 | Free tier includes 1,000 workflow executions per month; paid plans for higher volume |
| Total per module | — | £5-25 | Assuming one module per month; costs scale linearly with volume |
A typical 2-3 minute training module costs roughly £10-15 to generate end-to-end using this workflow. Creating the same module manually costs 3-5 hours of staff time, worth £75-150 in salary. The automation pays for itself after roughly 10 modules.
More Recipes
User onboarding video series from feature documentation
SaaS companies need to convert technical documentation into engaging onboarding videos for different user segments.
Course curriculum and assessment generation from subject outline
Educators spend weeks designing course materials and assessments when they could generate them from a high-level curriculum outline.
Technical documentation generation from code
Developers struggle to maintain up-to-date documentation alongside code changes.