This workflow corresponds to n8n.io template #14707 — we link there as the canonical source.
This workflow follows the Form Trigger → Google Drive recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"meta": {
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "48f7ac17-e94e-4abd-a50c-241fcb376139",
"name": "Section \u2014 Input and Split",
"type": "n8n-nodes-base.stickyNote",
"position": [
1296,
368
],
"parameters": {
"color": 5,
"width": 500,
"height": 164,
"content": "## Section 1 \u2014 Form Input and Language Split\nUser fills the form. The Code node splits the language list into separate items \u2014 one per language \u2014 so each runs independently through the rest of the workflow.\nExample input: en,hi,es,fr\n"
},
"typeVersion": 1
},
{
"id": "3e58b6f4-96d7-417c-88fc-49973765aad5",
"name": "Section \u2014 Wait and Poll",
"type": "n8n-nodes-base.stickyNote",
"position": [
2432,
368
],
"parameters": {
"color": 5,
"width": 564,
"height": 164,
"content": "## Section 3 \u2014 Wait and Check Status\nWaits 45 seconds initially, then polls WayinVideo for the job status. If status is not SUCCEEDED, waits 30 seconds and retries. Loops until the job is complete."
},
"typeVersion": 1
},
{
"id": "355cfb0c-45ae-4b59-8e64-9efb40091683",
"name": "Section \u2014 Download and Upload",
"type": "n8n-nodes-base.stickyNote",
"position": [
3024,
368
],
"parameters": {
"color": 5,
"width": 552,
"height": 148,
"content": "## Section 4 \u2014 Download and Upload to Google Drive\nExtracts each clip URL from the results, downloads the video file, and uploads it to the configured Google Drive folder using the AI-generated clip title as the filename."
},
"typeVersion": 1
},
{
"id": "b0361e05-3426-44fe-9478-71bc87fc6c2d",
"name": "1. Form \u2014 Video URL and Languages",
"type": "n8n-nodes-base.formTrigger",
"position": [
1328,
544
],
"parameters": {
"options": {},
"formTitle": "Multilingual Video Clip Distributor",
"formFields": {
"values": [
{
"fieldLabel": "Video URL",
"placeholder": "https://www.youtube.com/watch?v=xxxxxxx",
"requiredField": true
},
{
"fieldLabel": "Project / Brand Name",
"placeholder": "e.g. Incrementors, TechBrand, MyChannel",
"requiredField": true
},
{
"fieldLabel": "Target Languages",
"placeholder": "e.g. en,hi,es,fr,pt,ar \u2014 see language code guide on canvas",
"requiredField": true
},
{
"fieldLabel": "Number of Clips Per Language",
"placeholder": "e.g. 3",
"requiredField": true
}
]
},
"formDescription": "Paste your video URL and enter target language codes. AI will generate clips with subtitles in each language and upload them to Google Drive."
},
"typeVersion": 2.2
},
{
"id": "7a33c2ae-b4b8-4492-9893-b61724ea9bb4",
"name": "2. Code \u2014 Split Languages into Items",
"type": "n8n-nodes-base.code",
"position": [
1568,
544
],
"parameters": {
"jsCode": "const languages = $input.item.json['Target Languages'].split(',').map(l => l.trim().toLowerCase());\nconst videoUrl = $input.item.json['Video URL'];\nconst brandName = $input.item.json['Project / Brand Name'];\nconst clipLimit = parseInt($input.item.json['Number of Clips Per Language']) || 3;\n\nreturn languages.map(lang => ({\n json: {\n video_url: videoUrl,\n brand_name: brandName,\n target_lang: lang,\n clip_limit: clipLimit\n }\n}));"
},
"typeVersion": 2
},
{
"id": "36f7b243-45d2-4e87-8b01-b597277a2bcf",
"name": "5. WayinVideo \u2014 Get Clip Results",
"type": "n8n-nodes-base.httpRequest",
"position": [
2400,
544
],
"parameters": {
"url": "=https://wayinvideo-api.wayin.ai/api/v2/clips/results/{{ $('3. WayinVideo \u2014 Submit Clipping Task').item.json.data.id }}",
"options": {},
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_TOKEN_HERE"
},
{
"name": "x-wayinvideo-api-version",
"value": "v2"
},
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "6de12cd2-32dc-4150-a536-0de516562e77",
"name": "6. IF \u2014 Check Status SUCCEEDED",
"type": "n8n-nodes-base.if",
"position": [
2704,
544
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "cond-status-succeeded",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.data.status }}",
"rightValue": "SUCCEEDED"
}
]
}
},
"typeVersion": 2.3
},
{
"id": "3f92aa00-7b77-42c9-a404-10ca7a0f0d1f",
"name": "8. Code \u2014 Extract Clips Array",
"type": "n8n-nodes-base.code",
"position": [
2992,
528
],
"parameters": {
"jsCode": "const clips = $json.data.clips;\n\nreturn clips.map(clip => ({\n json: {\n title: clip.title,\n export_link: clip.export_link,\n score: clip.score,\n tags: clip.tags,\n desc: clip.desc,\n begin_ms: clip.begin_ms,\n end_ms: clip.end_ms\n }\n}));"
},
"typeVersion": 2
},
{
"id": "d93250ae-2fff-41b5-93d8-8f08c1ea1b84",
"name": "Main \u2014 Overview & Setup1",
"type": "n8n-nodes-base.stickyNote",
"position": [
848,
256
],
"parameters": {
"width": 420,
"height": 728,
"content": "## Multilingual Video Clip Distributor\n\n### How it works\nA form collects a video URL and a list of target language codes. The workflow splits into one job per language and submits each to WayinVideo, which generates short vertical clips with AI-translated subtitles. The workflow polls for completion, then downloads each clip and uploads it to Google Drive \u2014 fully automated, one folder per run.\n\n### Setup\n1. Replace YOUR_WAYINVIDEO_API_KEY in nodes 3 and 5 with your WayinVideo bearer token\n2. Connect your Google Drive OAuth2 credential in node 10\n3. Replace YOUR_GDRIVE_FOLDER_ID in node 10 with your target Drive folder ID\n4. Activate the workflow and open the Form trigger URL to begin\n\n### Customization Tips\n- Change target_duration to DURATION_15_30 for shorter Reels or Shorts\n- Change ratio to RATIO_1_1 for square format output\n- Add a Slack or Gmail node after node 10 to notify your team on upload completion\n- Set renameNodes to true in the Set Workflow Variables node to auto-rename nodes"
},
"typeVersion": 1
},
{
"id": "1e81f3c9-972f-4ca1-bd75-126ed6d75430",
"name": "Section \u2014 WayinVideo Submission1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1824,
368
],
"parameters": {
"color": 5,
"width": 600,
"height": 164,
"content": "## Section 2 \u2014 Submit Clipping Job\nFor each language item, a clipping job is submitted to WayinVideo. The API creates 9:16 vertical clips with AI-translated subtitles based on the video URL and selected language."
},
"typeVersion": 1
},
{
"id": "13948747-c376-4f50-bcd1-0aa218be15c4",
"name": "Warning \u2014 Infinite Loop Risk1",
"type": "n8n-nodes-base.stickyNote",
"position": [
2096,
960
],
"parameters": {
"color": 3,
"width": 788,
"height": 156,
"content": "## WARNING \u2014 Infinite Retry Loop Risk\nIf WayinVideo never returns SUCCEEDED \u2014 for example, if the job fails or the video URL is invalid \u2014 this workflow will loop indefinitely between the Wait and Get Result nodes.\n\nFix: Add a Set node to track retry count, and an IF node to stop execution after a maximum of 5 to 10 retries."
},
"typeVersion": 1
},
{
"id": "a3f6d564-f6d0-4c3e-8a6e-5ee4cf949f0d",
"name": "4. Wait \u2014 45 Seconds1",
"type": "n8n-nodes-base.wait",
"position": [
2112,
544
],
"parameters": {
"amount": 45
},
"typeVersion": 1.1
},
{
"id": "2bd3c351-da29-492c-a991-0f186de3fa91",
"name": "7. Wait \u2014 30 Seconds Retry",
"type": "n8n-nodes-base.wait",
"position": [
2720,
752
],
"parameters": {
"amount": 30
},
"typeVersion": 1.1
},
{
"id": "94da71f7-cef5-434b-980f-50b654bd73ee",
"name": "3. WayinVideo \u2014 Submit Clipping Task",
"type": "n8n-nodes-base.httpRequest",
"position": [
1824,
544
],
"parameters": {
"url": "https://wayinvideo-api.wayin.ai/api/v2/clips",
"method": "POST",
"options": {},
"jsonBody": "={\n \"video_url\": \"{{ $json.video_url }}\",\n \"project_name\": \"{{ $json.brand_name }} - {{ $json.target_lang }}\",\n \"target_duration\": \"DURATION_30_60\",\n \"limit\": {{ $json.clip_limit }},\n \"enable_export\": true,\n \"resolution\": \"HD_720\",\n \"enable_caption\": true,\n \"caption_display\": \"translation\",\n \"cc_style_tpl\": \"temp-7\",\n \"enable_ai_reframe\": true,\n \"ratio\": \"RATIO_9_16\",\n \"target_lang\": \"{{ $json.target_lang }}\"\n}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_TOKEN_HERE"
},
{
"name": "x-wayinvideo-api-version",
"value": "v2"
},
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "1bdae3f0-584a-4b32-b685-8be590481248",
"name": "9. HTTP \u2014 Download Clip File",
"type": "n8n-nodes-base.httpRequest",
"position": [
3248,
528
],
"parameters": {
"url": "={{ $json.export_link }}",
"options": {
"response": {
"response": {
"responseFormat": "file"
}
}
}
},
"typeVersion": 4.4
},
{
"id": "0b2e68c8-199b-471f-b2c0-36e01890100f",
"name": "10. Google Drive \u2014 Upload Clip",
"type": "n8n-nodes-base.googleDrive",
"position": [
3488,
528
],
"parameters": {
"name": "={{ $('8. Code \u2014 Extract Clips Array').item.json.title }}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive",
"cachedResultName": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "list",
"value": "YOUR_GDRIVE_FOLDER_ID",
"cachedResultUrl": "https://drive.google.com/drive/folders/YOUR_GDRIVE_FOLDER_ID",
"cachedResultName": "YOUR_FOLDER_NAME"
}
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
}
],
"connections": {
"4. Wait \u2014 45 Seconds1": {
"main": [
[
{
"node": "5. WayinVideo \u2014 Get Clip Results",
"type": "main",
"index": 0
}
]
]
},
"7. Wait \u2014 30 Seconds Retry": {
"main": [
[
{
"node": "5. WayinVideo \u2014 Get Clip Results",
"type": "main",
"index": 0
}
]
]
},
"9. HTTP \u2014 Download Clip File": {
"main": [
[
{
"node": "10. Google Drive \u2014 Upload Clip",
"type": "main",
"index": 0
}
]
]
},
"8. Code \u2014 Extract Clips Array": {
"main": [
[
{
"node": "9. HTTP \u2014 Download Clip File",
"type": "main",
"index": 0
}
]
]
},
"6. IF \u2014 Check Status SUCCEEDED": {
"main": [
[
{
"node": "8. Code \u2014 Extract Clips Array",
"type": "main",
"index": 0
}
],
[
{
"node": "7. Wait \u2014 30 Seconds Retry",
"type": "main",
"index": 0
}
]
]
},
"5. WayinVideo \u2014 Get Clip Results": {
"main": [
[
{
"node": "6. IF \u2014 Check Status SUCCEEDED",
"type": "main",
"index": 0
}
]
]
},
"1. Form \u2014 Video URL and Languages": {
"main": [
[
{
"node": "2. Code \u2014 Split Languages into Items",
"type": "main",
"index": 0
}
]
]
},
"2. Code \u2014 Split Languages into Items": {
"main": [
[
{
"node": "3. WayinVideo \u2014 Submit Clipping Task",
"type": "main",
"index": 0
}
]
]
},
"3. WayinVideo \u2014 Submit Clipping Task": {
"main": [
[
{
"node": "4. Wait \u2014 45 Seconds1",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
googleDriveOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Paste any video URL into the form, choose your target languages, and this workflow handles everything else. It sends the video to WayinVideo AI, which automatically generates short vertical clips with translated subtitles in every language you selected. Each clip is downloaded…
Source: https://n8n.io/workflows/14707/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
The Sora 2 API allows seamless generation of CGI ads, turning text prompts into stunning videos. This workflow automates the entire process from video generation to upload, notification, and file shar
Formtrigger Workflow. Uses formTrigger, googleDrive, httpRequest, stopAndError. Event-driven trigger; 28 nodes.
Formtrigger Workflow. Uses formTrigger, googleDrive, httpRequest, stopAndError. Event-driven trigger; 28 nodes.
Create CGI ads effortlessly by integrating the Google Veo3 API for video generation and uploading to Google Drive with seamless email notifications. On form submission: Triggers the workflow when a fo
This workflow automates the process of generating videos using the Veo 3 Fast API, uploading the video to Google Drive, and notifying the user via email. All tasks are executed seamlessly, ensuring a