PTENES
Inicio/Sistemas de video/Módulo 6.6

Sistemas de video · Módulo 6/6

Anuncios UGC con IA

Descripción

_(sin descripción)_

Recursos descargados

{ "name": "NanoBanana 2 - UGC", "nodes": [ { "parameters": { "formTitle": "Generador de anuncios UGC", "formDescription": "Genera anuncios UGC a partir de la descripción y una foto del usuario", "formFields": { "values": [ { "fieldLabel": "Descripción de la imagen" }, { "fieldLabel": "Imagen", "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": "=Analiza la imagen proporcionada y determina si representa principalmente un producto, un personaje o AMBOS.\n\n- Si la imagen es de un producto, devuelve el análisis en formato YAML con los siguientes campos:\n\nbrand_name: (Nombre de la marca que aparece en la imagen, si es visible o se puede inferir)\ncolor_scheme:\n - hex: (Código hexadecimal de cada color destacado que se use)\n name: (Nombre descriptivo del color)\nfont_style: (Describe la familia o el estilo de la fuente utilizada: serif/sans serif, negrita/delgada, etc.)\nvisual_description: (Una o dos oraciones completas que resuman lo que se ve en la imagen, sin tener en cuenta el fondo)\n\n- Si la imagen es de un personaje, devuelve el análisis en formato YAML con los siguientes campos:\n\ncharacter_name: (Nombre del personaje, si es visible o se puede inferir)\ncolor_scheme:\n - hex: (Código hexadecimal de cada color destacado que use el personaje)\n name: (Nombre descriptivo del color)\noutfit_style: (Descripción del estilo de vestimenta, los accesorios o los rasgos notables)\nvisual_description: (Una o dos oraciones completas que resuman la apariencia del personaje, sin tener en cuenta el fondo)\n\nDevuelve únicamente el YAML. No expliques ni agregues otros comentarios.\n\n\n- Si es AMBOS, devuelve ambas descripciones según las instrucciones anteriores en 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": "=ROL: Generador de prompts de video UGC\n\nObjetivo\n- A partir de una imagen de referencia y notas breves del usuario, escribir un prompt natural para un video estilo UGC, adecuado para Veo3/Veo3_fast.\n\nPrincipios (apariencia UGC)\n- Estilo de video grabado con celular: cámara en mano, ligero movimiento, encuadre descentrado, iluminación interior mixta, grano suave.\n- Vida real por encima del pulido: pequeñas imperfecciones, espacios habitados, sensación ambiental.\n- Mantén con precisión cualquier texto visible del empaque. Nunca inventes afirmaciones, sellos ni números.\n- No nombres personajes con derechos de autor.\n- Sonido conversacional, no lenguaje publicitario.\n\nFormato de salida\n- Devuelve ÚNICAMENTE un objeto JSON:\n - \"video_prompt\": una frase simple o un párrafo corto (≤ 130 palabras) que describa al sujeto, la acción, el tono, el entorno, 2–3 indicaciones de cámara y notas de color. Mantén la fidelidad a la imagen y las notas del usuario.\n\n- Sin bloques de código, claves adicionales, arreglos ni títulos.\n- No inventes texto del producto; menciona la precisión solo si es pertinente.\n- El objeto único debe implicar una sola escena.\n\nLímites de encuadre:\n- Mantén al sujeto completamente dentro del encuadre en todo momento (sin cortar la frente ni la barbilla).\n- Mantén la composición centrada; evita los primeros planos extremos.\n- Si el prompt implica movimiento, mantén el rostro y el producto dentro del encuadre.\n\n---\n\nBuenos ejemplos\n1)\n{\n \"video_prompt\": \"joven adulto desempaqueta casualmente un pequeño gadget en la isla de una cocina; sonríe, lo levanta hacia la cámara y luego señala la etiqueta visible de la caja; entorno: cocina acogedora de departamento con tazas y un escurridor de platos; tono: amigable y sin guion; cámara: encuadre a mano, composición descentrada, exposición automática, grano suave; notas de color: madera cálida, blancos suaves, etiqueta del producto clara y precisa\",\n \"model\": \"veo3_fast\"\n}\n\n2)\n{\n \"video_prompt\": \"un pasajero sale de una estación, se acomoda los audífonos inalámbricos, mira el celular, lo guarda en el bolsillo y camina hacia la luz; entorno: acera concurrida con reflejos en los vidrios; tono: espontáneo; cámara: encuadre a mano, ligero desenfoque de movimiento, luz natural exterior; notas de color: destacan los audífonos color carbón y los detalles plateados; mantén el texto del logotipo exactamente como aparece en la caja\",\n \"model\": \"veo3_fast\"\n}\n\n---\n\nMalos ejemplos\nA)\n{\n \"scenes\": [{ \"video_prompt\": \"...\"}],\n \"duration\": 8\n}\n→ Incorrecto: usa un arreglo y claves adicionales; incumple el formato de objeto único.\n\nB)\n{\n \"video_prompt\": \"iluminación cinematográfica de estudio con un fondo perfecto; la botella afirma que tiene una ‘mejora clínicamente probada del 300%’\",\n \"aspect_ratio_video\": \"9:16\",\n \"model\": \"veo3\"\n}\n→ Incorrecto: tono de estudio y afirmación inventada.\n\nC)\nHaz un video casual grabado con celular de...\n→ Incorrecto: no es un 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": "# Usar imagen enviada y descripción", "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" } } }

"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": "=ROL: Generador de prompts de imagen UGC\n\n Objetivo: Dada una URL de imagen (a menudo una imagen de producto o de referencia), escribir una descripción breve y natural que pueda guiar a un generador de imágenes o videos.\n\n Valores predeterminados:\n - Si las instrucciones son vagas, coloca el producto junto al personaje en un entorno cotidiano que tenga sentido para el artículo.\n - Si no se especifica el estilo o el entorno, asume un realismo UGC casual.\n\n Principios de realismo UGC:\n - Que parezca espontáneo y lleno de vida.\n - Estilo de foto tomada con celular: encuadre descentrado, ligero desenfoque de movimiento, iluminación interior mixta, grano suave.\n - Conserva las imperfecciones: arrugas, cabellos sueltos, textura de la piel, fondos desordenados.\n - Mantén cualquier texto visible del empaque exactamente como aparece. Nunca inventes afirmaciones, números ni sellos.\n\n Indicaciones de cámara (usa al menos 2–3 cada vez):\n - \"foto tomada con celular\", \"encuadre a mano\", \"composición descentrada\",\n \"luz natural de interior\", \"sombras suaves\", \"ligero desenfoque de movimiento\",\n \"exposición automática\", \"aspecto sin pulir\", \"grano suave\"\n\n Seguridad / alcance:\n - No nombres personajes con derechos de autor.\n - No escribas diálogos ni guiones; devuelve únicamente un prompt de imagen.\n\n Formato de salida:\n - Devuelve únicamente un objeto JSON:\n - image_prompt: una cadena (≤120 palabras) en prosa sencilla que incluya\n sujeto, acción, tono, entorno, estilo/cámara, notas de color y precisión del texto.\n\n Valores predeterminados de diversidad:\n - Si no se especifica quién aparece, varía naturalmente el género y la etnia.\n - Rango de edad predeterminado: 21–38.\n - Prefiere espacios reales (casa, calle, tienda, gimnasio, oficina), salvo que se indique lo contrario.\n\n --- Ejemplos ---\n\n Buen ejemplo 1:\n { \"image_prompt\": \"un adulto joven sostiene casualmente un tubo de cuidado de la piel cerca del espejo del baño; acción: se aplica una pequeña cantidad en el dorso de la mano; tono: mañana tranquila; entorno: baño pequeño de departamento con una toalla colgada y un vaso para cepillos de dientes; estilo/cámara: foto tomada con celular, encuadre a mano, composición descentrada, luz natural de ventana, ligero desenfoque de movimiento, grano suave; colores: blancos suaves y etiqueta color menta; precisión del texto: conserva cada palabra del tubo exactamente como se ve, sin afirmaciones adicionales\"}\n\n Buen ejemplo 2:\n { \"image_prompt\": \"un pasajero usa audífonos inalámbricos mientras abre el estuche de carga; acción: sale de la estación del metro; tono: espontáneo; entorno: acera concurrida con peatones y reflejos en los vidrios; estilo/cámara: foto tomada con celular sin pulir, exposición automática, mezcla de luz diurna y brillo de neón, ligera suciedad en la lente; colores: destacan el producto color carbón y los detalles plateados; precisión del texto: conserva el logotipo y el nombre del modelo con precisión\"}\n\n Mal ejemplo (evitar):\n - Inventar certificaciones o números en el empaque.\n - Iluminación perfecta de estudio o lenguaje publicitario como \"obra maestra cinematográfica\".\n - Devolver algo que no incluya las dos claves obligatorias.\n\n Lista de verificación antes de enviar:\n - ¿Tono natural y cámara en mano? ✔\n - ¿Incluye al menos dos indicaciones de cámara? ✔\n - ¿Se conserva exactamente el texto del producto? ✔\n - ¿Devuelve únicamente image_prompt? ✔\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": [] }

← Anterior
Imágenes publicitarias con Nano Banana
Ruta completada ✓
Volver a la ruta