Introduction
Converting technical specifications into user-friendly guides is tedious work. A technical writer receives a PDF spec from engineering, manually extracts the key information, rewrites it in plain language, then creates a video walkthrough. Each step requires context switching and human judgment. The whole process takes days.
What if you could automate most of this pipeline? Feed a technical spec into an AI, have it extract and rewrite the content, then generate a polished video guide, all without touching a single file yourself. This workflow combines three tools that handle distinct jobs: document extraction, content generation, and video creation. By connecting them through an orchestration platform, you eliminate the manual handoffs entirely.
This guide walks you through building a technical specification to user guide conversion pipeline. We'll use Chat with PDF by Copilotus to extract content, Hour One to generate a video presenter, and Mintlify to format the documentation. The entire flow runs on autopilot once you trigger it.
The Automated Workflow
Orchestration Tool Choice: n8n
For this workflow, n8n is the best choice. It's self-hosted, handles file uploads natively, and supports complex conditional logic without additional subscription costs. Zapier would work but charges per task; n8n gives you unlimited executions. Make (Integromat) is viable but adds unnecessary complexity for a three-step pipeline.
We'll assume you're running n8n locally or on a cloud instance with access to your file storage.
Step 1: Trigger on File Upload
The workflow starts when someone uploads a PDF technical specification to a designated folder. In n8n, use the Google Drive Watch trigger (or Dropbox, OneDrive, or local filesystem depending on your setup).
Trigger Configuration:
- Event: New file created in folder
- Folder: /uploads/technical-specs/
- File type filter: application/pdf
When a PDF lands in the folder, the workflow fires and captures the file metadata.
Step 2: Extract Content from PDF
Next, send the PDF to Chat with PDF by Copilotus. This API accepts a file and a question, then returns extracted text. The Copilotus API endpoint is:
https://api.copilotus.io/v1/chat-with-pdf
In n8n, create an HTTP Request node. Configure it as follows:
Method: POST
URL: https://api.copilotus.io/v1/chat-with-pdf
Headers:
Authorization: Bearer YOUR_COPILOTUS_API_KEY
Content-Type: application/json
Body (JSON):
{
"file_url": "{{ $node['Google Drive Watch'].data.webViewLink }}",
"question": "Extract the main features, technical requirements, and use cases from this specification. Format as sections with bullet points."
}
The API returns structured JSON with the extracted content. Store this in a variable for the next step. In n8n, map the response as:
{{ $node['Chat with PDF'].data.response.text }}
Step 3: Generate Presenter Video Script
Now you have extracted content. Feed it to Hour One, which generates a video of an AI presenter reading a script. First, you'll create a refined script from the extracted content using Claude via an HTTP request or Claude Code integration.
If using Claude Code (recommended for its ability to handle JSON processing):
const extractedContent = context.previousNodeOutput;
const scriptPrompt = `You are a technical writer. Take this extracted specification and write a 2-3 minute video script. The script should:
1. Open with a brief introduction to the feature or product
2. Explain each main feature in simple terms
3. Walk through a basic use case
4. Close with next steps for the user
Keep language conversational and avoid jargon. Format with line breaks between sections.
Extracted content:
${extractedContent}`;
const response = await context.callTool('claude', {
model: 'claude-3-5-sonnet-20241022',
messages: [{ role: 'user', content: scriptPrompt }]
});
return response.content[0].text;
This generates a natural, conversational script optimised for video presentation.
Step 4: Create Video with Hour One
Now send the script to Hour One's API. Hour One generates a video with an AI presenter speaking the script.
POST https://api.hourone.com/v1/videos
Headers:
Authorization: Bearer YOUR_HOURONE_API_KEY
Content-Type: application/json
Body:
{
"name": "{{ $node['Google Drive Watch'].data.name.replace('.pdf', '') }} - User Guide",
"script": "{{ $node['Claude'].data.output }}",
"presenter_id": "anna-female-en-uk",
"settings": {
"video_quality": "1080p",
"background": "white",
"subtitle_style": "professional"
}
}
The API response includes a video_id and status. Store the video_id for polling.
Step 5: Poll for Video Completion
Hour One processes videos asynchronously. Use a Wait node (typically 30 seconds) followed by an HTTP Request that polls the status:
GET https://api.hourone.com/v1/videos/{{ $node['Hour One'].data.video_id }}
Headers:
Authorization: Bearer YOUR_HOURONE_API_KEY
Check the response status. If status is "completed", proceed to step 6. If "processing", loop back with another Wait and poll. If "failed", trigger an error notification.
Step 6: Generate Documentation with Mintlify
Mintlify generates polished API documentation from structured content. You'll convert your extracted specification into Mintlify's OpenAPI format, then use Mintlify's API to build the docs site.
Create a JSON object matching Mintlify's OpenAPI structure:
{
"openapi": "3.0.0",
"info": {
"title": "{{ $node['Google Drive Watch'].data.name.replace('.pdf', '') }}",
"description": "{{ $node['Chat with PDF'].data.response.summary }}",
"version": "1.0.0"
},
"paths": {
"/overview": {
"get": {
"summary": "Feature Overview",
"description": "{{ $node['Chat with PDF'].data.response.features }}"
}
}
}
}
Then POST this to Mintlify's deploy endpoint:
POST https://api.mintlify.com/v1/docs
Headers:
Authorization: Bearer YOUR_MINTLIFY_API_KEY
Content-Type: application/json
Body: {{ $node['Mintlify Formatter'].data.openapi_spec }}
Mintlify returns a deployed docs URL.
Step 7: Combine Outputs and Create Summary
Finally, gather all outputs, create a summary document, and store it in your knowledge base or email it to stakeholders.
const summary = {
spec_name: context.triggerData.file_name,
extraction_timestamp: new Date().toISOString(),
video_url: context.nodeOutputs['Hour One'].video_download_url,
documentation_url: context.nodeOutputs['Mintlify Deploy'].site_url,
status: 'completed'
};
// Save to Google Sheets or send email
return summary;
Use n8n's Google Sheets node to log the summary, or an Email node to notify the team.
Full n8n Workflow Outline
Here's how the nodes connect in n8n:
1. Google Drive Watch (trigger)
↓
2. HTTP Request: Chat with PDF API
↓
3. Claude Code: Script generation
↓
4. HTTP Request: Hour One video creation
↓
5. Wait (30 seconds)
↓
6. HTTP Request: Poll Hour One status
├─ If processing: Loop back to 5
├─ If completed: Continue to 7
└─ If failed: Send error notification
↓
7. Function: Format for Mintlify
↓
8. HTTP Request: Mintlify deploy
↓
9. Google Sheets: Log summary
↓
10. Email: Notify stakeholders
Each node's output becomes the next node's input. No manual file transfers, no context switching.
The Manual Alternative
If you prefer human oversight at key points, keep the workflow but add approval nodes. After step 3, before creating the video, insert a Slack notification asking a team member to review the generated script. Use n8n's Wait for Webhook node to pause until they approve.
After Claude Code step:
- Slack notification with script preview
- Wait for webhook response (approval/rejection)
- If approved: Continue to Hour One
- If rejected: Send script back to Claude with feedback
This gives you automation benefits whilst keeping humans in the loop for quality control. The trade-off is that your workflow takes longer, but you catch errors before video generation wastes compute.
Alternatively, run the full automated pipeline, then have someone review the outputs before publishing. This is faster than the manual process but still allows edits.
Pro Tips
1. Rate Limiting and Retry Logic
Hour One's API has rate limits. If you're processing multiple specs, queue requests with delays. In n8n, use the Delay node between API calls:
After each Hour One request:
- Delay: 2 seconds
- Then send next request
For API failures, add retry logic. Most HTTP Request nodes support automatic retries; configure 3 retries with exponential backoff.
2. Cost Optimisation with Conditional Logic
Not every spec needs a video. For internal-only specs, skip Hour One and save money. Use an n8n Switch node to check a tag or folder name:
If folder == "/uploads/public-specs/":
- Generate video (costs money)
Else:
- Skip to Mintlify only
This reduces video generation costs by 50-70% if half your specs don't need videos.
3. Error Handling and Notifications
When Copilotus fails to extract text from a corrupted PDF, your workflow breaks silently. Add error handlers:
After Chat with PDF request:
- Check response.success == true
- If false: Send Slack alert + store PDF in quarantine folder
- If true: Continue
4. File Storage and Archival
After processing, your workflow should clean up. Store the original PDF, generated script, video, and docs link together. Create a folder structure:
/processed-specs/
├── {spec-name}/
├── original.pdf
├── extracted-content.json
├── generated-script.txt
├── video.mp4
└── docs-url.txt
Use n8n's File operation nodes to organise outputs automatically.
5. Analytics and Performance Tracking
Log workflow execution time and cost per spec. Create a Google Sheet that tracks:
Spec Name | Extraction Time | Script Gen Time | Video Gen Time | Total Cost | Success/Failure
Over time, you'll see which specs take longest and identify optimisation opportunities. Some PDFs are harder to extract from; you might need to adjust your prompt.
Cost Breakdown
| Tool | Plan Needed | Monthly Cost | Notes |
|---|---|---|---|
| Chat with PDF by Copilotus | Pro | £25 | Includes 500 API calls; £0.05 per additional call |
| Hour One | Creator Plan | £99 | Includes 10 videos/month; £9.90 per additional video |
| Mintlify | Free tier | £0 | Free for up to 50 docs; Pro is £19/month for unlimited |
| n8n | Self-hosted Free | £0 | Unlimited executions; pay only for hosting (AWS/Digital Ocean: £5-15/month) |
| Claude API (via Copilotus or direct) | Pay-as-you-go | £5-10 | Depends on script complexity; ~0.003 USD per 1K tokens |
| Total Minimum | £34-49/month | Assumes 5-10 specs/month and free n8n hosting | |
| Total with Growth | £150-200/month | 30+ specs/month; Hour One overage costs add up |
If you process 10 specs per month, cost per spec is roughly £10-15. Compared to a technical writer charging £50+ per guide, this saves 70-80%.
If you opt for Claude Code integration instead of calling Claude separately, costs reduce slightly because tokens are computed within your Copilotus or n8n plan.