Desarrollo completado - Generación de anuncios de producto con Veo3
Este es unContent Creation, Multimodal AIflujo de automatización del dominio deautomatización que contiene 16 nodos.Utiliza principalmente nodos como Code, Form, Wait, Airtable, FormTrigger. Usar Google Veo 3, Gemini y Airtable para automatizar la generación de videos publicitarios de IA
- •Clave de API de Airtable
- •Pueden requerirse credenciales de autenticación para la API de destino
Nodos utilizados (16)
Categoría
{
"id": "O7BiL9gvzMRGnzco",
"meta": {
"instanceId": "1a54c41d9050a8f1fa6f74ca858828ad9fb97b9fafa3e9760e576171c531a787",
"templateCredsSetupCompleted": true
},
"name": "Development Done - Product Ads via Veo3",
"tags": [
{
"id": "m1paRrANi4GrQXxX",
"name": "AI Internal",
"createdAt": "2025-09-18T04:05:25.667Z",
"updatedAt": "2025-09-18T04:05:25.667Z"
}
],
"nodes": [
{
"id": "dc93f801-d671-49a1-80a1-a19f3c3d4e8d",
"name": "Crear un registro",
"type": "n8n-nodes-base.airtable",
"position": [
-48,
-64
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "Your_Airtable_Base_ID",
"cachedResultUrl": "https://airtable.com/Your_Airtable_Base_ID",
"cachedResultName": "Dynamic Video Content"
},
"table": {
"__rl": true,
"mode": "list",
"value": "Your_Airtable_Table_ID",
"cachedResultUrl": "https://airtable.com/Your_Airtable_Base_ID/Your_Airtable_Table_ID",
"cachedResultName": "Product Ads"
},
"columns": {
"value": {
"Status": "Pending",
"Image Prompt": "={{ $json[\"Idea Prompt\"] }}"
},
"schema": [
{
"id": "Id",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Image Prompt",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Image Prompt",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Image",
"type": "array",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Image",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Video",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Video",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "options",
"display": true,
"options": [
{
"name": "Pending",
"value": "Pending"
},
{
"name": "Done",
"value": "Done"
}
],
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "create"
},
"credentials": {
"airtableTokenApi": {
"id": "Your_Airtable_Credentials_ID",
"name": "Airtable Personal Access Token account"
}
},
"typeVersion": 2.1
},
{
"id": "2cffa033-d677-4c1a-8bbd-92f10814e14d",
"name": "Convertir archivo de imagen para almacenar",
"type": "n8n-nodes-base.code",
"position": [
400,
-64
],
"parameters": {
"jsCode": "// Get the first binary key dynamically\nconst binaryKey = Object.keys($input.item.binary || {})[0];\nif (!binaryKey) {\n throw new Error(\"No binary data found on input item.\");\n}\n\nconst binary = $input.item.binary[binaryKey];\n\n// Convert binary to base64\nconst base64File = binary.data.toString('base64');\n\n// Build JSON payload for Airtable\nreturn [\n {\n json: {\n contentType: binary.mimeType || \"image/jpeg\",\n file: base64File,\n filename: binary.fileName || \"upload.jpg\"\n },\n pairedItem: { item: 0 } // 🔑 keeps mapping to original input\n }\n];\n"
},
"typeVersion": 2
},
{
"id": "22250c9d-136c-43cd-be88-8c3423c1c642",
"name": "Cargando imagen en Airtable",
"type": "n8n-nodes-base.httpRequest",
"position": [
624,
-64
],
"parameters": {
"url": "=https://content.airtable.com/v0/Your_Airtable_Base_ID/{{ $('Create a record').item.json.id }}/[Your_Column_Name]/uploadAttachment",
"method": "POST",
"options": {},
"sendBody": true,
"sendHeaders": true,
"bodyParameters": {
"parameters": [
{
"name": "contentType",
"value": "={{$json[\"contentType\"]}}"
},
{
"name": "file",
"value": "={{$json[\"file\"]}}"
},
{
"name": "filename",
"value": "={{$json[\"filename\"]}}"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer Your_Airtable_Personal_Access_Token"
},
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "3007c7d8-a294-4146-b610-ba10aa344881",
"name": "Obtener un registro",
"type": "n8n-nodes-base.airtable",
"position": [
848,
-64
],
"parameters": {
"id": "={{ $json.id }}",
"base": {
"__rl": true,
"mode": "list",
"value": "Your_Airtable_Base_ID",
"cachedResultUrl": "https://airtable.com/Your_Airtable_Base_ID",
"cachedResultName": "Dynamic Video Content"
},
"table": {
"__rl": true,
"mode": "list",
"value": "Your_Airtable_Table_ID",
"cachedResultUrl": "https://airtable.com/Your_Airtable_Base_ID/Your_Airtable_Table_ID",
"cachedResultName": "Product Ads"
},
"options": {}
},
"credentials": {
"airtableTokenApi": {
"id": "Your_Airtable_Credentials_ID",
"name": "Airtable Personal Access Token account"
}
},
"typeVersion": 2.1
},
{
"id": "04a074e2-dd05-4699-b30f-cf1f004170e5",
"name": "Analizar imagen",
"type": "@n8n/n8n-nodes-langchain.googleGemini",
"position": [
1056,
-64
],
"parameters": {
"text": "=You are an expert AI creative analyst. Your purpose is to analyze an input image together with the user’s creative request and produce a structured creative brief. Always treat the user’s request as the guiding vision, and reinterpret the image so that the final video concept fulfills that request. Your output must be only the plain text report as described below. Do not include any conversational filler or explanatory text.\n\nUSER REQUEST\n{{ $json[\"Image Prompt\"] }}\n\nIMAGE ANALYSIS\n\nDescription\nWrite a comprehensive, single-paragraph description of the image as it visually appears. Then explicitly describe how this image can be creatively reimagined or transformed to align with the user’s request.\n\nStyle Analysis\n\nCore Subject: Identify the main focus of the image and explain how it connects to the user’s request.\n\nSetting: Describe the environment/background and how it could be reinterpreted in the requested concept.\n\nMedium: Specify the artistic medium (e.g., product photography, 3D render) and suggest how the medium might shift in the video.\n\nLighting: Describe the current light and suggest adjustments to match the requested mood.\n\nMood: Define both the existing atmosphere of the image and the intended emotional tone per the user’s request.\n\nComposition: Describe the current framing/camera angle and how it might evolve in the video.\n\nColor Palette: List the dominant colors, then suggest enhancements or transformations to match the user’s request.\n\nText Overlay\nList and describe each distinct piece of text found in the image. If there is no text, simply write \"None.\"\n\nFor each text element, provide:\n- Text\n- Font\n- Effect\n- Color\n- Placement\n\nCREATIVE VIDEO BRIEF\n\nTranslate the user request and image analysis into a structured video brief suitable for Veo 3 generation:\n\nVideo Style: Describe the final style/genre of the requested video.\n\nTarget Emotion: Define the main emotional impact the video should deliver.\n\nMotion Guidance: Suggest dynamic camera motions, transitions, or visual effects that bring the user’s request to life.\n\nAudio/Music Direction: Suggest music/sound design that fits both the brand identity in the image and the requested theme.\n\nSuggested Script Elements: Provide a draft outline of possible voiceover or on-screen text. Ensure this ties the image (e.g., Pepsi product) with the user’s creative request (e.g., exploding into a disco party).\n",
"modelId": {
"__rl": true,
"mode": "list",
"value": "models/gemini-2.5-flash",
"cachedResultName": "models/gemini-2.5-flash"
},
"options": {},
"resource": "image",
"imageUrls": "={{ $json.Image[0].url }}",
"operation": "analyze"
},
"credentials": {
"googlePalmApi": {
"id": "Your_Gemini_API_Credentials_ID",
"name": "Gemini API Credentials"
}
},
"typeVersion": 1
},
{
"id": "e0533567-2b84-414d-b841-97f40163b08d",
"name": "Esperar",
"type": "n8n-nodes-base.wait",
"position": [
1744,
-64
],
"webhookId": "b98d5051-5f08-4709-9c31-e914da10b4ad",
"parameters": {
"unit": "minutes",
"amount": 1
},
"typeVersion": 1.1
},
{
"id": "6e0d258e-1e7e-453b-8780-47a959243ff6",
"name": "Actualizar registro",
"type": "n8n-nodes-base.airtable",
"position": [
1968,
-64
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "Your_Airtable_Base_ID",
"cachedResultUrl": "https://airtable.com/Your_Airtable_Base_ID",
"cachedResultName": "Dynamic Video Content"
},
"table": {
"__rl": true,
"mode": "list",
"value": "Your_Airtable_Table_ID",
"cachedResultUrl": "https://airtable.com/Your_Airtable_Base_ID/Your_Airtable_Table_ID",
"cachedResultName": "Product Ads"
},
"columns": {
"value": {
"Id": "={{ $('Get a record').item.json.Id }}",
"Status": "Done"
},
"schema": [
{
"id": "id",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "id",
"defaultMatch": true
},
{
"id": "Id",
"type": "string",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "Id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Image Prompt",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Image Prompt",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Image",
"type": "array",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Image",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "options",
"display": true,
"options": [
{
"name": "Pending",
"value": "Pending"
},
{
"name": "Done",
"value": "Done"
}
],
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Video",
"type": "array",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Video",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Id"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update"
},
"credentials": {
"airtableTokenApi": {
"id": "Your_Airtable_Personal_Access_Token_ID",
"name": "Airtable Personal Access Token account"
}
},
"typeVersion": 2.1
},
{
"id": "3ad82fa6-e313-46e3-bfe7-c3505f8ff8f7",
"name": "Generar Video Veo 3",
"type": "n8n-nodes-base.httpRequest",
"position": [
1520,
-64
],
"parameters": {
"url": "https://us-central1-aiplatform.googleapis.com/v1/projects/[Project ID]/locations/[Location]/publishers/google/models/veo-3.0-fast-generate-001:predictLongRunning",
"method": "POST",
"options": {},
"jsonBody": "={{ $json.veoRequestBody }}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer Your_Google_GCP_Token"
}
]
},
"nodeCredentialType": "googleOAuth2Api"
},
"credentials": {
"googlePalmApi": {
"id": "Your_Gemini_API_Credentials_ID",
"name": "Gemini Key account"
},
"googleOAuth2Api": {
"id": "Your_Google_OAuth2_Credentials_ID",
"name": "Google account"
}
},
"typeVersion": 4.2
},
{
"id": "ee7a1540-5467-4461-b73c-dc4eaeba8812",
"name": "Obtener el video",
"type": "n8n-nodes-base.httpRequest",
"position": [
2192,
-64
],
"parameters": {
"url": "https://us-central1-aiplatform.googleapis.com/v1/projects/[Project ID]/locations/[Location]/publishers/google/models/veo-3.0-generate-001:fetchPredictOperation",
"method": "POST",
"options": {
"response": {
"response": {}
}
},
"sendBody": true,
"sendHeaders": true,
"authentication": "predefinedCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "operationName",
"value": "={{ $('Generate Video Veo 3').item.json.name }}"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer Your_Google_GCP_Token"
}
]
},
"nodeCredentialType": "googleOAuth2Api"
},
"credentials": {
"googleOAuth2Api": {
"id": "Your_Google_OAuth2_Credentials_ID",
"name": "Google account"
}
},
"typeVersion": 4.2
},
{
"id": "42d12f7e-34f5-474b-a136-5a6485763bf6",
"name": "Video descargable",
"type": "n8n-nodes-base.convertToFile",
"position": [
2416,
-64
],
"parameters": {
"options": {},
"operation": "toBinary",
"sourceProperty": "response.videos[0].bytesBase64Encoded"
},
"typeVersion": 1.1
},
{
"id": "097d5ffc-0481-4261-9d68-355ab2ec9266",
"name": "Analizar solicitud",
"type": "n8n-nodes-base.code",
"position": [
1296,
-64
],
"parameters": {
"jsCode": "// Get the generated prompt text from the previous node\nconst promptText = $json.content.parts[0].text;\n\n// Build the complete JSON body for the VEO API\nconst requestBody = {\n \"endpoint\": \"projects/personalised-mail/locations/us-central1/publishers/google/models/veo-3.0-generate-001\",\n \"instances\": [\n {\n \"prompt\": promptText\n }\n ],\n \"parameters\": {\n \"aspectRatio\": \"16:9\",\n \"sampleCount\": 1,\n \"durationSeconds\": \"8\",\n \"personGeneration\": \"allow_all\",\n \"addWatermark\": true,\n \"includeRaiReason\": true,\n \"generateAudio\": true,\n \"resolution\": \"720p\"\n }\n};\n\n// Return the final object inside a wrapper\nreturn [\n {\n json: {\n \"veoRequestBody\": requestBody // <-- Wrapped here\n }\n }\n];"
},
"typeVersion": 2
},
{
"id": "f3054ab6-92de-415c-9f72-24feacebb207",
"name": "Proponer tu idea",
"type": "n8n-nodes-base.formTrigger",
"position": [
-272,
-64
],
"webhookId": "5778677c-d323-4bb4-91df-d2870e3aced9",
"parameters": {
"options": {},
"formTitle": "Upload Your File",
"formFields": {
"values": [
{
"fieldLabel": "Idea Prompt",
"requiredField": true
}
]
},
"formDescription": "Please give the prompt !"
},
"typeVersion": 2.2
},
{
"id": "2b288e59-f675-4519-8c74-9014e8ce6479",
"name": "Cargar imagen",
"type": "n8n-nodes-base.form",
"position": [
176,
-64
],
"webhookId": "65fd2f3a-d87c-412e-9f57-15f0720aca1f",
"parameters": {
"options": {},
"formFields": {
"values": [
{
"fieldType": "file",
"fieldLabel": "Image"
}
]
}
},
"typeVersion": 1
},
{
"id": "89df8bc5-c051-4c14-9ea3-7f214bdbf1d9",
"name": "Nota adhesiva",
"type": "n8n-nodes-base.stickyNote",
"position": [
128,
-336
],
"parameters": {
"color": 5,
"width": 528,
"height": 192,
"content": "## Airtable Configuration\n* **Airtable Credentials**: In the \"Create a record\", \"Get a record\", and \"Update record\" nodes, you must select your own Airtable credentials.\n* **Base and Table IDs**: Update the Base ID and Table ID in all four Airtable-related nodes to match your own setup: \"Create a record\", \"Uploading Image in Airtable\" (in the URL), \"Get a record\", and \"Update record\"."
},
"typeVersion": 1
},
{
"id": "b4c1f237-6548-44d5-b232-247ac05ee4a8",
"name": "Nota adhesiva1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1728,
-368
],
"parameters": {
"color": 4,
"width": 544,
"height": 240,
"content": "## Google AI Configuration\n* **Gemini Node** (\"Analyze image\"): Select your Google AI (Gemini) API credentials.\n**Veo Nodes (\"Parse Request\" & HTTP Requests):** \n* **Project ID**: In the URLs, replace with your Google Cloud Project ID.\n* **Credentials**: In both HTTP request nodes (\"Generate Video Veo 3\" & \"Get the Video\"), select your Google OAuth2 credentials.\n* **API Info**: For help with endpoints, see the [Google Cloud Vertex AI Studio](https://www.google.com/search?q=https://console.cloud.google.com/vertex-ai/studio/media/generate)"
},
"typeVersion": 1
},
{
"id": "e0741edb-ab0f-445e-a415-aff8e58057f3",
"name": "Nota adhesiva2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1216,
-352
],
"parameters": {
"color": 6,
"width": 304,
"height": 192,
"content": "## Customization\n**Video Generation Parameters**: In the \"Parse Request\" node, you can modify the JavaScript code to change video settings like *aspectRatio*, *durationSeconds*, and *resolution*."
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "88471e4e-1558-4a15-9060-712afdb19c0d",
"connections": {
"e0533567-2b84-414d-b841-97f40163b08d": {
"main": [
[
{
"node": "6e0d258e-1e7e-453b-8780-47a959243ff6",
"type": "main",
"index": 0
}
]
]
},
"3007c7d8-a294-4146-b610-ba10aa344881": {
"main": [
[
{
"node": "04a074e2-dd05-4699-b30f-cf1f004170e5",
"type": "main",
"index": 0
}
]
]
},
"2b288e59-f675-4519-8c74-9014e8ce6479": {
"main": [
[
{
"node": "2cffa033-d677-4c1a-8bbd-92f10814e14d",
"type": "main",
"index": 0
}
]
]
},
"04a074e2-dd05-4699-b30f-cf1f004170e5": {
"main": [
[
{
"node": "097d5ffc-0481-4261-9d68-355ab2ec9266",
"type": "main",
"index": 0
}
]
]
},
"ee7a1540-5467-4461-b73c-dc4eaeba8812": {
"main": [
[
{
"node": "42d12f7e-34f5-474b-a136-5a6485763bf6",
"type": "main",
"index": 0
}
]
]
},
"097d5ffc-0481-4261-9d68-355ab2ec9266": {
"main": [
[
{
"node": "3ad82fa6-e313-46e3-bfe7-c3505f8ff8f7",
"type": "main",
"index": 0
}
]
]
},
"6e0d258e-1e7e-453b-8780-47a959243ff6": {
"main": [
[
{
"node": "ee7a1540-5467-4461-b73c-dc4eaeba8812",
"type": "main",
"index": 0
}
]
]
},
"dc93f801-d671-49a1-80a1-a19f3c3d4e8d": {
"main": [
[
{
"node": "2b288e59-f675-4519-8c74-9014e8ce6479",
"type": "main",
"index": 0
}
]
]
},
"f3054ab6-92de-415c-9f72-24feacebb207": {
"main": [
[
{
"node": "dc93f801-d671-49a1-80a1-a19f3c3d4e8d",
"type": "main",
"index": 0
}
]
]
},
"42d12f7e-34f5-474b-a136-5a6485763bf6": {
"main": [
[]
]
},
"3ad82fa6-e313-46e3-bfe7-c3505f8ff8f7": {
"main": [
[
{
"node": "e0533567-2b84-414d-b841-97f40163b08d",
"type": "main",
"index": 0
}
]
]
},
"22250c9d-136c-43cd-be88-8c3423c1c642": {
"main": [
[
{
"node": "3007c7d8-a294-4146-b610-ba10aa344881",
"type": "main",
"index": 0
}
]
]
},
"2cffa033-d677-4c1a-8bbd-92f10814e14d": {
"main": [
[
{
"node": "22250c9d-136c-43cd-be88-8c3423c1c642",
"type": "main",
"index": 0
}
]
]
}
}
}¿Cómo usar este flujo de trabajo?
Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.
¿En qué escenarios es adecuado este flujo de trabajo?
Avanzado - Creación de contenido, IA Multimodal
¿Es de pago?
Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.
Flujos de trabajo relacionados recomendados
Intuz
@intuzWorkflow automation can help automate your routine activities and help saves $$$, as well as hours of time. As a boutique tech consulting company, Intuz help businesses with custom AI/ML, AI Workflow Automations, and software development. Automate your business workflow for: Sales Marketing Accounting Finance Operations E-Commerce Customer Support Admin & Backoffice Logistics & Supply Chain
Compartir este flujo de trabajo