{"workflow":{"id":14387,"name":"Generate clean plates and automate object removal with Seedance AI","views":26,"recentViews":1,"totalViews":26,"createdAt":"2026-03-27T11:32:09.012Z","description":"## 📘 Description\nThis workflow is an AI-assisted clean plate and object removal pipeline built for modern VFX production environments. It transforms a single plate image and removal brief into multiple high-quality clean plate variations, complete with automated quality evaluation, compositing-ready assets, and production-ready Nuke scripts—bridging the gap between manual paint workflows and fully automated AI-driven cleanup pipelines.\n\n## ⚙️ Step-by-Step Flow\n1 . The workflow begins with a webhook trigger that acts as the clean plate request intake layer, receiving a POST request containing the plate image URL, removal brief, shot code, and optional parameters such as object type, frame range, and QC thresholds. This input flows into a validation and data structuring stage, where required fields are verified, default values are assigned, and the payload is normalized to ensure consistency across downstream processes. The system then performs prompt engineering and expands the single removal brief into four specialized passes: a primary production-ready clean plate, an alternative variation, a foreground removal pass for background isolation, and a difference map for quality control visualization. Each pass is enriched with object-specific removal instructions, reconstruction constraints, and technical shot metadata to guide accurate AI generation.\n\n2 . At the core of the pipeline, an image-to-video rendering process leverages the provided plate image as a reference and submits each variation as an independent job to the Seedance AI API, generating video-based clean plate outputs. A polling mechanism continuously tracks each job at fixed intervals, ensuring that processing only advances once rendering is successfully completed. Once outputs are available, a metadata and automated QC layer evaluates each pass by assigning a quality score based on resolution and consistency logic, comparing it against a predefined threshold to classify results as either auto-approved or flagged for review. A decision routing layer then determines the next step—allowing approved outputs to continue through the pipeline while immediately notifying the team via Slack in case of failures.\n\n3 . Following this, the system generates a fully production-ready Nuke compositing script, automatically configuring nodes for the original plate, AI-generated clean plate, difference map visualization, merge operations, grading adjustments, and final output writes, all aligned with standardized folder structures and naming conventions. The asset pipeline then downloads the generated videos, uploads them to Google Drive using structured shot-based organization, and logs all associated metadata—including plate references, output variations, and project details—into a Notion database for centralized tracking. An aggregation layer consolidates all outputs into a unified structured response, combining QC results, video links, compositing scripts, and storage paths. Finally, a multi-channel notification system dispatches a detailed message to Slack and Telegram, presenting all clean plate variations with QC status, video previews, inline Nuke scripts, and direct access to delivery folders for seamless team review and integration into production workflows.\n\n## 🚨 Error Handling\n• Global error trigger\n • Sends failure alerts to Slack instantly\n • Prevents silent pipeline failures and data loss\n\n## 🧩 Prerequisites\n• Seedance API (AI video generation)\n • Google Drive OAuth2\n • Notion API\n • Slack + Telegram credentials\n • Webhook integration\n\n## 💡 Key Benefits\n✔ Fully automated clean plate generation with zero manual prep\n ✔ Multiple AI-generated passes for flexible compositing workflows\n ✔ Built-in QC validation with intelligent decision routing\n ✔ Auto-generated Nuke scripts ready for production use\n ✔ Structured asset storage and centralized tracking\n ✔ Real-time notifications for faster team collaboration\n\n## 👥 Perfect For\n-  VFX paint and prep teams\n-  Compositors working in Nuke pipelines\n-  Film and post-production studios\n-  AI-assisted cleanup and restoration workflows\n-  Studios managing high-volume plate processing","workflow":{"id":"1arwkKJJ0FjTVkwl","meta":{"instanceId":"8443f10082278c46aa5cf3acf8ff0f70061a2c58bce76efac814b16290845177"},"name":"Generate Clean Plates with Seedance and Automate Object Removal, QC, and Delivery","tags":[],"nodes":[{"id":"1845c31c-5bb6-4d87-a145-ae1f95eb1ebe","name":"Webhook: Clean Plate Request","type":"n8n-nodes-base.webhook","position":[832,784],"webhookId":"clean-plate-webhook-001","parameters":{"path":"clean-plate-request","options":{},"httpMethod":"POST"},"typeVersion":2},{"id":"b166fe15-cdc1-48db-8e3f-12d093197b42","name":"Validate & Extract Input","type":"n8n-nodes-base.code","position":[1072,784],"parameters":{"jsCode":"const body = $input.first().json.body;\n\nconst required = ['plateImageUrl', 'removalBrief', 'shotCode'];\nfor (const field of required) {\n  if (!body[field] || String(body[field]).trim() === '') {\n    throw new Error(`Validation failed: '${field}' is required.`);\n  }\n}\n\nconst data = {\n  plateImageUrl:    body.plateImageUrl.trim(),\n  removalBrief:     body.removalBrief.trim(),\n  shotCode:         body.shotCode.trim(),\n  sequenceCode:     body.sequenceCode?.trim() || body.shotCode.split('_')[0] || 'SEQ-000',\n  projectId:        body.projectId?.trim() || 'PROJ-001',\n  objectType:       body.objectType?.trim() || 'unwanted_object',  // wire | sign | crew | rig | general\n  frameRange:       body.frameRange?.trim() || '1-100',\n  frameRate:        body.frameRate || 24,\n  qcThreshold:      body.qcThreshold || 0.85,   // 0-1, how clean must result be to auto-notify\n  notionDatabaseId: body.notionDatabaseId?.trim() || null,\n  supervisorEmail:  body.supervisorEmail?.trim() || null,\n  requestTimestamp: new Date().toISOString()\n};\n\nreturn [{ json: data }];"},"typeVersion":2},{"id":"e93a948a-7977-4126-8cdd-da7b6a31bcdd","name":"Fan-Out: 4 Clean Plate Passes","type":"n8n-nodes-base.code","position":[1312,784],"parameters":{"jsCode":"const d = $input.first().json;\nconst p = d.removalBrief;\n\nconst objectInstructions = {\n  'wire':    'Remove all visible wires, cables, and rigging hardware. Leave background clean and seamless.',\n  'sign':    'Remove modern signage, replace with period-appropriate or clean background. Seamless integration.',\n  'crew':    'Remove crew members, equipment, and production elements. Fill with natural background.',\n  'rig':     'Remove camera rigs, support structures, and mechanical equipment. Restore background.',\n  'general': 'Remove the specified unwanted elements. Restore background to clean natural state.'\n};\n\nconst objectNote = objectInstructions[d.objectType] || objectInstructions['general'];\nconst techNote = `Shot: ${d.shotCode}, frames ${d.frameRange} at ${d.frameRate}fps. Seamless clean plate, no visible artifacts, photorealistic result.`;\n\nconst variations = [\n  {\n    variantId: 'CP-V1',\n    passType:  'clean_plate',\n    label:     'Clean Plate – Primary',\n    safePrompt: JSON.stringify(`${p}. ${objectNote} ${techNote} Primary clean plate pass, maximum quality removal, background reconstruction must be invisible. Static locked-off camera --duration 5 --camerafixed true`).slice(1,-1)\n  },\n  {\n    variantId: 'CP-V2',\n    passType:  'clean_plate_alt',\n    label:     'Clean Plate – Alternative',\n    safePrompt: JSON.stringify(`${p}. ${objectNote} ${techNote} Alternative interpretation of background reconstruction. Slightly different fill approach. Static locked-off camera --duration 5 --camerafixed true`).slice(1,-1)\n  },\n  {\n    variantId: 'CP-V3',\n    passType:  'foreground_removal',\n    label:     'Foreground Removal Pass',\n    safePrompt: JSON.stringify(`${p}. Isolate and remove all foreground elements specified. Show only the clean background plate. ${techNote} Pure background extraction pass --duration 5 --camerafixed true`).slice(1,-1)\n  },\n  {\n    variantId: 'CP-V4',\n    passType:  'difference_preview',\n    label:     'Difference Map Preview',\n    safePrompt: JSON.stringify(`Visual difference map showing what was removed: highlight changed regions in bright color (red/yellow) against dark background. Show exact areas of removal for ${p}. ${techNote} QC reference pass --duration 5 --camerafixed true`).slice(1,-1)\n  }\n];\n\nreturn variations.map(v => ({ json: { ...v, ...d } }));"},"typeVersion":2},{"id":"190abb7a-f8ee-4d63-81d9-dfb46a2be7cf","name":"Build Clean Plate Request","type":"n8n-nodes-base.code","position":[1552,784],"parameters":{"jsCode":"const input = $input.first().json;\n\n// Always use image-to-video since we need the plate image as reference\nconst body = {\n  model: 'seedance-1-5-pro-251215',\n  content: [\n    { type: 'text', text: input.safePrompt },\n    { type: 'image_url', image_url: { url: input.plateImageUrl } }\n  ],\n  generate_audio: false,\n  ratio: 'adaptive',\n  duration: 5,\n  watermark: false\n};\n\nreturn [{\n  json: {\n    ...input,\n    requestBody: JSON.stringify(body),\n    mode: 'image_to_video'\n  }\n}];"},"typeVersion":2},{"id":"c1238448-bee6-419b-af11-ea8e2d510ebb","name":"Seedance: Generate Clean Pass","type":"n8n-nodes-base.httpRequest","position":[1792,784],"parameters":{"method":"POST","options":{},"jsonBody":"={{ JSON.parse($json.requestBody) }}","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"Authorization"},{"name":"Content-Type","value":"application/json"}]}},"typeVersion":4.3},{"id":"bf8a8ea6-7faa-4f1b-a7c7-0b2a66214e7e","name":"Merge Job ID + Metadata","type":"n8n-nodes-base.code","position":[2032,784],"parameters":{"jsCode":"const httpResult = $input.first().json;\nconst variantData = $('Build Clean Plate Request').first().json;\nreturn [{ json: { ...variantData, id: httpResult.id, jobStatus: httpResult.status } }];"},"typeVersion":2},{"id":"7a6c4518-a2df-42e4-87e9-a3ab2e3c924b","name":"Poll: Check Job Status","type":"n8n-nodes-base.httpRequest","position":[2272,784],"parameters":{"url":"=","options":{},"sendHeaders":true,"headerParameters":{"parameters":[{"name":"Authorization","value":"Bearer YOUR_TOKEN_HERE"}]}},"typeVersion":4.3},{"id":"939a6274-388f-44c1-af3a-e35c8539c727","name":"Wait 20s","type":"n8n-nodes-base.wait","position":[2416,1056],"webhookId":"cp-wait-webhook-001","parameters":{"amount":20},"typeVersion":1.1},{"id":"bef102c7-032e-4bac-903e-e47690531e00","name":"Render Complete?","type":"n8n-nodes-base.if","position":[2512,784],"parameters":{"options":{},"conditions":{"options":{"version":1,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"cp-cond-001","operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.status }}","rightValue":"succeeded"}]}},"typeVersion":2},{"id":"0076c0d9-feae-462e-b84f-b0732b65dee8","name":"Build Clean Plate Metadata + QC","type":"n8n-nodes-base.code","position":[2736,768],"parameters":{"jsCode":"const input = $input.first().json;\nconst variantData = $('Merge Job ID + Metadata').first().json;\n\nlet videoUrl = null;\nif (input.content && input.content.video_url) {\n  videoUrl = input.content.video_url;\n}\nif (!videoUrl) {\n  videoUrl = input.output_url || input.video_url || `URL not found. Job ID: ${input.id}`;\n}\n\n// QC Score — simulated here based on resolution and status\n// In production this would be a real pixel comparison\nconst resolutionScore = input.resolution === '1080p' ? 1.0 : input.resolution === '720p' ? 0.85 : 0.7;\nconst qcScore = resolutionScore; // simplified QC\nconst qcPassed = qcScore >= (variantData.qcThreshold || 0.85);\n\nconst passIcons = {\n  'clean_plate':        '🧹',\n  'clean_plate_alt':    '🔄',\n  'foreground_removal': '✂️',\n  'difference_preview': '🔍'\n};\n\nreturn [{\n  json: {\n    variantId:        variantData.variantId,\n    passType:         variantData.passType,\n    passIcon:         passIcons[variantData.passType] || '🎬',\n    label:            variantData.label,\n    shotCode:         variantData.shotCode,\n    sequenceCode:     variantData.sequenceCode,\n    projectId:        variantData.projectId,\n    videoUrl:         videoUrl,\n    plateImageUrl:    variantData.plateImageUrl,\n    removalBrief:     variantData.removalBrief,\n    objectType:       variantData.objectType,\n    frameRange:       variantData.frameRange,\n    frameRate:        variantData.frameRate,\n    notionDatabaseId: variantData.notionDatabaseId,\n    supervisorEmail:  variantData.supervisorEmail,\n    jobId:            input.id,\n    resolution:       input.resolution,\n    duration:         input.duration,\n    qcScore:          qcScore,\n    qcPassed:         qcPassed,\n    qcThreshold:      variantData.qcThreshold,\n    generatedAt:      new Date().toISOString(),\n    tags: {\n      asset_type:     'clean_plate',\n      pass_type:      variantData.passType,\n      object_type:    variantData.objectType,\n      shot_code:      variantData.shotCode,\n      frame_range:    variantData.frameRange,\n      qc_passed:      qcPassed,\n      qc_score:       qcScore,\n      ai_generated:   true,\n      review_status:  qcPassed ? 'auto_approved' : 'needs_review',\n      workflow:       'clean_plate_generator'\n    }\n  }\n}];"},"typeVersion":2},{"id":"05df9813-796a-47a3-967e-717455bb0a3f","name":"QC Check: Passes Threshold?","type":"n8n-nodes-base.if","position":[3008,816],"parameters":{"options":{},"conditions":{"options":{"version":1,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"qc-cond-001","operator":{"type":"boolean","operation":"equals"},"leftValue":"={{ $json.qcPassed }}","rightValue":true}]}},"typeVersion":2},{"id":"34930ec2-c4bd-447a-8851-01232765b47d","name":"Generate Nuke Comp Script","type":"n8n-nodes-base.code","position":[3232,608],"parameters":{"jsCode":"const d = $input.first().json;\n\nconst nukeScript = `# Nuke Script – AI Clean Plate Comp Template\n# Shot: ${d.shotCode} | Sequence: ${d.sequenceCode}\n# Object Removal: ${d.objectType} | Pass: ${d.passType}\n# QC Score: ${d.qcScore} | QC Passed: ${d.qcPassed}\n# Auto-generated by Clean Plate Generator workflow\n# Date: ${new Date().toISOString()}\n\nset cut_paste_input [stack 0]\nversion 15.0\n\n# ─── ORIGINAL PLATE ─────────────────────────────────────────────────────────\nRead {\n file \"${d.plateImageUrl}\"\n format \"1920 1080 0 0 1920 1080 1 HD_1080\"\n name Read_ORIGINAL_PLATE\n label \"Original Plate\"\n xpos 0\n ypos -400\n}\n\n# ─── AI CLEAN PLATE ─────────────────────────────────────────────────────────\nRead {\n file \"${d.videoUrl}\"\n format \"1920 1080 0 0 1920 1080 1 HD_1080\"\n name Read_AI_CLEAN_PLATE\n label \"AI Clean – ${d.label}\"\n xpos 200\n ypos -400\n}\n\n# ─── DIFFERENCE MAP ─────────────────────────────────────────────────────────\nMerge2 {\n inputs 2\n operation difference\n name Merge_DIFF_MAP\n label \"Difference Map\"\n xpos 100\n ypos -300\n}\n\nGrade {\n blackpoint 0\n whitepoint 0.05\n name Grade_DIFF_BOOST\n label \"Boost Difference\"\n xpos 100\n ypos -240\n}\n\n# ─── MAIN COMP MERGE ────────────────────────────────────────────────────────\nMerge2 {\n inputs 2\n operation over\n name Merge_CLEAN_OVER_PLATE\n label \"Clean over Original\"\n xpos 100\n ypos -100\n}\n\n# ─── GRADE MATCH ────────────────────────────────────────────────────────────\nColorCorrect {\n name CC_Grade_Match\n label \"Grade Match to Plate\"\n xpos 100\n ypos 0\n}\n\n# ─── WRITE NODES ────────────────────────────────────────────────────────────\nWrite {\n file \"/mnt/delivery/${d.shotCode}/clean_plate_${d.passType}_v001.####.exr\"\n file_type exr\n colorspace linear\n name Write_CLEAN_PLATE\n label \"Output Clean Plate\"\n xpos 0\n ypos 100\n}\n\nWrite {\n file \"/mnt/delivery/${d.shotCode}/diff_map_${d.passType}_v001.####.exr\"\n file_type exr\n colorspace linear\n name Write_DIFF_MAP\n label \"Output Diff Map\"\n xpos 200\n ypos 100\n}\n`;\n\nreturn [{ json: {\n  ...d,\n  nukeScript:     nukeScript,\n  nukeScriptName: `${d.shotCode}_clean_${d.passType}_v001.nk`,\n  nukeScriptPath: `/comp_templates/${d.shotCode}/${d.shotCode}_clean_${d.passType}_v001.nk`,\n  folderStructure: {\n    cleanPlates:    `/delivery/${d.shotCode}/clean_plates/`,\n    differenceMaps: `/delivery/${d.shotCode}/diff_maps/`,\n    nukeScripts:    `/delivery/${d.shotCode}/nuke_scripts/`\n  }\n} }];"},"typeVersion":2},{"id":"11dea254-8274-48fb-8a9b-029e7e3308bc","name":"Download Clean Plate Video","type":"n8n-nodes-base.httpRequest","position":[3616,800],"parameters":{"url":"={{ $json.videoUrl }}","options":{"response":{"response":{"responseFormat":"file"}}}},"typeVersion":4.3},{"id":"5df88f1b-96ec-4489-9f21-221a04a4e4dd","name":"Google Drive: Upload Clean Plate","type":"n8n-nodes-base.googleDrive","position":[3904,800],"parameters":{"name":"={{ $('Generate Nuke Comp Script').first().json.shotCode }}_{{ $('Generate Nuke Comp Script').first().json.passType }}_{{ $('Generate Nuke Comp Script').first().json.variantId }}.mp4","driveId":{"__rl":true,"mode":"list","value":"My Drive"},"options":{},"folderId":{"__rl":true,"mode":"list","value":"1fL57MP1QWsF0O_n7WuqfzJ0hO6I9Csrh","cachedResultUrl":"https://drive.google.com/drive/folders/1fL57MP1QWsF0O_n7WuqfzJ0hO6I9Csrh","cachedResultName":"Simulation FX Concept Generator "}},"credentials":{"googleDriveOAuth2Api":{"id":"credential-id","name":"Automations.ai"}},"typeVersion":3},{"id":"f22c8936-37b8-4f15-8b33-a2cb82279830","name":"Aggregate All Passes","type":"n8n-nodes-base.code","position":[4112,528],"parameters":{"jsCode":"const items = $input.all();\nconst nukeItems = $('Generate Nuke Comp Script').all();\n\nconst passes = nukeItems.map((item) => {\n  const d = item.json;\n  const qcBadge = d.qcPassed ? '✅ Auto-Approved' : '⚠️ Needs Review';\n  return `${d.passIcon} *${d.label}* (${d.variantId})\\n> 🎬 <${d.videoUrl}|Watch Pass>\\n> 🔍 QC Score: ${(d.qcScore * 100).toFixed(0)}% — ${qcBadge}\\n> 📝 Nuke: ${d.nukeScriptName}\\n> 📁 Clean Plates: ${d.folderStructure.cleanPlates}\\n> 📅 ${d.generatedAt}`;\n});\n\nconst first = nukeItems[0].json;\nconst allPassed = nukeItems.every(i => i.json.qcPassed);\n\nreturn [{\n  json: {\n    shotCode:      first.shotCode,\n    sequenceCode:  first.sequenceCode,\n    objectType:    first.objectType,\n    removalBrief:  first.removalBrief,\n    passLines:     passes.join('\\n\\n'),\n    totalPasses:   passes.length,\n    allQcPassed:   allPassed,\n    nukeScript:    first.nukeScript,\n    nukeScriptName: first.nukeScriptName,\n    folderStructure: first.folderStructure,\n    generatedAt:   new Date().toISOString()\n  }\n}];"},"typeVersion":2},{"id":"6dce94fe-8de1-4bf4-b523-22ceb5d90dde","name":"Slack: Notify Paint/Comp Team","type":"n8n-nodes-base.slack","position":[4400,384],"webhookId":"59dbedfc-3151-4f6f-9019-e79fe28ac1a1","parameters":{"text":"=🧹 *AI Clean Plate Ready – {{ $json.shotCode }}* {{ $json.allQcPassed ? '✅ All QC Passed' : '⚠️ Some Passes Need Review' }}\n\n📋 *Shot:* {{ $json.shotCode }} | *Sequence:* {{ $json.sequenceCode }}\n🎯 *Object Type:* {{ $json.objectType }}\n📝 *Brief:* {{ $json.removalBrief }}\n📊 *Total Passes:* {{ $json.totalPasses }}\n\n*Generated Passes:*\n{{ $json.passLines }}\n\n📁 *Folder Structure:*\n> Clean Plates: {{ $json.folderStructure.cleanPlates }}\n> Diff Maps: {{ $json.folderStructure.differenceMaps }}\n> Nuke Scripts: {{ $json.folderStructure.nukeScripts }}\n\n📝 *Nuke Script:* {{ $json.nukeScriptName }}\n```\n{{ $json.nukeScript }}\n```\n\n_{{ $json.allQcPassed ? 'All passes auto-approved — ready for comp!' : 'Some passes need artist review before use.' }}_\n_Generated at: {{ $json.generatedAt }}_","select":"channel","channelId":{"__rl":true,"mode":"list","value":"C0ANFAL4WJ2","cachedResultName":"social"},"otherOptions":{},"authentication":"oAuth2"},"typeVersion":2.3},{"id":"33185252-2326-4683-8f6e-ae9170930389","name":"Slack: QC Failed — Artist Review","type":"n8n-nodes-base.slack","position":[3360,1152],"webhookId":"93ee4e81-b2b6-4538-931d-a86d06aa36e8","parameters":{"text":"=⚠️ *Clean Plate QC Failed – Needs Artist Review – {{ $json.shotCode }}*\n\n📋 *Shot:* {{ $json.shotCode }}\n🎯 *Object Type:* {{ $json.objectType }}\n📝 *Brief:* {{ $json.removalBrief }}\n\n> QC score below threshold — artist review required before use.\n> 🎬 <{{ $json.videoUrl }}|View Result>\n> 📅 {{ $json.generatedAt }}\n\n_Please review manually and approve or re-submit._","select":"channel","channelId":{"__rl":true,"mode":"list","value":"C0ANFAL4WJ2","cachedResultName":"social"},"otherOptions":{},"authentication":"oAuth2"},"typeVersion":2.3},{"id":"ba7a8922-509e-4a99-9931-d3f9ec75efc1","name":"Create a database page","type":"n8n-nodes-base.notion","position":[3696,528],"parameters":{"title":"AI-Assisted Clean Plate","options":{},"resource":"databasePage","databaseId":{"__rl":true,"mode":"list","value":"32f802b9-1fa0-80da-b562-e27227bc9319","cachedResultUrl":"https://www.notion.so/32f802b91fa080dab562e27227bc9319","cachedResultName":"AI-Assisted Clean Plate & Object Removal"},"propertiesUi":{"propertyValues":[{"key":"plateImageUrl|rich_text","textContent":"={{ $json.plateImageUrl }}"},{"key":"projectId|rich_text","textContent":"={{ $json.projectId }}"},{"key":"sequenceCode|rich_text","textContent":"={{ $json.sequenceCode }}"},{"key":"variantId|title","title":"={{ $json.variantId }}"},{"key":"videoUrl|rich_text","textContent":"={{ $json.videoUrl }}"}]}},"credentials":{"notionApi":{"id":"credential-id","name":"saurabh notion"}},"typeVersion":2.2},{"id":"9d556eab-3bb8-4390-9bfb-509c832cc363","name":"Send Telegram1","type":"n8n-nodes-base.telegram","position":[4400,688],"webhookId":"884081b8-142f-4d67-889f-621f3946881a","parameters":{"text":"=🧹 *AI Clean Plate Ready – {{ $json.shotCode }}* {{ $json.allQcPassed ? '✅ All QC Passed' : '⚠️ Some Passes Need Review' }}\n\n📋 *Shot:* {{ $json.shotCode }} | *Sequence:* {{ $json.sequenceCode }}\n🎯 *Object Type:* {{ $json.objectType }}\n📝 *Brief:* {{ $json.removalBrief }}\n📊 *Total Passes:* {{ $json.totalPasses }}\n\n*Generated Passes:*\n{{ $json.passLines }}\n\n📁 *Folder Structure:*\n> Clean Plates: {{ $json.folderStructure.cleanPlates }}\n> Diff Maps: {{ $json.folderStructure.differenceMaps }}\n> Nuke Scripts: {{ $json.folderStructure.nukeScripts }}\n\n\n_{{ $json.allQcPassed ? 'All passes auto-approved — ready for comp!' : 'Some passes need artist review before use.' }}_\n_Generated at: {{ $json.generatedAt }}_","chatId":"=963318735","additionalFields":{"parse_mode":"Markdown"}},"credentials":{"telegramApi":{"id":"credential-id","name":"Saurabh Telegram account 2"}},"typeVersion":1.1},{"id":"d118d7e7-9117-4fbb-b182-f15200021174","name":"📋 Overview","type":"n8n-nodes-base.stickyNote","position":[-304,-16],"parameters":{"width":756,"height":548,"content":"## 🎬 AI Clean Plate Generator\n\n### How it works\nThis workflow automates AI-assisted clean plate generation for VFX production. When triggered via webhook, it fans out four parallel render passes — primary clean plate, an alternative take, a foreground-removal pass, and a difference map — using the Seedance AI video model with your original plate image as reference.\n\nEach pass is polled until complete, then scored against a configurable QC threshold. Passes that clear the threshold are logged to Notion, uploaded to Google Drive, and shipped with a ready-to-use Nuke compositing script. The whole team gets notified via Slack and Telegram when results are ready.\n\n### Setup steps\n1. **Webhook** — Copy the webhook URL from the trigger node and use it in your shot management tool or pipeline script.\n2. **Seedance API** — Replace the `Authorization` header value in `Seedance: Generate Clean Pass` and `Poll: Check Job Status` with your own Seedance API key stored as an n8n credential.\n3. **Google Drive** — Connect a Google Drive OAuth2 credential and update the target folder ID in `Google Drive: Upload Clean Plate`.\n4. **Notion** — Connect a Notion integration credential and set the correct database ID for your clean plate log.\n5. **Slack & Telegram** — Connect credentials for both notification nodes and update the channel/chat IDs to match your team's setup.\n6. **QC Threshold** — Send `qcThreshold` (0–1) in the webhook payload to control auto-approval sensitivity. Defaults to `0.85`."},"typeVersion":1},{"id":"fb0bd91a-5bf7-46f2-96d5-bbb75524c24b","name":"Section: Trigger & Validation","type":"n8n-nodes-base.stickyNote","position":[752,560],"parameters":{"color":7,"width":500,"height":472,"content":"## 📡 Trigger & Validation\nAccepts incoming shot requests via POST webhook and validates required fields (`plateImageUrl`, `removalBrief`, `shotCode`). Enriches the payload with sensible defaults for optional fields like frame range, frame rate, project ID, and QC threshold before handing off downstream."},"typeVersion":1},{"id":"85cb9817-b621-4990-ab37-5cb6b3b6558b","name":"Section: Pass Generation & AI Render","type":"n8n-nodes-base.stickyNote","position":[1264,560],"parameters":{"color":7,"width":684,"height":504,"content":"## 🎞️ Pass Generation & AI Render\nFans out into four distinct render passes and builds image-to-video requests using the plate image as reference. Each pass is submitted to the Seedance API and the returned job ID is merged with the original metadata for downstream polling."},"typeVersion":1},{"id":"daf79825-320a-421b-a0c9-3600b3df578f","name":"Section: Polling & Job Completion","type":"n8n-nodes-base.stickyNote","position":[1984,512],"parameters":{"color":7,"width":692,"height":840,"content":"## ⏳ Polling & Job Completion\nPolls the Seedance API every 20 seconds until the render job reports `succeeded`. If still processing, execution waits and retries automatically. Once complete, metadata and QC scores are assembled for the next stage."},"typeVersion":1},{"id":"3cc5f41c-ade7-4e0d-be9b-3b343cd7598a","name":"Section: QC Check & Nuke Script","type":"n8n-nodes-base.stickyNote","position":[2688,496],"parameters":{"color":7,"width":840,"height":856,"content":"## 🔍 QC Check & Nuke Script\nScores each rendered pass against the configured QC threshold. Passes that meet the bar get a Nuke compositing script auto-generated with Read, Merge, Grade, and Write nodes pre-wired. Failed passes trigger an immediate artist-review alert in Slack."},"typeVersion":1},{"id":"8e63b13d-0a36-4f52-81c2-fdf589574010","name":"Section: Asset Storage & Logging","type":"n8n-nodes-base.stickyNote","position":[3568,304],"parameters":{"color":7,"width":504,"height":696,"content":"## ☁️ Asset Storage & Logging\nDownloads the rendered video and uploads it to Google Drive under the correct shot folder. Simultaneously logs the pass metadata — variant ID, video URL, plate URL, project ID — to a Notion database for pipeline tracking and review."},"typeVersion":1},{"id":"940e25f0-35c4-4aca-98fa-20d9e6896030","name":"Section: Team Notifications","type":"n8n-nodes-base.stickyNote","position":[4080,144],"parameters":{"color":7,"width":600,"height":792,"content":"## 📣 Team Notifications\nAggregates all four passes into a single summary and sends it to both Slack and Telegram. The message includes per-pass QC scores, video links, Nuke script content, and folder paths — giving the paint and comp team everything they need at a glance."},"typeVersion":1},{"id":"60a20a95-954b-4668-bfd0-a81bc5972ea2","name":"Security Notes","type":"n8n-nodes-base.stickyNote","position":[4336,1088],"parameters":{"color":3,"width":356,"height":192,"content":"## 🔐 Credentials & Security\nUse n8n credential store for all secrets — Seedance API key, Google Drive OAuth2, Notion API, Slack OAuth2, and Telegram Bot token. Never hardcode tokens in node headers. Replace all sample IDs and folder paths with values from your own project."},"typeVersion":1},{"id":"621abc1d-4163-4aaf-b480-f747bd03f812","name":"On Workflow Error","type":"n8n-nodes-base.errorTrigger","position":[832,1424],"parameters":{},"typeVersion":1},{"id":"be1bebcd-f0a4-41f4-ac75-ac94e689e766","name":"Slack: Error Alert","type":"n8n-nodes-base.slack","position":[1088,1424],"webhookId":"36b019e6-a01f-483e-8300-214089e84f91","parameters":{"text":"=❌ *AI-Assisted Clean Plate & Object Removal\n\nError: {{ $json.message }}\nTime: {{ new Date().toISOString() }}","select":"channel","channelId":{"__rl":true,"mode":"list","value":"C0ANFAL4WJ2","cachedResultName":"social"},"otherOptions":{},"authentication":"oAuth2"},"typeVersion":2.3},{"id":"d78670ac-d147-4373-b60f-243b773ba28b","name":"Section: Error Handler","type":"n8n-nodes-base.stickyNote","position":[752,1264],"parameters":{"color":7,"width":492,"height":328,"content":"## ⚠️ Error Handler\nCatches any failure across the entire workflow and immediately sends a Slack alert to the ops channel. Wire this to every sub-workflow or critical node to ensure no silent failures."},"typeVersion":1}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"50cb246d-493e-4ff6-9f33-cb75bec78b3c","connections":{"Wait 20s":{"main":[[{"node":"Poll: Check Job Status","type":"main","index":0}]]},"Render Complete?":{"main":[[{"node":"Build Clean Plate Metadata + QC","type":"main","index":0}],[{"node":"Wait 20s","type":"main","index":0}]]},"On Workflow Error":{"main":[[{"node":"Slack: Error Alert","type":"main","index":0}]]},"Aggregate All Passes":{"main":[[{"node":"Slack: Notify Paint/Comp Team","type":"main","index":0},{"node":"Send Telegram1","type":"main","index":0}]]},"Create a database page":{"main":[[{"node":"Aggregate All Passes","type":"main","index":0}]]},"Poll: Check Job Status":{"main":[[{"node":"Render Complete?","type":"main","index":0}]]},"Merge Job ID + Metadata":{"main":[[{"node":"Poll: Check Job Status","type":"main","index":0}]]},"Validate & Extract Input":{"main":[[{"node":"Fan-Out: 4 Clean Plate Passes","type":"main","index":0}]]},"Build Clean Plate Request":{"main":[[{"node":"Seedance: Generate Clean Pass","type":"main","index":0}]]},"Generate Nuke Comp Script":{"main":[[{"node":"Download Clean Plate Video","type":"main","index":0},{"node":"Create a database page","type":"main","index":0}]]},"Download Clean Plate Video":{"main":[[{"node":"Google Drive: Upload Clean Plate","type":"main","index":0}]]},"QC Check: Passes Threshold?":{"main":[[{"node":"Generate Nuke Comp Script","type":"main","index":0}],[{"node":"Slack: QC Failed — Artist Review","type":"main","index":0}]]},"Webhook: Clean Plate Request":{"main":[[{"node":"Validate & Extract Input","type":"main","index":0}]]},"Fan-Out: 4 Clean Plate Passes":{"main":[[{"node":"Build Clean Plate Request","type":"main","index":0}]]},"Seedance: Generate Clean Pass":{"main":[[{"node":"Merge Job ID + Metadata","type":"main","index":0}]]},"Build Clean Plate Metadata + QC":{"main":[[{"node":"QC Check: Passes Threshold?","type":"main","index":0}]]},"Google Drive: Upload Clean Plate":{"main":[[{"node":"Aggregate All Passes","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":30,"nodeTypes":{"n8n-nodes-base.if":{"count":2},"n8n-nodes-base.code":{"count":7},"n8n-nodes-base.wait":{"count":1},"n8n-nodes-base.slack":{"count":3},"n8n-nodes-base.notion":{"count":1},"n8n-nodes-base.webhook":{"count":1},"n8n-nodes-base.telegram":{"count":1},"n8n-nodes-base.stickyNote":{"count":9},"n8n-nodes-base.googleDrive":{"count":1},"n8n-nodes-base.httpRequest":{"count":3},"n8n-nodes-base.errorTrigger":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Rahul Joshi","username":"rahul08","bio":"Rahul Joshi is a seasoned technology leader specializing in the n8n automation tool and AI-driven workflow automation. With deep expertise in building open-source workflow automation and self-hosted automation platforms, he helps organizations eliminate manual processes through intelligent n8n ai agent automation solutions.\n\n","verified":true,"links":["https://www.linkedin.com/in/callrahul/"],"avatar":"https://gravatar.com/avatar/b6cf57822463143589b36ada06fbf6cb1509223a740fae3160b28f1ce41ccc12?r=pg&d=retro&size=200"},"nodes":[{"id":12,"icon":"fa:bug","name":"n8n-nodes-base.errorTrigger","codex":{"data":{"details":"In n8n, when a workflow execution fails, it can start another workflow. This second workflow can be any arbitrary workflow on your n8n instance. Use the Error Trigger node as your Trigger in the Error workflow.","resources":{"generic":[{"url":"https://n8n.io/blog/creating-error-workflows-in-n8n/","icon":"🌪","label":"Creating Error Workflows in n8n"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.errortrigger/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Other Trigger Nodes"]}}},"group":"[\"trigger\"]","defaults":{"name":"Error Trigger","color":"#0000FF"},"iconData":{"icon":"bug","type":"icon"},"displayName":"Error Trigger","typeVersion":1,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":19,"icon":"file:httprequest.svg","name":"n8n-nodes-base.httpRequest","codex":{"data":{"alias":["API","Request","URL","Build","cURL"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automate-designs-with-bannerbear-and-n8n/","icon":"🎨","label":"Automate Designs with Bannerbear and n8n"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/how-to-use-the-http-request-node-the-swiss-army-knife-for-workflow-automation/","icon":"🧰","label":"How to use the HTTP Request Node - The Swiss Army Knife for Workflow Automation"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"},{"url":"https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"output\"]","defaults":{"name":"HTTP Request","color":"#0004F5"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MCAyMEM0MCA4Ljk1MzE0IDMxLjA0NjkgMCAyMCAwQzguOTUzMTQgMCAwIDguOTUzMTQgMCAyMEMwIDMxLjA0NjkgOC45NTMxNCA0MCAyMCA0MEMzMS4wNDY5IDQwIDQwIDMxLjA0NjkgNDAgMjBaTTIwIDM2Ljk0NThDMTguODg1MiAzNi45NDU4IDE3LjEzNzggMzUuOTY3IDE1LjQ5OTggMzIuNjk4NUMxNC43OTY0IDMxLjI5MTggMTQuMTk2MSAyOS41NDMxIDEzLjc1MjYgMjcuNjg0N0gyNi4xODk4QzI1LjgwNDUgMjkuNTQwMyAyNS4yMDQ0IDMxLjI5MDEgMjQuNTAwMiAzMi42OTg1QzIyLjg2MjIgMzUuOTY3IDIxLjExNDggMzYuOTQ1OCAyMCAzNi45NDU4Wk0xMi45MDY0IDIwQzEyLjkwNjQgMjEuNjA5NyAxMy4wMDg3IDIzLjE2NCAxMy4yMDAzIDI0LjYzMDVIMjYuNzk5N0MyNi45OTEzIDIzLjE2NCAyNy4wOTM2IDIxLjYwOTcgMjcuMDkzNiAyMEMyNy4wOTM2IDE4LjM5MDMgMjYuOTkxMyAxNi44MzYgMjYuNzk5NyAxNS4zNjk1SDEzLjIwMDNDMTMuMDA4NyAxNi44MzYgMTIuOTA2NCAxOC4zOTAzIDEyLjkwNjQgMjBaTTIwIDMuMDU0MTlDMjEuMTE0OSAzLjA1NDE5IDIyLjg2MjIgNC4wMzA3OCAyNC41MDAxIDcuMzAwMzlDMjUuMjA2NiA4LjcxNDA4IDI1LjgwNzIgMTAuNDA2NyAyNi4xOTIgMTIuMzE1M0gxMy43NTAxQzE0LjE5MzMgMTAuNDA0NyAxNC43OTQyIDguNzEyNTQgMTUuNDk5OCA3LjMwMDY0QzE3LjEzNzcgNC4wMzA4MyAxOC44ODUxIDMuMDU0MTkgMjAgMy4wNTQxOVpNMzAuMTQ3OCAyMEMzMC4xNDc4IDE4LjQwOTkgMzAuMDU0MyAxNi44NjE3IDI5LjgyMjcgMTUuMzY5NUgzNi4zMDQyQzM2LjcyNTIgMTYuODQyIDM2Ljk0NTggMTguMzk2NCAzNi45NDU4IDIwQzM2Ljk0NTggMjEuNjAzNiAzNi43MjUyIDIzLjE1OCAzNi4zMDQyIDI0LjYzMDVIMjkuODIyN0MzMC4wNTQzIDIzLjEzODMgMzAuMTQ3OCAyMS41OTAxIDMwLjE0NzggMjBaTTI2LjI3NjcgNC4yNTUxMkMyNy42MzY1IDYuMzYwMTkgMjguNzExIDkuMTMyIDI5LjM3NzQgMTIuMzE1M0gzNS4xMDQ2QzMzLjI1MTEgOC42NjggMzAuMTA3IDUuNzgzNDYgMjYuMjc2NyA0LjI1NTEyWk0xMC42MjI2IDEyLjMxNTNINC44OTI5M0M2Ljc1MTQ3IDguNjY3ODQgOS44OTM1MSA1Ljc4MzQxIDEzLjcyMzIgNC4yNTUxM0MxMi4zNjM1IDYuMzYwMjEgMTEuMjg5IDkuMTMyMDEgMTAuNjIyNiAxMi4zMTUzWk0zLjA1NDE5IDIwQzMuMDU0MTkgMjEuNjAzIDMuMjc3NDMgMjMuMTU3NSAzLjY5NDg0IDI0LjYzMDVIMTAuMTIxN0M5Ljk0NjE5IDIzLjE0MiA5Ljg1MjIyIDIxLjU5NDMgOS44NTIyMiAyMEM5Ljg1MjIyIDE4LjQwNTcgOS45NDYxOSAxNi44NTggMTAuMTIxNyAxNS4zNjk1SDMuNjk0ODRDMy4yNzc0MyAxNi44NDI1IDMuMDU0MTkgMTguMzk3IDMuMDU0MTkgMjBaTTI2LjI3NjYgMzUuNzQyN0MyNy42MzY1IDMzLjYzOTMgMjguNzExIDMwLjg2OCAyOS4zNzc0IDI3LjY4NDdIMzUuMTA0NkMzMy4yNTEgMzEuMzMyMiAzMC4xMDY4IDM0LjIxNzkgMjYuMjc2NiAzNS43NDI3Wk0xMy43MjM0IDM1Ljc0MjdDOS44OTM2OSAzNC4yMTc5IDYuNzUxNTUgMzEuMzMyNCA0Ljg5MjkzIDI3LjY4NDdIMTAuNjIyNkMxMS4yODkgMzAuODY4IDEyLjM2MzUgMzMuNjM5MyAxMy43MjM0IDM1Ljc0MjdaIiBmaWxsPSIjM0E0MkU5Ii8+Cjwvc3ZnPgo="},"displayName":"HTTP Request","typeVersion":4,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":20,"icon":"fa:map-signs","name":"n8n-nodes-base.if","codex":{"data":{"alias":["Router","Filter","Condition","Logic","Boolean","Branch"],"details":"The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.","resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"If","color":"#408000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"If","typeVersion":2,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":40,"icon":"file:slack.svg","name":"n8n-nodes-base.slack","codex":{"data":{"alias":["human","form","wait","hitl","approval"],"resources":{"generic":[{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"},{"url":"https://n8n.io/blog/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/","icon":"👏","label":"How to automatically give kudos to contributors with GitHub, Slack, and n8n"},{"url":"https://n8n.io/blog/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.slack/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/slack/"}]},"categories":["Communication","HITL"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"output\"]","defaults":{"name":"Slack"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgMTUwLjg1MiAxNTAuODUyIj48dXNlIHhsaW5rOmhyZWY9IiNhIiB4PSIuOTI2IiB5PSIuOTI2Ii8+PHN5bWJvbCBpZD0iYSIgb3ZlcmZsb3c9InZpc2libGUiPjxnIHN0cm9rZS13aWR0aD0iMS44NTIiPjxwYXRoIGZpbGw9IiNlMDFlNWEiIHN0cm9rZT0iI2UwMWU1YSIgZD0iTTQwLjc0MSA5My41NWMwLTguNzM1IDYuNjA3LTE1Ljc3MiAxNC44MTUtMTUuNzcyczE0LjgxNSA3LjAzNyAxNC44MTUgMTUuNzcydjM4LjgyNGMwIDguNzM3LTYuNjA3IDE1Ljc3NC0xNC44MTUgMTUuNzc0cy0xNC44MTUtNy4wMzctMTQuODE1LTE1Ljc3MnoiLz48cGF0aCBmaWxsPSIjZWNiMjJkIiBzdHJva2U9IiNlY2IyMmQiIGQ9Ik05My41NSAxMDcuNDA4Yy04LjczNSAwLTE1Ljc3Mi02LjYwNy0xNS43NzItMTQuODE1czcuMDM3LTE0LjgxNSAxNS43NzItMTQuODE1aDM4LjgyNmM4LjczNSAwIDE1Ljc3MiA2LjYwNyAxNS43NzIgMTQuODE1cy03LjAzNyAxNC44MTUtMTUuNzcyIDE0LjgxNXoiLz48cGF0aCBmaWxsPSIjMmZiNjdjIiBzdHJva2U9IiMyZmI2N2MiIGQ9Ik03Ny43NzggMTUuNzcyQzc3Ljc3OCA3LjAzNyA4NC4zODUgMCA5Mi41OTMgMHMxNC44MTUgNy4wMzcgMTQuODE1IDE1Ljc3MnYzOC44MjZjMCA4LjczNS02LjYwNyAxNS43NzItMTQuODE1IDE1Ljc3MnMtMTQuODE1LTcuMDM3LTE0LjgxNS0xNS43NzJ6Ii8+PHBhdGggZmlsbD0iIzM2YzVmMSIgc3Ryb2tlPSIjMzZjNWYxIiBkPSJNMTUuNzcyIDcwLjM3MUM3LjAzNyA3MC4zNzEgMCA2My43NjMgMCA1NS41NTZzNy4wMzctMTQuODE1IDE1Ljc3Mi0xNC44MTVoMzguODI2YzguNzM1IDAgMTUuNzcyIDYuNjA3IDE1Ljc3MiAxNC44MTVzLTcuMDM3IDE0LjgxNS0xNS43NzIgMTQuODE1eiIvPjxnIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiPjxwYXRoIGZpbGw9IiNlY2IyMmQiIHN0cm9rZT0iI2VjYjIyZCIgZD0iTTc3Ljc3OCAxMzMuMzMzYzAgOC4yMDggNi42MDcgMTQuODE1IDE0LjgxNSAxNC44MTVzMTQuODE1LTYuNjA3IDE0LjgxNS0xNC44MTUtNi42MDctMTQuODE1LTE0LjgxNS0xNC44MTVINzcuNzc4eiIvPjxwYXRoIGZpbGw9IiMyZmI2N2MiIHN0cm9rZT0iIzJmYjY3YyIgZD0iTTEzMy4zMzQgNzAuMzcxaC0xNC44MTVWNTUuNTU2YzAtOC4yMDcgNi42MDctMTQuODE1IDE0LjgxNS0xNC44MTVzMTQuODE1IDYuNjA3IDE0LjgxNSAxNC44MTUtNi42MDcgMTQuODE1LTE0LjgxNSAxNC44MTV6Ii8+PHBhdGggZmlsbD0iI2UwMWU1YSIgc3Ryb2tlPSIjZTAxZTVhIiBkPSJNMTQuODE1IDc3Ljc3OEgyOS42M3YxNC44MTVjMCA4LjIwNy02LjYwNyAxNC44MTUtMTQuODE1IDE0LjgxNVMwIDEwMC44IDAgOTIuNTkzczYuNjA3LTE0LjgxNSAxNC44MTUtMTQuODE1eiIvPjxwYXRoIGZpbGw9IiMzNmM1ZjEiIHN0cm9rZT0iIzM2YzVmMSIgZD0iTTcwLjM3MSAxNC44MTVWMjkuNjNINTUuNTU2Yy04LjIwNyAwLTE0LjgxNS02LjYwNy0xNC44MTUtMTQuODE1UzQ3LjM0OCAwIDU1LjU1NiAwczE0LjgxNSA2LjYwNyAxNC44MTUgMTQuODE1eiIvPjwvZz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Slack","typeVersion":2,"nodeCategories":[{"id":6,"name":"Communication"},{"id":28,"name":"HITL"}]},{"id":47,"icon":"file:webhook.svg","name":"n8n-nodes-base.webhook","codex":{"data":{"alias":["HTTP","API","Build","WH"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/","icon":"👏","label":"How to automatically give kudos to contributors with GitHub, Slack, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/creating-custom-incident-response-workflows-with-n8n/","label":"How to automate every step of an incident response workflow"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"trigger\"]","defaults":{"name":"Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Webhook","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":49,"icon":"file:telegram.svg","name":"n8n-nodes-base.telegram","codex":{"data":{"alias":["human","form","wait","hitl","approval"],"resources":{"generic":[{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"url":"https://n8n.io/blog/using-automation-to-boost-productivity-in-the-workplace/","icon":"💪","label":"Using Automation to Boost Productivity in the Workplace"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"url":"https://n8n.io/blog/creating-telegram-bots-with-n8n-a-no-code-platform/","icon":"💬","label":"Creating Telegram Bots with n8n, a No-Code Platform"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.telegram/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/telegram/"}]},"categories":["Communication","HITL"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"output\"]","defaults":{"name":"Telegram"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgNjYgNjYiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0ibm9uZSI+PHBhdGggZmlsbD0iIzM3YWVlMiIgZD0iTTAgMzJjMCAxNy42NzMgMTQuMzI3IDMyIDMyIDMyczMyLTE0LjMyNyAzMi0zMlM0OS42NzMgMCAzMiAwIDAgMTQuMzI3IDAgMzIiLz48cGF0aCBmaWxsPSIjYzhkYWVhIiBkPSJtMjEuNjYxIDM0LjMzOCAzLjc5NyAxMC41MDhzLjQ3NS45ODMuOTgzLjk4MyA4LjA2OC03Ljg2NCA4LjA2OC03Ljg2NGw4LjQwNy0xNi4yMzctMjEuMTE5IDkuODk4eiIvPjxwYXRoIGZpbGw9IiNhOWM2ZDgiIGQ9Im0yNi42OTUgMzcuMDM0LS43MjkgNy43NDZzLS4zMDUgMi4zNzMgMi4wNjggMGw0LjY0NC00LjIwMyIvPjxwYXRoIGQ9Im0yMS43MyAzNC43MTItNy44MDktMi41NDVzLS45MzItLjM3OC0uNjMzLTEuMjM3Yy4wNjItLjE3Ny4xODYtLjMyOC41NTktLjU4OCAxLjczMS0xLjIwNiAzMi4wMjgtMTIuMDk2IDMyLjAyOC0xMi4wOTZzLjg1Ni0uMjg4IDEuMzYxLS4wOTdjLjIzMS4wODguMzc4LjE4Ny41MDMuNTQ4LjA0NS4xMzIuMDcxLjQxMS4wNjguNjg5LS4wMDMuMjAxLS4wMjcuMzg2LS4wNDUuNjc4LS4xODQgMi45NzgtNS43MDYgMjUuMTk4LTUuNzA2IDI1LjE5OHMtLjMzIDEuMy0xLjUxNCAxLjM0NWMtLjQzMi4wMTYtLjk1Ni0uMDcxLTEuNTgyLS42MS0yLjMyMy0xLjk5OC0xMC4zNTItNy4zOTQtMTIuMTI2LTguNThhLjM0LjM0IDAgMCAxLS4xNDYtLjIzOWMtLjAyNS0uMTI1LjEwOC0uMjguMTA4LS4yOHMxMy45OC0xMi40MjcgMTQuMzUyLTEzLjczMWMuMDI5LS4xMDEtLjA3OS0uMTUxLS4yMjYtLjEwNy0uOTI5LjM0Mi0xNy4wMjUgMTAuNTA2LTE4LjgwMSAxMS42MjktLjEwNC4wNjYtLjM5NS4wMjMtLjM5NS4wMjMiLz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Telegram","typeVersion":1,"nodeCategories":[{"id":6,"name":"Communication"},{"id":28,"name":"HITL"}]},{"id":58,"icon":"file:googleDrive.svg","name":"n8n-nodes-base.googleDrive","codex":{"data":{"resources":{"generic":[{"url":"https://n8n.io/blog/your-business-doesnt-need-you-to-operate/","icon":" 🖥️","label":"Hey founders! Your business doesn't need you to operate"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googledrive/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Data & Storage"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\"]","defaults":{"name":"Google Drive"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgODEgNzMiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0ibm9uZSI+PHBhdGggZmlsbD0iIzAwNjZkYSIgZD0ibTYuMDQ4IDYxLjI2IDMuNTI4IDYuMDk0Yy43MzMgMS4yODMgMS43ODcgMi4yOTEgMy4wMjQgMy4wMjRsMTIuNi0yMS44MUgwYTguMyA4LjMgMCAwIDAgMS4xIDQuMTI0eiIvPjxwYXRoIGZpbGw9IiMwMGFjNDciIGQ9Ik00MCAyMi45MSAyNy40IDEuMWMtMS4yMzcuNzMzLTIuMjkxIDEuNzQxLTMuMDI0IDMuMDI0TDEuMSA0NC40NDVBOC4zIDguMyAwIDAgMCAwIDQ4LjU2OGgyNS4yeiIvPjxwYXRoIGZpbGw9IiNlYTQzMzUiIGQ9Ik02Ny40IDcwLjM3OGMxLjIzNy0uNzMzIDIuMjkxLTEuNzQxIDMuMDI0LTMuMDI0bDEuNDY2LTIuNTIgNy4wMS0xMi4xNDJhOC4zIDguMyAwIDAgMCAxLjEtNC4xMjRINTQuNzk4bDUuMzYzIDEwLjUzOHoiLz48cGF0aCBmaWxsPSIjMDA4MzJkIiBkPSJNNDAgMjIuOTEgNTIuNiAxLjFDNTEuMzYzLjM2NyA0OS45NDMgMCA0OC40NzcgMEgzMS41MjRjLTEuNDY2IDAtMi44ODcuNDEyLTQuMTI0IDEuMXoiLz48cGF0aCBmaWxsPSIjMjY4NGZjIiBkPSJNNTQuNzk5IDQ4LjU2OEgyNS4ybC0xMi42IDIxLjgxYzEuMjM3LjczMyAyLjY1NyAxLjEgNC4xMjQgMS4xaDQ2LjU1MmMxLjQ2NiAwIDIuODg3LS40MTIgNC4xMjQtMS4xeiIvPjxwYXRoIGZpbGw9IiNmZmJhMDAiIGQ9Ik02Ny4yNjIgMjQuMjg0IDU1LjYyNCA0LjEyNEM1NC44OTEgMi44NDEgNTMuODM3IDEuODMzIDUyLjYgMS4xTDQwIDIyLjkxbDE0LjggMjUuNjU5aDI1LjE1NWE4LjMgOC4zIDAgMCAwLTEuMS00LjEyNHoiLz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Google Drive","typeVersion":3,"nodeCategories":[{"id":3,"name":"Data & Storage"}]},{"id":487,"icon":"file:notion.svg","name":"n8n-nodes-base.notion","codex":{"data":{"resources":{"generic":[{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.notion/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/notion/"}]},"categories":["Productivity"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"output\"]","defaults":{"name":"Notion"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik03LjU4Mjc2IDYuOTc2NzlDOC44MjA0NyA3Ljk4MjM4IDkuMjg0NzkgNy45MDU2NiAxMS42MDkxIDcuNzUwNTdMMzMuNTIwNiA2LjQzNDg4QzMzLjk4NTMgNi40MzQ4OCAzMy41OTg5IDUuOTcxMjcgMzMuNDQzOSA1Ljg5NDIzTDI5LjgwNDkgMy4yNjM0OEMyOS4xMDc2IDIuNzIyMTMgMjguMTc4NiAyLjEwMjE3IDI2LjM5ODIgMi4yNTcyNkw1LjE4MTE1IDMuODA0NzZDNC40MDczNiAzLjg4MTQ4IDQuMjUyODIgNC4yNjgzNyA0LjU2MDk2IDQuNTc4NDdMNy41ODI3NiA2Ljk3Njc5Wk04Ljg5ODI5IDEyLjA4MzNWMzUuMTM4MUM4Ljg5ODI5IDM2LjM3NzEgOS41MTc0NiAzNi44NDA3IDEwLjkxMSAzNi43NjRMMzQuOTkxOSAzNS4zNzA2QzM2LjM4NjIgMzUuMjkzOSAzNi41NDE1IDM0LjQ0MTcgMzYuNTQxNSAzMy40MzUyVjEwLjUzNTFDMzYuNTQxNSA5LjUzMDE5IDM2LjE1NDkgOC45ODgyOSAzNS4zMDE0IDkuMDY1NjRMMTAuMTM2NyAxMC41MzUxQzkuMjA3OTkgMTAuNjEzMSA4Ljg5ODIxIDExLjA3NzcgOC44OTgyMSAxMi4wODMzSDguODk4MjlaTTMyLjY3MDggMTMuMzJDMzIuODI1MiAxNC4wMTcgMzIuNjcwOCAxNC43MTMzIDMxLjk3MjUgMTQuNzkxN0wzMC44MTIzIDE1LjAyMjlWMzIuMDQzNEMyOS44MDQ5IDMyLjU4NDggMjguODc1OSAzMi44OTQ0IDI4LjEwMTggMzIuODk0NEMyNi44NjI1IDMyLjg5NDQgMjYuNTUyMSAzMi41MDcyIDI1LjYyMzcgMzEuMzQ3NEwxOC4wMzQzIDE5LjQzMjlWMzAuOTYwNUwyMC40MzU5IDMxLjUwMjRDMjAuNDM1OSAzMS41MDI0IDIwLjQzNTkgMzIuODk0NCAxOC40OTgzIDMyLjg5NDRMMTMuMTU2OCAzMy4yMDQyQzEzLjAwMTYgMzIuODk0NCAxMy4xNTY4IDMyLjEyMTQgMTMuNjk4NiAzMS45NjY1TDE1LjA5MjUgMzEuNTgwMlYxNi4zMzg1TDEzLjE1NzIgMTYuMTgzNEMxMy4wMDE5IDE1LjQ4NjQgMTMuMzg4NSAxNC40ODE0IDE0LjQ3MzMgMTQuNDAzNUwyMC4yMDM1IDE0LjAxNzJMMjguMTAxOCAyNi4wODY4VjE1LjQwOTdMMjYuMDg4MSAxNS4xNzg2QzI1LjkzMzUgMTQuMzI2NSAyNi41NTIxIDEzLjcwNzggMjcuMzI2NSAxMy42MzExTDMyLjY3MDggMTMuMzJaTTMuMzk5NzMgMS43MTU5OEwyNS40Njg4IDAuMDkwNzQ1N0MyOC4xNzkgLTAuMTQxNjg4IDI4Ljg3NjMgMC4wMTQwMjQ1IDMwLjU3OTYgMS4yNTEzNUwzNy42MjQzIDYuMjAyNzZDMzguNzg2NyA3LjA1NDIxIDM5LjE3NDIgNy4yODYwMiAzOS4xNzQyIDguMjE0MTlWMzUuMzcwNkMzOS4xNzQyIDM3LjA3MjYgMzguNTU0MiAzOC4wNzkxIDM2LjM4NjUgMzguMjMzMUwxMC43NTc3IDM5Ljc4MDdDOS4xMzA0OSAzOS44NTgzIDguMzU2MDcgMzkuNjI2NCA3LjUwMzkyIDM4LjU0MjZMMi4zMTYwOCAzMS44MTE3QzEuMzg2NTggMzAuNTcyNiAxIDI5LjY0NTcgMSAyOC41NjEzVjQuNDIyODNDMSAzLjAzMTA1IDEuNjIwMTkgMS44NzAwNSAzLjM5OTczIDEuNzE1OThWMS43MTU5OFoiIGZpbGw9ImJsYWNrIi8+Cjwvc3ZnPgo="},"displayName":"Notion","typeVersion":2,"nodeCategories":[{"id":4,"name":"Productivity"}]},{"id":514,"icon":"fa:pause-circle","name":"n8n-nodes-base.wait","codex":{"data":{"alias":["pause","sleep","delay","timeout"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.wait/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Flow"]}}},"group":"[\"organization\"]","defaults":{"name":"Wait","color":"#804050"},"iconData":{"icon":"pause-circle","type":"icon"},"displayName":"Wait","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":31,"name":"Content Creation"},{"id":51,"name":"Multimodal AI"}],"image":[]}}