The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"name": "fal_ai_veo3",
"nodes": [
{
"parameters": {
"content": "# \ud83d\udee0\ufe0f Veo 3 dans n8n\n\n## Comment configurer ce workflow pour votre propre espace\n\n**Auteur :** Thomas Berton de [azuro-ai.com](https://azuro-ai.com)\n\nCe guide vous montre comment mettre en place ce workflow dans votre propre environnement. J\u2019esp\u00e8re que cela vous sera utile !\n\n---\n\n## \u2699\ufe0f \u00c9tape 1 : Configurer OpenAI pour le scripting\n\n1. Rendez-vous sur la [plateforme API d\u2019OpenAI](https://platform.openai.com/api-keys)\n2. Cr\u00e9ez un compte (si vous n\u2019en avez pas encore un)\n3. G\u00e9n\u00e9rez une cl\u00e9 API\n4. Cr\u00e9ez une authentification avec cette cl\u00e9 via le n\u0153ud **OpenAI Chat Model**\n\n---\n\n## \ud83d\udcca \u00c9tape 2 : Configurer le journal Google Sheets\n\n1. Faites une copie de ce [mod\u00e8le Google Sheet](https://docs.google.com/spreadsheets/d/1TsNBdnvAsW415bkgNrb6_jO1zOwUu6psj2GpVXaA-zc/edit?usp=sharing)\n2. Utilisez-le pour consigner les id\u00e9es et r\u00e9sultats g\u00e9n\u00e9r\u00e9s dans votre workflow\n3. Connectez cette feuille dans n8n via le n\u0153ud **Google Sheets** et cr\u00e9ez une authentification si n\u00e9cessaire\n\n---\n\n## \ud83d\udd10 \u00c9tape 3 : Configurer Fal AI\n\n1. Allez sur [Fal AI](https://fal.ai) et connectez-vous\n2. G\u00e9n\u00e9rez votre cl\u00e9 API\n3. Dans n8n, cr\u00e9ez une nouvelle authentification HTTP avec **Header Auth**, en utilisant votre cl\u00e9 Fal AI\n4. Utilisez cette authentification dans les n\u0153uds **HTTP Request** concern\u00e9s\n\n---\n\n## \ud83e\udde0 \u00c9tape 4 : Personnaliser les prompts syst\u00e8me\n\n1. Choisissez une niche ou un th\u00e8me pour votre contenu\n2. Modifiez le prompt utilisateur dans l\u2019agent \u201cIdeas AI\u201d\n3. Vous pouvez aussi adapter l\u2019agent \u201cPrompts AI\u201d selon vos besoins sp\u00e9cifiques\n\n---\n\n### \ud83c\udf10 Envie d\u2019aller plus loin avec l\u2019IA ?\n\nJe suis **Thomas Berton**, fondateur de l\u2019agence [Azuro AI](https://azuro-ai.com).\nNous accompagnons les entreprises dans l\u2019automatisation intelligente et la cr\u00e9ation de workflows IA sur mesure.\n\ud83d\udc49 **D\u00e9couvrez nos services sur [azuro-ai.com](https://azuro-ai.com)**.\n",
"height": 1420,
"width": 580,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-300,
140
],
"id": "ed687043-63de-4ef6-94e0-3623bb1cf27e",
"name": "Sticky Note12"
},
{
"parameters": {
"rule": {
"interval": [
{}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
500,
560
],
"id": "e500bb31-5b5d-4928-a32f-e6efc9339526",
"name": "\ud83d\udd53 D\u00e9clencheur de Planification"
},
{
"parameters": {
"promptType": "define",
"text": "Une id\u00e9e sur [un vlogueur du XXIe si\u00e8cle coinc\u00e9 en 1789 qui parle \u00e0 sa cam\u00e9ra et filme la prise de la Bastille avec sa perche \u00e0 selfie, au milieu des r\u00e9volutionnaires].",
"hasOutputParser": true,
"options": {
"systemMessage": "=### \u2705 ACTION\n\nG\u00e9n\u00e8re une seule id\u00e9e immersive, r\u00e9aliste et surr\u00e9aliste li\u00e9e \u00e0 un sujet fourni par l\u2019utilisateur, sous forme de tableau JSON d\u2019une ligne, structur\u00e9 avec les champs suivants : `Caption`, `Idea`, `Environment`, `Status`.\n\n### \ud83d\udd01 \u00c9TAPES\n\n1. Re\u00e7ois un sujet principal de la part de l\u2019utilisateur (ex. : \u00ab street food au Vietnam \u00bb).\n2. Cr\u00e9e une id\u00e9e unique, courte et surr\u00e9aliste (moins de 13 mots), qui d\u00e9crit un \u00e9v\u00e9nement, moment ou action visuellement marquant impliquant un personnage.\n3. D\u00e9cris un environnement coh\u00e9rent avec l\u2019id\u00e9e (moins de 20 mots), pr\u00e9cisant :\n\n * le lieu,\n * les \u00e9l\u00e9ments visuels en arri\u00e8re-plan,\n * les participants principaux,\n * le style de la sc\u00e8ne.\n (les univers fictifs sont autoris\u00e9s)\n4. R\u00e9dige une l\u00e9gende virale avec :\n\n * une phrase courte et percutante,\n * un emoji pertinent,\n * exactement 12 hashtags en minuscules, dans cet ordre :\n\n 1. 4 hashtags li\u00e9s au sujet\n 2. 4 hashtags parmi les plus populaires\n 3. 4 hashtags parmi les tendances actuelles (en direct)\n5. Ajoute `\"Status\": \"for production\"`\n6. Structure le tout en un tableau JSON d\u2019une seule ligne.\n\n---\n\n### \ud83e\uddd1\u200d\ud83c\udfa8 PERSONA\n\nAgis comme un cr\u00e9atif digital expert en storytelling immersif, capable de concevoir des id\u00e9es visuelles virales, br\u00e8ves et inoubliables, en croisant imaginaire surr\u00e9aliste et r\u00e9alisme cin\u00e9matographique.\n\n---\n\n### \ud83d\udccc EXEMPLES\n\n(Sujet : \u00ab vol de drones dans les temples abandonn\u00e9s \u00bb)\n\n```json\n[\n {\n \"Caption\": \"Quand les drones r\u00e9veillent les esprits oubli\u00e9s \ud83d\ude31 #templeabandonne #drones #exploration #mystere #love #instagood #fun #life #ai #vr #future #wtf\",\n \"Idea\": \"Un drone lib\u00e8re accidentellement une entit\u00e9 antique dans un temple effondr\u00e9\",\n \"Environment\": \"Temple humide, statues fissur\u00e9es, drone flottant, brume dor\u00e9e, style cin\u00e9matographique mystique\",\n \"Status\": \"for production\"\n }\n]\n```\n\n---\n\n### \ud83e\udded CONTEXTE\n\nCe prompt est destin\u00e9 \u00e0 un mod\u00e8le de g\u00e9n\u00e9ration d\u2019id\u00e9es narratives, visuelles et virales pour des contenus immersifs courts. Il sera utilis\u00e9 dans des environnements cr\u00e9atifs (brainstorming, production visuelle, r\u00e9seaux sociaux, pitchs narratifs).\n\n---\n\n### \ud83d\udeab CONTRAINTES\n\n* Une seule id\u00e9e par g\u00e9n\u00e9ration.\n* Id\u00e9e : moins de 13 mots, surr\u00e9aliste, avec un personnage impliqu\u00e9.\n* Caption : percutante, avec un emoji, exactement 12 hashtags dans l\u2019ordre impos\u00e9, en minuscules.\n* Environment : moins de 20 mots, d\u00e9crit pr\u00e9cis\u00e9ment le cadre de l\u2019action, \u00e9l\u00e9ments visuels inclus.\n* Univers fictifs autoris\u00e9s.\n* Sortie en JSON compact sur une seule ligne.\n\n---\n\n### \ud83d\udcc4 MOD\u00c8LE (FORMAT DE SORTIE)\n\n[\n {\n \"Caption\": \"Phrase virale avec emoji #4hashtags_sujet #4hashtags_populaires #4hashtags_tendance\",\n \"Idea\": \"Une action originale en moins de 13 mots\",\n \"Environment\": \"Description visuelle en moins de 20 mots\",\n \"Status\": \"for production\"\n }\n]\n\n"
}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 1.9,
"position": [
660,
560
],
"id": "5903585e-e865-4876-9b87-af18a5a7a502",
"name": "\ud83e\udd16 Agent IA d'Id\u00e9es"
},
{
"parameters": {
"jsonSchemaExample": "[\n {\n \"Caption\": \"Diver Removes Nets Off Whale \ud83d\udc0b #whalerescue #marinelife #oceanrescue #seahelpers #love #nature #instagood #explore #viral #savenature #oceanguardians #cleanoceans\",\n \"Idea\": \"Diver carefully cuts tangled net from distressed whale in open sea\",\n \"Environment\": \"Open ocean, sunlight beams through water, diver and whale, cinematic realism\",\n \"Status\": \"for production\"\n }\n]\n"
},
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"typeVersion": 1.2,
"position": [
980,
400
],
"id": "0579d6a4-9558-4d6d-86a6-1fd14faa1498",
"name": "\ud83e\uddfe Parseur JSON d'Id\u00e9e"
},
{
"parameters": {
"operation": "append",
"documentId": {
"__rl": true,
"value": "1gVsMRBf0gKS2cmQXKzuxwl5PDjrP0D3FiiH8Q0hmv_M",
"mode": "id"
},
"sheetName": {
"__rl": true,
"value": "gid=0",
"mode": "list",
"cachedResultName": "Sheet1",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/16xf34Rc-TWs7rUCSFAsIS_1zaodLQsjN5dTaWMGlZOE/edit#gid=0"
},
"columns": {
"mappingMode": "defineBelow",
"value": {
"id": "=ROW()-1",
"idea": "={{ $json.output[0].Idea }}",
"caption": "={{ $json.output[0].Caption }}",
"production": "={{ $json.output[0].Status }}",
"environment_prompt": "={{ $json.output[0].Environment }}"
},
"matchingColumns": [
"id"
],
"schema": [
{
"id": "id",
"displayName": "id",
"required": false,
"defaultMatch": true,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "idea",
"displayName": "idea",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "caption",
"displayName": "caption",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "production",
"displayName": "production",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "environment_prompt",
"displayName": "environment_prompt",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "final_output",
"displayName": "final_output",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {}
},
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.5,
"position": [
980,
560
],
"id": "96f75e50-1625-4527-9350-62da44040b9b",
"name": "\ud83d\udcdd Enregistrer l\u2019Id\u00e9e",
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"promptType": "define",
"text": "=Donne-moi un prompt Veo3 pour cette id\u00e9e :\n{{ $json.idea }}\n\nVoici l\u2019environnement :\n{{ $json.environment_prompt }}\n\n",
"hasOutputParser": true,
"options": {
"systemMessage": "=PROMPT syst\u00e8me pour l\u2019agent de prompts Google VEO3\n\nTu es un agent IA charg\u00e9 d\u2019\u00e9crire des prompts vid\u00e9o hyper-r\u00e9alistes et cin\u00e9matographiques pour Google VEO3. Chaque prompt doit d\u00e9crire un court clip vid\u00e9o en style selfie, vivant et immersif, avec un personnage non nomm\u00e9 en train de parler ou d\u2019agir dans un moment sp\u00e9cifique. La vid\u00e9o finale doit ressembler \u00e0 une s\u00e9quence trouv\u00e9e ou un extrait de documentaire \u2014 ancr\u00e9e, r\u00e9aliste et captivante.\n\n---\n\nSTRUCTURE REQUISE (REMPLIR LES CHAMPS ENTRE CROCHETS) :\n\n\\[Paragraphe de description de la sc\u00e8ne]\n\nPersonnage principal : \\[description du personnage]\nIl/elle dit : \\[ins\u00e9rer une ligne de dialogue qui correspond \u00e0 l\u2019ambiance de la sc\u00e8ne]\nIl/elle : \\[d\u00e9crire une action physique ou un mouvement subtil de la cam\u00e9ra, ex. : fait un panoramique, se d\u00e9place, regarde autour de lui/elle]\nHeure de la journ\u00e9e : \\[jour / nuit / cr\u00e9puscule / etc.]\nObjectif : \\[description de l\u2019objectif utilis\u00e9]\nAudio (sugg\u00e9r\u00e9) : \\[sons ambiants, ex. : rugissements de lion, vent, circulation lointaine, chants d\u2019oiseaux]\nArri\u00e8re-plan : \\[br\u00e8ve description de ce qui est visible derri\u00e8re lui/elle]\n\n---\n\nR\u00c8GLES DE G\u00c9N\u00c9RATION DU PROMPT :\n\n* Un seul paragraphe, entre 750 et 1500 caract\u00e8res. Aucune ligne vide, aucun titre.\n* Un seul personnage humain. Ne jamais lui donner de nom.\n* Inclure une ligne de dialogue parl\u00e9e, avec une indication de ton ou mani\u00e8re de livraison.\n* Le personnage doit effectuer une action physique, m\u00eame subtile (ex. : un regard, un sourire, bouger la cam\u00e9ra).\n* Utiliser un cadrage de type selfie. Toujours d\u00e9crire l\u2019objectif, le type de film utilis\u00e9, et le comportement de la cam\u00e9ra.\n* La sc\u00e8ne doit para\u00eetre r\u00e9elle et cin\u00e9matographique, comme un extrait que quelqu\u2019un aurait film\u00e9 avec une cam\u00e9ra stylis\u00e9e.\n* Toujours inclure les cinq \u00e9l\u00e9ments techniques cl\u00e9s : Heure de la journ\u00e9e, Objectif, Type de film, Audio, Arri\u00e8re-plan.\n\n---\n\n\u00c0 NE PAS FAIRE :\n\n* Ne pas nommer le personnage.\n* Ne pas inclure plus d\u2019un personnage.\n* Ne pas d\u00e9crire de sous-titres ni de texte \u00e0 l\u2019\u00e9cran.\n* Ne pas sauter de lignes ou ajouter de mise en forme.\n* Ne pas \u00e9crire de sc\u00e8nes vagues ou abstraites \u2014 elles doivent \u00eatre ancr\u00e9es dans des d\u00e9tails concrets."
}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 1.9,
"position": [
1140,
560
],
"id": "e15b4e2e-b050-4549-be0b-96df52441e18",
"name": "\ud83e\udde0 Agent IA de Prompts Veo 3"
},
{
"parameters": {
"method": "POST",
"url": "https://queue.fal.run/fal-ai/veo3",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendBody": true,
"contentType": "raw",
"rawContentType": "application/json",
"body": "={ \"prompt\": \"{{ $json.output }}\" }\n",
"options": {
"batching": {
"batch": {
"batchSize": 1,
"batchInterval": 2000
}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
700,
820
],
"id": "4f2597b9-0a30-4ec9-ac5c-0e67046f7d09",
"name": "\ud83c\udfac Cr\u00e9er Vid\u00e9o",
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"amount": 200
},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
920,
820
],
"id": "64c8aba2-0b2c-4a07-b628-81b3d241069d",
"name": "\u23f3 Attente VEO3"
},
{
"parameters": {
"url": "=https://queue.fal.run/fal-ai/veo3/requests/{{ $json.request_id }}",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
1140,
820
],
"id": "8871995d-afda-4e3d-95dc-ec968962fe36",
"name": "\ud83d\udce5 R\u00e9cup\u00e9rer Vid\u00e9o",
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"operation": "update",
"documentId": {
"__rl": true,
"mode": "id",
"value": "16xf34Rc-TWs7rUCSFAsIS_1zaodLQsjN5dTaWMGlZOE"
},
"sheetName": {
"__rl": true,
"value": "gid=0",
"mode": "list",
"cachedResultName": "Sheet1",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1FgwtfdRV3WqRo_nrGOYjmV2zqvb2MY_oAxCDi3HgeZA/edit#gid=0"
},
"columns": {
"mappingMode": "defineBelow",
"value": {
"idea": "={{ $('\ud83d\udcdd Enregistrer l\u2019Id\u00e9e').first().json.idea }}",
"production": "done",
"final_output": "={{ $json.video.url }}"
},
"matchingColumns": [
"idea"
],
"schema": [
{
"id": "id",
"displayName": "id",
"required": false,
"defaultMatch": true,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "idea",
"displayName": "idea",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "caption",
"displayName": "caption",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "production",
"displayName": "production",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "environment_prompt",
"displayName": "environment_prompt",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "final_output",
"displayName": "final_output",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "row_number",
"displayName": "row_number",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"readOnly": true,
"removed": true
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {}
},
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.5,
"position": [
920,
1080
],
"id": "08c4f853-23e0-4dc6-bbb5-0dc7e15ecc68",
"name": "\ud83d\udcc4 Enregistrer Vid\u00e9o Finale",
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"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": [
680,
360
],
"id": "f5fcd64e-9928-4206-a898-303923c84d5c",
"name": "\ud83e\udde0\ud83d\udcac Mod\u00e8le Chat OpenAI",
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {},
"type": "@n8n/n8n-nodes-langchain.toolThink",
"typeVersion": 1,
"position": [
1320,
340
],
"id": "1c232ec0-d91b-4247-a47a-81949da9200c",
"name": "\ud83d\udcad Think"
}
],
"connections": {
"\ud83d\udd53 D\u00e9clencheur de Planification": {
"main": [
[
{
"node": "\ud83e\udd16 Agent IA d'Id\u00e9es",
"type": "main",
"index": 0
}
]
]
},
"\ud83e\udd16 Agent IA d'Id\u00e9es": {
"main": [
[
{
"node": "\ud83d\udcdd Enregistrer l\u2019Id\u00e9e",
"type": "main",
"index": 0
}
]
]
},
"\ud83e\uddfe Parseur JSON d'Id\u00e9e": {
"ai_outputParser": [
[
{
"node": "\ud83e\udd16 Agent IA d'Id\u00e9es",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"\ud83d\udcdd Enregistrer l\u2019Id\u00e9e": {
"main": [
[
{
"node": "\ud83e\udde0 Agent IA de Prompts Veo 3",
"type": "main",
"index": 0
}
]
]
},
"\ud83e\udde0 Agent IA de Prompts Veo 3": {
"main": [
[
{
"node": "\ud83c\udfac Cr\u00e9er Vid\u00e9o",
"type": "main",
"index": 0
}
]
]
},
"\ud83c\udfac Cr\u00e9er Vid\u00e9o": {
"main": [
[
{
"node": "\u23f3 Attente VEO3",
"type": "main",
"index": 0
}
]
]
},
"\u23f3 Attente VEO3": {
"main": [
[
{
"node": "\ud83d\udce5 R\u00e9cup\u00e9rer Vid\u00e9o",
"type": "main",
"index": 0
}
]
]
},
"\ud83d\udce5 R\u00e9cup\u00e9rer Vid\u00e9o": {
"main": [
[
{
"node": "\ud83d\udcc4 Enregistrer Vid\u00e9o Finale",
"type": "main",
"index": 0
}
]
]
},
"\ud83e\udde0\ud83d\udcac Mod\u00e8le Chat OpenAI": {
"ai_languageModel": [
[
{
"node": "\ud83e\udd16 Agent IA d'Id\u00e9es",
"type": "ai_languageModel",
"index": 0
},
{
"node": "\ud83e\udde0 Agent IA de Prompts Veo 3",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"\ud83d\udcad Think": {
"ai_tool": [
[
{
"node": "\ud83e\udd16 Agent IA d'Id\u00e9es",
"type": "ai_tool",
"index": 0
},
{
"node": "\ud83e\udde0 Agent IA de Prompts Veo 3",
"type": "ai_tool",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "23f4d41b-90b7-4091-8736-302beb1a2a11",
"meta": {
"templateCredsSetupCompleted": true
},
"id": "z1LoFsE707dFT372",
"tags": []
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
googleSheetsOAuth2ApihttpHeaderAuthopenAiApi
About this workflow
fal_ai_veo3. Uses stickyNote, scheduleTrigger, agent, outputParserStructured. Scheduled trigger; 12 nodes.
Source: https://github.com/Zie619/n8n-workflows — original creator credit. Request a take-down →