Back to Alchemy
Alchemy RecipeAdvancedworkflow

Video marketing campaign from script to multilingual distribution

24 March 2026

Introduction

Creating a video marketing campaign from a single script, translating it into multiple languages, and distributing it across different regions is a genuinely complex task. In most organizations, this workflow involves scattered teams: a copywriter produces the script, a video production specialist uses that script to generate video content, translators adapt it for different markets, and then someone manually uploads each variant to distribution channels. Each handoff is a friction point where things get delayed, details get lost, or versions fall out of sync.

The good news is that this entire process can be fully automated. By connecting Hour One's AI video generation with Vidau AI's video editing and translation capabilities, you can build a workflow that takes a single script and produces fully localised, edited videos ready for distribution, all without touching a keyboard between the initial input and final output.

This guide shows you how to wire these tools together using n8n, Make, or Zapier, with enough detail that you can replicate the setup in your own account. We'll focus on n8n because it gives you the most control and doesn't require heavy coding, but the underlying logic applies to any orchestration platform.

The Automated Workflow

Understanding the data flow

The workflow runs in this sequence:

  1. A script lands in a Google Doc or is submitted via a form.

  2. Hour One generates a video from that script using a digital avatar of your choice.

  3. Vidau AI processes the video for editing (adding captions, colour grading, transitions).

  4. Vidau AI's translation feature creates versions in your target languages.

  5. Each completed video is uploaded to your distribution destinations (YouTube, TikTok, LinkedIn, etc.).

  6. A spreadsheet logs all versions, URLs, and completion timestamps.

The orchestration tool acts as the glue, watching for the initial trigger, calling each API in sequence, waiting for results, and passing data forward.

Why n8n for this workflow

Zapier would work, but it's pricier at scale and less transparent about API calls. Make (formerly Integromat) is solid but can be confusing to navigate. N8n is self-hosted or cloud-hosted, transparent about execution, and free for moderate volumes. For a video workflow that might run 5 to 20 times per month, n8n cloud costs roughly £20 per month and remains under rate limits for both Hour One and Vidau AI.

Setting up the n8n workflow

Start by creating a new workflow in your n8n instance. Add a trigger node; for this example, we'll use a "Google Sheets" trigger that watches for new rows in a sheet named "Scripts". Each row contains:

  • Column A: Script title
  • Column B: Script content
  • Column C: Target languages (comma-separated, e.g., "French, Spanish, German")
  • Column D: Distribution platforms (comma-separated, e.g., "YouTube, LinkedIn")

Trigger node configuration:

Node type: Google Sheets
Action: Watch
Sheet: Scripts
Range: A1:D1000
Trigger on: New rows
Return all rows: No

When a new row is added, the workflow fires and passes all column data downstream.

Step 1: Generate video with Hour One

After the trigger, add an HTTP Request node to call Hour One's API. You'll need an API key from your Hour One account. Hour One's video generation typically takes 2–5 minutes, so configure the node to poll for completion rather than wait indefinitely.


POST https://api.hourone.com/v1/videos

Headers:
Authorization: Bearer YOUR_HOUR_ONE_API_KEY
Content-Type: application/json

Body (example):
{
  "script": "{{ $node['Google Sheets'].json['body']['values'][0][1] }}",
  "avatar_id": "avatar_123",
  "voice_id": "voice_456",
  "background_id": "bg_789",
  "language": "en"
}

Hour One returns a video ID and a status. Store this video ID in a variable for the next step. The response looks like:

{
  "id": "video_abcd1234",
  "status": "processing",
  "estimated_time": 180,
  "video_url": null
}

Since the video is processing, add a "Wait" node set to 180 seconds, then add another HTTP Request to poll for completion:


GET https://api.hourone.com/v1/videos/{{ $node['Hour One Create'].json['body']['id'] }}

Headers:
Authorization: Bearer YOUR_HOUR_ONE_API_KEY

Keep polling until status equals completed. In n8n, use a loop or condition node:


Condition: IF response.status === "completed"
- YES: Continue to next step
- NO: Wait 30 seconds and retry (max 10 retries)

Once completed, extract the video_url and store it.

Step 2: Process video with Vidau AI

