Generación automática de videos de productos utilizando Gemini, FAL y Google Workspace

Avanzado

Este es unContent Creation, Multimodal AIflujo de automatización del dominio deautomatización que contiene 16 nodos.Utiliza principalmente nodos como Wait, Filter, GoogleDrive, HttpRequest, GoogleSheets. Usar Gemini, FAL y Google Workspace para generar videos de productos automáticamente

Requisitos previos
  • Credenciales de API de Google Drive
  • Pueden requerirse credenciales de autenticación para la API de destino
  • Credenciales de API de Google Sheets
Vista previa del flujo de trabajo
Visualización de las conexiones entre nodos, con soporte para zoom y panorámica
Exportar flujo de trabajo
Copie la siguiente configuración JSON en n8n para importar y usar este flujo de trabajo
{
  "meta": {
    "instanceId": "783d2046f405cc6ecb20ef185376ed1023323a3da628b9d8156b1fb75c75e037"
  },
  "nodes": [
    {
      "id": "06fc66f7-c12e-443c-bfdb-1339128e0dec",
      "name": "Hojas de Google Trigger",
      "type": "n8n-nodes-base.googleSheetsTrigger",
      "position": [
        0,
        368
      ],
      "parameters": {
        "event": "rowAdded",
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "id",
          "value": "=xxxx"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "=xxxxxx"
        }
      },
      "credentials": {
        "googleSheetsTriggerOAuth2Api": {
          "id": "yThtJbXk01Imf6iZ",
          "name": "Google Sheets Trigger account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "4f833098-8f46-457f-9e47-5e273b831de4",
      "name": "Descargar archivo",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        464,
        368
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "url",
          "value": "={{ $json.link_image }}",
          "__regex": "https:\\/\\/(?:drive|docs)\\.google\\.com(?:\\/.*|)\\/d\\/([0-9a-zA-Z\\-_]+)(?:\\/.*|)"
        },
        "options": {},
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "7ksMk3zwMvT2CToN",
          "name": "Google Drive account"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "27356824-4c60-47f8-9c25-846d2716bd25",
      "name": "Extraer de archivo",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        688,
        368
      ],
      "parameters": {
        "options": {},
        "operation": "binaryToPropery"
      },
      "typeVersion": 1
    },
    {
      "id": "8d2848d5-b2e5-49a7-9480-526ae86212b6",
      "name": "Convertir a archivo",
      "type": "n8n-nodes-base.convertToFile",
      "position": [
        1168,
        368
      ],
      "parameters": {
        "options": {},
        "operation": "toBinary",
        "sourceProperty": "=candidates[0].content.parts[0].inlineData.data"
      },
      "typeVersion": 1.1
    },
    {
      "id": "2491f22b-31e8-4190-91ce-b3ef4889ae14",
      "name": "Subir archivo",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        1424,
        368
      ],
      "parameters": {
        "name": "={{ $now }}",
        "driveId": {
          "__rl": true,
          "mode": "id",
          "value": "=My Drive"
        },
        "options": {},
        "folderId": {
          "__rl": true,
          "mode": "id",
          "value": "=xxxxx"
        }
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "7ksMk3zwMvT2CToN",
          "name": "Google Drive account"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "dac990c2-64a1-4e13-b9d4-ffbeb890f90c",
      "name": "Actualizar fila en hoja",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2816,
        368
      ],
      "parameters": {
        "columns": {
          "value": {
            "STT": "={{ $('Google Sheets Trigger').item.json.STT }}",
            "status": "finished",
            "link_video": "={{ $json.webViewLink }}"
          },
          "schema": [
            {
              "id": "STT",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "STT",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "link_image",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "link_image",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "note",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "note",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "link_video",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "link_video",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "STT"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1WCta4mwXQB0vY1Etre78IrVouruy6gRRe1mToswv6v8/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "=xxxx"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "urlO8dciDPm5B2zv",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "82b056de-b2ac-4575-95b0-6bf1a10f4549",
      "name": "Nota adhesiva — Resumen",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        0
      ],
      "parameters": {
        "color": 5,
        "width": 680,
        "height": 320,
        "content": "## Workflow Overview\n**Purpose:** Auto-generate branded product/ad videos directly from Google Sheets rows.\n**Trigger:** A new row is added with an image link (Google Sheets Trigger - rowAdded).\n**Steps:**\n1) Download image from Google Drive → Extract base64.\n2) Call Gemini API to create an ad-style image variant.\n3) Convert & upload the generated image to Drive (images folder).\n4) Send the image to FAL (image-to-video) to create a short clip.\n5) Poll FAL response URL until status = completed, then download the video.\n6) Upload video to Drive (videos folder) and update the sheet with the video link.\n\n**Result:** A fully automated pipeline: a spreadsheet row → final video asset."
      },
      "typeVersion": 1
    },
    {
      "id": "e93e737c-4712-46ed-9511-3a054cd34818",
      "name": "Nota adhesiva — Configuración",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1120,
        0
      ],
      "parameters": {
        "color": 3,
        "width": 680,
        "height": 280,
        "content": "## Setup Checklist\n- APIs & Keys: Google Sheets, Google Drive, **Gemini API key**, **FAL API key** (use Credentials; do not hardcode).\n- Google Drive: set folder IDs in the two **Upload file** nodes (image/video destinations).\n- Sheet columns (minimum): `STT`, `link_image`, `link_video`, `status`, `note`.\n- Trigger: runs when a new row is added.\n- Quick Test: add a row with a valid `link_image` → image generated → video uploaded → `link_video` written back."
      },
      "typeVersion": 1
    },
    {
      "id": "9d4202cd-993b-4f9c-b190-4058e827c9f9",
      "name": "Nota adhesiva — Notas y consejos",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2208,
        0
      ],
      "parameters": {
        "color": 4,
        "width": 680,
        "height": 300,
        "content": "## Notes & Tips\n- Security: keep `x-goog-api-key` and FAL `Authorization` in Credentials (`{{$credentials...}}`).\n- Polling: FAL is async; poll `response_url` until `status == completed` before downloading the video.\n- Links: if an API needs a direct file URL, use Drive direct-download (`uc?export=download&id=<FILE_ID>`).\n- Prompts: tweak Gemini text for brand voice; change FAL `prompt` (e.g., replace \"slow moving\").\n- Error Handling: add `If` + `Wait` + retries; log failures to the sheet (`status`, `note`).\n- Scale: paste multiple rows to batch-generate creatives."
      },
      "typeVersion": 1
    },
    {
      "id": "c1d73203-257e-4988-816d-393a3ca6fb6a",
      "name": "Filtro",
      "type": "n8n-nodes-base.filter",
      "position": [
        208,
        368
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "ca5a2759-ec88-45a8-b037-58341ec5da2c",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.status }}",
              "rightValue": "run"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "618d9398-d6f6-4b6a-8c8b-de030f213c49",
      "name": "Esperar",
      "type": "n8n-nodes-base.wait",
      "position": [
        1856,
        368
      ],
      "webhookId": "214d0cab-c68b-473d-8eba-cc1c11420c0a",
      "parameters": {
        "amount": 30
      },
      "typeVersion": 1.1
    },
    {
      "id": "28ff8eda-a56e-4314-a980-b95ac06cb740",
      "name": "Crear imagen de producto con modelo",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        912,
        368
      ],
      "parameters": {
        "url": "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-image-preview:generateContent",
        "method": "POST",
        "options": {
          "redirect": {
            "redirect": {}
          }
        },
        "jsonBody": "={\n  \"contents\": [\n    {\n      \"parts\": [\n        {\n          \"text\": \"Create a image with model and product attached to create ads videos with this require: {{ JSON.stringify($('Filter').item.json.note).slice(1,-1) }}\"\n        },\n        {\n          \"inline_data\": {\n            \"mime_type\": \"image/jpeg\",\n            \"data\": \"{{ $json.data }}\"\n          }\n        }\n      ]\n    }\n  ]\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "x-goog-api-key",
              "value": "xxxxxx"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "f6cbccbc-9b32-40c2-9735-0915e44e684e",
      "name": "Crear video",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1648,
        368
      ],
      "parameters": {
        "url": "https://queue.fal.run/fal-ai/ltxv-13b-098-distilled/image-to-video",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "sendHeaders": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "prompt",
              "value": "=slow motion,  {{ $('Filter').item.json.note }}"
            },
            {
              "name": "image_url",
              "value": "={{ $json.webContentLink }}"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Key xxxxx"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "0b700727-2e6b-4ce8-989d-ab18f1a5d887",
      "name": "Obtener enlace de video",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2080,
        368
      ],
      "parameters": {
        "url": "={{ $json.response_url }}",
        "options": {},
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Key xxxx"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "c5c00e9c-b56a-459b-a00c-151316707c4f",
      "name": "Descargar video",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2336,
        368
      ],
      "parameters": {
        "url": "={{ $json.video.url }}",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "306165a7-4320-4fcc-a03f-6cd424074c29",
      "name": "Subir video",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        2592,
        368
      ],
      "parameters": {
        "name": "={{ $now }}",
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive",
          "cachedResultUrl": "https://drive.google.com/drive/my-drive",
          "cachedResultName": "My Drive"
        },
        "options": {},
        "folderId": {
          "__rl": true,
          "mode": "id",
          "value": "=xxxx"
        }
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "7ksMk3zwMvT2CToN",
          "name": "Google Drive account"
        }
      },
      "typeVersion": 3
    }
  ],
  "pinData": {},
  "connections": {
    "618d9398-d6f6-4b6a-8c8b-de030f213c49": {
      "main": [
        [
          {
            "node": "0b700727-2e6b-4ce8-989d-ab18f1a5d887",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "c1d73203-257e-4988-816d-393a3ca6fb6a": {
      "main": [
        [
          {
            "node": "4f833098-8f46-457f-9e47-5e273b831de4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "2491f22b-31e8-4190-91ce-b3ef4889ae14": {
      "main": [
        [
          {
            "node": "f6cbccbc-9b32-40c2-9735-0915e44e684e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f6cbccbc-9b32-40c2-9735-0915e44e684e": {
      "main": [
        [
          {
            "node": "618d9398-d6f6-4b6a-8c8b-de030f213c49",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "306165a7-4320-4fcc-a03f-6cd424074c29": {
      "main": [
        [
          {
            "node": "dac990c2-64a1-4e13-b9d4-ffbeb890f90c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "4f833098-8f46-457f-9e47-5e273b831de4": {
      "main": [
        [
          {
            "node": "27356824-4c60-47f8-9c25-846d2716bd25",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "c5c00e9c-b56a-459b-a00c-151316707c4f": {
      "main": [
        [
          {
            "node": "306165a7-4320-4fcc-a03f-6cd424074c29",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "0b700727-2e6b-4ce8-989d-ab18f1a5d887": {
      "main": [
        [
          {
            "node": "c5c00e9c-b56a-459b-a00c-151316707c4f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8d2848d5-b2e5-49a7-9480-526ae86212b6": {
      "main": [
        [
          {
            "node": "2491f22b-31e8-4190-91ce-b3ef4889ae14",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "27356824-4c60-47f8-9c25-846d2716bd25": {
      "main": [
        [
          {
            "node": "28ff8eda-a56e-4314-a980-b95ac06cb740",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Sheets Trigger": {
      "main": [
        [
          {
            "node": "c1d73203-257e-4988-816d-393a3ca6fb6a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "28ff8eda-a56e-4314-a980-b95ac06cb740": {
      "main": [
        [
          {
            "node": "8d2848d5-b2e5-49a7-9480-526ae86212b6",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Preguntas frecuentes

¿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.

Información del flujo de trabajo
Nivel de dificultad
Avanzado
Número de nodos16
Categoría2
Tipos de nodos9
Descripción de la dificultad

Adecuado para usuarios avanzados, flujos de trabajo complejos con 16+ nodos

Autor
Cong Nguyen

Cong Nguyen

@cong-nguyen

I’m a developer specialized in building web and mobile applications with AI integration and intelligent automation. With a solid background in data science, I help businesses build smarter digital solutions using cutting-edge technologies.

Enlaces externos
Ver en n8n.io

Compartir este flujo de trabajo

Categorías

Categorías: 34