{ "name": "AI Background Generation with Nano Banana (Gemini Image)", "nodes": [ { "parameters": { "content": "## šŸŽØ AI Background Generation\n\n**What it does:**\n- Generates custom background image from text prompt\n- Uses Gemini's Nano Banana (native image generation)\n- Removes foreground video background\n- Composites video on AI-generated background\n- Saves final result to Google Drive\n\n**Perfect for:**\n- Creating custom scenes from imagination\n- Marketing videos with branded environments\n- Product demos with tailored backgrounds\n- Social media content with unique visuals\n- AI avatars in AI-generated worlds\n\n**Processing time:** 2-4 minutes per video\n- Image generation: ~10-20 seconds\n- Background removal: ~20-60 seconds\n- Composition: ~30-60 seconds\n\n**Setup:** ~5 minutes (2 API keys)\n\n[šŸ“– Full Documentation](https://docs.videobgremover.com/)", "height": 580, "width": 520 }, "id": "c7388890-0c23-4122-bd5d-252650bc1bcc", "name": "šŸ“‹ Overview", "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ -3360, -144 ], "notesTextSize": "large", "notesBackgroundColor": 4 }, { "parameters": { "content": "## šŸ”‘ API Keys Setup (Required)\n\n**Step 1: Gemini API Key**\n- Visit: https://aistudio.google.com/apikey\n- Create new API key\n- Add to n8n: Settings → Variables\n - Name: `GEMINI_KEY`\n - Value: your Gemini API key\n\n**Step 2: VideoBGRemover API Key**\n- Visit: https://videobgremover.com/api-management\n- Sign up (free tier available)\n- Copy your API key\n- Add to n8n: Settings → Variables\n - Name: `VIDEOBGREMOVER_KEY`\n - Value: your API key\n\nāœ… This workflow uses `$vars.GEMINI_KEY` and `$vars.VIDEOBGREMOVER_KEY` (secure)\n\n**Pricing:**\n- Gemini: $0.03 per image (~1024x1024)\n- VideoBGRemover: $0.50-$2.00 per min", "height": 380, "width": 380 }, "id": "4cea6533-3c98-4416-9590-55d59fa384c1", "name": "šŸ”‘ API Key Setup", "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ -2784, -160 ] }, { "parameters": { "content": "## šŸ“„ Input Required\n\n**video_url** (required)\n- URL to your foreground video\n- AI actors, product demos, talking heads\n- Any resolution up to 4K\n- Must be publicly accessible\n\n**background_prompt** (required)\n- Text description of desired background\n- Be descriptive and specific\n- Example: \"A modern minimalist office with floor-to-ceiling windows overlooking a city skyline at sunset\"\n\n**aspect_ratio** (optional)\n- Default: \"1:1\" (square)\n- Landscape: \"16:9\", \"4:3\"\n- Portrait: \"9:16\", \"3:4\"\n- Full list: https://ai.google.dev/gemini-api/docs/image-generation#aspect_ratios\n\nāš ļø Video must be **publicly accessible URL**", "height": 320, "width": 380 }, "id": "e78fbba9-30f1-4195-b186-7b0e1089592f", "name": "šŸ“„ Inputs", "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ -2240, -144 ] }, { "parameters": { "content": "## šŸŽØ Nano Banana (Gemini Image)\n\n**How it works:**\n- Uses Gemini 2.5 Flash with native image generation\n- Generates high-quality backgrounds from text\n- Supports detailed, photorealistic prompts\n- Built-in SynthID watermarking\n\n**Prompt tips:**\n- Be descriptive and specific\n- Mention lighting, colors, mood\n- Use photography terms for realism\n- Describe the scene, not just keywords\n\n**Examples:**\n- \"A cozy coffee shop interior with warm lighting and vintage decor\"\n- \"Modern tech office with glass walls and city views\"\n- \"Tropical beach at golden hour with palm trees\"\n\n**Output:** Base64-encoded PNG image\n**Latency:** ~10-20 seconds per image", "height": 380, "width": 380 }, "id": "0c554823-6fe3-4ab1-8ff8-ae6ea3d6e369", "name": "šŸŽØ Nano Banana", "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ -1680, -144 ] }, { "parameters": { "content": "## šŸ”„ Processing Flow\n\n**1. Generate Background** (~10-20s)\n- Gemini creates image from prompt\n- Returns base64-encoded PNG\n- Supports multiple aspect ratios\n\n**2. Background Removal** (~20-60s)\n- VideoBGRemover processes video\n- AI-powered segmentation\n- Clean edge detection\n\n**3. Composition** (~30-60s)\n- Composite video on AI background\n- Centered template (maintain aspect)\n- Professional framing\n\n**4. Upload to Drive**\n- Automatic save with shareable link\n- Permanent storage\n\nā±ļø Total: 2-4 min per video", "height": 320, "width": 380 }, "id": "c644eeb5-59d2-4423-8ae4-78843e8c17b6", "name": "šŸ”„ Processing", "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ -1120, -144 ] }, { "parameters": { "content": "## šŸ’¾ Google Drive Setup\n\n**Step 1:** Connect Google Drive\n- Click \"Upload to Google Drive\" node\n- Click \"Connect\"\n- Authorize n8n\n\n**Step 2:** Choose folder (optional)\n- Default: Root of \"My Drive\"\n- Or select specific folder\n\n**Output:**\n- Permanent shareable link\n- Direct download URL\n- File metadata\n\nā±ļø Setup time: ~2 minutes", "height": 280, "width": 380 }, "id": "6cf6aa8c-213e-454b-acc4-86c8331cbb25", "name": "šŸ’¾ Google Drive", "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ -560, -144 ] }, { "parameters": { "content": "## šŸš€ How to Use\n\n**Manual testing:**\n1. Update inputs in \"Sample Inputs (manual)\"\n - `video_url`: Your video URL\n - `background_prompt`: Describe background\n - `aspect_ratio`: Optional (default 1:1)\n2. Click \"Execute Workflow\"\n3. Wait 2-4 minutes for processing\n4. Check Google Drive for result\n\n**Webhook automation:**\n1. Activate workflow\n2. Copy webhook URL\n3. POST to webhook:\n```json\n{\n \"video_url\": \"https://...\",\n \"background_prompt\": \"A modern office...\",\n \"aspect_ratio\": \"16:9\"\n}\n```\n\n**Batch processing:** Connect to Google Sheets or Airtable for bulk automation", "height": 380, "width": 380 }, "id": "6961e968-3b00-468d-8109-f9ce3c2ebaa4", "name": "šŸš€ Usage", "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ 16, -144 ] }, { "parameters": { "httpMethod": "POST", "path": "ai-background-gen", "responseMode": "responseNode", "options": {} }, "id": "827a2d53-0d00-492c-b2d4-095bf01a9dc2", "name": "Webhook Trigger", "type": "n8n-nodes-base.webhook", "typeVersion": 1.1, "position": [ -2800, 272 ], "webhookId": "ai-background-gen" }, { "parameters": {}, "id": "d0af9917-1f4f-4357-bf89-2ab33bdc329c", "name": "Manual Trigger", "type": "n8n-nodes-base.manualTrigger", "typeVersion": 1, "position": [ -2800, 432 ] }, { "parameters": { "content": "## šŸŽØ GEMINI AI IMAGE GENERATION SECTION\nGenerates custom background image from text prompt using Nano Banana → Returns base64 PNG", "height": 100, "width": 900 }, "id": "525d4ab1-81c3-4194-8428-8eba04186dbb", "name": "Section: Gemini", "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ -2368, 512 ], "notesBackgroundColor": 5 }, { "parameters": { "content": "## šŸ“ø Example: Input\n\n![AI Actor](https://videos.videobgremover.com/public-assets/template-04-assets/01-foreground-ai-actor.jpg)\n\n**1. Foreground Video**\n*AI avatar speaking*\n\n**Prompt:**\n\"Modern office with city skyline at golden hour\"\n\n**Aspect ratio:** 16:9\n\n**Full video:**\nhttps://videos.videobgremover.com/public-videos/assets/ai-actor.mp4", "height": 748, "width": 416 }, "id": "2619d740-a101-489c-b2a0-0b6bcd3371e5", "name": "šŸ“ø Input", "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ -3360, 704 ], "notesBackgroundColor": 4 }, { "parameters": { "assignments": { "assignments": [ { "name": "video_url", "value": "={{ $json.body?.video_url ?? $json.video_url }}", "type": "string" }, { "name": "background_prompt", "value": "={{ $json.body?.background_prompt ?? $json.background_prompt }}", "type": "string" }, { "name": "aspect_ratio", "value": "={{ $json.body?.aspect_ratio ?? $json.aspect_ratio ?? '1:1' }}", "type": "string" }, { "name": "source", "value": "webhook", "type": "string" } ] }, "options": {} }, "id": "0e05ad57-00a1-48f6-8a2a-15583cd04750", "name": "Extract Webhook Data", "type": "n8n-nodes-base.set", "typeVersion": 3.3, "position": [ -2640, 272 ] }, { "parameters": { "assignments": { "assignments": [ { "name": "video_url", "value": "https://videos.videobgremover.com/public-videos/assets/ai-actor.mp4", "type": "string" }, { "name": "background_prompt", "value": "A modern minimalist office with floor-to-ceiling windows overlooking a vibrant city skyline at golden hour. Warm sunlight streams through the glass, casting soft shadows on a polished concrete floor. In the background, sleek wooden desks and green plants create a professional yet inviting atmosphere. The lighting is natural and diffused, creating a calm, productive mood. Photorealistic, architectural photography style.", "type": "string" }, { "name": "aspect_ratio", "value": "16:9", "type": "string" }, { "name": "source", "value": "manual", "type": "string" } ] }, "options": {} }, "id": "e1149727-5f4b-4d18-93c8-2607c069b2f4", "name": "Sample Inputs (Edit Here)", "type": "n8n-nodes-base.set", "typeVersion": 3.3, "position": [ -2640, 432 ] }, { "parameters": { "mode": "append" }, "id": "65c2e215-a254-4514-a5bd-c36bd6d344ca", "name": "Merge Triggers", "type": "n8n-nodes-base.merge", "typeVersion": 2.1, "position": [ -2480, 352 ] }, { "parameters": { "method": "POST", "url": "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-image:generateContent", "sendHeaders": true, "headerParameters": { "parameters": [ { "name": "x-goog-api-key", "value": "={{ $vars.GEMINI_KEY }}" }, { "name": "Content-Type", "value": "application/json" } ] }, "sendBody": true, "specifyBody": "json", "jsonBody": "={\n \"contents\": [{\n \"parts\": [\n {\"text\": \"{{ $json.background_prompt }}\"}\n ]\n }],\n \"generationConfig\": {\n \"responseModalities\": [\"Image\"],\n \"imageConfig\": {\n \"aspectRatio\": \"{{ $json.aspect_ratio }}\"\n }\n }\n}", "options": { "response": { "response": { "neverError": true, "responseFormat": "json" } } } }, "id": "6483a5c1-fd4e-42ee-8ad8-219aded66c30", "name": "1. Generate Background Image (Gemini)", "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.1, "position": [ -2320, 352 ] }, { "parameters": { "jsCode": "// Extract base64 image from Gemini response\nconst imageData = $input.item.json.candidates[0].content.parts[0].inlineData.data;\nconst mimeType = $input.item.json.candidates[0].content.parts[0].inlineData.mimeType;\n\n// Convert base64 to binary for temporary storage\nconst buffer = Buffer.from(imageData, 'base64');\n\n// Create a data URL for VideoBGRemover API\nconst dataUrl = `data:${mimeType};base64,${imageData}`;\n\nreturn {\n json: {\n background_image_data: imageData,\n background_image_mime: mimeType,\n background_image_url: dataUrl\n },\n binary: {\n data: {\n data: buffer,\n mimeType: mimeType,\n fileName: 'generated_background.png'\n }\n }\n};" }, "id": "157c8a70-af96-4353-9fe8-8104d1f2073e", "name": "Extract Image Data", "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ -2080, 352 ] }, { "parameters": { "name": "=ai_bg_{{ $('Merge Triggers').item.json.background_prompt.substring(0, 30).replace(/[^a-zA-Z0-9]/g, '_') }}_{{ new Date().getTime() }}.png", "driveId": { "__rl": true, "mode": "list", "value": "My Drive" }, "folderId": { "__rl": true, "mode": "list", "value": "root" }, "options": { "simplifyOutput": true } }, "id": "0ba0480a-ace4-447e-8698-1dc854205011", "name": "2. Save Background Image to Drive", "type": "n8n-nodes-base.googleDrive", "typeVersion": 3, "position": [ -1840, 352 ] }, { "parameters": { "operation": "share", "fileId": "={{ $json.id }}", "permissionsUi": { "permissionsValues": { "role": "reader", "type": "anyone" } }, "options": {} }, "id": "68810993-3dbf-4f53-a27c-a461653f8f7f", "name": "3. Make Background Image Public", "type": "n8n-nodes-base.googleDrive", "typeVersion": 3, "position": [ -1600, 352 ] }, { "parameters": { "content": "## šŸ“ø Example: Generated\n\n![Generated Background](https://videos.videobgremover.com/public-assets/template-04-assets/02-generated-background-nano-banana.png)\n\n**2. Nano Banana Output**\n*AI-generated office background*\n\n**Details:**\n- Model: Gemini 2.5 Flash\n- Aspect ratio: 16:9\n- Resolution: ~1536x864px\n- Time: ~10-15 seconds\n- PNG with SynthID\n\n**Saved to Drive & made public**", "height": 700, "width": 432 }, "id": "2dd106d4-9f8e-4a22-8da7-c5f245fbf0f5", "name": "šŸ“ø Generated", "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ -2800, 704 ], "notesBackgroundColor": 6 }, { "parameters": { "content": "## šŸŽ¬ VIDEOBGREMOVER COMPOSITION SECTION\nRemoves foreground video background → Composites on AI-generated image → Centered template", "height": 100, "width": 1020 }, "id": "6bcc43e4-4de5-4c73-9dba-610e91d0a23f", "name": "Section: VideoBGRemover", "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ -1360, 512 ], "notesBackgroundColor": 2 }, { "parameters": { "method": "POST", "url": "https://api.videobgremover.com/api/v1/jobs", "sendHeaders": true, "headerParameters": { "parameters": [ { "name": "X-API-Key", "value": "={{ $vars.VIDEOBGREMOVER_KEY }}" }, { "name": "Content-Type", "value": "application/json" } ] }, "sendBody": true, "specifyBody": "json", "jsonBody": "={ \"video_url\": \"{{ $('Merge Triggers').item.json.video_url }}\" }", "options": { "response": { "response": { "neverError": true, "responseFormat": "json" } } } }, "id": "639e12d4-7275-4353-9bbd-5a4a62138ada", "name": "4. Create Job (Upload Video)", "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.1, "position": [ -1360, 592 ] }, { "parameters": { "method": "POST", "url": "=https://api.videobgremover.com/api/v1/jobs/{{ $json.id }}/start", "sendHeaders": true, "headerParameters": { "parameters": [ { "name": "X-API-Key", "value": "={{ $vars.VIDEOBGREMOVER_KEY }}" }, { "name": "Content-Type", "value": "application/json" } ] }, "sendBody": true, "specifyBody": "json", "jsonBody": "={\n \"background\": {\n \"type\": \"composition\",\n \"composition\": {\n \"template\": \"centered\",\n \"background_type\": \"image\",\n \"background_url\": \"https://drive.google.com/uc?id={{ $('2. Save Background Image to Drive').item.json.id }}\",\n \"export_format\": \"h264\",\n \"export_preset\": \"medium\"\n }\n }\n}", "options": { "response": { "response": { "neverError": true, "responseFormat": "json" } } } }, "id": "aef3cf73-31dc-429e-9f61-083338ca1520", "name": "5. Start Composition (AI Background)", "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.1, "position": [ -1120, 592 ] }, { "parameters": { "url": "=https://api.videobgremover.com/api/v1/jobs/{{ $('4. Create Job (Upload Video)').item.json.id }}/status", "sendHeaders": true, "headerParameters": { "parameters": [ { "name": "X-API-Key", "value": "={{ $vars.VIDEOBGREMOVER_KEY }}" } ] }, "options": { "response": { "response": { "neverError": true, "responseFormat": "json" } } } }, "id": "e3a43a09-01ad-4618-ba17-b16429bfe3b4", "name": "6. Check Job Status", "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.1, "position": [ -880, 592 ] }, { "parameters": { "conditions": { "options": { "caseSensitive": true, "leftValue": "", "typeValidation": "strict" }, "conditions": [ { "id": "is_completed_condition", "leftValue": "={{ $json.status }}", "rightValue": "completed", "operator": { "type": "string", "operation": "equals" } } ], "combinator": "and" }, "options": {} }, "id": "249577e0-7159-4945-92fd-ad3a7bfbb9a1", "name": "Is Complete?", "type": "n8n-nodes-base.if", "typeVersion": 2, "position": [ -640, 592 ] }, { "parameters": { "content": "## šŸ’¾ OUTPUT SECTION\nDownload final video → Upload to Google Drive → Return response", "height": 100, "width": 840 }, "id": "b0b6b36f-284c-446e-894b-1bacfae40264", "name": "Section: Output", "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ -400, 512 ], "notesBackgroundColor": 3 }, { "parameters": { "url": "={{ $json.processed_video_url }}", "options": { "response": { "response": { "responseFormat": "file" } } } }, "id": "4acc452e-2286-4db8-92b0-799fda21f6de", "name": "7. Download Video", "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.1, "position": [ -400, 752 ] }, { "parameters": { "name": "=ai_bg_video_{{ $('4. Create Job (Upload Video)').item.json.id }}_{{ new Date().getTime() }}.mp4", "driveId": { "__rl": true, "mode": "list", "value": "My Drive" }, "folderId": { "__rl": true, "mode": "list", "value": "root" }, "options": { "simplifyOutput": true } }, "id": "432d20ce-1e25-400c-86a7-789e8447c323", "name": "8. Upload Video to Drive", "type": "n8n-nodes-base.googleDrive", "typeVersion": 3, "position": [ -160, 752 ] }, { "parameters": { "content": "## šŸ“ø Example: Final\n\n![Final Result](https://videos.videobgremover.com/public-assets/template-04-assets/03-final-composed-result.jpg)\n\n**3. Composed Video**\n*AI actor on AI background*\n\n**Details:**\n- Template: Centered\n- Background removed\n- Aspect ratio preserved\n- Professional framing\n\n**Full video:**\nhttps://videos.videobgremover.com/public-assets/template-04-assets/final-result.mp4\n\n**Saved to Google Drive**", "height": 676, "width": 320 }, "id": "ac59da0a-0526-4f25-ab9c-fe42a3a353d1", "name": "šŸ“ø Final", "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ -2240, 704 ], "notesBackgroundColor": 4 }, { "parameters": { "assignments": { "assignments": [ { "name": "final_result", "type": "object", "value": "={{ {\n success: true,\n job_id: $('4. Create Job (Upload Video)').item.json.id,\n export_id: $('5. Start Composition (AI Background)').item.json.export_id,\n video: {\n google_drive_id: $('8. Upload Video to Drive').item.json.id,\n google_drive_url: $('8. Upload Video to Drive').item.json.webViewLink,\n download_url: $('6. Check Job Status').item.json.processed_video_url,\n filename: $('8. Upload Video to Drive').item.json.name,\n length_seconds: $('6. Check Job Status').item.json.length_seconds\n },\n background_image: {\n google_drive_id: $('2. Save Background Image to Drive').item.json.id,\n google_drive_url: $('2. Save Background Image to Drive').item.json.webViewLink,\n public_url: 'https://drive.google.com/uc?id=' + $('2. Save Background Image to Drive').item.json.id,\n filename: $('2. Save Background Image to Drive').item.json.name,\n prompt: $('Merge Triggers').item.json.background_prompt,\n aspect_ratio: $('Merge Triggers').item.json.aspect_ratio\n },\n message: 'Video composed with AI-generated background successfully. Both video and background image saved to Google Drive',\n source: $('Merge Triggers').item.json.source\n} }}" } ] }, "options": {} }, "id": "06d9ffa9-5ea1-4f76-b7c0-72ee3f9561a0", "name": "Build Success Response", "type": "n8n-nodes-base.set", "typeVersion": 3.3, "position": [ 96, 752 ] }, { "parameters": { "conditions": { "options": { "caseSensitive": true, "leftValue": "", "typeValidation": "strict" }, "conditions": [ { "id": "is_failed_condition", "leftValue": "={{ $json.status }}", "rightValue": "failed", "operator": { "type": "string", "operation": "equals" } } ], "combinator": "and" }, "options": {} }, "id": "4c13c1eb-3d12-444d-821a-9cce21a9356f", "name": "Has Failed?", "type": "n8n-nodes-base.if", "typeVersion": 2, "position": [ -640, 832 ] }, { "parameters": { "amount": 20 }, "id": "710a1000-eda6-4f22-be7c-618f875b2579", "name": "Wait 20s", "type": "n8n-nodes-base.wait", "typeVersion": 1.1, "position": [ -400, 992 ] }, { "parameters": { "assignments": { "assignments": [ { "name": "final_result", "type": "object", "value": "={{ {\n success: false,\n job_id: $('4. Create Job (Upload Video)').item.json.id,\n error: $json.error || 'Video composition with AI background failed',\n status: $json.status,\n message: 'Failed to compose video with AI-generated background',\n source: $('Merge Triggers').item.json.source\n} }}" } ] }, "options": {} }, "id": "afc2bd32-fe3a-4e16-a6ae-2d75575582c8", "name": "Build Error Response", "type": "n8n-nodes-base.set", "typeVersion": 3.3, "position": [ -640, 992 ] }, { "parameters": { "conditions": { "options": { "caseSensitive": true, "leftValue": "", "typeValidation": "strict" }, "conditions": [ { "id": "is_webhook_condition", "leftValue": "={{ $json.final_result?.source ?? $json.source }}", "rightValue": "webhook", "operator": { "type": "string", "operation": "equals" } } ], "combinator": "and" }, "options": {} }, "id": "006453e6-d202-4b10-9feb-544b6be77f52", "name": "From Webhook?", "type": "n8n-nodes-base.if", "typeVersion": 2, "position": [ 336, 752 ] }, { "parameters": { "options": {} }, "id": "a6ba3383-2e3b-4497-8e88-a9d2e96561c1", "name": "Respond to Webhook", "type": "n8n-nodes-base.respondToWebhook", "typeVersion": 1.1, "position": [ 576, 672 ] }, { "parameters": { "assignments": { "assignments": [ { "name": "final_result", "type": "object", "value": "={{ $json.final_result ?? $json }}" } ] }, "options": {} }, "id": "a30e6cda-335b-4a68-afbd-d492beb28c60", "name": "Manual Test Complete", "type": "n8n-nodes-base.set", "typeVersion": 3.3, "position": [ 576, 832 ] } ], "pinData": {}, "connections": { "Webhook Trigger": { "main": [ [ { "node": "Extract Webhook Data", "type": "main", "index": 0 } ] ] }, "Manual Trigger": { "main": [ [ { "node": "Sample Inputs (Edit Here)", "type": "main", "index": 0 } ] ] }, "Extract Webhook Data": { "main": [ [ { "node": "Merge Triggers", "type": "main", "index": 0 } ] ] }, "Sample Inputs (Edit Here)": { "main": [ [ { "node": "Merge Triggers", "type": "main", "index": 1 } ] ] }, "Merge Triggers": { "main": [ [ { "node": "1. Generate Background Image (Gemini)", "type": "main", "index": 0 } ] ] }, "1. Generate Background Image (Gemini)": { "main": [ [ { "node": "Extract Image Data", "type": "main", "index": 0 } ] ] }, "Extract Image Data": { "main": [ [ { "node": "2. Save Background Image to Drive", "type": "main", "index": 0 } ] ] }, "2. Save Background Image to Drive": { "main": [ [ { "node": "3. Make Background Image Public", "type": "main", "index": 0 } ] ] }, "3. Make Background Image Public": { "main": [ [ { "node": "4. Create Job (Upload Video)", "type": "main", "index": 0 } ] ] }, "4. Create Job (Upload Video)": { "main": [ [ { "node": "5. Start Composition (AI Background)", "type": "main", "index": 0 } ] ] }, "5. Start Composition (AI Background)": { "main": [ [ { "node": "6. Check Job Status", "type": "main", "index": 0 } ] ] }, "6. Check Job Status": { "main": [ [ { "node": "Is Complete?", "type": "main", "index": 0 } ] ] }, "Is Complete?": { "main": [ [ { "node": "7. Download Video", "type": "main", "index": 0 } ], [ { "node": "Has Failed?", "type": "main", "index": 0 } ] ] }, "7. Download Video": { "main": [ [ { "node": "8. Upload Video to Drive", "type": "main", "index": 0 } ] ] }, "8. Upload Video to Drive": { "main": [ [ { "node": "Build Success Response", "type": "main", "index": 0 } ] ] }, "Build Success Response": { "main": [ [ { "node": "From Webhook?", "type": "main", "index": 0 } ] ] }, "Has Failed?": { "main": [ [ { "node": "Build Error Response", "type": "main", "index": 0 } ], [ { "node": "Wait 20s", "type": "main", "index": 0 } ] ] }, "Build Error Response": { "main": [ [ { "node": "From Webhook?", "type": "main", "index": 0 } ] ] }, "Wait 20s": { "main": [ [ { "node": "6. Check Job Status", "type": "main", "index": 0 } ] ] }, "From Webhook?": { "main": [ [ { "node": "Respond to Webhook", "type": "main", "index": 0 } ], [ { "node": "Manual Test Complete", "type": "main", "index": 0 } ] ] } }, "active": false, "settings": { "executionOrder": "v1" } }