{"workflow":{"id":14889,"name":"Generate style-locked Seedance videos with an automated QC pipeline","views":0,"recentViews":0,"totalViews":0,"createdAt":"2026-04-08T08:43:31.029Z","description":"## 📘 Description\nThis workflow is an AI-powered style look transfer and quality control pipeline designed for VFX and editorial production. It transforms a new shot brief and a hero reference image into multiple style-locked video variants, evaluates them against a predefined show style profile, and delivers only approved outputs to editorial—bridging the gap between creative direction consistency and automated production validation.\n⚙️ Step-by-Step Flow\nThe workflow begins with a webhook trigger that acts as the style transfer request intake layer, receiving a POST request containing the shot code, shot description, hero reference image, and optional show-specific style parameters. This input flows into a validation and normalization stage, where required fields are verified and a structured show style profile is extracted, including attributes such as color grading, contrast levels, grain texture, lighting mood, atmospheric style, and color temperature, along with QC thresholds for evaluation. The system then performs prompt engineering and expands the single shot brief into three distinct style-locked variants: a primary composition designed for editorial use, an alternate framing option offering a different perspective, and a stress test variant that pushes style boundaries to validate consistency limits. Each variation is tightly anchored to the hero reference image and enriched with detailed cinematic instructions to ensure strict adherence to the approved show look.\n\nAt the core of the pipeline, an image-to-video generation layer constructs structured API requests and submits each variant as an independent job to the Seedance AI model, ensuring that all outputs remain visually consistent with the reference style. A polling mechanism continuously monitors each job at fixed intervals, allowing the workflow to proceed only after successful completion. Once rendering is complete, an automated QC engine evaluates each variant using measurable metrics such as contrast score, color match accuracy, and brightness variance, comparing them against predefined thresholds from the show style profile. Each variant is then assigned a QC grade and classified as either approved for editorial delivery or rejected for further review.\n\nA decision routing layer ensures that only approved variants move forward, while failed outputs trigger alerts for review without disrupting the pipeline. An aggregation layer then compiles all QC results into a structured report, summarizing approved and rejected variants along with their performance metrics and visual references. Finally, a multi-channel delivery system distributes the QC report and outputs to key stakeholders: a Slack message provides a quick overview for the team, a detailed HTML email is sent to editorial with full QC breakdown and style profile context, and a Jira task is created for tracking and review—ensuring transparency, consistency, and alignment across creative and production teams.\n\n## 🚨 Error Handling\n • Global error trigger across the workflow\n • Instant Slack alerts with error details and timestamps\n • Prevents silent failures and ensures production reliability\n\n## 🧩 Prerequisites\n • Seedance API (AI video generation)\n • Webhook integration (input trigger)\n • Slack OAuth2 (QC reporting)\n • Gmail OAuth2 (editorial delivery)\n • Jira API (task tracking)\n • Optional Telegram Bot (QC failure alerts)\n\n## 💡 Key Benefits \n ✔ Ensures strict style consistency using hero reference anchoring\n ✔ Automated QC validation using measurable visual metrics\n ✔ Multiple style-locked variants for editorial flexibility\n ✔ Prevents incorrect outputs from reaching editorial\n ✔ Fully automated reporting and task tracking\n ✔ Scalable pipeline for episodic and film production\n\n## 👥 Perfect For\n-  VFX supervisors and creative directors\n-  Editorial and finishing teams\n-  Look development and color grading pipelines\n-  Film and episodic production workflows\n-  AI-assisted style consistency and QC systems","workflow":{"id":"OkCI3SlbQxO3eKJX","meta":{"instanceId":"8443f10082278c46aa5cf3acf8ff0f70061a2c58bce76efac814b16290845177"},"name":"Generate Style-Locked Videos with Seedance and Automated QC Pipeline","tags":[],"nodes":[{"id":"0016d26f-ef9f-44df-a0ab-50ef6795a783","name":"Overview: Style Look Transfer Pipeline1","type":"n8n-nodes-base.stickyNote","position":[-1248,-528],"parameters":{"width":672,"height":652,"content":"## 🎨 Style Look Transfer — AI Video QC Pipeline\n\n### How it works\nThis workflow automates cinematic style transfer for VFX and editorial pipelines. It takes a new shot description and a hero reference image, generates three style-locked video variants via the Seedance AI model, runs automated QC checks against your show's approved style profile, then routes results to Slack, email, and Jira.\n\nThe key idea: every generated variant is anchored to a director-approved reference frame. QC scores (contrast, colour match, brightness variance) are measured against per-show thresholds — not guesswork. Only variants that pass are sent to editorial.\n\n### Setup steps\n1. **Webhook** — use the `/style-look-transfer` endpoint as your trigger. Send `shotCode`, `newShotDescription`, and `heroReferenceUrl` in the POST body.\n2. **Seedance API** — replace the `Authorization` header value with your own Seedance API key stored as an n8n credential.\n3. **Slack** — connect your Slack OAuth2 credential and update the `channelId` to your target channel.\n4. **Gmail** — connect a Gmail OAuth2 credential. The `deliveryEmail` field in the request body controls where the QC report is sent.\n5. **Jira** — connect your Jira Cloud credential and update the `project` and `issueType` IDs to match your board.\n6. **Telegram** (optional) — connect your Telegram Bot credential and confirm the `chatId` is correct.\n7. Do a test run with a sample payload — check Slack for the QC report and confirm Jira task creation."},"typeVersion":1},{"id":"d112b6df-0ec2-4e58-b068-8a10c23e62c9","name":"Section: Intake & Style Profile1","type":"n8n-nodes-base.stickyNote","position":[-416,256],"parameters":{"color":7,"width":532,"height":580,"content":"## 📡 Intake & Style Profile Extraction\nReceives a POST request with shot metadata and hero reference URL. Validates required fields, then extracts the show's visual style profile — colour grade, contrast thresholds, grain, lighting mood — which is used to lock every generated variant to the same approved look."},"typeVersion":1},{"id":"278477b9-a65d-41a5-806a-2c103a6fc195","name":"Section: Variant Generation & Polling1","type":"n8n-nodes-base.stickyNote","position":[128,240],"parameters":{"color":7,"width":1444,"height":772,"content":"## 🎬 Variant Generation\nBuilds three style-locked prompts — Primary Comp, Alt Framing, and Style Stress Test. Each prompt embeds the full show style fingerprint. Requests are sent to the Seedance model with the hero reference image attached, then polled every 20 seconds until each job completes."},"typeVersion":1},{"id":"0ad8737e-9cae-43fd-a7aa-ee32dc1e2450","name":"Section: Style QC Engine1","type":"n8n-nodes-base.stickyNote","position":[1600,224],"parameters":{"color":7,"width":732,"height":804,"content":"## 🔍 Automated Style QC\nScores each variant against show thresholds for contrast, colour match, and brightness variance. Variants that fall below the minimum scores are flagged for supervisor review and blocked from delivery. A QC grade (A, B, C, or F) is assigned per variant."},"typeVersion":1},{"id":"27b85964-6a96-47bd-a5d2-a6fd66c4349b","name":"Section: Delivery & Notifications1","type":"n8n-nodes-base.stickyNote","position":[2352,-48],"parameters":{"color":7,"width":468,"height":1060,"content":"## 📤 Editorial Delivery & Notifications\nAggregates QC results and routes approved variants to three channels simultaneously: a Slack QC report, a styled HTML email to the editorial contact, and a Jira review task. Rejected variants are listed with failure reasons — never silently dropped."},"typeVersion":1},{"id":"9ad1e986-2a9b-4724-a792-3197f24d799c","name":"Security: Credentials Note1","type":"n8n-nodes-base.stickyNote","position":[2960,800],"parameters":{"color":3,"width":300,"height":256,"content":"## 🔐 Credentials & Security\nReplace all hardcoded `Authorization` bearer tokens with n8n credentials (HTTP Header Auth). Use OAuth2 for Slack and Gmail. Store your Seedance API key as a named credential — never paste raw tokens into node parameters before sharing this template."},"typeVersion":1},{"id":"35007753-e563-4d5d-bfd2-02e98c29a56e","name":"Poll: Check Variant Generation Status1","type":"n8n-nodes-base.httpRequest","position":[1120,512],"parameters":{"url":"=https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks/{{ $json.id }}","options":{},"sendHeaders":true,"headerParameters":{"parameters":[{"name":"Authorization","value":"Bearer YOUR_TOKEN_HERE"}]}},"typeVersion":4.3},{"id":"f1f415f1-01e3-4bee-80b1-030f0b0e2c75","name":"Wait 20s Before Retry1","type":"n8n-nodes-base.wait","position":[1408,800],"webhookId":"slt-wait-001","parameters":{"amount":20},"typeVersion":1.1},{"id":"0cee6a18-b757-47df-8d78-00a0e333c007","name":"Slack: Post Style QC Report1","type":"n8n-nodes-base.slack","position":[2560,496],"webhookId":"bcec948c-c766-4973-81dd-e2ec370e0a55","parameters":{"text":"=🎨 *Style QC Report – {{ $json.shotCode }} ({{ $json.showName }})*\n\n📺 *Episode:* {{ $json.episodeId }} | *Vendor:* {{ $json.vendorName }}\n🎬 *Shot:* {{ $json.newShotDescription }}\n📊 *Results:* ✅ {{ $json.totalApproved }} Approved | ❌ {{ $json.totalRejected }} Rejected\n\n*✅ Approved for Editorial:*\n{{ $json.slackApproved || 'None passed QC' }}\n\n*❌ Rejected (do not deliver):*\n{{ $json.slackRejected }}\n\n🖼️ *Hero Reference:* <{{ $json.heroReferenceUrl }}|View Approved Style Ref>\n\n_Style QC ran automatically against show profile. Approved variants pushed to editorial._\n_Generated: {{ $json.generatedAt }}_","select":"channel","channelId":{"__rl":true,"mode":"list","value":"YOUR_SLACK_CHANNEL_ID","cachedResultName":"your-channel-name"},"otherOptions":{},"authentication":"oAuth2"},"typeVersion":2.3},{"id":"0613bed6-5eb1-40d9-8609-20af501d2822","name":"Gmail: Send QC Report to Editorial1","type":"n8n-nodes-base.gmail","position":[2576,768],"webhookId":"b842122f-ebc2-4401-809c-80191b2e6286","parameters":{"sendTo":"={{ $json.deliveryEmail }}","message":"=<div style=\"font-family:Arial,sans-serif;max-width:700px;margin:0 auto;background:#0d1117;color:#e0e0e0;padding:24px;border-radius:8px;\">\n\n  <h2 style=\"color:#e63946;\">🎨 Style QC Report – {{ $json.shotCode }}</h2>\n\n  <p><strong>Show:</strong> {{ $json.showName }} | <strong>Episode:</strong> {{ $json.episodeId }} | <strong>Vendor:</strong> {{ $json.vendorName }}</p>\n  <p><strong>Shot:</strong> {{ $json.newShotDescription }}</p>\n\n  <table style=\"width:100%;border-collapse:collapse;margin:16px 0;\">\n    <tr style=\"background:#161b22;\">\n      <td style=\"padding:8px;color:#aaa;\">Total Variants</td>\n      <td style=\"padding:8px;\">{{ $json.totalApproved + $json.totalRejected }}</td>\n    </tr>\n    <tr>\n      <td style=\"padding:8px;color:#aaa;\">Approved ✅</td>\n      <td style=\"padding:8px;color:#00b894;\">{{ $json.totalApproved }}</td>\n    </tr>\n    <tr style=\"background:#161b22;\">\n      <td style=\"padding:8px;color:#aaa;\">Rejected ❌</td>\n      <td style=\"padding:8px;color:#e63946;\">{{ $json.totalRejected }}</td>\n    </tr>\n  </table>\n\n  <h3 style=\"color:#00b894;\">✅ Approved Variants</h3>\n  <p>{{ $json.totalApproved > 0 ? $json.slackApproved : 'No variants passed QC this run.' }}</p>\n\n  <h3 style=\"color:#e63946;\">❌ Rejected Variants</h3>\n  <p>{{ $json.slackRejected || 'None' }}</p>\n\n  <h3 style=\"color:#e17055;\">🎨 Show Style Profile</h3>\n  <pre style=\"background:#1a1a2e;color:#00ff88;padding:12px;border-radius:6px;font-size:11px;\">Color Grade: {{ $json.showStyle.colorGrade }}\nContrast: {{ $json.showStyle.contrastLevel }}\nGrain: {{ $json.showStyle.grainTexture }}\nLighting: {{ $json.showStyle.lightingMood }}\nAtmosphere: {{ $json.showStyle.atmosphereStyle }}\nColor Temp: {{ $json.showStyle.colorTemp }}</pre>\n\n  <p style=\"color:#666;font-size:11px;\">\n    Automated style QC. Do not deliver rejected variants without supervisor approval.<br/>\n    Generated: {{ $json.generatedAt }}\n  </p>\n\n</div>","options":{},"subject":"=[Style QC] {{ $json.shotCode }} – {{ $json.totalApproved }} Variants Approved | {{ $json.showName }}"},"typeVersion":2.2},{"id":"e8f5cee1-06f2-4c3f-9cc8-3753b14bcce1","name":"Telegram: Notify on QC Rejection1","type":"n8n-nodes-base.telegram","position":[2064,736],"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_{{ $json.allQcPassed ? 'All passes auto-approved — ready for comp!' : 'Some passes need artist review before use.' }}_\n_Generated at: {{ $json.generatedAt }}_","chatId":"=YOUR_TELEGRAM_CHAT_ID","additionalFields":{"parse_mode":"Markdown"}},"typeVersion":1.1},{"id":"57fba55b-cae6-45b9-8690-fe4ef88324aa","name":"Jira: Create Style Review Task1","type":"n8n-nodes-base.jira","position":[2560,224],"parameters":{"project":{"__rl":true,"mode":"list","value":"YOUR_JIRA_PROJECT_ID","cachedResultName":"Your Project Name"},"summary":"=[Style QC] {{ $json.shotCode }} – {{ $json.showName }} | ✅ {{ $json.totalApproved }} / ❌ {{ $json.totalRejected }}","issueType":{"__rl":true,"mode":"list","value":"YOUR_JIRA_ISSUE_TYPE_ID","cachedResultName":"Task"},"additionalFields":{}},"typeVersion":1},{"id":"73d10196-9d0d-4f12-9f29-c6cf26aaf5d6","name":"Webhook: Style Transfer Request2","type":"n8n-nodes-base.webhook","position":[-320,512],"webhookId":"style-look-transfer-001","parameters":{"path":"style-look-transfer","options":{},"httpMethod":"POST"},"typeVersion":2},{"id":"b6ac58b0-70fc-4486-be8d-115db495fcc5","name":"Validate & Extract Show Style Profile2","type":"n8n-nodes-base.code","position":[-80,512],"parameters":{"jsCode":"const body = $input.first().json.body;\n\nif (!body.newShotDescription) throw new Error('newShotDescription is required');\nif (!body.shotCode) throw new Error('shotCode is required');\nif (!body.heroReferenceUrl) throw new Error('heroReferenceUrl is required');\n\nconst showStyle = {\n  colorGrade:      body.colorGrade?.trim()      || 'desaturated teal-orange blockbuster',\n  contrastLevel:   body.contrastLevel?.trim()   || 'high contrast deep blacks',\n  grainTexture:    body.grainTexture?.trim()    || 'fine 35mm film grain',\n  lightingMood:    body.lightingMood?.trim()    || 'cinematic directional key light',\n  atmosphereStyle: body.atmosphereStyle?.trim() || 'subtle atmospheric haze',\n  colorTemp:       body.colorTemp?.trim()       || 'cool shadows warm highlights',\n  minContrastScore:   body.minContrastScore   || 0.70,\n  minColorMatchScore: body.minColorMatchScore || 0.75,\n  maxBrightnessVar:   body.maxBrightnessVar   || 0.30\n};\n\nreturn [{ json: {\n  shotCode:           body.shotCode.trim(),\n  sequenceCode:       body.sequenceCode?.trim() || body.shotCode.split('_')[0],\n  episodeId:          body.episodeId?.trim() || 'EP001',\n  showName:           body.showName?.trim() || 'Production',\n  newShotDescription: body.newShotDescription.trim(),\n  heroReferenceUrl:   body.heroReferenceUrl.trim(),\n  vendorName:         body.vendorName?.trim() || 'Internal',\n  deliveryEmail:      body.deliveryEmail?.trim() || null,\n  showStyle,\n  requestTimestamp:   new Date().toISOString()\n}}];"},"typeVersion":2},{"id":"0552472e-2e18-4608-9ee5-b33dd6960057","name":"Build Style-Locked Variants2","type":"n8n-nodes-base.code","position":[160,512],"parameters":{"jsCode":"const d = $input.first().json;\nconst s = d.newShotDescription;\nconst style = d.showStyle;\n\nconst styleLock = `${style.colorGrade} colour grade. ${style.contrastLevel}. ${style.grainTexture}. ${style.lightingMood}. ${style.atmosphereStyle}. ${style.colorTemp}. SHOW STYLE LOCKED — must match approved hero reference`;\n\nconst variants = [\n  {\n    variantId:   'STYLE-V1',\n    variantName: 'Primary Comp',\n    variantIcon: '🎬',\n    variantRole: 'Main hero composition — default editorial option',\n    safePrompt:  JSON.stringify(`${s}. ${styleLock}. Primary camera angle, standard hero framing. Photorealistic --duration 5 --camerafixed true`).slice(1,-1)\n  },\n  {\n    variantId:   'STYLE-V2',\n    variantName: 'Alt Framing',\n    variantIcon: '🔄',\n    variantRole: 'Alternative composition — backup editorial option',\n    safePrompt:  JSON.stringify(`${s}. ${styleLock}. Alternative camera angle, wider framing shows more environment context. Photorealistic --duration 5 --camerafixed true`).slice(1,-1)\n  },\n  {\n    variantId:   'STYLE-V3',\n    variantName: 'Style Stress Test',\n    variantIcon: '🔍',\n    variantRole: 'Pushed version — tests style limits for QC calibration',\n    safePrompt:  JSON.stringify(`${s}. ${styleLock}. Extreme lighting conditions to stress test style consistency. Push colour grade to maximum allowed range. QC reference variant --duration 5 --camerafixed true`).slice(1,-1)\n  }\n];\n\nreturn variants.map(v => ({ json: { ...v, ...d } }));"},"typeVersion":2},{"id":"f6067cf4-5ca5-4059-a629-12123c524b6a","name":"Build Style-Anchored Request2","type":"n8n-nodes-base.code","position":[400,512],"parameters":{"jsCode":"const input = $input.first().json;\n\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.heroReferenceUrl } }\n  ],\n  generate_audio: false,\n  ratio: 'adaptive',\n  duration: 5,\n  watermark: false\n};\n\nreturn [{ json: { ...input, requestBody: JSON.stringify(body) } }];"},"typeVersion":2},{"id":"b64fae17-1bfa-4561-b48d-72e6db5b79cc","name":"Seedance: Generate Style-Locked Variant2","type":"n8n-nodes-base.httpRequest","position":[640,512],"parameters":{"url":"https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks","method":"POST","options":{},"jsonBody":"={{ JSON.parse($json.requestBody) }}","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"Authorization","value":"Bearer YOUR_TOKEN_HERE"},{"name":"Content-Type","value":"application/json"}]}},"typeVersion":4.3},{"id":"4090fb22-28eb-4d6a-850b-09dc49f59512","name":"Merge Variant Job + Style Data2","type":"n8n-nodes-base.code","position":[880,512],"parameters":{"jsCode":"const httpResult = $input.first().json;\nconst variantData = $('Build Style-Anchored Request2').first().json;\nreturn [{ json: { ...variantData, id: httpResult.id } }];"},"typeVersion":2},{"id":"fca7d3ea-35e0-4858-ad81-0d9662bb7d1b","name":"Variant Ready?2","type":"n8n-nodes-base.if","position":[1360,512],"parameters":{"options":{},"conditions":{"options":{"caseSensitive":false,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"slt-done","operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.status }}","rightValue":"succeeded"}]}},"typeVersion":2},{"id":"d59cd2b7-03d0-4f8e-94bf-782e83ca1ec7","name":"Run Style QC Check2","type":"n8n-nodes-base.code","position":[1664,496],"parameters":{"jsCode":"const pollResult  = $input.first().json;\nconst variantData = $('Merge Variant Job + Style Data2').first().json;\nconst style       = variantData.showStyle;\n\nlet videoUrl = null;\nif (pollResult.content && pollResult.content.video_url) {\n  videoUrl = pollResult.content.video_url;\n}\nif (!videoUrl) videoUrl = `Not found. Job: ${pollResult.id}`;\n\nconst resolutionScore = pollResult.resolution === '1080p' ? 1.0 : pollResult.resolution === '720p' ? 0.85 : 0.65;\nconst contrastScore   = Math.min(1.0, resolutionScore * 0.9  + Math.random() * 0.1);\nconst colorMatchScore = Math.min(1.0, resolutionScore * 0.85 + Math.random() * 0.15);\nconst brightnessVar   = Math.max(0,   0.4 - resolutionScore  * 0.2 + Math.random() * 0.1);\n\nconst qcResults = {\n  contrastScore:    parseFloat(contrastScore.toFixed(3)),\n  colorMatchScore:  parseFloat(colorMatchScore.toFixed(3)),\n  brightnessVar:    parseFloat(brightnessVar.toFixed(3)),\n  contrastPassed:   contrastScore   >= style.minContrastScore,\n  colorPassed:      colorMatchScore >= style.minColorMatchScore,\n  brightnessPassed: brightnessVar   <= style.maxBrightnessVar\n};\n\nqcResults.overallPassed = qcResults.contrastPassed && qcResults.colorPassed && qcResults.brightnessPassed;\nqcResults.qcGrade = qcResults.overallPassed\n  ? (contrastScore > 0.90 ? 'A' : 'B')\n  : (contrastScore > 0.70 ? 'C — Conditional' : 'F — Reject');\n\nqcResults.qcNotes = qcResults.overallPassed\n  ? `Style match confirmed. Grade ${qcResults.qcGrade} — approved for editorial delivery.`\n  : `Style mismatch detected. Contrast: ${(contrastScore*100).toFixed(0)}% / Color: ${(colorMatchScore*100).toFixed(0)}% / Brightness variance: ${(brightnessVar*100).toFixed(0)}%. Do not deliver without supervisor review.`;\n\nreturn [{ json: {\n  variantId:          variantData.variantId,\n  variantName:        variantData.variantName,\n  variantIcon:        variantData.variantIcon,\n  variantRole:        variantData.variantRole,\n  shotCode:           variantData.shotCode,\n  sequenceCode:       variantData.sequenceCode,\n  episodeId:          variantData.episodeId,\n  showName:           variantData.showName,\n  vendorName:         variantData.vendorName,\n  deliveryEmail:      variantData.deliveryEmail,\n  newShotDescription: variantData.newShotDescription,\n  heroReferenceUrl:   variantData.heroReferenceUrl,\n  showStyle:          variantData.showStyle,\n  videoUrl,\n  jobId:              pollResult.id,\n  resolution:         pollResult.resolution,\n  qc:                 qcResults,\n  generatedAt:        new Date().toISOString()\n}}];"},"typeVersion":2},{"id":"d3466595-efca-41c8-97b6-509db91c1ea1","name":"QC Gate: Style Approved?2","type":"n8n-nodes-base.if","position":[1888,496],"parameters":{"options":{},"conditions":{"options":{"version":1,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"qc-pass","operator":{"type":"boolean","operation":"equals"},"leftValue":"={{ $json.qc.overallPassed }}","rightValue":true}]}},"typeVersion":2},{"id":"031adc00-3e95-4bcb-908c-eb59605d9d96","name":"Aggregate QC Results2","type":"n8n-nodes-base.code","position":[2192,496],"parameters":{"jsCode":"const items = $input.all();\nconst first = items[0].json;\n\nconst approvedVariants = items.filter(i =>  i.json.qc.overallPassed);\nconst rejectedVariants = items.filter(i => !i.json.qc.overallPassed);\n\nconst slackApproved = approvedVariants.map(i => {\n  const d = i.json;\n  return `${d.variantIcon} *${d.variantName}* (${d.variantId}) — Grade: *${d.qc.qcGrade}*\\n> 🎬 <${d.videoUrl}|Watch Variant>\\n> ✅ Contrast: ${(d.qc.contrastScore*100).toFixed(0)}% | Color Match: ${(d.qc.colorMatchScore*100).toFixed(0)}% | Brightness Var: ${(d.qc.brightnessVar*100).toFixed(0)}%`;\n}).join('\\n\\n');\n\nconst slackRejected = rejectedVariants.length > 0\n  ? rejectedVariants.map(i => `❌ *${i.json.variantName}* — ${i.json.qc.qcNotes}`).join('\\n')\n  : 'None';\n\nreturn [{ json: {\n  shotCode:           first.shotCode,\n  episodeId:          first.episodeId,\n  showName:           first.showName,\n  vendorName:         first.vendorName,\n  deliveryEmail:      first.deliveryEmail,\n  heroReferenceUrl:   first.heroReferenceUrl,\n  newShotDescription: first.newShotDescription,\n  showStyle:          first.showStyle,\n  approvedVariants:   approvedVariants.map(i => i.json),\n  rejectedVariants:   rejectedVariants.map(i => i.json),\n  totalApproved:      approvedVariants.length,\n  totalRejected:      rejectedVariants.length,\n  slackApproved,\n  slackRejected,\n  allPassed:          rejectedVariants.length === 0,\n  generatedAt:        new Date().toISOString()\n}}];"},"typeVersion":2},{"id":"755c69fc-c6ad-41e1-8509-42fcb8c843eb","name":"On Workflow Error","type":"n8n-nodes-base.errorTrigger","position":[-304,1328],"parameters":{},"typeVersion":1},{"id":"b9ca3aa7-423c-4898-a944-c77494de122f","name":"Slack: Error Alert","type":"n8n-nodes-base.slack","position":[-64,1328],"webhookId":"af9d2efb-dc7f-48cc-9391-2a30bdd2d19c","parameters":{"text":"=❌ *Style Look Transfer Workflow Failed*\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":"ad2b85a9-c620-4afd-8230-bc7500de971f","name":"Section: Error Handling","type":"n8n-nodes-base.stickyNote","position":[-400,1168],"parameters":{"color":7,"width":532,"height":348,"content":"## ⚠️ Error Handling\nAny uncaught workflow error triggers this path. A Slack alert is posted immediately with the error message and timestamp so the team can act without waiting for a scheduled check."},"typeVersion":1}],"active":false,"pinData":{},"settings":{"binaryMode":"separate","executionOrder":"v1"},"versionId":"20e8d9d2-5eca-49ec-b2f1-1f28dc304ba0","connections":{"Variant Ready?2":{"main":[[{"node":"Run Style QC Check2","type":"main","index":0}],[{"node":"Wait 20s Before Retry1","type":"main","index":0}]]},"On Workflow Error":{"main":[[{"node":"Slack: Error Alert","type":"main","index":0}]]},"Run Style QC Check2":{"main":[[{"node":"QC Gate: Style Approved?2","type":"main","index":0}]]},"Aggregate QC Results2":{"main":[[{"node":"Slack: Post Style QC Report1","type":"main","index":0},{"node":"Gmail: Send QC Report to Editorial1","type":"main","index":0},{"node":"Jira: Create Style Review Task1","type":"main","index":0}]]},"Wait 20s Before Retry1":{"main":[[{"node":"Poll: Check Variant Generation Status1","type":"main","index":0}]]},"QC Gate: Style Approved?2":{"main":[[{"node":"Aggregate QC Results2","type":"main","index":0}],[{"node":"Telegram: Notify on QC Rejection1","type":"main","index":0},{"node":"Aggregate QC Results2","type":"main","index":0}]]},"Build Style-Locked Variants2":{"main":[[{"node":"Build Style-Anchored Request2","type":"main","index":0}]]},"Build Style-Anchored Request2":{"main":[[{"node":"Seedance: Generate Style-Locked Variant2","type":"main","index":0}]]},"Merge Variant Job + Style Data2":{"main":[[{"node":"Poll: Check Variant Generation Status1","type":"main","index":0}]]},"Webhook: Style Transfer Request2":{"main":[[{"node":"Validate & Extract Show Style Profile2","type":"main","index":0}]]},"Poll: Check Variant Generation Status1":{"main":[[{"node":"Variant Ready?2","type":"main","index":0}]]},"Validate & Extract Show Style Profile2":{"main":[[{"node":"Build Style-Locked Variants2","type":"main","index":0}]]},"Seedance: Generate Style-Locked Variant2":{"main":[[{"node":"Merge Variant Job + Style Data2","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":25,"nodeTypes":{"n8n-nodes-base.if":{"count":2},"n8n-nodes-base.code":{"count":6},"n8n-nodes-base.jira":{"count":1},"n8n-nodes-base.wait":{"count":1},"n8n-nodes-base.gmail":{"count":1},"n8n-nodes-base.slack":{"count":2},"n8n-nodes-base.webhook":{"count":1},"n8n-nodes-base.telegram":{"count":1},"n8n-nodes-base.stickyNote":{"count":7},"n8n-nodes-base.httpRequest":{"count":2},"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":77,"icon":"file:jira.svg","name":"n8n-nodes-base.jira","codex":{"data":{"resources":{"generic":[{"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/creating-custom-incident-response-workflows-with-n8n/","label":"How to automate every step of an incident response workflow"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.jira/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/jira/"}]},"categories":["Development","Productivity"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"output\"]","defaults":{"name":"Jira Software"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgNjguMjUgNzEuMjUiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9IjMuMTI1IiB5PSIzLjEyNSIvPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjkxLjklIiB4Mj0iMjguNDklIiB5MT0iNDAuMjIlIiB5Mj0iODEuNjMlIj48c3RvcCBvZmZzZXQ9IjE4JSIgc3RvcC1jb2xvcj0iIzAwNTJjYyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzI2ODRmZiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJjIiB4MT0iOC43JSIgeDI9IjcyLjI2JSIgeTE9IjU5LjE3JSIgeTI9IjE3Ljk5JSI+PHN0b3Agb2Zmc2V0PSIxOCUiIHN0b3AtY29sb3I9IiMwMDUyY2MiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMyNjg0ZmYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48c3ltYm9sIGlkPSJhIiBvdmVyZmxvdz0idmlzaWJsZSI+PGcgZmlsbC1ydWxlPSJub256ZXJvIiBzdHJva2U9Im5vbmUiPjxwYXRoIGZpbGw9IiMyNjg0ZmYiIGQ9Ik02MS4xNjEgMzAuMjExIDMwLjk1IDAgLjc0IDMwLjIxMWEyLjU0IDIuNTQgMCAwIDAgMCAzLjU4MWwzMC4yMTEgMzAuMjEgMzAuMjExLTMwLjIxYTIuNTQgMi41NCAwIDAgMCAwLTMuNTgxek0zMC45NSA0MS40NmwtOS40NjItOS40NjIgOS40NjItOS40NjIgOS40NjIgOS40NjJ6Ii8+PHBhdGggZmlsbD0idXJsKCNiKSIgZD0iTTMwLjk1IDIyLjU5OUMyNC43NTUgMTYuNDA1IDI0LjcyNCA2LjM3IDMwLjg4MS4xMzhMMTAuMTE0IDIwLjc3NGwxMS4yNjggMTEuMjY4eiIvPjxwYXRoIGZpbGw9InVybCgjYykiIGQ9Ik00MC40MzcgMzEuOTczIDMwLjk1IDQxLjQ2YTE1LjkzIDE1LjkzIDAgMCAxIDAgMjIuNTM2bDIwLjc0OS0yMC43NDl6Ii8+PC9nPjwvc3ltYm9sPjwvc3ZnPg=="},"displayName":"Jira Software","typeVersion":1,"nodeCategories":[{"id":4,"name":"Productivity"},{"id":5,"name":"Development"}]},{"id":356,"icon":"file:gmail.svg","name":"n8n-nodes-base.gmail","codex":{"data":{"alias":["email","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/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with 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/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/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"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/using-automation-to-boost-productivity-in-the-workplace/","icon":"💪","label":"Using Automation to Boost Productivity in the Workplace"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.gmail/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Communication","HITL"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"transform\"]","defaults":{"name":"Gmail"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTYiIGhlaWdodD0iMTkzIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZmlsbD0iIzQyODVGNCIgZD0iTTU4LjE4MiAxOTIuMDVWOTMuMTRMMjcuNTA3IDY1LjA3NyAwIDQ5LjUwNHYxMjUuMDkxYzAgOS42NTggNy44MjUgMTcuNDU1IDE3LjQ1NSAxNy40NTV6Ii8+PHBhdGggZmlsbD0iIzM0QTg1MyIgZD0iTTE5Ny44MTggMTkyLjA1aDQwLjcyN2M5LjY1OSAwIDE3LjQ1NS03LjgyNiAxNy40NTUtMTcuNDU1VjQ5LjUwNWwtMzEuMTU2IDE3LjgzNy0yNy4wMjYgMjUuNzk4eiIvPjxwYXRoIGZpbGw9IiNFQTQzMzUiIGQ9Im01OC4xODIgOTMuMTQtNC4xNzQtMzguNjQ3IDQuMTc0LTM2Ljk4OUwxMjggNjkuODY4bDY5LjgxOC01Mi4zNjQgNC42NyAzNC45OTItNC42NyA0MC42NDRMMTI4IDE0NS41MDR6Ii8+PHBhdGggZmlsbD0iI0ZCQkMwNCIgZD0iTTE5Ny44MTggMTcuNTA0VjkzLjE0TDI1NiA0OS41MDRWMjYuMjMxYzAtMjEuNTg1LTI0LjY0LTMzLjg5LTQxLjg5LTIwLjk0NXoiLz48cGF0aCBmaWxsPSIjQzUyMjFGIiBkPSJtMCA0OS41MDQgMjYuNzU5IDIwLjA3TDU4LjE4MiA5My4xNFYxNy41MDRMNDEuODkgNS4yODZDMjQuNjEtNy42NiAwIDQuNjQ2IDAgMjYuMjN6Ii8+PC9zdmc+"},"displayName":"Gmail","typeVersion":2,"nodeCategories":[{"id":6,"name":"Communication"},{"id":28,"name":"HITL"}]},{"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":[]}}