
Remove Video Background & Compose on Custom Image Background with Google Drive
描述
分类
⚙️ Automation
使用的节点
n8n-nodes-base.ifn8n-nodes-base.ifn8n-nodes-base.ifn8n-nodes-base.setn8n-nodes-base.setn8n-nodes-base.setn8n-nodes-base.setn8n-nodes-base.setn8n-nodes-base.waitn8n-nodes-base.merge
价格免费
浏览量0
最后更新11/28/2025
workflow.json
{
"name": "Remove Video Background & Compose on Custom Image Background with Google Drive",
"nodes": [
{
"id": "sticky-overview",
"name": "📋 Overview",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1100,
60
],
"parameters": {
"width": 520,
"height": 580,
"content": "## 🎬 Video Background Removal & Image Composition\n\n**What it does:**\n- Removes background from ANY video (AI actors, product demos, webcam footage, etc.)\n- Composites foreground onto custom image background\n- Saves final result to Google Drive\n\n**Perfect for:**\n- E-commerce product videos with branded backgrounds\n- Profile videos with professional backgrounds\n- Social media content with custom scenes\n- Presentation videos with company branding\n- AI avatars on static backgrounds\n- Real estate videos with custom overlays\n\n**Processing time:** 3-5 minutes per minute of video\n\n**Setup:** ~7 minutes total\n\n[📖 Full Documentation](https://docs.videobgremover.com/)"
},
"typeVersion": 1,
"notesTextSize": "large",
"notesBackgroundColor": 4
},
{
"id": "sticky-api-key",
"name": "🔑 API Key Setup",
"type": "n8n-nodes-base.stickyNote",
"position": [
-480,
60
],
"parameters": {
"width": 380,
"height": 360,
"content": "## 🔑 API Key Setup (Required)\n\n**Step 1:** Get your API key\n- Visit: https://videobgremover.com/api-management\n- Sign up (free tier available)\n- Copy your API key\n\n**Step 2:** Add to n8n environment variables\n- Go to: Settings → Variables\n- Add new variable:\n - Name: `VIDEOBGREMOVER_KEY`\n - Value: your API key\n- Save\n\n**Pricing:** $0.50-$2.00 per minute processed\n\n✅ This workflow uses `$vars.VIDEOBGREMOVER_KEY` (secure)"
},
"typeVersion": 1
},
{
"id": "sticky-inputs",
"name": "📥 Inputs",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1100,
660
],
"parameters": {
"width": 380,
"height": 280,
"content": "## 📥 Input Required\n\n**Foreground video:** Subject with any background\n- AI actors (HeyGen, Synthesia, D-ID)\n- Product demonstrations\n- Webcam/talking head footage\n- Profile videos\n- Sports/training content\n\n**Background image:** Your custom scene\n- Brand backgrounds (logos, colors)\n- Professional settings (office, studio)\n- Product photos\n- Custom graphics/designs\n\n⚠️ Both must be **publicly accessible URLs**"
},
"typeVersion": 1
},
{
"id": "sticky-composition",
"name": "🎨 Composition",
"type": "n8n-nodes-base.stickyNote",
"position": [
-480,
460
],
"parameters": {
"width": 380,
"height": 360,
"content": "## 🎨 Composition Template\n\n**Template:** `centered`\n- Foreground centered on canvas\n- Maintains aspect ratio\n- Professional look for images\n- Perfect for product demos on branded backgrounds\n\n**Available templates:**\n- `centered` - Center with contain sizing\n- `fullscreen` - Cover entire canvas\n- `picture_in_picture` - Small in corner\n- `ai_ugc_ad` - Bottom-right optimized\n\n**Export:**\n- Format: H.264 (MP4)\n- Preset: Medium (balanced quality/speed)\n\n*Customize in the \"Start Composition\" node*"
},
"typeVersion": 1
},
{
"id": "sticky-polling",
"name": "🔄 Polling",
"type": "n8n-nodes-base.stickyNote",
"position": [
-60,
60
],
"parameters": {
"width": 380,
"height": 300,
"content": "## 🔄 Processing & Polling\n\n**How it works:**\n1. Job submitted to API\n2. Background removal starts (20-60 sec)\n3. Image composition applied\n4. Status checked every 20 seconds\n5. When complete → download & upload\n\n**Status flow:**\n- `processing` → Wait 20s → Check again\n- `completed` → Download video\n- `failed` → Return error details\n\n⏱️ Typical: 3-5 min per min of video"
},
"typeVersion": 1
},
{
"id": "sticky-gdrive",
"name": "💾 Google Drive",
"type": "n8n-nodes-base.stickyNote",
"position": [
540,
60
],
"parameters": {
"width": 380,
"height": 280,
"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"
},
"typeVersion": 1
},
{
"id": "sticky-usage",
"name": "🚀 Usage",
"type": "n8n-nodes-base.stickyNote",
"position": [
1140,
60
],
"parameters": {
"width": 380,
"height": 340,
"content": "## 🚀 How to Use\n\n**Manual testing:**\n1. Update URLs in \"Sample Inputs (manual)\"\n2. Click \"Execute Workflow\"\n3. Wait for processing (3-5 min per min of video)\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 \"foreground_video_url\": \"https://...\",\n \"background_image_url\": \"https://...\"\n}\n```\n\n**Batch processing:** Connect to Google Sheets or Airtable for bulk automation"
},
"typeVersion": 1
},
{
"id": "webhook-1",
"name": "Webhook Trigger",
"type": "n8n-nodes-base.webhook",
"position": [
-1040,
900
],
"webhookId": "compose-video-image",
"parameters": {
"path": "compose-video-image",
"options": {
"responseData": "allEntries"
},
"httpMethod": "POST",
"responseMode": "responseNode"
},
"typeVersion": 1.1
},
{
"id": "manual-1",
"name": "Manual Trigger",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-1040,
1040
],
"parameters": {},
"typeVersion": 1
},
{
"id": "set-web-1",
"name": "Extract Webhook Data",
"type": "n8n-nodes-base.set",
"position": [
-820,
900
],
"parameters": {
"assignments": {
"assignments": [
{
"name": "foreground_video_url",
"type": "string",
"value": "={{ $json.body?.foreground_video_url ?? $json.foreground_video_url ?? 'https://videos.videobgremover.com/public-videos/assets/ai-actor.mp4' }}"
},
{
"name": "background_image_url",
"type": "string",
"value": "={{ $json.body?.background_image_url ?? $json.background_image_url ?? 'https://drive.google.com/uc?id=1DYJxUcuN5n4BT4YZnRKYmXuLNSCs5bPy' }}"
},
{
"name": "source",
"type": "string",
"value": "webhook"
}
]
}
},
"typeVersion": 3.3
},
{
"id": "set-manual-1",
"name": "Sample URLs (Edit Here)",
"type": "n8n-nodes-base.set",
"position": [
-820,
1040
],
"parameters": {
"assignments": {
"assignments": [
{
"name": "foreground_video_url",
"type": "string",
"value": "https://videos.videobgremover.com/public-videos/assets/ai-actor.mp4"
},
{
"name": "background_image_url",
"type": "string",
"value": "https://drive.google.com/uc?id=1DYJxUcuN5n4BT4YZnRKYmXuLNSCs5bPy"
},
{
"name": "source",
"type": "string",
"value": "manual"
}
]
}
},
"typeVersion": 3.3
},
{
"id": "merge-1",
"name": "Merge Triggers",
"type": "n8n-nodes-base.merge",
"position": [
-600,
970
],
"parameters": {
"mode": "append",
"options": {}
},
"typeVersion": 2.1
},
{
"id": "http-1",
"name": "1. Create Job (Upload Foreground)",
"type": "n8n-nodes-base.httpRequest",
"position": [
-380,
970
],
"parameters": {
"url": "https://api.videobgremover.com/api/v1/jobs",
"method": "POST",
"options": {
"response": {
"response": {
"neverError": true,
"responseFormat": "json"
}
}
},
"jsonBody": "={ \"video_url\": \"{{ $json.foreground_video_url }}\" }",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"headerParameters": {
"parameters": [
{
"name": "X-API-Key",
"value": "={{ $vars.VIDEOBGREMOVER_KEY }}"
},
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"typeVersion": 4.1
},
{
"id": "http-2",
"name": "2. Start Image Composition",
"type": "n8n-nodes-base.httpRequest",
"position": [
-140,
970
],
"parameters": {
"url": "=https://api.videobgremover.com/api/v1/jobs/{{ $json.id }}/start",
"method": "POST",
"options": {
"response": {
"response": {
"neverError": true,
"responseFormat": "json"
}
}
},
"jsonBody": "={\n \"background\": {\n \"type\": \"composition\",\n \"composition\": {\n \"template\": \"centered\",\n \"background_type\": \"image\",\n \"background_url\": \"{{ $('Merge Triggers').item.json.background_image_url }}\",\n \"export_format\": \"h264\",\n \"export_preset\": \"medium\"\n }\n }\n}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"headerParameters": {
"parameters": [
{
"name": "X-API-Key",
"value": "={{ $vars.VIDEOBGREMOVER_KEY }}"
},
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"typeVersion": 4.1
},
{
"id": "http-3",
"name": "3. Check Job Status",
"type": "n8n-nodes-base.httpRequest",
"position": [
100,
970
],
"parameters": {
"url": "=https://api.videobgremover.com/api/v1/jobs/{{ $('1. Create Job (Upload Foreground)').item.json.id }}/status",
"method": "GET",
"options": {
"response": {
"response": {
"neverError": true,
"responseFormat": "json"
}
}
},
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "X-API-Key",
"value": "={{ $vars.VIDEOBGREMOVER_KEY }}"
}
]
}
},
"typeVersion": 4.1
},
{
"id": "if-complete",
"name": "Is Complete?",
"type": "n8n-nodes-base.if",
"position": [
300,
970
],
"parameters": {
"options": {},
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "is_completed_condition",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.status }}",
"rightValue": "completed"
}
]
}
},
"typeVersion": 2
},
{
"id": "download",
"name": "4. Download Video",
"type": "n8n-nodes-base.httpRequest",
"position": [
520,
830
],
"parameters": {
"url": "={{ $json.processed_video_url }}",
"options": {
"response": {
"response": {
"responseFormat": "file"
}
}
}
},
"typeVersion": 4.1
},
{
"id": "gdrive",
"name": "5. Upload to Google Drive",
"type": "n8n-nodes-base.googleDrive",
"position": [
740,
830
],
"parameters": {
"name": "=composed_video_{{ $('1. Create Job (Upload Foreground)').item.json.id }}_{{ new Date().getTime() }}.mp4",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"options": {
"simplifyOutput": true,
"googleFileConvert": false
},
"folderId": {
"__rl": true,
"mode": "list",
"value": "root"
},
"operation": "upload",
"binaryPropertyName": "data"
},
"typeVersion": 3
},
{
"id": "success-set",
"name": "Build Success Response",
"type": "n8n-nodes-base.set",
"position": [
960,
830
],
"parameters": {
"assignments": {
"assignments": [
{
"name": "final_result",
"type": "object",
"value": "={{ {\n success: true,\n job_id: $('1. Create Job (Upload Foreground)').item.json.id,\n export_id: $('2. Start Image Composition').item.json.export_id,\n google_drive_id: $json.id,\n google_drive_url: $json.webViewLink,\n download_url: $('3. Check Job Status').item.json.processed_video_url,\n message: 'Video composed with image background successfully and saved to Google Drive',\n filename: $json.name,\n video_length_seconds: $('3. Check Job Status').item.json.length_seconds,\n source: $('Merge Triggers').item.json.source\n} }}"
}
]
}
},
"typeVersion": 3.3
},
{
"id": "if-failed",
"name": "Has Failed?",
"type": "n8n-nodes-base.if",
"position": [
500,
1200
],
"parameters": {
"options": {},
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "is_failed_condition",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.status }}",
"rightValue": "failed"
}
]
}
},
"typeVersion": 2
},
{
"id": "wait-20",
"name": "Wait 20s",
"type": "n8n-nodes-base.wait",
"position": [
720,
1340
],
"parameters": {
"unit": "seconds",
"amount": 20
},
"typeVersion": 1.1
},
{
"id": "error-set",
"name": "Build Error Response",
"type": "n8n-nodes-base.set",
"position": [
720,
1200
],
"parameters": {
"assignments": {
"assignments": [
{
"name": "final_result",
"type": "object",
"value": "={{ {\n success: false,\n job_id: $('1. Create Job (Upload Foreground)').item.json.id,\n error: $json.error || 'Video composition with image background failed',\n status: $json.status,\n message: 'Failed to compose video with image background',\n source: $('Merge Triggers').item.json.source\n} }}"
}
]
}
},
"typeVersion": 3.3
},
{
"id": "if-webhook",
"name": "From Webhook?",
"type": "n8n-nodes-base.if",
"position": [
1180,
1010
],
"parameters": {
"options": {},
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "is_webhook_condition",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.final_result?.source ?? $json.source }}",
"rightValue": "webhook"
}
]
}
},
"typeVersion": 2
},
{
"id": "respond",
"name": "Respond to Webhook",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
1400,
920
],
"parameters": {
"responseBody": "={{ $json.final_result ?? $json }}",
"responseCode": 200
},
"typeVersion": 1.1
},
{
"id": "end-manual",
"name": "Manual Test Complete",
"type": "n8n-nodes-base.set",
"position": [
1400,
1100
],
"parameters": {
"assignments": {
"assignments": [
{
"name": "final_result",
"type": "object",
"value": "={{ $json.final_result ?? $json }}"
}
]
}
},
"typeVersion": 3.3
}
],
"settings": {
"executionOrder": "v1"
},
"connections": {
"Wait 20s": {
"main": [
[
{
"node": "3. Check Job Status",
"type": "main",
"index": 0
}
]
]
},
"Has Failed?": {
"main": [
[
{
"node": "Build Error Response",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait 20s",
"type": "main",
"index": 0
}
]
]
},
"Is Complete?": {
"main": [
[
{
"node": "4. Download Video",
"type": "main",
"index": 0
}
],
[
{
"node": "Has Failed?",
"type": "main",
"index": 0
}
]
]
},
"From Webhook?": {
"main": [
[
{
"node": "Respond to Webhook",
"type": "main",
"index": 0
}
],
[
{
"node": "Manual Test Complete",
"type": "main",
"index": 0
}
]
]
},
"Manual Trigger": {
"main": [
[
{
"node": "Sample URLs (Edit Here)",
"type": "main",
"index": 0
}
]
]
},
"Merge Triggers": {
"main": [
[
{
"node": "1. Create Job (Upload Foreground)",
"type": "main",
"index": 0
}
]
]
},
"Webhook Trigger": {
"main": [
[
{
"node": "Extract Webhook Data",
"type": "main",
"index": 0
}
]
]
},
"4. Download Video": {
"main": [
[
{
"node": "5. Upload to Google Drive",
"type": "main",
"index": 0
}
]
]
},
"3. Check Job Status": {
"main": [
[
{
"node": "Is Complete?",
"type": "main",
"index": 0
}
]
]
},
"Build Error Response": {
"main": [
[
{
"node": "From Webhook?",
"type": "main",
"index": 0
}
]
]
},
"Extract Webhook Data": {
"main": [
[
{
"node": "Merge Triggers",
"type": "main",
"index": 0
}
]
]
},
"Build Success Response": {
"main": [
[
{
"node": "From Webhook?",
"type": "main",
"index": 0
}
]
]
},
"Sample URLs (Edit Here)": {
"main": [
[
{
"node": "Merge Triggers",
"type": "main",
"index": 1
}
]
]
},
"5. Upload to Google Drive": {
"main": [
[
{
"node": "Build Success Response",
"type": "main",
"index": 0
}
]
]
},
"2. Start Image Composition": {
"main": [
[
{
"node": "3. Check Job Status",
"type": "main",
"index": 0
}
]
]
},
"1. Create Job (Upload Foreground)": {
"main": [
[
{
"node": "2. Start Image Composition",
"type": "main",
"index": 0
}
]
]
}
}
}