Vidau AI accepts a video URL and applies editing, captions, and colour grading. It also handles translation. Create an HTTP Request node:


POST https://api.vidau.ai/v1/process

Headers:
Authorization: Bearer YOUR_VIDAU_API_KEY
Content-Type: application/json

Body:
{
  "source_video_url": "{{ $node['Hour One Poll'].json['body']['video_url'] }}",
  "add_captions": true,
  "caption_language": "en",
  "colour_grade": "cinematic",
  "transitions": "fade",
  "output_format": "mp4"
}

Vidau AI returns a processing ID:

{
  "process_id": "proc_xyz789",
  "status": "queued",
  "estimated_completion": 120
}

Again, poll for completion:


GET https://api.vidau.ai/v1/process/{{ $node['Vidau Process'].json['body']['process_id'] }}

Headers:
Authorization: Bearer YOUR_VIDAU_API_KEY

Once status is completed, extract the edited video URL.

Step 3: Generate translated versions

Here's where the workflow branches. Extract the target languages from the original Google Sheet row, split them, and loop through each language. For each language, call Vidau AI's translation endpoint:


POST https://api.vidau.ai/v1/translate

Headers:
Authorization: Bearer YOUR_VIDAU_API_KEY
Content-Type: application/json

Body:
{
  "video_url": "{{ $node['Vidau Poll'].json['body']['edited_video_url'] }}",
  "target_language": "{{ $node['Split Languages'].json['language'] }}",
  "translate_captions": true,
  "regenerate_audio": true,
  "voice_id": "voice_456"
}

Vidau AI's translation engine regenerates audio in the target language and translates captions. Each translation request returns:

{
  "translation_id": "trans_abc123",
  "language": "fr",
  "video_url": "https://vidau.ai/videos/trans_abc123.mp4",
  "status": "completed"
}

Store each translated video URL with its language code in an array. In n8n, use a "Loop" or "Map" node to iterate through languages and collect all results.

Step 4: Upload to distribution platforms

After translations are complete, upload each video (original plus all translations) to your target platforms. This step depends on which platforms you're using. We'll show YouTube as an example, though TikTok, LinkedIn, and others follow similar patterns.

For YouTube, you'll need a Google service account with YouTube API access enabled. Create an HTTP Request node:


POST https://www.googleapis.com/youtube/v3/videos?part=snippet,status

Headers:
Authorization: Bearer {{ $node['YouTube Auth'].json['access_token'] }}
Content-Type: application/json

Body:
{
  "snippet": {
    "title": "{{ $node['Google Sheets'].json['body']['values'][0][0] }} - {{ $node['Translate Loop'].json['language'] }}",
    "description": "Video generated from script. Language: {{ $node['Translate Loop'].json['language'] }}",
    "tags": ["marketing", "{{ $node['Translate Loop'].json['language'] }}"],
    "categoryId": "22"
  },
  "status": {
    "privacyStatus": "public"
  }
}

YouTube's API requires resumable uploads for large files. Use a resumable upload request:


POST https://www.googleapis.com/upload/youtube/v3/videos?uploadType=resumable&part=snippet,status

Headers:
Authorization: Bearer {{ auth_token }}
Content-Length: 0
X-Goog-Upload-Protocol: resumable
X-Goog-Upload-Command: start

Then follow with:
PUT {{ session_uri }}
Content-Type: video/mp4

(binary video data from Vidau AI URL)

For each platform, repeat this upload step. If you're distributing to multiple platforms, this becomes complex; consider using a dedicated social media API like Buffer or Hootsuite, which have simpler integrations.

Step 5: Log results

After all uploads complete, write a summary row to a Google Sheet called "Campaigns Completed":


POST https://sheets.googleapis.com/v4/spreadsheets/SHEET_ID/values/Campaigns Completed!A:E:append?valueInputOption=USER_ENTERED

Headers:
Authorization: Bearer {{ google_auth_token }}
Content-Type: application/json

Body:
{
  "values": [
    [
      "{{ $node['Google Sheets'].json['body']['values'][0][0] }}",
      "{{ new Date().toISOString() }}",
      "{{ $node['Translate Loop'].json['results'].length }} languages",
      "{{ $node['YouTube Upload'].json['id'] }}",
      "COMPLETED"
    ]
  ]
}

