This workflow corresponds to n8n.io template #14134 — we link there as the canonical source.
This workflow follows the Agent → Form recipe pattern — see all workflows that pair these two integrations.
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 →
{
"id": "fmWdi1vT5gnL7MSe",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Automated-Real-Estate-Content-Generation-Workflow",
"tags": [],
"nodes": [
{
"id": "54b6990a-eb51-4cbe-9081-17849d83b61d",
"name": "On form submission",
"type": "n8n-nodes-base.formTrigger",
"position": [
176,
-48
],
"parameters": {
"options": {},
"formTitle": "Ideation Prompt Board",
"formFields": {
"values": [
{
"fieldLabel": "Employee Id",
"requiredField": true
},
{
"fieldLabel": "Employee Name",
"requiredField": true
},
{
"fieldLabel": "Initial Prompt",
"requiredField": true
},
{
"fieldType": "email",
"fieldLabel": "Your Mail Id",
"requiredField": true
}
]
},
"formDescription": "Store and manage ideas for creative prompts."
},
"typeVersion": 2.2
},
{
"id": "4c1690bc-1801-409a-987b-bc6ccbd005b4",
"name": "Append row in sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
400,
-48
],
"parameters": {
"columns": {
"value": {
"Mail Id": "={{ $json['Your Mail Id'] }}",
"Employee Id": "={{ $json['Employee Id'] }}",
"Employee Name": "={{ $json['Employee Name'] }}",
"Initial Prompt": "={{ $json['Initial Prompt'] }}"
},
"schema": [
{
"id": "Employee Id",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Employee Id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Employee Name",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Employee Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Initial Prompt",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Initial Prompt",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Improved Prompt",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Improved Prompt",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Image Generated Link",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Image Generated Link",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Mail Id",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Mail Id",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1NEtQvs2hlcqmrFfSC6e1cReC25g2FEvxTiqdXOgtnjM/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1NEtQvs2hlcqmrFfSC6e1cReC25g2FEvxTiqdXOgtnjM",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1NEtQvs2hlcqmrFfSC6e1cReC25g2FEvxTiqdXOgtnjM/edit?usp=drivesdk",
"cachedResultName": "Data"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "c07e5e61-00ce-44b0-8578-61a3c3950bae",
"name": "AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
624,
-48
],
"parameters": {
"text": "={{ $json['Initial Prompt'] }}\n\n",
"options": {
"systemMessage": "You are RealEstatePromptRefiner, an AI assistant that converts simple user ideas into high-quality, photorealistic real estate image prompts optimized for DALL\u00b7E.\n\nYour goal is to always generate prompts that produce ultra-realistic property images suitable for listings, brochures, and marketing.\n\n\ud83d\udd39 Instructions:\n\nUnderstand the user input and extract:\n\nProperty type (apartment, villa, studio, office, etc.)\n\nScene type (interior/exterior + room type)\n\nStyle (modern, luxury, minimal, industrial, etc.)\n\nLighting (daylight, golden hour, artificial warm lighting)\n\nPerspective (wide-angle, eye-level, aerial, etc.)\n\nKey features (balcony, pool, fireplace, skyline view, etc.)\n\nApply smart defaults if missing:\n\nInteriors \u2192 bright natural daylight, wide-angle (24mm feel), clean staging\n\nExteriors \u2192 golden hour or soft daylight\n\nStyle \u2192 modern, minimal, premium\n\nPerspective \u2192 eye-level, professional real estate photography\n\nGenerate a single refined DALL\u00b7E prompt that:\n\nIs written in natural descriptive language (not keywords only)\n\nEmphasizes photorealism\n\nIncludes:\n\nlighting\n\nmaterials & textures\n\ncomposition\n\ncamera feel (wide-angle, depth of field)\n\nstaging details\n\nAvoids mentioning camera brands or complex parameters\n\nAvoids unsafe or copyrighted elements\n\nAlso generate:\n\nshort_caption (1-line summary)\n\nvariants (3 alternative prompts with different moods/perspectives)\n\nImportant Rules:\n\nDo NOT include technical parameters like --ar, steps, etc.\n\nDo NOT output negative prompts (DALL\u00b7E doesn\u2019t require them explicitly)\n\nAvoid people unless explicitly requested\n\nAlways prioritize realism over artistic or fantasy styles"
},
"promptType": "define"
},
"typeVersion": 2.2
},
{
"id": "31a144e0-3b78-4892-9139-620fb1096c16",
"name": "Append or update row in sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
976,
-48
],
"parameters": {
"columns": {
"value": {
"Initial Prompt": "={{ $('Append row in sheet').item.json['Initial Prompt'] }}",
"Improved Prompt": "={{ $json.output }}"
},
"schema": [
{
"id": "Employee Id",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Employee Id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Employee Name",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Employee Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Initial Prompt",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Initial Prompt",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Improved Prompt",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Improved Prompt",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Image Generated Link",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Image Generated Link",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Mail Id",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Mail Id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Video Initial Prompt",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Video Initial Prompt",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Improved Video Prompt",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Improved Video Prompt",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Video Generated Link",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Video Generated Link",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Initial Prompt"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1NEtQvs2hlcqmrFfSC6e1cReC25g2FEvxTiqdXOgtnjM/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1NEtQvs2hlcqmrFfSC6e1cReC25g2FEvxTiqdXOgtnjM",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1NEtQvs2hlcqmrFfSC6e1cReC25g2FEvxTiqdXOgtnjM/edit?usp=drivesdk",
"cachedResultName": "Data"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "7b5effd8-82ce-4a2b-9c23-cc29c6c6aae9",
"name": "Upload file",
"type": "n8n-nodes-base.googleDrive",
"position": [
1424,
-48
],
"parameters": {
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive",
"cachedResultUrl": "https://drive.google.com/drive/my-drive",
"cachedResultName": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "list",
"value": "1EaqK8qDrMlHbd0qbzrVFl88FBM8LlzSl",
"cachedResultUrl": "https://drive.google.com/drive/folders/1EaqK8qDrMlHbd0qbzrVFl88FBM8LlzSl",
"cachedResultName": "Ritz Media"
}
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "8ee11e74-8a00-486a-9b61-30174b082e8d",
"name": "Append or update row in sheet1",
"type": "n8n-nodes-base.googleSheets",
"position": [
1648,
-48
],
"parameters": {
"columns": {
"value": {
"Initial Prompt": "={{ $('Append row in sheet').item.json['Initial Prompt'] }}",
"Image Generated Link": "={{ $json.webViewLink }}"
},
"schema": [
{
"id": "Employee Id",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Employee Id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Employee Name",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Employee Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Initial Prompt",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Initial Prompt",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Improved Prompt",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Improved Prompt",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Image Generated Link",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Image Generated Link",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Initial Prompt"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1NEtQvs2hlcqmrFfSC6e1cReC25g2FEvxTiqdXOgtnjM/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1NEtQvs2hlcqmrFfSC6e1cReC25g2FEvxTiqdXOgtnjM",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1NEtQvs2hlcqmrFfSC6e1cReC25g2FEvxTiqdXOgtnjM/edit?usp=drivesdk",
"cachedResultName": "Data"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "7efb7372-9d60-40f9-8da9-e695d14827d4",
"name": "Send message and wait for response",
"type": "n8n-nodes-base.gmail",
"position": [
2320,
-48
],
"parameters": {
"sendTo": "={{ $('On form submission').item.json['Your Mail Id'] }}",
"message": "=Image prompt: {{ $('Append or update row in sheet').item.json['Improved Prompt'] }}\n\nLink: {{ $('Upload file').item.json.webViewLink }}",
"options": {},
"subject": "Approval for Image generated",
"operation": "sendAndWait",
"approvalOptions": {
"values": {
"approvalType": "double"
}
}
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "1ea600d5-912f-4b4f-8886-cb22616c0d1f",
"name": "Switch",
"type": "n8n-nodes-base.switch",
"position": [
2544,
-48
],
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "6096f72b-34cf-4add-9e07-b2a9489dd7cf",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $json.data.approved }}",
"rightValue": "true"
}
]
}
},
{
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "a4ab0696-4d44-486d-ba8a-3731f55ea2bb",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.data.approved }}",
"rightValue": "false"
}
]
}
}
]
},
"options": {}
},
"typeVersion": 3.2
},
{
"id": "194ada00-f234-4602-803a-d1263b376508",
"name": "Send a message",
"type": "n8n-nodes-base.gmail",
"position": [
2736,
64
],
"parameters": {
"sendTo": "={{ $('On form submission').item.json['Your Mail Id'] }}",
"message": "Please work on prompt again and generate a new image",
"options": {},
"subject": "Failed the Image Test"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "8a1588a5-b5d2-48bd-83c6-0f404a896a41",
"name": "Form",
"type": "n8n-nodes-base.form",
"position": [
3008,
-64
],
"parameters": {
"options": {},
"formFields": {
"values": [
{
"fieldLabel": "Prompt for video generation ",
"requiredField": true
}
]
}
},
"typeVersion": 1
},
{
"id": "4e718778-2efd-498a-92f3-cd9b720fce27",
"name": "AI Agent1",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
3248,
-64
],
"parameters": {
"text": "=Enhance and optimize the following prompt for clarity, engagement, and effectiveness: {{ $json['Prompt for video generation '] }} . Just provide the enhanced prompt\n\n",
"options": {
"systemMessage": "You are a helpful assistant"
},
"promptType": "define"
},
"typeVersion": 2.2
},
{
"id": "9f73b0bd-c6c1-4070-a206-50e37dd5caa0",
"name": "Append or update row in sheet2",
"type": "n8n-nodes-base.googleSheets",
"position": [
4672,
-64
],
"parameters": {
"columns": {
"value": {
"Initial Prompt": "={{ $('Append row in sheet').item.json['Initial Prompt'] }}",
"Video Generated Link": "={{ $('Upload file1').item.json.webContentLink }}",
"Video Initial Prompt": "={{ $('Form').item.json['Prompt for video generation '] }}",
"Improved Video Prompt": "={{ $('AI Agent1').item.json.output }}"
},
"schema": [
{
"id": "Employee Id",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Employee Id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Employee Name",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Employee Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Initial Prompt",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Initial Prompt",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Improved Prompt",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Improved Prompt",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Image Generated Link",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Image Generated Link",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Mail Id",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Mail Id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Video Initial Prompt",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Video Initial Prompt",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Improved Video Prompt",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Improved Video Prompt",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Video Generated Link",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Video Generated Link",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Initial Prompt"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1NEtQvs2hlcqmrFfSC6e1cReC25g2FEvxTiqdXOgtnjM/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1NEtQvs2hlcqmrFfSC6e1cReC25g2FEvxTiqdXOgtnjM",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1NEtQvs2hlcqmrFfSC6e1cReC25g2FEvxTiqdXOgtnjM/edit?usp=drivesdk",
"cachedResultName": "Data"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "97b558ad-393d-453e-ba98-5cbef9ea71f0",
"name": "Share file",
"type": "n8n-nodes-base.googleDrive",
"position": [
2096,
-48
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Upload file').item.json.id }}"
},
"options": {},
"operation": "share",
"permissionsUi": {
"permissionsValues": {
"role": "writer",
"type": "anyone",
"allowFileDiscovery": true
}
}
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "aa4bbf36-08ea-4bc0-945c-57303ed84e69",
"name": "Wait",
"type": "n8n-nodes-base.wait",
"position": [
1872,
-48
],
"parameters": {
"amount": 10
},
"typeVersion": 1.1
},
{
"id": "db3e263f-3e9b-4a71-aee6-79471be33dcb",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-512,
-144
],
"parameters": {
"width": 592,
"height": 1376,
"content": "# \ud83c\udfe1 Automated Real-Estate Content Generation Workflow\n\nThis n8n workflow automates turning short user ideas into production-ready real-estate marketing assets (photorealistic images and optional 360\u00b0 videos). A form submission seeds a prompt board \u2192 an LLM refines prompts \u2192 the refined prompt is sent to an image/video generator \u2192 assets are uploaded to Google Drive and an approval email is sent so stakeholders can accept/reject outputs.\n\n---\n\n## \u2699\ufe0f How It Works (High Level)\n\n1. **Trigger:** \n User submits the ideation form (`On form submission`).\n\n2. **Record:** \n The raw idea is appended to Google Sheets (`Append row in sheet`).\n\n3. **Refine:** \n An AI agent (LangChain/OpenAI) refines the prompt into a photorealistic prompt and produces captions & variants (`AI Agent`).\n\n4. **Store Refined Prompt:** \n Update the sheet with the improved prompt (`Append or update row in sheet`).\n\n5. **Generate Asset:** \n Send improved prompt to OpenAI image/video generation nodes (`Generate an image2` / `Generate a video`).\n\n6. **Upload & Share:** \n Upload resulting files to Google Drive (`Upload file / Upload file1`) and set sharing permissions (`Share file / Share file1`).\n\n7. **Approval Flow:** \n Email the requester with the asset + improved prompt and wait for approval (`Send message and wait for response`).\n\n8. **Decision:** \n A `Switch` node routes approved outputs to final storage/notifications and rejected ones back for rework (or sends a failure email).\n\n9. **Video Branch:** \n Separate flow \u2192 refine \u2192 HTTP \u2192 video generator \u2192 upload \u2192 share \u2192 update sheet (parallel video pipeline).\n\n---\n\n## Quick Setup Guide\n\ud83d\udc49 [Demo & Setup Video](https://drive.google.com/file/d/1a1n-XZIJkKsmBDjdNsG6Vg_AKv8AJxe5/view?usp=sharing)\n\ud83d\udc49 [Sheet Template](https://docs.google.com/spreadsheets/d/1NEtQvs2hlcqmrFfSC6e1cReC25g2FEvxTiqdXOgtnjM/edit?usp=sharing)\n\ud83d\udc49 [Course](https://www.udemy.com/course/n8n-automation-mastery-build-ai-powered-enterprise-ready/?referralCode=2EAE71591D3BEB80F2CC)"
},
"typeVersion": 1
},
{
"id": "d85ad014-baab-477a-bf26-71a1402e4486",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
672,
160
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {},
"responsesApiEnabled": false
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "777c5995-6b27-46a5-8197-2fedd20744a5",
"name": "Generate an image2",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
1200,
-48
],
"parameters": {
"prompt": "={{ $json['Improved Prompt'] }}",
"options": {
"size": "1792x1024"
},
"resource": "image"
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "cdb6fc96-067d-4bbc-a1bc-29c68e5fbdce",
"name": "OpenAI Chat Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
3248,
112
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {},
"responsesApiEnabled": false
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "9a60bceb-fecc-40c4-80b4-4fe49b9accd7",
"name": "HTTP Request",
"type": "n8n-nodes-base.httpRequest",
"position": [
3600,
-64
],
"parameters": {
"url": "={{ $('Upload file').item.json.webContentLink }}",
"options": {}
},
"typeVersion": 4.3
},
{
"id": "1fa2f30b-187d-4d94-b782-8771b6822279",
"name": "Generate a video",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
3808,
-64
],
"parameters": {
"size": "1792x1024",
"prompt": "={{ $('AI Agent1').item.json.output }}",
"modelId": {
"__rl": true,
"mode": "list",
"value": "sora-2-pro",
"cachedResultName": "SORA-2-PRO"
},
"options": {
"waitTime": 7200,
"binaryPropertyNameReference": "data"
},
"resource": "video"
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "cf3231ed-daa7-4c9a-8388-ea75fbd38e12",
"name": "Upload file1",
"type": "n8n-nodes-base.googleDrive",
"position": [
4032,
-64
],
"parameters": {
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive",
"cachedResultUrl": "https://drive.google.com/drive/my-drive",
"cachedResultName": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "list",
"value": "1EaqK8qDrMlHbd0qbzrVFl88FBM8LlzSl",
"cachedResultUrl": "https://drive.google.com/drive/folders/1EaqK8qDrMlHbd0qbzrVFl88FBM8LlzSl",
"cachedResultName": "Ritz Media"
}
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "c92537d3-644a-483e-b5f5-73fa00dd7fed",
"name": "Share file1",
"type": "n8n-nodes-base.googleDrive",
"position": [
4448,
-64
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Upload file1').item.json.id }}"
},
"options": {},
"operation": "share",
"permissionsUi": {
"permissionsValues": {
"role": "writer",
"type": "anyone",
"allowFileDiscovery": true
}
}
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "87e66d06-f843-4e65-aabe-81d99ca2a07f",
"name": "Wait1",
"type": "n8n-nodes-base.wait",
"position": [
4224,
-64
],
"parameters": {
"amount": 10
},
"typeVersion": 1.1
},
{
"id": "a2685578-7f92-45cc-8e38-77e1d3d236ab",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
96,
-144
],
"parameters": {
"color": 6,
"width": 256,
"height": 256,
"content": "**Idea Capture** \nCollect user idea + brief fields (style, property type, desired output). \n"
},
"typeVersion": 1
},
{
"id": "1629ba46-55db-4c86-a8b0-c5d13655d960",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
352,
-144
],
"parameters": {
"color": 6,
"width": 256,
"height": 256,
"content": "**Record / Log** \nSave raw idea + metadata (user, timestamp) to Google Sheets for audit. \n"
},
"typeVersion": 1
},
{
"id": "40843e75-471f-416f-8fb3-671af0ce4564",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
608,
-144
],
"parameters": {
"color": 6,
"width": 272,
"height": 448,
"content": "**Prompt Refinement (AI Agent)** \nLLM converts raw idea \u2192 photorealistic prompt + captions + variants. \n\n"
},
"typeVersion": 1
},
{
"id": "8426b6f6-0981-4702-8d71-66a7deebf342",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
880,
-144
],
"parameters": {
"color": 6,
"width": 272,
"height": 272,
"content": "**Store Refined Prompt** \nWrite back refined prompt and model metadata to the sheet. \n"
},
"typeVersion": 1
},
{
"id": "3f142344-b014-4e4e-8090-e94c1ff97f71",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
1136,
-144
],
"parameters": {
"color": 6,
"width": 272,
"height": 272,
"content": "**Asset Generation** \nSend refined prompt to image/video generator and receive files/URLs. \n"
},
"typeVersion": 1
},
{
"id": "e6c03e25-2621-486e-88fe-2d5a90f15c75",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
1408,
-144
],
"parameters": {
"color": 6,
"width": 816,
"height": 272,
"content": "**Upload & Share** \nUpload assets to Google Drive and create view-only share links for reviewers.\n"
},
"typeVersion": 1
},
{
"id": "d0684bb2-e816-4dff-b0bc-789ada37e1ec",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
2224,
-144
],
"parameters": {
"color": 6,
"width": 272,
"height": 272,
"content": "**Approval Flow** \nEmail the requester with asset + prompt; wait for approval or rejection. "
},
"typeVersion": 1
},
{
"id": "52d232fd-cb5d-4671-9150-9fdb66b39618",
"name": "Sticky Note8",
"type": "n8n-nodes-base.stickyNote",
"position": [
2496,
-144
],
"parameters": {
"color": 6,
"width": 416,
"height": 384,
"content": "**Decision & Routing** \nRoute based on approval \u2014 approved \u2192 final storage/notifications; rejected \u2192 failure email."
},
"typeVersion": 1
},
{
"id": "b9ca1837-51ff-4684-a285-01c2ff085b08",
"name": "Sticky Note9",
"type": "n8n-nodes-base.stickyNote",
"position": [
2912,
-144
],
"parameters": {
"color": 6,
"width": 1056,
"height": 384,
"content": "**Video Branch (Parallel)** \nFaster or separate form flow for 360\u00b0/sora-2-pro video generation, then upload & share. "
},
"typeVersion": 1
},
{
"id": "272541bd-f616-47b3-bf16-b8f4168340ed",
"name": "Sticky Note10",
"type": "n8n-nodes-base.stickyNote",
"position": [
3968,
-144
],
"parameters": {
"color": 6,
"width": 624,
"height": 272,
"content": "**Upload & Share** \nUpload assets to Google Drive and create view-only share links for reviewers.\n"
},
"typeVersion": 1
},
{
"id": "e34da2c8-4271-4502-bd23-c1345262eed5",
"name": "Sticky Note11",
"type": "n8n-nodes-base.stickyNote",
"position": [
4592,
-144
],
"parameters": {
"color": 6,
"width": 272,
"height": 272,
"content": "**Store Video Data** \n\n"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "c755ed0d-28f4-4d1b-9214-0a191e49f7e6",
"connections": {
"Form": {
"main": [
[
{
"node": "AI Agent1",
"type": "main",
"index": 0
}
]
]
},
"Wait": {
"main": [
[
{
"node": "Share file",
"type": "main",
"index": 0
}
]
]
},
"Wait1": {
"main": [
[
{
"node": "Share file1",
"type": "main",
"index": 0
}
]
]
},
"Switch": {
"main": [
[
{
"node": "Form",
"type": "main",
"index": 0
}
],
[
{
"node": "Send a message",
"type": "main",
"index": 0
}
]
]
},
"AI Agent": {
"main": [
[
{
"node": "Append or update row in sheet",
"type": "main",
"index": 0
}
]
]
},
"AI Agent1": {
"main": [
[
{
"node": "HTTP Request",
"type": "main",
"index": 0
}
]
]
},
"Share file": {
"main": [
[
{
"node": "Send message and wait for response",
"type": "main",
"index": 0
}
]
]
},
"Share file1": {
"main": [
[
{
"node": "Append or update row in sheet2",
"type": "main",
"index": 0
}
]
]
},
"Upload file": {
"main": [
[
{
"node": "Append or update row in sheet1",
"type": "main",
"index": 0
}
]
]
},
"HTTP Request": {
"main": [
[
{
"node": "Generate a video",
"type": "main",
"index": 0
}
]
]
},
"Upload file1": {
"main": [
[
{
"node": "Wait1",
"type": "main",
"index": 0
}
]
]
},
"Generate a video": {
"main": [
[
{
"node": "Upload file1",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Generate an image2": {
"main": [
[
{
"node": "Upload file",
"type": "main",
"index": 0
}
]
]
},
"On form submission": {
"main": [
[
{
"node": "Append row in sheet",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model1": {
"ai_languageModel": [
[
{
"node": "AI Agent1",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Append row in sheet": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"Append or update row in sheet": {
"main": [
[
{
"node": "Generate an image2",
"type": "main",
"index": 0
}
]
]
},
"Append or update row in sheet1": {
"main": [
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"Send message and wait for response": {
"main": [
[
{
"node": "Switch",
"type": "main",
"index": 0
}
]
]
}
}
}
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.
gmailOAuth2googleDriveOAuth2ApigoogleSheetsOAuth2ApiopenAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This n8n workflow automates turning short user ideas into production-ready real-estate marketing assets (photorealistic images and optional 360° videos). A form submission seeds a prompt board → an LLM refines prompts → the refined prompt is sent to an image/video generator →…
Source: https://n8n.io/workflows/14134/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
🎯 Create viral TikToks, Shorts, Reels, podcasts, and ASMR videos in minutes — all on autopilot.
Generate AI viral videos with NanoBanana & VEO3, shared on socials via Blotato 2. Uses @blotato/n8n-nodes-blotato, googleSheets, lmChatOpenAi, toolThink. Event-driven trigger; 94 nodes.
This template is designed for marketers, content creators, and e-commerce brands who want to automate the creation of professional ad videos at scale. It’s ideal for teams looking to generate consiste
This automation is designed to help you generate AI-powered music tracks, cover art, and fully rendered music videos — all triggered from a simple Telegram chat and managed via Google Sheets.
🧠 Automate end-to-end SEO blog creation and WordPress publishing using a GPT-5 multi-agent workflow with real-time research, metadata generation, and optional featured images.