This workflow corresponds to n8n.io template #17979 — we link there as the canonical source.
This workflow follows the Form Trigger → HTTP Request 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 →
{
"id": "c9AQWpiFLCdUjW8F",
"name": "Generate ultra-realistic shorts with Veo 3.1 on Pollo API",
"tags": [],
"nodes": [
{
"id": "fd504834-0355-42ad-ae3d-f9d7da76f5da",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
580,
-880
],
"parameters": {
"width": 880,
"height": 1968,
"content": "## Generate ultra-realistic shorts with Veo 3.1 on Pollo API\n\n\n### Overview\nAutomate the creation of ultra-realistic AI video shorts using [Pollo API](https://api.pollo.ai)'s [Veo 3.1 API](https://docs.pollo.ai/m/google/veo3-1) through this intuitive n8n workflow. Veo 3.1 is especially suited for cinematic short-form clips that need natural motion, believable camera direction, synced audio, and tighter visual guidance from prompts or reference images.\n\n\n**Key Benefits:**\n- \ud83c\udfa5 Ultra-realistic motion, lighting, and scene detail for camera-like short-form clips.\n- \ud83d\uddbc\ufe0f Up to 3 reference images for tighter subject, style, and visual direction.\n- \ud83c\udfa7 Improved audio-visual synchronization with dialogue, ambience, and sound effects.\n- \ud83c\udfac Advanced frame-to-frame control for more coherent cinematic progression.\n\n\n### Perfect for\nShort-form creators, social media teams, ad producers, e-commerce brands, creative agencies, and automation builders that need realistic video clips with controlled visuals and synced audio.\n\n\n### Prerequisites\n- [Pollo API account](https://api.pollo.ai) and API key ([Get your API key here](https://api.pollo.ai/api-keys)).\n- Active n8n instance with form submission capabilities.\n- AI prompts and optional source or reference image URLs for video generation.\n\n\n### Quick Setup\n\n\n#### 1. **Get API Key**\nRegister at [api.pollo.ai](https://api.pollo.ai) and generate your API key.\n\n\n#### 2. **Configure Form Fields**\nSet up these fields in your \"On Form Submission\" node:\n- **`prompt`** (Required): Detailed text description of the video short you want to generate.\n- **`image_url`** (Optional): Source or reference image URLs for guided video generation (up to 3 images, separate multiple URLs with commas); leave blank for text-to-video.\n- **`model_path`** (Required): Enter `google/veo3-1` to route the request to the Veo 3.1 model.\n- **`api_key`** (Required): Your Pollo AI API key for authentication.\n\n\n#### 3. **Test & Use**\n- Execute the workflow.\n- Access the generated form URL.\n- Fill in your details and submit.\n- Wait for processing.\n- Results will be displayed automatically.\n\n\n### Usage Tips\n\n\n**Reference-First Realism:**\nUse reference images when the clip needs a specific product, character, outfit, setting, or visual style. For stronger direction, make each reference image clear, well-lit, and focused on one visual role.\n\n\n**Better Prompts:**\nDescribe the subject, setting, camera movement, lighting, physical action, emotional tone, and audio cues so Veo 3.1 can shape the clip like a short cinematic scene.\n\n\n**Example:** \"Ultra-realistic handheld shot of a fashion model walking through a rainy Tokyo street at night, neon reflections on wet pavement, soft cinematic lighting, subtle ambient street noise, confident slow-motion movement, luxury editorial mood.\"\n\n\n**Common Uses:**\n- Realistic social media video shorts\n- Cinematic product teaser clips\n- UGC-style ad variations\n- Fashion and lifestyle motion concepts\n- Reference-guided brand visuals\n- Short narrative scene drafts\n\n\n### Troubleshooting\n- **API Key Invalid**: Ensure your API key is correct and active.\n- **Generation Fails**: Check whether your source or reference image URLs are publicly accessible and not behind a login. Also, make sure your prompt follows safety guidelines.\n\n\n**Keywords:** Veo 3.1 API, Pollo API, multi-image video generation, Text-to-Video, Image-to-Video, automated video ads, e-commerce video, reference-to-video, native audio sync, n8n template, AI video workflow"
},
"typeVersion": 1
},
{
"id": "b85d1a00-d6d4-4b3d-a0a2-50375488d25a",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1540,
-80
],
"parameters": {
"color": 7,
"width": 416,
"height": 320,
"content": "## Capture and submit prompt\n\nStarts the workflow from a form submission and sends the entered prompt and generation settings to the Pollo video generation API."
},
"typeVersion": 1
},
{
"id": "f1ba3bdc-f58f-400a-97c3-99ead1bbbebe",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
2020,
-80
],
"parameters": {
"color": 7,
"width": 400,
"height": 544,
"content": "## Poll generation status\n\nWaits for Pollo to process the video, queries the task status, and loops back to wait again until the generation is complete."
},
"typeVersion": 1
},
{
"id": "eada2743-86ea-4425-a4ec-6edd52a2dbf0",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
2460,
100
],
"parameters": {
"color": 7,
"height": 368,
"content": "## Display generated video\n\nFormats the completed generation response for output, including task ID, status, video URL, and media type."
},
"typeVersion": 1
},
{
"id": "ce84f0e4-60f8-4ca2-a276-6251109d8719",
"name": "When Prompt Submitted",
"type": "n8n-nodes-base.formTrigger",
"position": [
1600,
100
],
"parameters": {
"options": {},
"formTitle": "Pollo AI video generator",
"formFields": {
"values": [
{
"fieldLabel": "prompt"
},
{
"fieldLabel": "image_url"
},
{
"fieldLabel": "model_path",
"placeholder": "google/veo3-1"
},
{
"fieldLabel": "api_key",
"placeholder": "pollo_xxxxxxxx"
}
]
},
"formDescription": "Fill in the following information to generate your video with the Pollo API"
},
"typeVersion": 2.2
},
{
"id": "049959fc-441b-4de9-980d-7886f5f0bd2c",
"name": "Post to Pollo API",
"type": "n8n-nodes-base.httpRequest",
"position": [
1820,
100
],
"parameters": {
"url": "=https://pollo.ai/api/platform/generation/{{$json.model_path}}",
"method": "POST",
"options": {},
"jsonBody": "={{ JSON.stringify({ input: $json.image_url ? { prompt: $json.prompt, image: $json.image_url } : { prompt: $json.prompt } }) }}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "x-api-key",
"value": "={{$json.api_key}}"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "aab6cc40-ff30-47a8-af7d-231a3d49bb2f",
"name": "Wait 10 Seconds",
"type": "n8n-nodes-base.wait",
"position": [
2060,
100
],
"parameters": {
"amount": 10
},
"typeVersion": 1.1
},
{
"id": "a9f84800-b7e3-4b00-b006-afed6e919142",
"name": "Fetch Generation Status",
"type": "n8n-nodes-base.httpRequest",
"position": [
2260,
100
],
"parameters": {
"url": "=https://pollo.ai/api/platform/generation/{{$node[\"Post to Pollo API\"].json[\"data\"][\"taskId\"]}}/status",
"options": {},
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "x-api-key",
"value": "={{$node[\"When Prompt Submitted\"].json[\"api_key\"]}}"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "516a258b-905b-4efb-85a1-bb816a4ed460",
"name": "If Generation Complete",
"type": "n8n-nodes-base.if",
"position": [
2100,
320
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "or",
"conditions": [
{
"id": "66666666-+123456789001",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.data.generations[0].status }}",
"rightValue": "succeed"
},
{
"id": "41a1d076-e578-466a-b7bf-d4b9941c0e5a",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.data.generations[0].status }}",
"rightValue": "failed"
}
]
},
"looseTypeValidation": true
},
"typeVersion": 2.2
},
{
"id": "9cf69246-3c3d-42b1-8f0c-c76432913478",
"name": "Set Result Fields",
"type": "n8n-nodes-base.set",
"position": [
2500,
300
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "77777777-+123456789001",
"name": "taskId",
"type": "string",
"value": "={{ $json.data.taskId }}"
},
{
"id": "77777777-+123456789002",
"name": "status",
"type": "string",
"value": "={{ $json.data.generations[0].status }}"
},
{
"id": "77777777-+123456789003",
"name": "url",
"type": "string",
"value": "={{ $json.data.generations[0].url }}"
},
{
"id": "77777777-+123456789004",
"name": "mediaType",
"type": "string",
"value": "={{ $json.data.generations[0].mediaType }}"
},
{
"id": "77777777-+123456789005",
"name": "credit",
"type": "number",
"value": "={{ ($json.data.generations[0].failMsg || '').includes('Credits refunded') ? 0 : $json.data.credit }}"
}
]
}
},
"typeVersion": 3.4
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "12c22858-b6ec-4cfb-a7b7-1b8cb28f3657",
"connections": {
"Wait 10 Seconds": {
"main": [
[
{
"node": "Fetch Generation Status",
"type": "main",
"index": 0
}
]
]
},
"Post to Pollo API": {
"main": [
[
{
"node": "Wait 10 Seconds",
"type": "main",
"index": 0
}
]
]
},
"When Prompt Submitted": {
"main": [
[
{
"node": "Post to Pollo API",
"type": "main",
"index": 0
}
]
]
},
"If Generation Complete": {
"main": [
[
{
"node": "Set Result Fields",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait 10 Seconds",
"type": "main",
"index": 0
}
]
]
},
"Fetch Generation Status": {
"main": [
[
{
"node": "If Generation Complete",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow collects a prompt and optional image URL via an n8n form, submits a Veo 3.1 generation request to the Pollo API, then polls Pollo until the video task succeeds or fails and returns the final video URL and metadata. Receives a submission from an n8n form containing…
Source: https://n8n.io/workflows/17979/ — 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.
This workflow allows you to import any workflow from a file or another n8n instance and map the credentials easily. A multi-form setup guides you through the entire process At the beginning you have t
[n8n] Advanced URL Parsing and Shortening Workflow - Switchy.io Integration. Uses splitInBatches, stickyNote, httpRequest, html. Event-driven trigger; 56 nodes.
[](https://youtu.be/c7yCZhmMjtI)
LDX hub All Services Demo. Uses formTrigger, httpRequest, form, n8n-nodes-ldxhub. Event-driven trigger; 53 nodes.
This workflow provides a single n8n form that routes to five LDXhub services (StructFlow, RefineLoop, RenderOCR, CastDoc, and ExtractDoc) to run one-off document processing jobs and return the generat