{
"nodes": [
{
"parameters": {
"amount": 600
},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
1888,
144
],
"id": "5007f137-22bd-4748-af68-2cb5000f0696",
"name": "Wait1",
"webhookId": "9caf5e5e-4800-4656-a9f3-1f0f1fe15c6b"
},
{
"parameters": {
"method": "POST",
"url": "<https://api.kie.ai/api/v1/veo/generate>",
"authentication": "genericCredentialType",
"genericAuthType": "httpBearerAuth",
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={\\n \\"prompt\\": \\"{ dialogue: 'Speaks clearly in Brazilian Portuguese: {{ $json.video_prompt.dialogue }}', action: '{{ $json.video_prompt.action }}', camera:' {{ $json.video_prompt.camera }}', emotion: '{{ $json.video_prompt.emotion }}'}\\",\\n \\"imageUrls\\": [\\n \\"{{ $('Image Url').item.json.image_url }}\\"\\n ],\\n \\"model\\": \\"{{ $('Generate Video Prompt').item.json.output.model }}\\",\\n \\"aspectRatio\\": \\"{{ $('Generate Video Prompt').item.json.output.aspect_ratio_video }}\\",\\n \\"enableFallback\\": false\\n}",
"options": {
"batching": {
"batch": {
"batchSize": 1,
"batchInterval": 15000
}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
1888,
-16
],
"id": "da6f3c07-bec4-4b99-972c-5642aaaa4968",
"name": "Generate Video",
"credentials": {
"httpBearerAuth": {
"id": "3l9Ostq7CAoKo0t7",
"name": "Kie AI"
}
}
},
{
"parameters": {},
"type": "@n8n/n8n-nodes-langchain.toolThink",
"typeVersion": 1.1,
"position": [
1120,
-416
],
"id": "5d389439-89c5-4a76-b7ee-498b8a7bd931",
"name": "Think1"
},
{
"parameters": {},
"type": "@n8n/n8n-nodes-langchain.toolThink",
"typeVersion": 1.1,
"position": [
1904,
-416
],
"id": "8b14979d-615d-45b0-96a8-030228cc375e",
"name": "Think"
},
{
"parameters": {
"fieldToSplitOut": "output.scenes",
"options": {}
},
"type": "n8n-nodes-base.splitOut",
"typeVersion": 1,
"position": [
1888,
-144
],
"id": "da791306-1695-411a-9938-0d55e5dce3d4",
"name": "Split Out"
},
{
"parameters": {
"jsonSchemaExample": "{\\n \\"aspect_ratio_video\\": \\"\\",\\n \\"model\\": \\"\\",\\n\\t\\"scenes\\": [\\n\\t\\t{\\n \\"video_prompt\\": \\n {\\n \\"dialogue\\": \\"\\",\\n \\"action\\": \\"\\",\\n \\"camera\\": \\"\\",\\n \\"emotion\\": \\"\\"\\n }\\n\\t\\t}\\n\\t]\\n}"
},
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"typeVersion": 1.3,
"position": [
2032,
-416
],
"id": "fe322913-826d-456d-b1d3-8a47c5dacb39",
"name": "Structured Output Parser1"
},
{
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"typeVersion": 1.2,
"position": [
1776,
-416
],
"id": "332588b1-2a71-496b-b17f-6c802bd66001",
"name": "OpenAI Chat Model1",
"credentials": {
"openAiApi": {
"id": "9UqSkeSS4wZvCS2i",
"name": "OpenAi account"
}
}
},
{
"parameters": {
"promptType": "define",
"text": "=Create video prompts as guided by follow instructions.\\n\\n- Make sure that the reference image is depicted as ACCURATELY as possible in the resulting images, especially all text.\\n\\n- Description of the product image: {{ $('Analyze Image').item.json.choices[0].message.content }}\\n- Count of videos to create: {{ $('Inputs').item.json['Quantidade de Vídeos'] }}\\n- The user's preferred aspect ratio: {{ $('Inputs').item.json['Aspect Ratio'] }}\\n- The user's preferred model: veo3_fast\\n- The user's preferred dialogue script: \\"{{ $('Inputs').item.json['Diálogo do Personagem'] }}\\"\\n- Break the dialogue into the {{ $('Inputs').item.json['Quantidade de Vídeos'] }} videos.\\n- Description of character and environment: \\"Normal & casual looking people. {{ $('Inputs').item.json['Detalhes do Personagem'] }}.Also I want diversity in the scenes from below: {{ $('Inputs').item.json.Ambiente }}\\"",
"hasOutputParser": true,
"options": {
"systemMessage": "=#SYSTEM PROMPT\\n\\n#Role\\nYou are a UGC (User-Generated Content) AI agent.\\n\\n#Objective\\nTake the reference image or the product in the reference image and place it into realistic, casual scenes as if captured by everyday content creators or influencers.\\n\\n#Instructions\\nAll your outputs must feel **natural, candid, and unpolished** - avoiding professional or overly staged looks. This means:\\n\\n- Everyday realism with authentic, relatable setting\\n- Amateur-quality iPhone photo/video style\\n- Slightly imperfect framing and lighting\\n- Candid poses and genuine expressions\\n- Visible imperfections (blemishes, messy hair, uneven skin)\\n- Real-world environments left as-is (clutter, busy backgrounds)\\n\\nWe need these videos to look natural and real. So in the prompts, have the Camera parameter always use keywords like these: unremarkable amateur iPhone photos, reddit image, snapchat video, casual iPhone selfie, slightly uneven framing, Authentic share, slightly blurry, Amateur quality phone photo.\\n\\nIf the dialogue is not provided by the user or you are explicitly asked to create it, generate a casual, conversational line under 200 characters, the dialogue should be connected between the scenes as if a person were speaking naturally to a friend while talking about the product. Avoid overly formal or sales-like language. The tone should feel authentic, spontaneous, and relatable, matching the UGC style. For example: \\"So TikTok made me buy this... and it turns out it's the best beach tennis racket in Sydney? And they donate their profits to charity! And you know what it's honestly really good!\\"\\n\\nFor the dialogue, use ... to indicate pauses, and avoid special characters like em dashes or hyphens\\n\\nIMPORTANT: Do NOT use double quotes in the image and video prompts.\\n\\n##Context\\nGenerate video generation instructions for AI image and video generation models based on the user's request, ensuring exact JSON format for both image and video prompts. Infer aspect ratios from vertical/horizontal context; default format to vertical if unspecified.\\n\\n**Scene count rule:** Read the user's requested number of video (an explicit integer) and output **exactly that many** scenes. If the user does not specify a number, default to **1 scene**. Never output more or fewer scenes than requested.\\n\\n- Always follow UGC-style casual realism principles listed above.\\n- Ensure diversity in gender, ethnicity, and hair color when applicable. Default to actors in 21 to 38 years old unless specified otherwise.\\n- Use provided scene list when available.\\n- Avoid double quotes in the image and video prompts\\n\\n#Output:\\n- Final output is a json object with a detail \\"scenes\\" array at the root level.\\n- The array must contain **exactly scene_count** objects, where scene_count is the user-specified number (or 1 if unspecified).\\n\\t\\n##Output Examples:\\n{\\n \\"aspect_ratio_video\\": \\"9:16\\",\\n \\"model\\": \\"veo3_fast\\",\\n\\t\\"scenes\\": [\\n\\t\\t{\\n\\t\\t\\t\\"video_prompt\\": {\\n\\t\\t\\t\\t\\t\\"dialogue\\": \\"So TikTok made me buy this... and it turns out it's the best tasting fruit beer in New York? And they donate their profits to charity! And you know what, it's honestly really good!\\",\\n\\t\\t\\t\\t\\t\\"action\\": \\"Character sits in the driver's seat of a parked car, holding the beer can close to the camera while speaking the dialogue with a casual, friendly tone\\",\\n\\t\\t\\t\\t\\t\\"camera\\": \\"Amateur-quality iPhone video, natural daylight coming through the side window, steady framing from a handheld position\\",\\n\\t\\t\\t\\t\\t\\"emotion\\": \\"Very happy and energetic, genuine enthusiasm and friendliness while talking about the beer\\"\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\n\\t\\t}\\n\\t]\\n}"
}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 2.2,
"position": [
1824,
-288
],
"id": "afb0fbee-84a5-4c55-847f-94218d5657ff",
"name": "Generate Video Prompt"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "bd8d7a2a-bd81-409e-819d-b39c4e26fa23",
"name": "image_url",
"value": "={{ $json.data.resultJson.parseJson().resultUrls.first() }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
1488,
80
],
"id": "938794fc-9d4a-4bf3-9c75-b3cd74839647",
"name": "Image Url"
},
{
"parameters": {
"url": "=https://api.kie.ai/api/v1/playground/recordInfo?taskId={{ $('Generate Image').item.json.data.taskId }}",
"authentication": "genericCredentialType",
"genericAuthType": "httpBearerAuth",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
1120,
336
],
"id": "f5b48d96-0f40-4f6b-a7ea-58a0572f4b8e",
"name": "Get Image Result",
"credentials": {
"httpBearerAuth": {
"id": "3l9Ostq7CAoKo0t7",
"name": "Kie AI"
}
}
},
{
"parameters": {
"method": "POST",
"url": "<https://api.kie.ai/api/v1/playground/createTask>",
"authentication": "genericCredentialType",
"genericAuthType": "httpBearerAuth",
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={\\n \\"model\\": \\"google/nano-banana-edit\\",\\n \\"input\\": {\\n \\"prompt\\": \\"action:{{ $json.image_prompt.action }}, camera:{{ $json.image_prompt.camera }}, style:{{ $json.image_prompt.style }}\\",\\n \\"image_urls\\": [\\n \\"{{ $('Inputs').item.json['Url Imagem Influencer'] }}\\",\\n \\"{{ $('Inputs').item.json['URL do Produto'] }}\\"\\n ]\\n }\\n}",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
1120,
48
],
"id": "e5da6e34-68a0-471a-bfa3-a55bbc2f7364",
"name": "Generate Image",
"credentials": {
"httpHeaderAuth": {
"id": "kgMgZwMC6DC9c3ZK",
"name": "Uazapi Auth account - 5511966655481"
},
"httpBearerAuth": {
"id": "3l9Ostq7CAoKo0t7",
"name": "Kie AI"
}
}
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "299c3ac6-178c-43b5-86b0-d509faab5575",
"name": "image_prompt",
"value": "={{ $json.output.image_prompt }}",
"type": "object"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
1120,
-96
],
"id": "31d2036b-9908-4fd6-b655-3c18c0473c30",
"name": "Image Prompt Fields"
},
{
"parameters": {
"promptType": "define",
"text": "=Create image and video prompts as guided by follow instructions.\\n\\n- Make sure that the reference image is depicted as ACCURATELY as possible in the resulting images, especially all text.\\n\\n- Description of the product image: \\n{{ $json.choices[0].message.content }}\\n- Count of videos to create: {{ $('Inputs').item.json['Quantidade de Vídeos'] }}\\n- The user's preferred aspect ratio: {{ $('Inputs').item.json['Aspect Ratio'] }}\\n- The user's preferred model: veo3_fast\\n- The user's preferred dialogue script: \\"{{ $('Inputs').item.json['Diálogo do Personagem'] }}\\"\\n- Do NOT put anything in the character's mouth, his mouth must be free to speak\\n- Description of character and environment: \\"{{ $('Inputs').item.json['Detalhes do Personagem'] }} Normal & casual looking people. Also I want diversity in the scenes from below: {{ $('Inputs').item.json.Ambiente }}\\"",
"hasOutputParser": true,
"options": {
"systemMessage": "=#SYSTEM PROMPT\\n\\n#Role\\nYou are a UGC (User-Generated Content) AI agent.\\n\\n#Objective\\nTake the reference image or the product in the reference image and place it into realistic, casual scenes as if captured by everyday content creators or influencers.\\n\\n#Instructions\\nAll your outputs must feel **natural, candid, and unpolished** - avoiding professional or overly staged looks. This means:\\n\\n- Everyday realism with authentic, relatable setting\\n- Amateur-quality iPhone photo/video style\\n- Slightly imperfect framing and lighting\\n- Candid poses and genuine expressions\\n- Visible imperfections (blemishes, messy hair, uneven skin)\\n- Real-world environments left as-is (clutter, busy backgrounds)\\n\\nWe need these videos to look natural and real. So in the prompts, have the Camera parameter always use keywords like these: unremarkable amateur iPhone photos, reddit image, snapchat video, casual iPhone selfie, slightly uneven framing, Authentic share, slightly blurry, Amateur quality phone photo.\\n\\nIf the dialogue is not provided by the user or you are explicitly asked to create it, generate a casual, conversational line under 200 characters, the dialogue should be connected between the scenes as if a person were speaking naturally to a friend while talking about the product. Avoid overly formal or sales-like language. The tone should feel authentic, spontaneous, and relatable, matching the UGC style. For example: \\"So TikTok made me buy this... and it turns out it's the best beach tennis racket in Sydney? And they donate their profits to charity! And you know what it's honestly really good!\\"\\n\\nFor the dialogue, use ... to indicate pauses, and avoid special characters like em dashes or hyphens\\n\\nIMPORTANT: Do NOT use double quotes in the image and video prompts.\\n\\n##Context\\nGenerate image generation instructions for AI image generation models based on the user's request, ensuring exact JSON format for both image and video prompts. Infer aspect ratios from vertical/horizontal context; default format to vertical if unspecified.\\n\\n**Scene count rule:** Read the user's requested number of video (an explicit integer) and output **exactly that many** scenes. If the user does not specify a number, default to **1 scene**. Never output more or fewer scenes than requested.\\n\\n- Always follow UGC-style casual realism principles listed above.\\n- Ensure diversity in gender, ethnicity, and hair color when applicable. Default to actors in 21 to 38 years old unless specified otherwise.\\n- Describe the character in details following instructions specified.\\n- Use provided scene list when available.\\n- Avoid double quotes in the image and video prompts\\n\\n#Output:\\n- Final output is a json object with an image detail at the root level.\\n\\t\\n##Output Examples:\\n{\\n\\t\\t\\"image_prompt\\": {\\n\\t\\t\\t\\t\\"action\\": \\"Character is sitting in the driver's seat, smiling openly while looking at the camera\\",\\n\\t\\t\\t\\t\\"character\\": \\"Mid-20s blonde female with long straight hair, wearing a plain light-colored t-shirt, natural facial features with minimal makeup\\",\\n\\t\\t\\t\\t\\"setting\\": \\"Inside a parked car during daytime, sunlight streaming in from the side window, visible back seats and partial view of the road outside\\",\\n\\t\\t\\t\\t\\"camera\\": \\"Casual iPhone selfie, slightly uneven framing, natural lighting with mild overexposure on one side of the face from direct sunlight\\",\\n\\t\\t\\t\\t\\"style\\": \\"Very casual and candid, unposed, authentic expression with friendly and cheerful emotion\\"\\n\\t\\t},\\n\\t\\"aspect_ratio_image\\": \\"16:9\\"\\n}"
}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 2.2,
"position": [
1040,
-288
],
"id": "d97f6e9c-b15f-43ce-9cb3-a9b67e8b75cc",
"name": "Generate Image Prompt"
},
{
"parameters": {
"method": "POST",
"url": "<https://api.openai.com/v1/chat/completions>",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "openAiApi",
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={\\n \\"model\\": \\"gpt-4.1-mini\\",\\n \\"messages\\": [\\n {\\n \\"role\\": \\"user\\",\\n \\"content\\": [\\n {\\n \\"type\\": \\"text\\",\\n \\"text\\": \\"Return the analysis from this image in YAML format with the following fields: brand_name: (Name of the brand shown in the image, if visible or inferable) color_scheme: - hex: (Hex code of each prominent color used) - name: (Descriptive name of the color) - font_style: (Describe the font family or style used: serif/sans-serif, bold/thin, etc.) - visual_description: (A full sentence or two summarizing what is seen in the image, ignoring the background). Only return the YAML. Do not explain or add any other comments.\\"\\n },\\n {\\n \\"type\\": \\"image_url\\",\\n \\"image_url\\": {\\n \\"url\\": \\"{{ $json['URL do Produto'] }}\\"\\n }\\n }\\n ]\\n }\\n ]\\n }",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
656,
-288
],
"id": "ef5c4853-c2e9-4fde-8f0a-428c13e7c137",
"name": "Analyze Image",
"credentials": {
"httpHeaderAuth": {
"id": "kgMgZwMC6DC9c3ZK",
"name": "Uazapi Auth account - 5511966655481"
},
"openAiApi": {
"id": "9UqSkeSS4wZvCS2i",
"name": "OpenAi account"
}
}
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "25a3f66e-b26b-494f-a9d4-1a3e7d0b6ec3",
"name": "Url Imagem Influencer",
"value": "={{ $json['Url Imagem Influencer'] }}",
"type": "string"
},
{
"id": "9f95c4d6-495e-40a9-9b62-f81f7f8d2ad4",
"name": "URL do Produto",
"value": "={{ $json['URL do Produto'] }}",
"type": "string"
},
{
"id": "fd5d5210-88ba-478b-8377-93bfa737aca6",
"name": "Quantidade de Vídeos",
"value": "={{ $json['Quantidade de Vídeos'] }}",
"type": "string"
},
{
"id": "364d0a6a-23cb-4f8a-928b-67b86565c278",
"name": "Diálogo do Personagem",
"value": "={{ $json['Diálogo do Personagem'] }}",
"type": "string"
},
{
"id": "f8442e50-b31f-49c0-a2e6-84c67a175f63",
"name": "Aspect Ratio",
"value": "={{ $json['Aspect Ratio'] }}",
"type": "string"
},
{
"id": "103ce00d-97ff-4a02-ba43-7d8e892c4c63",
"name": "Detalhes do Personagem",
"value": "={{ $json['Detalhes do Personagem'] }}",
"type": "string"
},
{
"id": "3ed8d8d6-d75e-4921-9784-e41e8bd292ef",
"name": "Ambiente",
"value": "={{ $json.Ambiente }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
400,
-288
],
"id": "1bc534cf-d7c7-4a79-a2e9-8f82bab24947",
"name": "Inputs"
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "77de6076-7430-4c96-ba46-cb23fbb3bf87",
"leftValue": "={{ $json.data.state }}",
"rightValue": "success",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.2,
"position": [
1120,
496
],
"id": "018d5dfe-7b71-4cc1-bf43-a90ded74849b",
"name": "If"
},
{
"parameters": {
"amount": 30
},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
1120,
192
],
"id": "46c55ad1-a1ab-4b1b-93ca-7aa7b3f162c3",
"name": "Wait",
"webhookId": "9caf5e5e-4800-4656-a9f3-1f0f1fe15c6b"
},
{
"parameters": {
"jsonSchemaExample": "{\\n \\"image_prompt\\": {\\n \\"action\\": \\"\\",\\n \\"character\\": \\"\\",\\n \\"setting\\": \\"\\",\\n \\"camera\\": \\"\\",\\n \\"style\\": \\"\\"\\n },\\n \\"aspect_ratio_image\\": \\"\\"\\n}"
},
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"typeVersion": 1.3,
"position": [
1248,
-416
],
"id": "842dc24d-63e1-4734-ae21-67470e229fc7",
"name": "Structured Output Parser"
},
{
"parameters": {
"model": {
"__rl": true,
"value": "gpt-4.1-mini",
"mode": "list",
"cachedResultName": "gpt-4.1-mini"
},
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"typeVersion": 1.2,
"position": [
992,
-416
],
"id": "65b3ac7d-6ec9-4363-af2e-fbf4385c7867",
"name": "OpenAI Chat Model",
"credentials": {
"openAiApi": {
"id": "9UqSkeSS4wZvCS2i",
"name": "OpenAi account"
}
}
},
{
"parameters": {
"formTitle": "Informações do Vídeo",
"formFields": {
"values": [
{
"fieldLabel": "Url Imagem Influencer",
"requiredField": true
},
{
"fieldLabel": "URL do Produto",
"requiredField": true
},
{
"fieldLabel": "Quantidade de Vídeos",
"fieldType": "dropdown",
"fieldOptions": {
"values": [
{
"option": "1"
},
{
"option": "2"
},
{
"option": "3"
}
]
}
},
{
"fieldLabel": "Diálogo do Personagem",
"fieldType": "textarea",
"requiredField": true
},
{
"fieldLabel": "Aspect Ratio",
"fieldType": "dropdown",
"fieldOptions": {
"values": [
{
"option": "Portrait"
},
{
"option": "Landscape"
}
]
},
"requiredField": true
},
{
"fieldLabel": "Detalhes do Personagem",
"fieldType": "textarea",
"requiredField": true
},
{
"fieldLabel": "Ambiente",
"fieldType": "dropdown",
"fieldOptions": {
"values": [
{
"option": "Podcast - Modern podcast studio with microphone, monitors, acoustic panels, small plant, warm lighting."
},
{
"option": "Car - Parked car during daytime with sunlight streaming through the side window, visible back seats and partial road outside."
},
{
"option": "Everyday mirror selfie - Small bathroom with slightly dirty mirror, water spots, cluttered counter, harsh overhead lighting."
},
{
"option": "Walking - Busy city street with natural daylight, pedestrians, and urban background."
},
{
"option": "Wearing shades - Urban street in high midday sun with strong shadows, storefronts, and passing traffic."
},
{
"option": "Beach - Sandy shoreline with ocean waves in background, bright outdoor light."
},
{
"option": "Street interview - Outdoor urban setting with pedestrians and buildings blurred in background."
},
{
"option": "Coffee Shop - Cozy café with exposed brick walls, wooden tables, steaming espresso machine, soft jazz background music, warm pendant lighting, scattered newspapers, and gentle chatter."
},
{
"option": "Bedroom - Personal bedroom with unmade bed, morning sunlight filtering through curtains, nightstand with lamp, scattered clothes, family photos on dresser, soft carpet underfoot."
},
{
"option": "Kitchen - Busy home kitchen with granite countertops, stainless steel appliances, cooking utensils hanging, fresh herbs on windowsill, warm under-cabinet lighting, slight cooking aromas."
},
{
"option": "Living Room - Comfortable living space with plush sofa, coffee table with magazines, large TV screen, throw pillows, soft area rug, family photos, warm lamp lighting."
},
{
"option": "Home Office - Organized workspace with computer monitor, desk lamp, bookshelf, ergonomic chair, scattered papers, coffee mug, motivational poster, natural window light."
},
{
"option": "Library - Quiet study space with towering bookshelves, reading tables, soft overhead lighting, hushed whispers, scattered academic materials, comfortable reading chairs."
},
{
"option": "Gym - Active fitness center with weight equipment, mirrors, rubber flooring, motivational music, fluorescent lighting, water bottles, towels, energetic atmosphere."
},
{
"option": "Restaurant - Upscale dining room with white tablecloths, wine glasses, ambient candlelight, soft background music, waiters moving quietly, elegant décor."
},
{
"option": "Garden - Lush backyard garden with blooming flowers, green lawn, garden tools, wooden fence, natural sunlight, chirping birds, fresh morning dew."
},
{
"option": "Park Bench - Public park setting with tree shade, walking paths, distant playground sounds, pigeons nearby, scattered autumn leaves, peaceful atmosphere."
},
{
"option": "Rooftop - Urban rooftop terrace with city skyline view, potted plants, outdoor furniture, string lights, gentle breeze, golden hour lighting."
},
{
"option": "Hiking Trail - Forest pathway with tall trees, dappled sunlight, wooden trail markers, distant mountain views, fresh pine scent, birds chirping overhead."
},
{
"option": "Farmer's Market - Outdoor market with colorful produce stands, canvas tents, bustling crowds, fresh vegetables, friendly vendors, natural morning light."
},
{
"option": "Picnic Area - Grassy meadow with picnic table, checkered blanket, basket, trees providing shade, gentle breeze, distant laughter, warm afternoon sun."
},
{
"option": "Conference Room - Corporate meeting space with long table, ergonomic chairs, whiteboard, projector screen, water glasses, notepads, fluorescent lighting."
},
{
"option": "Medical Office - Clean examination room with medical equipment, examination table, diplomas on wall, bright clinical lighting, sanitizer dispenser, professional atmosphere."
},
{
"option": "Art Studio - Creative workspace with easels, paint brushes, canvases, natural north-facing light, colorful paint splatters, inspiring artwork on walls."
},
{
"option": "Classroom - Educational setting with student desks, whiteboard, educational posters, overhead projector, scattered textbooks, morning sunlight through windows."
},
{
"option": "Workshop - Hands-on workspace with tools hanging on pegboard, workbench, scattered hardware, task lighting, sawdust, projects in various stages of completion."
},
{
"option": "Train - Moving passenger train with window views of countryside, comfortable seating, gentle rocking motion, distant conversations, rhythmic track sounds."
},
{
"option": "Airport - Busy terminal with departure boards, rolling luggage, announcements, travelers waiting, large windows, fluorescent lighting, coffee shops nearby."
},
{
"option": "Subway Platform - Underground station with tiled walls, waiting passengers, distant train rumble, overhead lighting, digital arrival boards, urban atmosphere."
},
{
"option": "Bus Stop - City bus stop with covered bench, route schedules posted, morning commuters, street traffic, urban background, natural daylight."
},
{
"option": "Bookstore - Independent bookshop with towering shelves, reading nooks, warm lighting, coffee aroma, soft background music, literary atmosphere."
},
{
"option": "Late Night Diner - 24-hour eatery with vinyl booths, neon signs, fluorescent lighting, coffee brewing, quiet conversations, nostalgic jukebox music."
},
{
"option": "Hotel Lobby - Elegant entrance with marble floors, comfortable seating areas, soft piano music, fresh flowers, warm hospitality lighting, traveling guests."
},
{
"option": "Coworking Space - Modern shared workspace with open layout, standing desks, plants, natural light, collaboration areas, creative energy, soft productivity buzz."
}
]
},
"requiredField": true
}
]
},
"options": {}
},
"type": "n8n-nodes-base.formTrigger",
"typeVersion": 2.3,
"position": [
144,
-288
],
"id": "9ff47acf-1249-4eab-8774-0dd7499adb8e",
"name": "On form submission",
"webhookId": "314f902e-75c9-4054-8225-a17ddc05b3f2"
},
{
"parameters": {
"url": "<https://api.kie.ai/api/v1/veo/record-info>",
"authentication": "genericCredentialType",
"genericAuthType": "httpBearerAuth",
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "taskId",
"value": "={{ $json.data.taskId }}"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
1888,
288
],
"id": "6d42dd50-0d34-423a-874f-35671edb75de",
"name": "HTTP Request",
"credentials": {
"httpBearerAuth": {
"id": "3l9Ostq7CAoKo0t7",
"name": "Kie AI"
}
}
},
{
"parameters": {
"fieldsToAggregate": {
"fieldToAggregate": [
{
"fieldToAggregate": "data.response.resultUrls[0]"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.aggregate",
"typeVersion": 1,
"position": [
2272,
48
],
"id": "070bf6c1-6156-47f8-ae1c-e4bb960ccc8a",
"name": "Aggregate"
},
{
"parameters": {
"amount": 30
},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
2672,
-112
],
"id": "7bb18655-79f8-4a3f-9142-946906b2105b",
"name": "Wait2",
"webhookId": "45a2c25e-1706-4134-a262-e8d33f28ba6b"
},
{
"parameters": {
"method": "POST",
"url": "<https://queue.fal.run/fal-ai/ffmpeg-api/merge-videos>",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={\\n \\"video_urls\\": [{{ $json.resultUrls[0].map(url => `\\"${url}\\"`) }}]\\n}",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
2672,
-272
],
"id": "e9e7e20b-b0de-4247-a5cc-12257c6cfb15",
"name": "Merge Videos",
"credentials": {
"httpHeaderAuth": {
"id": "yUoSIpVN78MDAu36",
"name": "Fal Header Auth account"
}
}
},
{
"parameters": {
"url": "=https://queue.fal.run/fal-ai/ffmpeg-api/requests/{{ $json.request_id }}",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
2672,
32
],
"id": "2664d6f4-0961-469a-b30f-6b21597f6299",
"name": "Get Final Video",
"credentials": {
"httpBearerAuth": {
"id": "qQXEwHoOMI42O3oS",
"name": "Tavily Bearer Auth account"
},
"httpHeaderAuth": {
"id": "yUoSIpVN78MDAu36",
"name": "Fal Header Auth account"
}
}
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "99b3a803-f6c1-43fb-abbf-6553cb69e637",
"leftValue": "={{ $json.video.url }}",
"rightValue": "",
"operator": {
"type": "string",
"operation": "notEmpty",
"singleValue": true
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.2,
"position": [
2672,
208
],
"id": "88c52b1c-f9d5-467e-8fd8-f180dbf45951",
"name": "If1"
},
{
"parameters": {
"url": "={{ $json.video.url }}",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
3056,
192
],
"id": "68542a75-02d2-41aa-8e7a-a0a17d367ebe",
"name": "Download Video"
},
{
"parameters": {
"content": "## Gerar Imagem\\n",
"height": 1360,
"width": 448,
"color": 4
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
928,
-560
],
"id": "2805a832-857d-4b3a-b9e7-b2bbbc2eb27f",
"name": "Sticky Note"
},
{
"parameters": {
"content": "## Gerar Vídeo",
"height": 1360,
"width": 464,
"color": 5
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
1712,
-560
],
"id": "06394bc6-04f4-4d05-b196-5e39915b575f",
"name": "Sticky Note1"
},
{
"parameters": {
"content": "## Merge Vídeos",
"height": 1360,
"width": 464,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
2496,
-560
],
"id": "15d8d95c-c859-4f1a-bb5e-f546fb250d4e",
"name": "Sticky Note2"
}
],
"connections": {
"Wait1": {
"main": [
[
{
"node": "HTTP Request",
"type": "main",
"index": 0
}
]
]
},
"Generate Video": {
"main": [
[
{
"node": "Wait1",
"type": "main",
"index": 0
}
]
]
},
"Think1": {
"ai_tool": [
[
{
"node": "Generate Image Prompt",
"type": "ai_tool",
"index": 0
}
]
]
},
"Think": {
"ai_tool": [
[
{
"node": "Generate Video Prompt",
"type": "ai_tool",
"index": 0
}
]
]
},
"Split Out": {
"main": [
[
{
"node": "Generate Video",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser1": {
"ai_outputParser": [
[
{
"node": "Generate Video Prompt",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"OpenAI Chat Model1": {
"ai_languageModel": [
[
{
"node": "Generate Video Prompt",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Generate Video Prompt": {
"main": [
[
{
"node": "Split Out",
"type": "main",
"index": 0
}
]
]
},
"Image Url": {
"main": [
[
{
"node": "Generate Video Prompt",
"type": "main",
"index": 0
}
]
]
},
"Get Image Result": {
"main": [
[
{
"node": "If",
"type": "main",
"index": 0
}
]
]
},
"Generate Image": {
"main": [
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"Image Prompt Fields": {
"main": [
[
{
"node": "Generate Image",
"type": "main",
"index": 0
}
]
]
},
"Generate Image Prompt": {
"main": [
[
{
"node": "Image Prompt Fields",
"type": "main",
"index": 0
}
]
]
},
"Analyze Image": {
"main": [
[
{
"node": "Generate Image Prompt",
"type": "main",
"index": 0
}
]
]
},
"Inputs": {
"main": [
[
{
"node": "Analyze Image",
"type": "main",
"index": 0
}
]
]
},
"If": {
"main": [
[
{
"node": "Image Url",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"Wait": {
"main": [
[
{
"node": "Get Image Result",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "Generate Image Prompt",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "Generate Image Prompt",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"On form submission": {
"main": [
[
{
"node": "Inputs",
"type": "main",
"index": 0
}
]
]
},
"HTTP Request": {
"main": [
[
{
"node": "Aggregate",
"type": "main",
"index": 0
}
]
]
},
"Aggregate": {
"main": [
[
{
"node": "Merge Videos",
"type": "main",
"index": 0
}
]
]
},
"Wait2": {
"main": [
[
{
"node": "Get Final Video",
"type": "main",
"index": 0
}
]
]
},
"Merge Videos": {
"main": [
[
{
"node": "Wait2",
"type": "main",
"index": 0
}
]
]
},
"Get Final Video": {
"main": [
[
{
"node": "If1",
"type": "main",
"index": 0
}
]
]
},
"If1": {
"main": [
[
{
"node": "Download Video",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait2",
"type": "main",
"index": 0
}
]
]
}
},
"pinData": {},
"meta": {
"templateCredsSetupCompleted": true,
"instanceId": "8fd950fde1d0c8a982e2646b0a5c997b58a25137131408902febf7df066da10f"
}
}