Génération automatique de vidéos de produits avec Gemini, FAL et Google Workspace

Avancé

Ceci est unContent Creation, Multimodal AIworkflow d'automatisation du domainecontenant 16 nœuds.Utilise principalement des nœuds comme Wait, Filter, GoogleDrive, HttpRequest, GoogleSheets. Utiliser Gemini, FAL et Google Workspace pour générer automatiquement des vidéo de produit

Prérequis
  • Informations d'identification Google Drive API
  • Peut nécessiter les informations d'identification d'authentification de l'API cible
  • Informations d'identification Google Sheets API
Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "meta": {
    "instanceId": "783d2046f405cc6ecb20ef185376ed1023323a3da628b9d8156b1fb75c75e037"
  },
  "nodes": [
    {
      "id": "06fc66f7-c12e-443c-bfdb-1339128e0dec",
      "name": "Google Déclencheur Sheets",
      "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": "Télécharger le fichier",
      "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": "Extraire du fichier",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        688,
        368
      ],
      "parameters": {
        "options": {},
        "operation": "binaryToPropery"
      },
      "typeVersion": 1
    },
    {
      "id": "8d2848d5-b2e5-49a7-9480-526ae86212b6",
      "name": "Convertir en fichier",
      "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": "Téléverser le fichier",
      "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": "Mettre à jour la ligne dans la feuille",
      "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": "Note adhésive — Aperçu",
      "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": "Note adhésive — Configuration",
      "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": "Note adhésive — Notes & Astuces",
      "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": "Filtre",
      "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": "Attente",
      "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": "Créer une image produit avec modèle",
      "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": "Créer une vidéo",
      "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": "Obtenir le lien vidéo",
      "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": "Télécharger la vidéo",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2336,
        368
      ],
      "parameters": {
        "url": "={{ $json.video.url }}",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "306165a7-4320-4fcc-a03f-6cd424074c29",
      "name": "Téléverser la vidéo",
      "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
          }
        ]
      ]
    },
    "06fc66f7-c12e-443c-bfdb-1339128e0dec": {
      "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
          }
        ]
      ]
    }
  }
}
Foire aux questions

Comment utiliser ce workflow ?

Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.

Dans quelles scénarios ce workflow est-il adapté ?

Avancé - Création de contenu, IA Multimodale

Est-ce payant ?

Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.

Informations sur le workflow
Niveau de difficulté
Avancé
Nombre de nœuds16
Catégorie2
Types de nœuds9
Description de la difficulté

Adapté aux utilisateurs avancés, avec des workflows complexes contenant 16+ nœuds

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

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34