- Seção: Assistente de código
Descrição
_(sem descrição)_
Recursos baixados
50-ai-ugc-ad.json— NanoBanana 2 - UGC (6).json (ok (23426 bytes))
{ "name": "NanoBanana 2 - UGC", "nodes": [ { "parameters": { "formTitle": "Gerador de Anúncios UGC", "formDescription": "Gera anúncios UGC a partir da descrição do usuário e de uma foto", "formFields": { "values": [ { "fieldLabel": "Descrição da imagem" }, { "fieldLabel": "Imagem", "fieldType": "file", "acceptFileTypes": ".jpg, .png" } ] }, "options": {} }, "type": "n8n-nodes-base.formTrigger", "typeVersion": 2.3, "position": [ 96, ], "id": "fd1ae3d7-3f6d-4c7a-9324-a34d54207dae", "name": "On form submission", "webhookId": "52e0abd7-0e7b-427d-80d1-ba9f3558f456" }, { "parameters": { "inputDataFieldName": "Image", "driveId": { "__rl": true, "value": "My Drive", "mode": "list", "cachedResultName": "My Drive", "cachedResultUrl": "https://drive.google.com/drive/my-drive" }, "folderId": { "__rl": true, "value": "1MxaX7NrmmTHQtHLLEw3JqXqjMbNKU2lx", "mode": "list", "cachedResultName": "image urls", "cachedResultUrl": "https://drive.google.com/drive/folders/1MxaX7NrmmTHQtHLLEw3JqXqjMbNKU2lx" }, "options": {} }, "type": "n8n-nodes-base.googleDrive", "typeVersion": 3, "position": [ 272, ], "id": "87f3e51c-2851-4c2a-88e5-dc7ec3391a78", "name": "Upload file", "credentials": { "googleDriveOAuth2Api": { "id": "tTKNlY1ktx7UntI0", "name": "Google Drive account" } } }, { "parameters": { "resource": "image", "operation": "analyze", "modelId": { "__rl": true, "value": "chatgpt-4o-latest", "mode": "list", "cachedResultName": "CHATGPT-4O-LATEST" },
"text": "=Analise a imagem fornecida e determine se ela representa principalmente um produto, um personagem ou AMBOS.\n\n- Se a imagem for de um produto, retorne a análise em formato YAML com os seguintes campos:\n\nbrand_name: (Nome da marca mostrada na imagem, se visível ou inferível)\ncolor_scheme:\n - hex: (Código hexadecimal de cada cor proeminente usada)\n name: (Nome descritivo da cor)\nfont_style: (Descreva a família ou estilo da fonte usada: serifada/sans-serif, negrito/fina, etc.)\nvisual_description: (Uma ou duas frases completas resumindo o que é visto na imagem, ignorando o fundo)\n\n- Se a imagem for de um personagem, retorne a análise em formato YAML com os seguintes campos:\n\ncharacter_name: (Nome do personagem, se visível ou inferível)\ncolor_scheme:\n - hex: (Código hexadecimal de cada cor proeminente usada no personagem)\n name: (Nome descritivo da cor)\noutfit_style: (Descrição do estilo de vestuário, acessórios ou características notáveis)\nvisual_description: (Uma ou duas frases completas resumindo como o personagem se parece, ignorando o fundo)\n\nRetorne apenas o YAML. Não explique nem adicione outros comentários.\n\n\n- Se for AMBOS, retorne ambas as descrições conforme orientado acima em formato YAML\n", "imageUrls": "={{ $json.webContentLink }}", "simplify": false, "options": {} }, "type": "@n8n/n8n-nodes-langchain.openAi", "typeVersion": 1.8, "position": [ 432, ], "id": "44a31fee-0de4-4ffe-a668-a9971cdba567", "name": "Describe Img", "credentials": { "openAiApi": { "id": "zE5O89L0JjnRwfPU", "name": "OpenAi account" } } }, { "parameters": { "method": "POST", "url": "https://queue.fal.run/fal-ai/nano-banana-pro/edit", "authentication": "genericCredentialType", "genericAuthType": "httpHeaderAuth", "sendBody": true, "specifyBody": "json", "jsonBody": "={\n \"prompt\": \"{{ $json.output.image_prompt.replace(/\\\"/g, '\\\\\\\"').replace(/\\n/g, '\\\\n') }}\",\n \"image_urls\": [\n \"{{ $('Upload file').item.json.webContentLink }}\"\n ],\n \"resolution\": \"1K\",\n \"aspect_ratio\": \"9:16\",\n \"output_format\": \"png\"\n }", "options": {} }, "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "position": [ 336, ], "id": "b562af1a-54de-4704-bdfa-15d2857558b4", "name": "Create Image", "credentials": { "httpHeaderAuth": { "id": "RTd7n9jC66iTTXnS", "name": "Header Auth account" }, "httpCustomAuth": { "id": "GCBAsv94tlQyuuNq", "name": "Custom Auth account" } } }, { "parameters": { "model": { "__rl": true, "mode": "list", "value": "gpt-4.1-mini" }, "options": {} }, "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", "typeVersion": 1.2, "position": [ -64, ],
"id": "d8a4798c-b047-4b91-890e-4bc5c3cc94a3", "name": "OpenAI Chat Model", "credentials": { "openAiApi": { "id": "zE5O89L0JjnRwfPU", "name": "OpenAi account" } } }, { "parameters": { "amount": 40 }, "type": "n8n-nodes-base.wait", "typeVersion": 1.1, "position": [ 480, ], "id": "ad8162c8-aed7-4ea8-b9ad-4ae9a15d0347", "name": "Wait 3", "webhookId": "945cac64-0916-4f9c-aee7-f3a604eddda3" }, { "parameters": { "url": "={{ $('Create Image').item.json.response_url }}", "authentication": "genericCredentialType", "genericAuthType": "httpHeaderAuth", "options": {} }, "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "position": [ 624, ], "id": "d5390379-63b5-41fc-859f-2c790409affc", "name": "Get Image", "credentials": { "httpHeaderAuth": { "id": "RTd7n9jC66iTTXnS", "name": "Header Auth account" } }, "onError": "continueRegularOutput" }, { "parameters": { "model": { "__rl": true, "value": "gpt-4.1", "mode": "list", "cachedResultName": "gpt-4.1" }, "options": {} }, "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", "typeVersion": 1.2, "position": [ -256, 1056 ], "id": "5a2530f1-7f38-4924-a94d-a414fbb688f2", "name": "GPT", "credentials": { "openAiApi": { "id": "zE5O89L0JjnRwfPU", "name": "OpenAi account" } } }, { "parameters": { "jsonSchemaExample": "{\n \"video_prompt\": \"string\"\n}\n", "autoFix": true }, "type": "@n8n/n8n-nodes-langchain.outputParserStructured", "typeVersion": 1.3, "position": [ -80, 1024 ], "id": "e3fce802-57f9-4333-99a9-dba3dca75c6e", "name": "Structured Output 1" }, { "parameters": { "jsonSchemaExample": "{\n\t\"image_prompt\": \"string\"\n}", "autoFix": true }, "type": "@n8n/n8n-nodes-langchain.outputParserStructured", "typeVersion": 1.3, "position": [ 112, ], "id": "b78f76cd-537e-487f-b1b2-761887978d66", "name": "Structured Output Parser" }, { "parameters": { "promptType": "define", "text": "=Create a UGC-style video prompt from the reference image and the user description.\n\nUser description (may be empty):\n{{ $('On form submission').item.json['Image description'] }}\n\nReference image analysis (use to stay faithful to what’s visible):\n{{ $('Describe Img').first().json.choices[0].message.content }}\n\nRules\n- Keep the look casual and realistic; avoid studio language.\n- Default model: veo3_fast unless stated otherwise.\n- Return only a single JSON object: video_prompt.\n", "hasOutputParser": true, "options": {
"systemMessage": "=PAPEL: Construtor de Prompt de Vídeo UGC\n\nObjetivo\n- A partir de uma imagem de referência e notas curtas do usuário, escrever um prompt de vídeo estilo UGC natural, adequado para Veo3/Veo3_fast.\n\nPrincípios (aparência UGC)\n- Vibe de vídeo de celular: mão livre, leve movimento, enquadramento fora do centro, luz interna mista, grão suave.\n- Vida real acima do polimento: pequenos defeitos, espaços habitados, sensação ambiente.\n- Manter qualquer texto de embalagem visível com precisão. Nunca inventar alegações, selos ou números.\n- Não nomear personagens com direitos autorais.\n- Som conversacional, não linguagem publicitária.\n\nContrato de Saída\n- Retornar APENAS um único objeto JSON:\n - \"video_prompt\": uma frase simples/parágrafo curto (≤ 130 palavras) descrevendo sujeito, ação, humor, cenário, 2–3 dicas de câmera e notas de cor. Manter fiel à imagem e às notas do usuário.\n\n- Sem cercas de código, sem chaves extras, sem arrays, sem títulos.\n- Não fabricar texto de produto; mencionar precisão apenas se relevante.\n- Manter uma única cena implícita pelo objeto único.\n\nGuarda-corpos de enquadramento:\n- Manter o sujeito totalmente dentro do quadro o tempo todo (sem cortes na testa ou queixo).\n- Manter composição centralizada; evitar closes extremos.\n- Se o prompt implicar movimento, manter o enquadramento travado no rosto e no produto.\n\n---\n\nExemplos Bons\n1)\n{\n \"video_prompt\": \"jovem adulto desembala casualmente um pequeno gadget em uma ilha de cozinha; sorri, levanta para a câmera, então aponta para o rótulo visível na caixa; cenário: cozinha de apartamento aconchegante com canecas e escorredor de louça; humor: amigável e sem roteiro; câmera: enquadramento mão livre, composição fora do centro, exposição automática, grão suave; notas de cor: madeira quente, brancos suaves, rótulo do produto permanece claro e preciso\",\n \"model\": \"veo3_fast\"\n}\n\n2)\n{\n \"video_prompt\": \"comutador sai de uma estação, ajusta fones sem fio, olha para o celular, então o coloca no bolso e caminha em direção à luz; cenário: calçada movimentada com reflexos de vidro; humor: no momento; câmera: enquadramento mão livre, leve desfoque de movimento, luz natural externa; notas de cor: fones carvão e detalhes prateados se destacam; manter o texto do logotipo exatamente como visto na caixa\",\n \"model\": \"veo3_fast\"\n}\n\n---\n\nExemplos Ruins\nA)\n{\n \"scenes\": [{ \"video_prompt\": \"...\"}],\n \"duration\": 8\n}\n→ Errado: usa um array e chaves extras; viola o contrato de objeto único.\n\nB)\n{\n \"video_prompt\": \"iluminação de estúdio cinematográfica com fundo perfeito; a garrafa alega ‘melhora clinicamente comprovada de 300%’\",\n \"aspect_ratio_video\": \"9:16\",\n \"model\": \"veo3\"\n}\n→ Errado: tom de estúdio e alegação fabricada.\n\nC)\nFaça um vídeo de celular casual de...\n→ Errado: não é um objeto JSON.\n" } }, "type": "@n8n/n8n-nodes-langchain.agent", "typeVersion": 2, "position": [ -208, ], "id": "546f53aa-1b23-49d4-936f-be3b709fa49a", "name": "Video Prompt Generator" }, { "parameters": { "content": "# Use Imagem Enviada & descrição", "height": 288, "width": 656, "color": 4 }, "type": "n8n-nodes-base.stickyNote", "typeVersion": 1,
"position": [ 0, -16 ], "id": "e02f4169-1497-4d71-b5d0-782bbf65d43d", "name": "Sticky Note" }, { "parameters": { "content": "# Create NEW Image with Nano Banana 2", "height": 448, "width": 880, "color": 5 }, "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ -128, ], "id": "5bd69bcf-fefe-431c-96d3-0a93f3f361bd", "name": "Sticky Note1" }, { "parameters": { "content": "# Create UGC Video with VEO 3.1", "height": 432, "width": 1232, "color": 6 }, "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ -288, ], "id": "7f9f053c-7d5a-4c32-9f7e-2801db70686f", "name": "Sticky Note2" }, { "parameters": { "conditions": { "options": { "caseSensitive": true, "leftValue": "", "typeValidation": "strict", "version": 2 }, "conditions": [ { "id": "242843af-2af4-4602-864d-cf14b7e8919e", "leftValue": "={{ $json.status }}", "rightValue": "COMPLETED", "operator": { "type": "string", "operation": "equals", "name": "filter.operator.equals" } } ], "combinator": "and" }, "options": {} }, "type": "n8n-nodes-base.if", "typeVersion": 2.2, "position": [ 640, ], "id": "314c338a-520b-41f0-bbe4-65bd31d0369b", "name": "If" }, { "parameters": { "url": "=https://queue.fal.run/fal-ai/veo3.1/requests/{{ $json.request_id }}/status", "authentication": "genericCredentialType", "genericAuthType": "httpHeaderAuth", "options": {} }, "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "position": [ 480, ], "id": "1ed79b73-00a8-4296-958c-f2e2fa5bdec9", "name": "Get Video Status", "credentials": { "httpHeaderAuth": { "id": "RTd7n9jC66iTTXnS", "name": "Header Auth account" } } }, { "parameters": { "amount": 20 }, "type": "n8n-nodes-base.wait", "typeVersion": 1.1, "position": [ 320, ], "id": "e5e84e78-fdc5-461b-b7fe-77bd949b7b34", "name": "Wait1", "webhookId": "3867eb64-0376-44d9-9714-0b4ceaab4927" }, { "parameters": { "url": "=https://queue.fal.run/fal-ai/veo3.1/requests/{{ $json.request_id }}", "authentication": "genericCredentialType", "genericAuthType": "httpHeaderAuth", "options": {} }, "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "position": [ 816, ], "id": "54753da9-55c6-479c-ae77-741e4620af64", "name": "Get Video", "credentials": { "httpHeaderAuth": { "id": "RTd7n9jC66iTTXnS",
"name": "Header Auth account" } } }, { "parameters": { "promptType": "define", "text": "=Your task: Create an image prompt as guided by your system guidelines.\n\nMake sure that the reference image is depicted as ACCURATELY as possible in the resulting images, especially all text.\n\n\nThese are the user's description:\n{{ $('On form submission').item.json['Image description'] }}\n\n\nDescription of the reference image:\n{{ $('Describe Img').first().json.choices[0].message.content }}\n\n", "hasOutputParser": true, "options": {
"systemMessage": "=PAPEL: Construtor de Prompts de Imagem UGC\n\n Objetivo: Dado um URL de imagem (frequentemente uma imagem de produto ou referência), escrever uma descrição curta e natural que possa orientar um gerador de imagem/vídeo.\n\n Padrões:\n - Se as instruções forem vagas, posicione o produto com o personagem em um ambiente cotidiano que faça sentido para o item.\n - Se o estilo ou cenário não for especificado, assuma realismo UGC casual.\n\n Princípios de Realismo UGC:\n - Pareça não ensaiado e vivo.\n - Vibe de foto de celular: enquadramento fora do centro, leve desfoque de movimento, luz interna mista, leve granulação.\n - Abrace imperfeições: rugas, fios de cabelo soltos, textura da pele, fundos bagunçados.\n - Mantenha qualquer texto visível na embalagem exatamente como mostrado. Nunca invente alegações, números ou selos.\n\n Indicações de Câmera (use pelo menos 2–3 cada vez):\n - \"foto de celular\", \"enquadramento na mão\", \"composição fora do centro\",\n \"luz interna natural\", \"sombras suaves\", \"leve desfoque de movimento\",\n \"exposição automática\", \"aparência não polida\", \"granulação leve\"\n\n Segurança / Escopo:\n - Não nomeie personagens com direitos autorais.\n - Você não escreve diálogos ou roteiros; apenas retorna um prompt de imagem.\n\n Contrato de Saída:\n - Retorne apenas um objeto JSON:\n - image_prompt: uma string (≤120 palavras) em prosa simples que cubra\n sujeito, ação, humor, cenário, estilo/câmera, notas de cor e notas de precisão de texto.\n\n Padrões de Diversidade:\n - Quando pessoas não forem especificadas, varie gênero e etnia naturalmente.\n - Faixa etária padrão: 21–38.\n - Prefira espaços do mundo real (casa, rua, loja, academia, escritório) a menos que instruído o contrário.\n\n --- Exemplos ---\n\n Bom exemplo 1:\n { \"image_prompt\": \"um jovem adulto segurando casualmente um tubo de skincare perto de um espelho de banheiro; ação: aplica uma pequena quantidade no dorso da mão; humor: manhã tranquila; cenário: banheiro de apartamento pequeno com toalha na barra e copo de escova de dente; estilo/câmera: foto de celular, enquadramento na mão, composição fora do centro, luz natural de janela, leve desfoque de movimento, granulação leve; cores: brancos suaves e rótulo menta; precisão de texto: mantenha cada palavra no tubo exatamente como visível, sem alegações adicionais\"}\n\n Bom exemplo 2:\n { \"image_prompt\": \"comutador usando fones sem fio enquanto abre o estojo de carregamento; ação: sai da saída do metrô; humor: no momento; cenário: calçada movimentada com transeuntes e reflexos de vidro; estilo/câmera: foto de celular não polida, exposição automática, luz do dia mista e brilho de neon, leve sujeira na lente; cores: produto carvão e prata se destaca; precisão de texto: preserve o logotipo e o nome do modelo precisamente\"}\n\n Exemplo ruim (evitar):\n - Fabricar certificações ou números na embalagem.\n - Iluminação perfeita de estúdio ou linguagem publicitária como \"masterpiece cinematográfico\".\n - Retornar qualquer coisa além das duas chaves obrigatórias.\n\n Checklist pré-envio:\n - Tom natural, na mão? ✔\n - Pelo menos duas indicações de câmera incluídas? ✔\n - Texto do produto preservado exatamente? ✔\n - Apenas image_prompt retornado? ✔\n\n\n" } }, "type": "@n8n/n8n-nodes-langchain.agent", "typeVersion": 2,
"position": [ 0, ], "id": "c44c9d64-3c62-4a47-a8ef-3eb02853633c", "name": "Image Prompt Generator" }, { "parameters": { "method": "POST", "url": "https://queue.fal.run/fal-ai/veo3.1/fast/image-to-video", "authentication": "genericCredentialType", "genericAuthType": "httpHeaderAuth", "sendHeaders": true, "headerParameters": { "parameters": [ { "name": "Content-Type", "value": "application/json" } ] }, "sendBody": true, "contentType": "raw", "rawContentType": "application/json", "body": "={\n \"prompt\": {{ JSON.stringify($json.output.video_prompt) }},\n \"image_url\": \"{{ $('Get Image').first().json.images[0].url }}\"\n \n}\n", "options": { "batching": { "batch": { "batchSize": 1, "batchInterval": 3000 } } } }, "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "position": [ 144, ], "id": "3ef1a04c-d68b-4c9c-9bf0-84126d81abff", "name": "Create Video", "credentials": { "httpHeaderAuth": { "id": "RTd7n9jC66iTTXnS", "name": "Header Auth account" } } } ], "pinData": {}, "connections": { "On form submission": { "main": [ [ { "node": "Upload file", "type": "main", "index": 0 } ] ] }, "Upload file": { "main": [ [ { "node": "Describe Img", "type": "main", "index": 0 } ] ] }, "Describe Img": { "main": [ [ { "node": "Image Prompt Generator", "type": "main", "index": 0 } ] ] }, "Create Image": { "main": [ [ { "node": "Wait 3", "type": "main", "index": 0 } ] ] }, "OpenAI Chat Model": { "ai_languageModel": [ [ { "node": "Structured Output Parser", "type": "ai_languageModel", "index": 0 }, { "node": "Image Prompt Generator", "type": "ai_languageModel", "index": 0 } ] ] }, "Wait 3": { "main": [ [ { "node": "Get Image", "type": "main", "index": 0 } ] ] }, "Get Image": { "main": [ [ { "node": "Video Prompt Generator", "type": "main", "index": 0 } ] ] }, "GPT": { "ai_languageModel": [ [ { "node": "Video Prompt Generator", "type": "ai_languageModel", "index": 0 }, { "node": "Structured Output 1", "type": "ai_languageModel", "index": 0
} ] ] }, "Structured Output 1": { "ai_outputParser": [ [ { "node": "Video Prompt Generator", "type": "ai_outputParser", "index": 0 } ] ] }, "Structured Output Parser": { "ai_outputParser": [ [ { "node": "Image Prompt Generator", "type": "ai_outputParser", "index": 0 } ] ] }, "Video Prompt Generator": { "main": [ [ { "node": "Create Video", "type": "main", "index": 0 } ] ] }, "If": { "main": [ [ { "node": "Get Video", "type": "main", "index": 0 } ], [ { "node": "Wait1", "type": "main", "index": 0 } ] ] }, "Get Video Status": { "main": [ [ { "node": "If", "type": "main", "index": 0 } ] ] }, "Wait1": { "main": [ [ { "node": "Get Video Status", "type": "main", "index": 0 } ] ] }, "Get Video": { "main": [ [] ] }, "Image Prompt Generator": { "main": [ [ { "node": "Create Image", "type": "main", "index": 0 } ] ] }, "Create Video": { "main": [ [ { "node": "Wait1", "type": "main", "index": 0 } ] ] } }, "active": false, "settings": { "executionOrder": "v1" }, "versionId": "95808815-3e52-47e5-844d-5afbee19779a", "meta": { "instanceId": "5f99b345c3a4501a22438ba5962ff6685e5e97ee4bd0a17cc04a19ed072b5c2a" }, "id": "0ZstEawJAPZZ5hfP", "tags": [] }