{
  "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
          }
        ]
      ]
    }
  }
}