This gives you an audit trail of what was produced, when, and where.

Putting it all together in n8n

Here's the high-level node structure:

  1. Google Sheets Trigger
  2. Hour One Create Video (HTTP)
  3. Wait (180 seconds)
  4. Hour One Poll (HTTP, loop until completed)
  5. Vidau Process (HTTP)
  6. Wait (120 seconds)
  7. Vidau Poll (HTTP)
  8. Split Languages (code: break comma-separated list into array)
  9. Loop through languages: a. Vidau Translate (HTTP) b. YouTube Upload (HTTP, resumable) c. LinkedIn Upload (HTTP, if applicable)
  10. Google Sheets Log Results (HTTP)

Connect these nodes in sequence, using conditional branches where needed (e.g., if a translation fails, skip that language but continue). Set error handlers on HTTP nodes so a failed upload doesn't crash the entire workflow.

The Manual Alternative

If automation feels like overkill for your situation, you can still save time by batching work manually. Generate the Hour One video once, download it, then upload it to Vidau AI's web interface to apply editing and translations. Download all variants, then manually upload to YouTube, LinkedIn, TikTok, etc. This approach takes roughly 45 minutes per script and requires active involvement. It's sensible if you're producing fewer than two campaigns per week, or if your platforms and languages change unpredictably.

Pro Tips

Handling Hour One and Vidau AI rate limits

Both services limit API calls to prevent abuse. Hour One typically allows 10 concurrent video generations per account; Vidau AI allows 5 concurrent translations. In your n8n workflow, add a delay between loops. For instance, if you're generating videos for 20 different scripts in one go, don't fire all 20 requests simultaneously; instead, space them 30 seconds apart:


Wait node: 30 seconds between each script

This prevents throttling errors and keeps costs predictable.

Monitoring and error recovery

Configure notifications in n8n so you're alerted when a workflow fails. Email alerts should include the error message, the step where it failed, and the script that caused it. This helps you spot patterns; for example, scripts over 800 words might consistently fail Hour One, suggesting a character limit.

For recoverable errors (like temporary API downtime), set automatic retries with exponential backoff:


Retry policy: 3 attempts, 5 second delay after first failure, 10 seconds after second

Cost optimisation

Hour One charges per video generated (roughly £0.50 per minute of video). Vidau AI charges per translation request. To minimise costs:

  • Generate one master video in your primary language, then translate it, rather than generating separate videos for each language.

  • Batch script submissions weekly to take advantage of any volume discounts.

  • Use Vidau AI's caption-only mode (no audio regeneration) for languages where the original audio is acceptable, cutting per-request cost by 40%.

Testing with dry runs

Before running your workflow on real scripts, test it with a dummy script and a single target language. This catches configuration errors before they affect your production videos. Save the test video and review it; check that captions are synced, audio is intelligible, and colour grading looks professional.

Storing and managing API keys

Never hardcode API keys into your workflow. Use n8n's "Credentials" feature to store keys securely. Create separate credentials for each service (Hour One, Vidau AI, YouTube, etc.) and reference them by name in your nodes. This way, if you need to rotate a key, you only update it in one place.

Cost Breakdown

ToolPlan NeededMonthly CostNotes
Hour OnePay-as-you-go£10–50Depends on video length and volume. Each minute of video costs roughly £0.50.
Vidau AIPay-as-you-go£15–40Each translation £3–5. Editing is included.
n8n (Cloud)Free tier or Pro£0–20Free tier supports ~1000 executions/month. Pro is £20/month for unlimited.
Google SheetsFree or Google Workspace£0–6/userFree if you already use Google.
YouTube APIFree£0No API charges; storage costs depend on your YouTube plan.
Zapier (alternative)Professional or higher£30–100More expensive at scale, but no self-hosting required.
Make (alternative)Free or Team plan£0–20Free tier includes 10,000 operations/month; Team plan is £13/month.

For a typical mid-sized campaign producing 4 scripts per month in 3 languages each (12 videos total), expect roughly £60–80 combined across all tools. If you're running 10 campaigns monthly, costs rise to £150–250, at which point the time savings (roughly 15–20 hours per month) justify the expense.