{"workflow":{"id":14007,"name":"Create X and LinkedIn posts from Reddit threads with Gemini and human review","views":238,"recentViews":2,"totalViews":238,"createdAt":"2026-03-11T15:34:25.429Z","description":"## Reddit Thread → AI-Powered X & LinkedIn Posts with Human Approval Gate\n\nTurn any Reddit thread into polished, platform-optimized social media posts for **X (Twitter)** and **LinkedIn** - in minutes, not hours. This workflow reads a Reddit thread, extracts the full discussion (including nested comment threads sorted by score), feeds everything to Google Gemini for summarization and post generation, then pauses for your review before publishing anything live.\n\nNo accidental posts. No context lost. Just high-quality content, on your terms.\n\n### ✨ Key Features\n\n- **🔗 Any Reddit URL supported** → Standard, mobile (`m.reddit.com`), and short `redd.it` links all work\n- **💬 Full thread extraction** → Recursively pulls all comments and replies, sorted by score at every depth level\n- **🧠 Two-stage AI pipeline** → Gemini first summarizes the thread, then generates platform-specific posts from that summary\n- **🐦 X-optimized post** → Max 280 characters, punchy, curiosity-driven with relevant hashtags; auto-truncated if over the limit\n- **💼 LinkedIn-optimized post** → 150–300 words, professional tone, structured paragraphs, engagement question, and hashtags\n- **👤 Human-in-the-loop approval** → A review form shows both posts before anything is published; supports manual overrides per platform\n- **🚫 Graceful rejection path** → If rejected, the workflow terminates cleanly with no content published\n\n### 📝 What This Workflow Does\n\nThis workflow solves a real content creation bottleneck: Reddit threads are goldmines of community insight, niche expertise, and trending discussions - but turning that raw discussion into polished, platform-appropriate social posts takes significant manual effort.\n\nThis automation handles the entire pipeline: from a raw URL to live posts on two platforms, with you staying in full control via an approval gate. It's ideal for **content marketers**, **community managers**, **indie hackers**, **developers**, and **newsletter writers** who want to repurpose Reddit content without losing quality or spending hours manually summarizing threads.\n\n### ⚙️ How It Works (Step-by-Step)\n\n1. **Submit a Reddit URL** - A web form (Form Trigger) accepts any Reddit thread URL as input.\n2. **Parse the URL** - A Code node validates and deconstructs the URL using regex, extracting the subreddit and post ID to build the Reddit JSON API endpoint.\n3. **Fetch the thread** - An HTTP Request node calls Reddit's public JSON API (`reddit.com/r/.../comments/id.json`) with `limit=100` and `depth=3` to retrieve the full thread.\n4. **Extract & structure content** - A Code node recursively traverses the entire comment tree, sorts comments by score at every depth level, and builds a clean flat text representation of the full thread - including post metadata (title, score, upvote ratio, flair, awards) - ready for AI injection.\n5. **Summarize with Gemini** - The assembled thread content is passed to Google Gemini (3.1 Flash Lite), which returns a comprehensive markdown summary covering: Thread Overview, Key Topics, Notable Insights, Community Sentiment, and Actionable Takeaways.\n6. **Generate social posts** - A second Gemini call uses the summary to craft a platform-optimized X post (≤280 chars) and a LinkedIn post (150–300 words), returning strict JSON output.\n7. **Parse & validate** - A Code node safely extracts the JSON, strips any markdown fences, falls back to regex parsing if needed, and enforces the 280-character hard limit on the X post.\n8. **Human Approval form** - The workflow pauses and presents both posts in a review form. You can approve as-is, paste a manual override for either platform, or reject the entire run.\n9. **Resolve final content** - A Code node merges your overrides (if any) with the AI versions; overrides always win, AI version is the fallback.\n10. **Route by decision** - An IF node checks your approval decision:\n    - ✅ **Approve & Publish** → Posts simultaneously to X and LinkedIn\n    - ❌ **Reject** → Workflow ends cleanly; nothing is published\n\n### 🚀 How to Use This Workflow\n\n**Step 1 - Set up credentials**\n\nClick **Use template**, then configure the following credentials in n8n:\n\n| Service | Credential Type | How to Get It |\n|---|---|---|\n| 🤖 Google Gemini | Google PaLM API | [Get API Key → Google AI Studio](https://aistudio.google.com/apikey) |\n| 🐦 X (Twitter) | Twitter OAuth2 | [X Developer Portal → Create App → OAuth2](https://developer.twitter.com/en/portal/dashboard) |\n| 💼 LinkedIn | LinkedIn OAuth2 | [LinkedIn Developer Portal → Create App](https://www.linkedin.com/developers/apps) |\n\n&gt; **Note on Reddit:** No API key required. This workflow uses Reddit's public JSON API (append `.json` to any thread URL) which is freely accessible without authentication.\n\n**Step 2 - Configure the LinkedIn node**\n\nOpen the **Post to LinkedIn** node and replace the `person` field value (`=ID`) with your LinkedIn Person URN. You can retrieve it by calling the LinkedIn API: `GET https://api.linkedin.com/v2/userinfo` after authenticating.\n\n**Step 3 - Activate the workflow**\n\nToggle the workflow to **Active** in your n8n instance. This enables the Form Trigger and the Wait node's webhook to function correctly.\n\n**Step 4 - Run it**\n\n1. Open the **Form Trigger URL** (found in the Reddit URL Input node)\n2. Paste any Reddit thread URL\n3. Wait for the approval form to arrive (check the execution log for the form URL)\n4. Review, optionally edit, and approve or reject\n5. Done! your posts are live 🚀\n\n### 🛠️ How to Customize\n\n- **🤖 Swap the AI model** - Both Gemini nodes use `gemini-3.1-flash-lite-preview`. You can switch to `gemini-3.1-pro-preview` or `claude-sonnet-4-6` for higher quality output by updating the `modelId` in both Gemini nodes or by adding Anthropic nodes.\n- **📝 Change the post format** - Edit the prompt in the **Generate Social Posts** node to adjust tone, length, hashtag count, or add support for other platforms (Instagram, Threads, Facebook).\n- **📊 Add more platforms** - After the **Approved?** node's true branch, connect additional posting nodes (e.g., Facebook Graph API, Buffer, Telegram) in parallel.\n- **📋 Log to Google Sheets** - Add a Google Sheets node after the publish nodes to track published posts, Reddit thread URLs, dates, and engagement metrics.\n- **⏱️ Make it scheduled** - Replace the Form Trigger with a Schedule Trigger + a list of pre-configured Reddit URLs in Google Sheets for fully automated daily publishing.\n\n### ⚠️ Important Notes\n\n- The Reddit public JSON API does not require authentication but is rate-limited. For high-volume use, consider adding a Reddit OAuth2 credential.\n- The **Wait node** requires your n8n instance to be publicly accessible (or use n8n Cloud) so the approval form's webhook URL can be reached by your browser.\n- LinkedIn's API requires your app to have the `w_member_social` permission scope to post on behalf of a user.\n- X (Twitter) API v2 requires an approved developer account. Free tier allows limited monthly tweets.","workflow":{"id":"a6nwY85e9GX2Y24b","meta":{"instanceId":"f50c4225657041a867073dfd116003f9f3659e08e71fb6a5bb5c90807373de2c","templateCredsSetupCompleted":true},"name":"Reddit Thread → AI Summary → Social Media Publisher (X + LinkedIn)","tags":[],"nodes":[{"id":"49e47b33-6ce0-4868-b2ac-46d58de66710","name":"Reddit URL Input","type":"n8n-nodes-base.formTrigger","position":[-336,32],"webhookId":"3f8cdee1-b75e-4ad5-b092-9e7440e9ce86","parameters":{"options":{},"formTitle":"Reddit Thread Post Generator","formFields":{"values":[{"fieldLabel":"Reddit Thread URL"}]},"formDescription":"generates social media posts based on reddit thread"},"typeVersion":2.5},{"id":"685f7307-665f-4fd5-aeb6-b9f107b73279","name":"Parse Reddit URL","type":"n8n-nodes-base.code","position":[-48,32],"parameters":{"jsCode":"// ─────────────────────────────────────────────────────────────\n// Parse Reddit Thread URL → extract subreddit + post ID\n// Supports: reddit.com/r/sub/comments/id, redd.it/id, mobile URLs\n// ─────────────────────────────────────────────────────────────\n\nconst rawUrl = $input.first().json['Reddit Thread URL'].trim();\n\n// Normalize: remove trailing slash, www, m. prefix\nconst url = rawUrl.replace(/^(https?:\\/\\/)?(www\\.|m\\.)?/, 'https://');\n\n// Match standard thread URL\nconst fullMatch = url.match(/reddit\\.com\\/r\\/([^/]+)\\/comments\\/([a-zA-Z0-9]+)/);\n\nif (!fullMatch) {\n  throw new Error(\n    '❌ Invalid Reddit URL. Please use a standard thread URL like: ' +\n    'https://www.reddit.com/r/subreddit/comments/postId/title/'\n  );\n}\n\nconst subreddit = fullMatch[1];\nconst postId = fullMatch[2];\nconst apiUrl = `https://www.reddit.com/r/${subreddit}/comments/${postId}.json`;\nconst cleanThreadUrl = `https://www.reddit.com/r/${subreddit}/comments/${postId}/`;\n\nreturn [{\n  json: {\n    originalUrl: rawUrl,\n    subreddit,\n    postId,\n    apiUrl,\n    cleanThreadUrl\n  }\n}];"},"typeVersion":2},{"id":"e8af925a-9bc6-4538-83dc-6e15cbe98386","name":"Fetch Reddit Thread","type":"n8n-nodes-base.httpRequest","position":[256,32],"parameters":{"url":"={{ $json.apiUrl }}","options":{},"sendQuery":true,"sendHeaders":true,"queryParameters":{"parameters":[{"name":"limit","value":"100"},{"name":"depth","value":"3"}]},"headerParameters":{"parameters":[{"name":"User-Agent","value":"n8n-workflow-automation/1.0"}]}},"typeVersion":4.2},{"id":"27751aa7-a183-4791-890a-b0f55352cf87","name":"Extract Thread Content","type":"n8n-nodes-base.code","position":[544,32],"parameters":{"jsCode":"// ─────────────────────────────────────────────────────────────────────────────\n// Extract post + ALL comments from Reddit JSON API response\n// • Top-level comments sorted by score (highest first)\n// • Each comment's replies also sorted by score (highest first)\n// • Full depth traversal — no depth limit\n// • Structured output: nested objects + flat string for AI\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst response = $input.first().json;\n\n// ── Handle both: array-as-single-item OR multiple items from HTTP node ────────\nlet postListing, commentsListing;\n\nif (Array.isArray(response)) {\n  postListing     = response[0];\n  commentsListing = response[1];\n} else {\n  const allItems = $input.all();\n  if (allItems.length >= 2) {\n    postListing     = allItems[0].json;\n    commentsListing = allItems[1].json;\n  } else {\n    throw new Error('Unexpected Reddit API response. Could not parse thread data.');\n  }\n}\n\n// ── Extract post metadata ─────────────────────────────────────────────────────\nconst pd = postListing.data.children[0].data;\n\nconst post = {\n  title:       pd.title        || '',\n  body:        pd.selftext     ? pd.selftext.trim() : '',\n  author:      pd.author       || '[deleted]',\n  score:       pd.score        || 0,\n  upvoteRatio: pd.upvote_ratio || null,\n  subreddit:   pd.subreddit    || '',\n  numComments: pd.num_comments || 0,\n  threadUrl:   `https://www.reddit.com${pd.permalink}`,\n  isLinkPost:  pd.is_self === false,\n  externalUrl: pd.is_self === false ? pd.url : null,\n  createdUtc:  pd.created_utc  || null,\n  awards:      pd.total_awards_received || 0,\n  flair:       pd.link_flair_text || null\n};\n\n// ── Recursively extract comments — no depth limit, all replies ────────────────\n//\n// Strategy:\n//   1. At each level, sort siblings by score DESC\n//   2. Recurse into every reply thread fully\n//   3. Skip \"more\" stubs (kind: 'more') — these are collapsed Reddit nodes\n//      that would need additional API calls to expand\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction extractComments(children, depth) {\n  if (!children || children.length === 0) return [];\n\n  // Filter to real comments only (kind 't1'), skip 'more' load stubs\n  const realComments = children.filter(c => c.kind === 't1');\n\n  // Sort by score descending at this level\n  realComments.sort((a, b) => (b.data.score || 0) - (a.data.score || 0));\n\n  const result = [];\n\n  for (const child of realComments) {\n    const c = child.data;\n\n    const body = (c.body || '').replace(/\\n+/g, ' ').trim();\n    if (!body || body === '[deleted]' || body === '[removed]') continue;\n\n    // Build structured comment object\n    const comment = {\n      id:         c.id     || '',\n      author:     c.author || '[deleted]',\n      score:      c.score  || 0,\n      body:       body,\n      depth:      depth,\n      awards:     c.total_awards_received || 0,\n      createdUtc: c.created_utc || null,\n      isEdited:   !!c.edited,\n      replies:    []\n    };\n\n    // Recurse into replies with no depth cap\n    if (\n      c.replies &&\n      c.replies !== '' &&\n      c.replies.data &&\n      c.replies.data.children &&\n      c.replies.data.children.length > 0\n    ) {\n      comment.replies = extractComments(c.replies.data.children, depth + 1);\n    }\n\n    result.push(comment);\n  }\n\n  return result;\n}\n\nconst structuredComments = extractComments(commentsListing.data.children, 0);\n\n// ── Count totals ──────────────────────────────────────────────────────────────\nfunction countAll(comments) {\n  let total = 0;\n  for (const c of comments) {\n    total += 1 + countAll(c.replies);\n  }\n  return total;\n}\n\nconst totalExtracted = countAll(structuredComments);\n\n// ── Build flat string for AI consumption ─────────────────────────────────────\n//\n// Format:\n//   [SCORE] u/author: comment text\n//       ↳ [SCORE] u/author: reply text          (depth 1)\n//           ↳ [SCORE] u/author: sub-reply text  (depth 2)\n//\n// Indentation visually represents thread nesting depth.\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction buildFlatString(comments, lines = []) {\n  for (const c of comments) {\n    const pad    = '    '.repeat(c.depth);\n    const arrow  = c.depth > 0 ? '↳ ' : '';\n    const awards = c.awards > 0 ? ` 🏆×${c.awards}` : '';\n    lines.push(`${pad}${arrow}[${c.score} pts${awards}] u/${c.author}: ${c.body}`);\n    if (c.replies.length > 0) {\n      buildFlatString(c.replies, lines);\n    }\n  }\n  return lines;\n}\n\nconst commentLines = buildFlatString(structuredComments);\n\n// ── Assemble threadContent string for downstream AI nodes ────────────────────\nlet threadContent = `=== REDDIT THREAD ===\\n`;\nthreadContent += `SUBREDDIT   : r/${post.subreddit}\\n`;\nthreadContent += `TITLE       : ${post.title}\\n`;\nthreadContent += `AUTHOR      : u/${post.author}\\n`;\nthreadContent += `SCORE       : ${post.score.toLocaleString()} upvotes`;\nthreadContent += post.upvoteRatio ? ` (${Math.round(post.upvoteRatio * 100)}% upvoted)\\n` : '\\n';\nthreadContent += `COMMENTS    : ${post.numComments.toLocaleString()} total, ${totalExtracted} extracted\\n`;\nif (post.flair)   threadContent += `FLAIR       : ${post.flair}\\n`;\nif (post.awards)  threadContent += `AWARDS      : ${post.awards}\\n`;\nthreadContent += `URL         : ${post.threadUrl}\\n\\n`;\n\nif (post.body) {\n  threadContent += `POST BODY:\\n${post.body}\\n\\n`;\n} else if (post.isLinkPost) {\n  threadContent += `LINK POST → ${post.externalUrl}\\n\\n`;\n}\n\nthreadContent += `COMMENTS (sorted by score, highest first — full depth):\\n`;\nthreadContent += commentLines.join('\\n');\n\nreturn [{\n  json: {\n    // ── Post metadata\n    ...post,\n\n    // ── Structured nested comments tree (for any downstream node that needs JSON)\n    structuredComments,\n\n    // ── Stats\n    totalExtracted,\n    maxDepthFound: structuredComments.length > 0\n      ? Math.max(...commentLines.map((_, i) => {\n          const match = commentLines[i].match(/^(    )*/);\n          return match ? match[0].length / 4 : 0;\n        }))\n      : 0,\n\n    // ── Flat string ready for AI prompt injection\n    threadContent\n  }\n}];"},"typeVersion":2},{"id":"45a3cf91-1a16-4ff9-a17d-017058aa3de5","name":"Summarize Thread","type":"@n8n/n8n-nodes-langchain.googleGemini","position":[816,32],"parameters":{"modelId":{"__rl":true,"mode":"list","value":"models/gemini-3.1-flash-lite-preview","cachedResultName":"models/gemini-3.1-flash-lite-preview"},"options":{"topK":20,"temperature":0.7,"maxToolsIterations":5},"messages":{"values":[{"content":"=Analyze the following Reddit thread and generate a comprehensive, structured summary.\n\n{{ $json.threadContent }}\n\n---\n\nPlease return a detailed markdown summary with the following sections:\n\n## 🧵 Thread Overview\nWhat is this thread about? (2–3 sentences, include the subreddit context)\n\n## 🔑 Key Topics Discussed\nBullet-point list of the main themes and topics in this thread\n\n## 💡 Notable Insights & Perspectives\nThe most interesting, contrarian, or valuable perspectives from commenters. Quote or paraphrase 3–5 standout comments.\n\n## 📊 Community Sentiment\nOverall sentiment (positive / negative / mixed / neutral) and why. What does the community agree or disagree on?\n\n## 🎯 Actionable Takeaways\nList 3–5 concrete insights or lessons someone could apply from this discussion.\n\nBe specific and data-driven. Reference actual details from the thread — usernames, scores, and specific quotes where relevant."}]},"simplify":false,"builtInTools":{"urlContext":true}},"credentials":{"googlePalmApi":{"id":"KbJ7zta7PFGQpS8v","name":"Google Gemini(PaLM) Api account"}},"typeVersion":1.1},{"id":"d2088a1a-1047-4936-880e-dd5dae44286c","name":"Generate Social Posts","type":"@n8n/n8n-nodes-langchain.googleGemini","position":[1200,32],"parameters":{"modelId":{"__rl":true,"mode":"list","value":"models/gemini-3.1-flash-lite-preview","cachedResultName":"models/gemini-3.1-flash-lite-preview"},"options":{},"messages":{"values":[{"content":"=You are an expert social media content strategist. Based on the Reddit thread summary below, create high-performing, platform-optimized posts for X (Twitter) and LinkedIn.\n\n--- THREAD SUMMARY ---\n{{ $json.candidates[0].content.parts[0].text }}\n--- END SUMMARY ---\n\nCreate two posts:\n\n1. **X (Twitter) Post** — Max 280 characters. Should be punchy, curiosity-driven, and conversational. Include 2–3 relevant hashtags. May include a question or provocative statement to drive engagement. MUST be under 280 characters.\n\n2. **LinkedIn Post** — Professional tone, 150–300 words. Lead with a strong insight or surprising finding from the thread. Use short paragraphs for readability. Include a clear lesson or takeaway for professionals. End with an engagement question. Include 3–5 relevant hashtags on the last line.\n\n⚠️ IMPORTANT: Return ONLY a raw JSON object. No markdown fences, no explanation, no preamble. Exactly this format:\n{\n  \"x_post\": \"your tweet text here\",\n  \"linkedin_post\": \"your linkedin post text here\"\n}"}]},"builtInTools":{}},"credentials":{"googlePalmApi":{"id":"KbJ7zta7PFGQpS8v","name":"Google Gemini(PaLM) Api account"}},"typeVersion":1.1},{"id":"ce5e6e7c-41e3-405b-b771-28039757835e","name":"Parse Social Posts","type":"n8n-nodes-base.code","position":[1600,32],"parameters":{"jsCode":"// ─────────────────────────────────────────────────────────────────────────────\n// Parse Social Posts — handles Gemini's raw API response structure\n//\n// Gemini returns: array of candidates → content.parts[0].text\n// Shape: [ { content: { parts: [ { text: '...' } ], role: 'model' }, finishReason, index } ]\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst inputJson = $input.first().json;\n\n// ── Extract raw text from wherever it lives ───────────────────────────────────\nlet rawText = '';\n\n// Case 1: Gemini raw API response — array of candidates\nif (Array.isArray(inputJson) && inputJson[0]?.content?.parts?.[0]?.text) {\n  rawText = inputJson[0].content.parts[0].text;\n\n// Case 2: Single candidate object (not wrapped in array)\n} else if (inputJson?.content?.parts?.[0]?.text) {\n  rawText = inputJson.content.parts[0].text;\n\n// Case 3: LangChain chainLlm wrapper output → { text: '...' }\n} else if (typeof inputJson?.text === 'string') {\n  rawText = inputJson.text;\n\n// Case 4: Nested under candidates key\n} else if (inputJson?.candidates?.[0]?.content?.parts?.[0]?.text) {\n  rawText = inputJson.candidates[0].content.parts[0].text;\n\n} else {\n  throw new Error(\n    'Could not locate text in Gemini response. Received keys: ' +\n    JSON.stringify(Object.keys(inputJson))\n  );\n}\n\nrawText = rawText.trim();\n\n// ── Strip markdown code fences if Gemini wrapped the JSON ────────────────────\nconst cleaned = rawText\n  .replace(/^```json\\s*/i, '')\n  .replace(/^```\\s*/i, '')\n  .replace(/\\s*```$/i, '')\n  .trim();\n\n// ── Parse JSON ────────────────────────────────────────────────────────────────\nlet parsed;\n\ntry {\n  parsed = JSON.parse(cleaned);\n} catch (e) {\n  // Fallback: regex extraction if JSON is slightly malformed\n  const xMatch  = cleaned.match(/\"x_post\"\\s*:\\s*\"((?:[^\"\\\\]|\\\\.)*)\"/s);\n  const liMatch = cleaned.match(/\"linkedin_post\"\\s*:\\s*\"((?:[^\"\\\\]|\\\\.)*)\"/s);\n\n  if (!xMatch || !liMatch) {\n    throw new Error(\n      'AI did not return valid JSON for social posts. Extracted text: ' +\n      rawText.substring(0, 400)\n    );\n  }\n\n  parsed = {\n    x_post:        xMatch[1].replace(/\\\\n/g, '\\n').replace(/\\\\\"/g, '\"'),\n    linkedin_post: liMatch[1].replace(/\\\\n/g, '\\n').replace(/\\\\\"/g, '\"')\n  };\n}\n\nif (!parsed.x_post || !parsed.linkedin_post) {\n  throw new Error(\n    'Parsed JSON is missing x_post or linkedin_post fields. Got: ' +\n    JSON.stringify(Object.keys(parsed))\n  );\n}\n\n// ── Enforce X's 280-character limit with graceful truncation ──────────────────\nlet xPost = parsed.x_post.trim();\nif (xPost.length > 280) {\n  xPost = xPost.substring(0, 277) + '...';\n}\n\nconst linkedinPost = parsed.linkedin_post.trim();\n\nreturn [{\n  json: {\n    x_post:        xPost,\n    linkedin_post: linkedinPost,\n    x_char_count:  xPost.length\n  }\n}];"},"typeVersion":2},{"id":"91133954-3028-45b8-a5a6-e07aab3db8ae","name":"Resolve Final Posts","type":"n8n-nodes-base.code","position":[2192,32],"parameters":{"jsCode":"// ─────────────────────────────────────────────────────────────────────────────\n// Resolve final post content\n//\n// After a Wait node resumes, $input only contains the FORM submission data.\n// The AI-generated posts from the earlier node are no longer in $input —\n// we must reference that node explicitly by name.\n// ─────────────────────────────────────────────────────────────────────────────\n\n// ── Form submission data (what the user submitted) ───────────────────────────\nconst formData = $input.first().json;\n\n// ── AI-generated posts from the upstream Parse node ──────────────────────────\n// Reference the exact name of your Parse Social Posts code node\nconst aiData = $('Parse Social Posts').item.json;\n\nconst aiXPost        = (aiData.x_post        || '').trim();\nconst aiLinkedinPost = (aiData.linkedin_post  || '').trim();\n\n// ── Override values typed by the user (empty string if left blank) ────────────\nconst overrideX  = (formData['X Post Override (leave blank to use AI version)']        || '').trim();\nconst overrideLi = (formData['LinkedIn Post Override (leave blank to use AI version)'] || '').trim();\n\n// ── Final resolved posts: override wins, falls back to AI version ─────────────\nconst finalXPost        = overrideX  || aiXPost;\nconst finalLinkedinPost = overrideLi || aiLinkedinPost;\n\nif (!finalXPost) {\n  throw new Error('No X post content — AI version was empty and no override was provided.');\n}\nif (!finalLinkedinPost) {\n  throw new Error('No LinkedIn post content — AI version was empty and no override was provided.');\n}\n\nreturn [{\n  json: {\n    'X Post':        finalXPost,\n    'LinkedIn Post': finalLinkedinPost,\n    usedOverrideX:   !!overrideX,\n    usedOverrideLi:  !!overrideLi\n  }\n}];"},"typeVersion":2},{"id":"a536ab57-8cef-4125-8cef-8b0143fbb9ea","name":"Approved?","type":"n8n-nodes-base.if","position":[2480,32],"parameters":{"options":{},"conditions":{"options":{"version":1,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"cond-approval-check","operator":{"type":"string","operation":"equals"},"leftValue":"={{ $('Human Approval').item.json['Decision'] }}","rightValue":"Approve & Publish"}]}},"typeVersion":2},{"id":"bdf05261-fac9-476c-89cf-336396b2aaad","name":"Post to Linkedin","type":"n8n-nodes-base.linkedIn","position":[2672,16],"parameters":{"text":"={{ $json['LinkedIn Post'] }}","person":"=ID","additionalFields":{}},"credentials":{"linkedInOAuth2Api":{"id":"5Tt4O1s24CEksgra","name":"LinkedIn account"}},"typeVersion":1},{"id":"eb847f8f-8c5d-4a8b-b12a-77abdc5f4f43","name":"Rejected – End","type":"n8n-nodes-base.set","position":[2672,208],"parameters":{"options":{},"assignments":{"assignments":[{"id":"set-rejected-status","name":"status","type":"string","value":"rejected"},{"id":"set-rejected-msg","name":"message","type":"string","value":"Posts were reviewed and rejected by the user. No content was published."}]}},"typeVersion":3.4},{"id":"9f9afd49-2441-469b-b6de-2c6dce5f12ff","name":"Post to X","type":"n8n-nodes-base.twitter","position":[2672,-176],"parameters":{"text":"={{ $json['X Post'] }}","additionalFields":{}},"credentials":{"twitterOAuth2Api":{"id":"D31lnZ4XdKOkEWd8","name":"X account"}},"typeVersion":2},{"id":"d1a31113-4edd-46e0-8461-22df915e712a","name":"🗒️ Workflow Summary","type":"n8n-nodes-base.stickyNote","position":[-1040,-256],"parameters":{"color":4,"width":604,"height":532,"content":"## 🔁 Reddit → Social Media Automation\n\nConverts any Reddit thread into ready-to-publish posts for **X (Twitter)** and **LinkedIn** — with a human review gate before anything goes live.\n\n\n---\n\n\n**📌 Data Flow:**\nReddit URL → Parse → Fetch API → Extract Content → AI Summarize → Generate Posts → Human Approval → Publish\n\n\n---\n\n\n**✨ Key Features:**\n- Accepts any Reddit thread URL\n- Extracts post + all nested comments (sorted by score)\n- AI-powered thread summarization via Gemini\n- Platform-optimized X + LinkedIn post generation\n- Human-in-the-loop approval with override support\n- Graceful rejection path — nothing published without approval\n\n---\n\n**🛠️ Tools Used:**\nGoogle Gemini 3.1 Flash Lite · Reddit JSON API · X (Twitter) API · LinkedIn API"},"typeVersion":1},{"id":"ce07e2c1-3244-40fb-8313-5cd50760b059","name":"🌐 Node: Fetch Reddit Thread","type":"n8n-nodes-base.stickyNote","position":[160,-256],"parameters":{"color":2,"width":284,"height":528,"content":"## 🌐 Fetch Reddit Thread\n**Type:** HTTP Request\n\n**Purpose:** Retrieves the full thread via Reddit's public JSON API.\n\n**Input:** `apiUrl` (e.g. `reddit.com/r/sub/comments/id.json`)\n\n**Function:** GET with `limit=100`, `depth=3`.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n**Output:** Raw Reddit API response — post listing + comments listing array."},"typeVersion":1},{"id":"fb8c1a4a-84ca-4fc6-9201-7c4e97cb547d","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-416,-256],"parameters":{"color":3,"width":256,"height":528,"content":"## 📥 Reddit URL Input\n**Type:** Form Trigger\n\n**Purpose:** Entry point — presents a web form to collect a Reddit thread URL from the user.\n\n**Input:** User submits a Reddit thread URL via the form.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n**Output:** Raw URL string forwarded to the parse step."},"typeVersion":1},{"id":"8c65fe79-b1a0-4541-a1e8-ee780dcbe283","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[448,-256],"parameters":{"color":7,"width":288,"height":528,"content":"## ⚙️ Extract Content\n**Type:** Code (JavaScript)\n\n**Purpose:** Parses raw Reddit JSON into structured, AI-ready content.\n\n**Input:** Raw Reddit API response\n\n**Function:** Extracts post metadata; recursively traverses all comments sorted by score at every depth; builds a flat indented string for AI.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n**Output:** `threadContent` (AI prompt string), `structuredComments` (nested JSON), post metadata"},"typeVersion":1},{"id":"55e37b0d-7ae1-435e-9dfa-2ef05f1d5af1","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[752,-256],"parameters":{"color":5,"width":352,"height":528,"content":"## 🧠 Summarize Thread\n**Type:** Google Gemini AI\n\n**Purpose:** Produces a comprehensive markdown summary of the Reddit thread.\n\n**Input:** `threadContent` from Extract node\n\n**Function:** Gemini 3.1 Flash Lite → returns Thread Overview, Key Topics, Notable Insights, Community Sentiment, and Actionable Takeaways.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n**Output:** Structured markdown summary text"},"typeVersion":1},{"id":"3bce0319-33eb-4efb-b421-efe355e3ccdd","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[1120,-256],"parameters":{"color":5,"width":368,"height":528,"content":"## ✍️ Generate Social Posts\n**Type:** Google Gemini AI\n\n**Purpose:** Creates platform-optimized posts for X and LinkedIn.\n\n**Input:** Thread summary from Summarize node\n\n**Function:** Gemini generates: X post (≤280 chars, punchy + hashtags) and LinkedIn post (150–300 words, professional + hashtags). Returns strict JSON only.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n**Output:** `{ \"x_post\": \"...\", \"linkedin_post\": \"...\" }`"},"typeVersion":1},{"id":"b3beeef6-1f35-4f8c-bd03-4c13b5cabf8c","name":"Human Approval","type":"n8n-nodes-base.wait","position":[1904,32],"webhookId":"approval-form-wait-reddit-01","parameters":{"resume":"form","options":{},"formTitle":"📋 Review & Approve Social Media Posts","formFields":{"values":[{"fieldType":"textarea","fieldLabel":"X Post Override (leave blank to use AI version)"},{"fieldType":"textarea","fieldLabel":"LinkedIn Post Override (leave blank to use AI version)"},{"fieldType":"dropdown","fieldLabel":"Decision","fieldOptions":{"values":[{"option":"Approve & Publish"},{"option":"Reject"}]},"requiredField":true}]},"formDescription":"=## 🐦 X (TWITTER) POST  ·  {{ $json.x_char_count }}/280 chars\n\n{{ $json.x_post }}\n\n---\n\n## 💼 LINKEDIN POST\n\n{{ $json.linkedin_post }}\n\n---\n\nThe posts above are ready to publish. You can paste an edited version in the override fields below — **leave a field blank to publish the AI version as-is**."},"typeVersion":1.1},{"id":"067b6314-8cd7-4b22-aeea-9ac90332c687","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[1504,-256],"parameters":{"color":7,"width":288,"height":528,"content":"## 🧹 Parse Social Posts\n**Type:** Code (JavaScript)\n\n**Purpose:** Safely extracts and validates Gemini's JSON response.\n\n**Input:** Raw Gemini API response\n\n**Function:** Strips markdown fences, parses JSON, falls back to regex if malformed. Enforces 280-char hard limit on X post.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n**Output:** `x_post`, `linkedin_post`, `x_char_count`"},"typeVersion":1},{"id":"4fe0405c-4b1d-4fde-9a35-4fd611d07095","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[1808,-256],"parameters":{"color":3,"width":272,"height":528,"content":"## 👤 Human Approval\n**Type:** Wait (Form)\n\n**Purpose:** Pauses the workflow so a human can review posts.\n\n**Input:** `x_post`, `linkedin_post`, `x_char_count`\n\n**Function:** Displays posts in a form. User can overrides or use AI version. Must select **Approve & Publish** or **Reject**.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n**Output:** Form submission with `Decision` + optional override fields."},"typeVersion":1},{"id":"d36354a5-bd50-4ed3-90bd-55e0a767d9d2","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","position":[2096,-256],"parameters":{"color":7,"width":288,"height":528,"content":"## ✅ Resolve Final Posts\n**Type:** Code (JavaScript)\n\n**Purpose:** Merges human overrides with AI-generated posts.\n\n**Input:** Form data + AI posts (referenced from Parse Social Posts node)\n\n**Function:** Override wins if non-empty; otherwise falls back to the AI version. Throws if both are empty.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n**Output:** `X Post`, `LinkedIn Post` (final content ready to publish)"},"typeVersion":1},{"id":"b3874ed4-93f9-4dee-af61-67b014f87a3d","name":"Sticky Note8","type":"n8n-nodes-base.stickyNote","position":[2400,-256],"parameters":{"color":2,"width":256,"height":528,"content":"## 🔀 Approved?\n**Type:** IF Condition\n\n**Purpose:** Routes the workflow based on the human's decision.\n\n**Input:** `Decision` field from Human Approval form\n\n**True →** Post to X + Post to LinkedIn\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n**False →** Rejected – End (nothing published)"},"typeVersion":1},{"id":"caf3cccc-4cf9-48af-ab39-b97f61fe9ab3","name":"Sticky Note9","type":"n8n-nodes-base.stickyNote","position":[2784,-256],"parameters":{"color":6,"width":384,"height":208,"content":"## 🐦 Post to X\n**Type:** X (Twitter)\n\n**Purpose:** Publishes the final post to X (Twitter).\n\n\n**Input:** `X Post` (≤280 chars) from Resolve Final Posts\n\n**Output:** Live tweet on the connected X account."},"typeVersion":1},{"id":"551598a4-3eb2-44a7-b14c-5ac1ab8e097e","name":"Sticky Note10","type":"n8n-nodes-base.stickyNote","position":[2784,-32],"parameters":{"color":6,"width":384,"height":192,"content":"## 💼 Post to LinkedIn\n**Type:** LinkedIn\n\n**Purpose:** Publishes the final post to LinkedIn.\n\n**Input:** `LinkedIn Post` from Resolve Final Posts\n\n**Output:** Live post on the connected LinkedIn account."},"typeVersion":1},{"id":"19a0bf37-09c1-4a61-b1c8-b6bd41e6d166","name":"Sticky Note11","type":"n8n-nodes-base.stickyNote","position":[2784,176],"parameters":{"color":6,"width":384,"height":176,"content":"## 🚫 Rejected – End\n**Type:** Set\n\n**Purpose:** Graceful termination — nothing is published.\n\n**Input:** Rejection path from Approved? node\n\n**Function:** Sets `status: 'rejected'` and a descriptive message.\n\n**Output:** Terminal state — workflow ends here."},"typeVersion":1},{"id":"87f9573d-43dd-4bee-b744-efd26711ffd5","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-144,-256],"parameters":{"color":7,"width":288,"height":528,"content":"## 🔍 Parse Reddit URL\n**Type:** Code (JavaScript)\n\n**Purpose:** Validates and deconstructs the submitted Reddit URL.\n\n**Input:** Raw URL string\n\n**Function:** Regex extraction of subreddit + post ID. Handles standard, mobile (`m.`) and short `redd.it` links.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n**Output:** `subreddit`, `postId`, `apiUrl`, `cleanThreadUrl`"},"typeVersion":1}],"active":false,"pinData":{},"settings":{"binaryMode":"separate","availableInMCP":false,"executionOrder":"v1"},"versionId":"6173be76-a99e-4a57-800c-510df745cce5","connections":{"Approved?":{"main":[[{"node":"Post to X","type":"main","index":0},{"node":"Post to Linkedin","type":"main","index":0}],[{"node":"Rejected – End","type":"main","index":0}]]},"Human Approval":{"main":[[{"node":"Resolve Final Posts","type":"main","index":0}]]},"Parse Reddit URL":{"main":[[{"node":"Fetch Reddit Thread","type":"main","index":0}]]},"Reddit URL Input":{"main":[[{"node":"Parse Reddit URL","type":"main","index":0}]]},"Summarize Thread":{"main":[[{"node":"Generate Social Posts","type":"main","index":0}]]},"Parse Social Posts":{"main":[[{"node":"Human Approval","type":"main","index":0}]]},"Fetch Reddit Thread":{"main":[[{"node":"Extract Thread Content","type":"main","index":0}]]},"Resolve Final Posts":{"main":[[{"node":"Approved?","type":"main","index":0}]]},"Generate Social Posts":{"main":[[{"node":"Parse Social Posts","type":"main","index":0}]]},"Extract Thread Content":{"main":[[{"node":"Summarize Thread","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":27,"nodeTypes":{"n8n-nodes-base.if":{"count":1},"n8n-nodes-base.set":{"count":1},"n8n-nodes-base.code":{"count":4},"n8n-nodes-base.wait":{"count":1},"n8n-nodes-base.twitter":{"count":1},"n8n-nodes-base.linkedIn":{"count":1},"n8n-nodes-base.stickyNote":{"count":14},"n8n-nodes-base.formTrigger":{"count":1},"n8n-nodes-base.httpRequest":{"count":1},"@n8n/n8n-nodes-langchain.googleGemini":{"count":2}}},"status":"published","readyToDemo":null,"user":{"name":"AppStoneLab Technologies LLP","username":"appstonelab","bio":"Dive into the digital era with a trusted partner. From idea to execution, we transform visions into interactive realities. Let's shape the future, together.","verified":true,"links":["https://appstonelab.com"],"avatar":"https://gravatar.com/avatar/2e16a1d332e0382df4f5e3263c822b0ef2c3b51db77e18f737999755913724f6?r=pg&d=retro&size=200"},"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":38,"icon":"fa:pen","name":"n8n-nodes-base.set","codex":{"data":{"alias":["Set","JS","JSON","Filter","Transform","Map"],"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/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/database-monitoring-and-alerting-with-n8n/","icon":"📡","label":"Database Monitoring and Alerting 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/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/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/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/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/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"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/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/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.set/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Edit Fields"},"iconData":{"icon":"pen","type":"icon"},"displayName":"Edit Fields (Set)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":325,"icon":"file:x.svg","name":"n8n-nodes-base.twitter","codex":{"data":{"alias":["Tweet","Twitter","X","X API"],"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/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.twitter/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/twitter/"}]},"categories":["Marketing"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"output\"]","defaults":{"name":"X"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTIzLjMxNzEgMTYuOTM3M0wzNy45MDI2IDBIMzQuNDQ2M0wyMS43ODE3IDE0LjcwNjRMMTEuNjY2NiAwSDBMMTUuMjk2MSAyMi4yMzg3TDAgNDBIMy40NTY0OEwxNi44MzA2IDI0LjQ2OTZMMjcuNTEyOSA0MEgzOS4xNzk1TDIzLjMxNjMgMTYuOTM3M0gyMy4zMTcxWk0xOC41ODMgMjIuNDM0NkwxNy4wMzMyIDIwLjIyMDFMNC43MDE5IDIuNTk5MzZIMTAuMDEwOEwxOS45NjIzIDE2LjgxOTlMMjEuNTEyMiAxOS4wMzQ0TDM0LjQ0NzkgMzcuNTE4OUgyOS4xMzlMMTguNTgzIDIyLjQzNTRWMjIuNDM0NloiIGZpbGw9ImJsYWNrIi8+Cjwvc3ZnPgo="},"displayName":"X (Formerly Twitter)","typeVersion":2,"nodeCategories":[{"id":27,"name":"Marketing"}]},{"id":367,"icon":"file:linkedin.svg","name":"n8n-nodes-base.linkedIn","codex":{"data":{"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"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.linkedin/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/linkedin/"}]},"categories":["Marketing","Communication"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\"]","defaults":{"name":"LinkedIn"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgNjcgNjYiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9IjEiIHk9IjEiLz48c3ltYm9sIGlkPSJhIiBvdmVyZmxvdz0idmlzaWJsZSI+PGcgZmlsbC1ydWxlPSJub256ZXJvIiBzdHJva2U9Im5vbmUiPjxwYXRoIGZpbGw9IiMwMTc3YjUiIGQ9Ik01OS4yNiAwSDQuNzI0QzIuMTIgMCAwIDIuMDY2IDAgNC42MXY1NC43ODhjMCAyLjUzIDIuMTIgNC42IDQuNzI0IDQuNmg1NC41NGMyLjYxIDAgNC43MzYtMi4wNyA0LjczNi00LjZWNC42MUM2NCAyLjA2NiA2MS44NzQgMCA1OS4yNiAwIi8+PHBhdGggZD0iTTkuNDkgMjMuOTkySDE5djMwLjU0SDkuNDl6bTQuNzQ4LTE1LjJjMy4wMzQgMCA1LjUgMi40NjYgNS41IDUuNWE1LjUxIDUuNTEgMCAwIDEtNS40OTggNS41MDYgNS41MiA1LjUyIDAgMCAxLTUuNTA4LTUuNTA2IDUuNSA1LjUgMCAwIDEgNS41MDYtNS41bTEwLjcgMTUuMmg5LjEwNHY0LjE3NGguMTI2YzEuMjY4LTIuNCA0LjM2NC00LjkzMiA5LTQuOTMyIDkuNjEyIDAgMTEuMzg2IDYuMzI2IDExLjM4NiAxNC41NDh2MTYuNzUyaC05LjQ4NlYzOS42NzhjMC0zLjU0LS4wNjQtOC4xLTQuOTMyLTguMS00Ljk0IDAtNS43IDMuODYtNS43IDcuODR2MTUuMTA4aC05LjQ4NHYtMzAuNTR6Ii8+PC9nPjwvc3ltYm9sPjwvc3ZnPg=="},"displayName":"LinkedIn","typeVersion":1,"nodeCategories":[{"id":6,"name":"Communication"},{"id":27,"name":"Marketing"}]},{"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"}]},{"id":1225,"icon":"file:form.svg","name":"n8n-nodes-base.formTrigger","codex":{"data":{"alias":["table","submit","post"],"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.formtrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Other Trigger Nodes"]}}},"group":"[\"trigger\"]","defaults":{"name":"On form submission"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NiIgaGVpZ2h0PSI0MCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzAwQjdCQyIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzQuOTc4IDM3LjczMmExLjU2IDEuNTYgMCAwIDEtMS41NjIgMS41NjNINi4yNmExLjU2IDEuNTYgMCAwIDEtMS41NjMtMS41NjNWOS42MDdjMC0uNDA1LjE1Ny0uNzk0LjQzOC0xLjA4Nmw2LjMwNC02LjUzMXY1LjM0NEg4LjIxM2ExLjE3MiAxLjE3MiAwIDEgMCAwIDIuMzQzaDQuNDNhMS4xNyAxLjE3IDAgMCAwIDEuMTcxLTEuMTcxVi4yMzJoMTkuNjAyYTEuNTYgMS41NiAwIDAgMSAxLjU2MiAxLjU2M3YxMC4zMjdsLTIuODYgMi44Ni04LjI1MiA4LjI3NmE0MTMuMDA2IDQxMy4wMDYgMCAwIDEtMS42NTQgMS42NjJsLS4zMzcuMzM3YTIgMiAwIDAgMC0uNTU3IDEuMDhMMjAuMyAzMS45MjJjLS4xMDguNjM4LS4yMTUgMS4wNzkuMjExIDEuNDE4LjQwMy4zMi45LjE3NCAxLjU0LjA2Nmw1LjQwOC0uOTI4YTIgMiAwIDAgMCAxLjA4LS41NTZsNi40NC02LjQyOXptLTI0LjAzLTIxLjI2NWExLjE4IDEuMTggMCAwIDAgMS4xNzEgMS4xNzJoMTMuMTYzYTEuMTcyIDEuMTcyIDAgMSAwIDAtMi4zNDRIMTIuMTE5YTEuMTcgMS4xNyAwIDAgMC0xLjE3MiAxLjE3Mm03LjI5NCAxNC43NjZhMS4xNyAxLjE3IDAgMCAwLTEuMTcyLTEuMTcySDEyLjEyYTEuMTcyIDEuMTcyIDAgMSAwIDAgMi4zNDNoNC45NTFhMS4xNyAxLjE3IDAgMCAwIDEuMTcyLTEuMTcybS44Ni03LjM5MWExLjE3IDEuMTcgMCAwIDAtMS4xNzItMS4xNzJoLTUuODExYTEuMTcyIDEuMTcyIDAgMSAwIDAgMi4zNDNoNS44MWExLjE2NCAxLjE2NCAwIDAgMCAxLjE3My0xLjE3MSIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iIzAwQjdCQyIgZD0ibTMzLjUzMiAxNi4zOTcgNC4yODktNC4yODkgMy43NTggMy43MSAxLjYxNy0xLjYxNiAyLjI1OCAyLjI1N2MuMjE4LjIxOC4zNC41MTMuMzQzLjgyLS4wMDIuMzExLS4xMjUuNjA4LS4zNDQuODNsLTYuODA0IDYuNzk2YTEuMTMgMS4xMyAwIDAgMS0uODI4LjM0MyAxLjE1IDEuMTUgMCAwIDEtLjgyOC0uMzQzIDEuMTggMS4xOCAwIDAgMSAwLTEuNjU3bDUuOTc2LTUuOTY4LTEuMzEyLTEuMzEzLTEuMzgzIDEuNDE0LTEzLjE0OSAxMy4xMjUtNC42MTcuNzgyLjc4Mi00LjYxNy4zMzYtLjMzNyAyLjU2MiAyLjU1NWExLjEgMS4xIDAgMCAwIC44MjguMzQ0Yy4zMTIuMDA1LjYxMi0uMTIuODI4LS4zNDRhMS4xOCAxLjE4IDAgMCAwIDAtMS42NTZsLTIuNTYyLTIuNTYyek00NC43MzYgMTIuMjRjMCAuNDE0LS4xNjMuODEtLjQ1NCAxLjEwMmwtLjkyMi45MTQtMy44NTItMy44MjguOTMtLjkzYTEuNTYzIDEuNTYzIDAgMCAxIDIuMjAzIDBsMS42NCAxLjY0MWMuMjkxLjI5My40NTUuNjkuNDU1IDEuMTAyIi8+PC9zdmc+"},"displayName":"n8n Form Trigger","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1309,"icon":"file:gemini.svg","name":"@n8n/n8n-nodes-langchain.googleGemini","codex":{"data":{"alias":["LangChain","video","document","audio","transcribe","assistant"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-langchain.googlegemini/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Agents","Miscellaneous","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"Google Gemini"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyBjbGFzcz0iX2Zvb3RlclNwYXJrXzk4dWR0XzE1MSIgd2lkdGg9IjY0IiBoZWlnaHQ9IjY0IiB2aWV3Qm94PSIwIDAgNjQgNjQiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTU3LjA2NjcgMjguNjEwM0M1Mi4xMzU5IDI2LjQ4NzggNDcuODIxNyAyMy41NzYgNDQuMTIyMyAxOS44Nzg0QzQwLjQyNDcgMTYuMTgwOCAzNy41MTI4IDExLjg2NDkgMzUuMzkwMiA2LjkzNDJDMzQuNTc1NCA1LjA0NDQ5IDMzLjkyMDYgMy4xMDIwNCAzMy40MTg2IDEuMTEwNDlDMzMuMjU0OSAwLjQ1OTM2OCAzMi42NzExIDAuMDAxMDM3NiAzMiAwLjAwMTAzNzZDMzEuMzI4OCAwLjAwMTAzNzYgMzAuNzQ1IDAuNDU5MzY4IDMwLjU4MTMgMS4xMTA0OUMzMC4wNzkzIDMuMTAyMDQgMjkuNDI0NiA1LjA0MjY3IDI4LjYwOTcgNi45MzQyQzI2LjQ4NzIgMTEuODY0OSAyMy41NzUzIDE2LjE4MDggMTkuODc3NyAxOS44Nzg0QzE2LjE4IDIzLjU3NiAxMS44NjQgMjYuNDg3OCA2LjkzMzI3IDI4LjYxMDNDNS4wNDM1MyAyOS40MjUxIDMuMTAxMDUgMzAuMDc5OSAxLjEwOTQ3IDMwLjU4MTlDMC40NTgzMzggMzAuNzQ1NiAwIDMxLjMyOTQgMCAzMi4wMDA1QzAgMzIuNjcxNiAwLjQ1ODMzOCAzMy4yNTU1IDEuMTA5NDcgMzMuNDE5MUMzLjEwMTA1IDMzLjkyMTEgNS4wNDE3MiAzNC41NzU5IDYuOTMzMjcgMzUuMzkwN0MxMS44NjQgMzcuNTEzMiAxNi4xNzgyIDQwLjQyNTEgMTkuODc3NyA0NC4xMjI2QzIzLjU3NzEgNDcuODIwMiAyNi40ODcyIDUyLjEzNjEgMjguNjA5NyA1Ny4wNjY4QzI5LjQyNDYgNTguOTU2NSAzMC4wNzkzIDYwLjg5OSAzMC41ODEzIDYyLjg5MDVDMzAuNzQ1IDYzLjU0MTYgMzEuMzI4OCA2NCAzMiA2NEMzMi42NzExIDY0IDMzLjI1NDkgNjMuNTQxNiAzMy40MTg2IDYyLjg5MDVDMzMuOTIwNiA2MC44OTkgMzQuNTc1NCA1OC45NTgzIDM1LjM5MDIgNTcuMDY2OEMzNy41MTI4IDUyLjEzNjEgNDAuNDI0NyA0Ny44MjIgNDQuMTIyMyA0NC4xMjI2QzQ3LjgxOTkgNDAuNDI1MSA1Mi4xMzU5IDM3LjUxMzIgNTcuMDY2NyAzNS4zOTA3QzU4Ljk1NjQgMzQuNTc1OSA2MC44OTg5IDMzLjkyMTEgNjIuODkwNSAzMy40MTkxQzYzLjU0MTYgMzMuMjU1NSA2NCAzMi42NzE2IDY0IDMyLjAwMDVDNjQgMzEuMzI5NCA2My41NDE2IDMwLjc0NTYgNjIuODkwNSAzMC41ODE5QzYwLjg5ODkgMzAuMDc5OSA1OC45NTgyIDI5LjQyNTEgNTcuMDY2NyAyOC42MTAzWiIgZmlsbD0id2hpdGUiPjwvcGF0aD48bWFzayBpZD0ibWFzazBfMTA4NTlfNDg5NCIgc3R5bGU9Im1hc2stdHlwZTphbHBoYSIgbWFza1VuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeD0iMCIgeT0iMCIgd2lkdGg9IjY0IiBoZWlnaHQ9IjY0Ij48cGF0aCBkPSJNMzIgMEMzMi42NzExIDEuMTQ0ZS0wNSAzMy4yNTUzIDAuNDU4MjYzIDMzLjQxODkgMS4xMDkzOEMzMy45MjA5IDMuMTAwOTMgMzQuNTc1OCA1LjA0Mzg5IDM1LjM5MDYgNi45MzM1OUMzNy41MTMxIDExLjg2MzkgNDAuNDI0NyAxNi4xNzk2IDQ0LjEyMjEgMTkuODc3QzQ3LjgyMTUgMjMuNTc0NSA1Mi4xMzU3IDI2LjQ4NjkgNTcuMDY2NCAyOC42MDk0QzU4Ljk1OCAyOS40MjQyIDYwLjg5OSAzMC4wNzkxIDYyLjg5MDYgMzAuNTgxMUM2My41NDE1IDMwLjc0NDggNjMuOTk5OCAzMS4zMjgxIDY0IDMxLjk5OUM2NCAzMi42NzAxIDYzLjU0MTcgMzMuMjU0MiA2Mi44OTA2IDMzLjQxOEM2MC44OTkgMzMuOTE5OSA1OC45NTYxIDM0LjU3NDggNTcuMDY2NCAzNS4zODk2QzUyLjEzNTggMzcuNTEyMSA0Ny44MTk2IDQwLjQyMzcgNDQuMTIyMSA0NC4xMjExQzQwLjQyNDYgNDcuODIwNCAzNy41MTMxIDUyLjEzNDkgMzUuMzkwNiA1Ny4wNjU0QzM0LjU3NTggNTguOTU3IDMzLjkyMDkgNjAuODk4MSAzMy40MTg5IDYyLjg4OTZDMzMuMjU1MiA2My41NDA3IDMyLjY3MTEgNjMuOTk5IDMyIDYzLjk5OUMzMS4zMjg5IDYzLjk5OSAzMC43NDQ4IDYzLjU0MDcgMzAuNTgxMSA2Mi44ODk2QzMwLjA3OTEgNjAuODk4MSAyOS40MjQyIDU4Ljk1NTEgMjguNjA5NCA1Ny4wNjU0QzI2LjQ4NjkgNTIuMTM0OSAyMy41NzczIDQ3LjgxODYgMTkuODc3OSA0NC4xMjExQzE2LjE3ODYgNDAuNDIzNyAxMS44NjQyIDM3LjUxMjEgNi45MzM1OSAzNS4zODk2QzUuMDQyMDQgMzQuNTc0OCAzLjEwMDk2IDMzLjkxOTkgMS4xMDkzOCAzMy40MThDMC40NTgzMDkgMzMuMjU0MiAwIDMyLjY3MDEgMCAzMS45OTlDMC4wMDAyMDE1NDggMzEuMzI4MSAwLjQ1ODQ2MyAzMC43NDQ4IDEuMTA5MzggMzAuNTgxMUMzLjEwMDk2IDMwLjA3OTEgNS4wNDM4NiAyOS40MjQyIDYuOTMzNTkgMjguNjA5NEMxMS44NjQzIDI2LjQ4NjkgMTYuMTgwNCAyMy41NzQ1IDE5Ljg3NzkgMTkuODc3QzIzLjU3NTMgMTYuMTc5NiAyNi40ODY5IDExLjg2MzkgMjguNjA5NCA2LjkzMzU5QzI5LjQyNDIgNS4wNDIwNyAzMC4wNzkxIDMuMTAwOTMgMzAuNTgxMSAxLjEwOTM4QzMwLjc0NDggMC40NTgyNiAzMS4zMjg5IDAgMzIgMFoiIGZpbGw9ImJsYWNrIj48L3BhdGg+PHBhdGggZD0iTTMyIDBDMzIuNjcxMSAxLjE0NGUtMDUgMzMuMjU1MyAwLjQ1ODI2MyAzMy40MTg5IDEuMTA5MzhDMzMuOTIwOSAzLjEwMDkzIDM0LjU3NTggNS4wNDM4OSAzNS4zOTA2IDYuOTMzNTlDMzcuNTEzMSAxMS44NjM5IDQwLjQyNDcgMTYuMTc5NiA0NC4xMjIxIDE5Ljg3N0M0Ny44MjE1IDIzLjU3NDUgNTIuMTM1NyAyNi40ODY5IDU3LjA2NjQgMjguNjA5NEM1OC45NTggMjkuNDI0MiA2MC44OTkgMzAuMDc5MSA2Mi44OTA2IDMwLjU4MTFDNjMuNTQxNSAzMC43NDQ4IDYzLjk5OTggMzEuMzI4MSA2NCAzMS45OTlDNjQgMzIuNjcwMSA2My41NDE3IDMzLjI1NDIgNjIuODkwNiAzMy40MThDNjAuODk5IDMzLjkxOTkgNTguOTU2MSAzNC41NzQ4IDU3LjA2NjQgMzUuMzg5NkM1Mi4xMzU4IDM3LjUxMjEgNDcuODE5NiA0MC40MjM3IDQ0LjEyMjEgNDQuMTIxMUM0MC40MjQ2IDQ3LjgyMDQgMzcuNTEzMSA1Mi4xMzQ5IDM1LjM5MDYgNTcuMDY1NEMzNC41NzU4IDU4Ljk1NyAzMy45MjA5IDYwLjg5ODEgMzMuNDE4OSA2Mi44ODk2QzMzLjI1NTIgNjMuNTQwNyAzMi42NzExIDYzLjk5OSAzMiA2My45OTlDMzEuMzI4OSA2My45OTkgMzAuNzQ0OCA2My41NDA3IDMwLjU4MTEgNjIuODg5NkMzMC4wNzkxIDYwLjg5ODEgMjkuNDI0MiA1OC45NTUxIDI4LjYwOTQgNTcuMDY1NEMyNi40ODY5IDUyLjEzNDkgMjMuNTc3MyA0Ny44MTg2IDE5Ljg3NzkgNDQuMTIxMUMxNi4xNzg2IDQwLjQyMzcgMTEuODY0MiAzNy41MTIxIDYuOTMzNTkgMzUuMzg5NkM1LjA0MjA0IDM0LjU3NDggMy4xMDA5NiAzMy45MTk5IDEuMTA5MzggMzMuNDE4QzAuNDU4MzA5IDMzLjI1NDIgMCAzMi42NzAxIDAgMzEuOTk5QzAuMDAwMjAxNTQ4IDMxLjMyODEgMC40NTg0NjMgMzAuNzQ0OCAxLjEwOTM4IDMwLjU4MTFDMy4xMDA5NiAzMC4wNzkxIDUuMDQzODYgMjkuNDI0MiA2LjkzMzU5IDI4LjYwOTRDMTEuODY0MyAyNi40ODY5IDE2LjE4MDQgMjMuNTc0NSAxOS44Nzc5IDE5Ljg3N0MyMy41NzUzIDE2LjE3OTYgMjYuNDg2OSAxMS44NjM5IDI4LjYwOTQgNi45MzM1OUMyOS40MjQyIDUuMDQyMDcgMzAuMDc5MSAzLjEwMDkzIDMwLjU4MTEgMS4xMDkzOEMzMC43NDQ4IDAuNDU4MjYgMzEuMzI4OSAwIDMyIDBaIiBmaWxsPSJ1cmwoI3BhaW50MF9saW5lYXJfMTA4NTlfNDg5NCkiPjwvcGF0aD48L21hc2s+PGcgbWFzaz0idXJsKCNtYXNrMF8xMDg1OV80ODk0KSI+PGcgZmlsdGVyPSJ1cmwoI2ZpbHRlcjBfZl8xMDg1OV80ODk0KSI+PGVsbGlwc2UgY3g9IjE0LjIwODQiIGN5PSIxNi43MTY0IiByeD0iMTQuMjA4NCIgcnk9IjE2LjcxNjQiIHRyYW5zZm9ybT0ibWF0cml4KDAuOTQyMzQzIDAuMzM0NjQ5IC0wLjMzNDY1NiAwLjk0MjM0IC03Ljk3OSAxMy43NzM1KSIgZmlsbD0iI0ZGRTQzMiI+PC9lbGxpcHNlPjwvZz48ZyBmaWx0ZXI9InVybCgjZmlsdGVyMV9mXzEwODU5XzQ4OTQpIj48ZWxsaXBzZSBjeD0iMjcuMDU0MyIgY3k9IjIuNTUxMTQiIHJ4PSIxOC4zOTQ0IiByeT0iMTguNzk4NSIgZmlsbD0iI0ZDNDEzRCI+PC9lbGxpcHNlPjwvZz48ZyBmaWx0ZXI9InVybCgjZmlsdGVyMl9mXzEwODU5XzQ4OTQpIj48ZWxsaXBzZSBjeD0iMTkuMjI0NSIgY3k9IjI0LjkwNDIiIHJ4PSIxOS4yMjQ1IiByeT0iMjQuOTA0MiIgdHJhbnNmb3JtPSJtYXRyaXgoMC45OTg4MDcgLTAuMDQ4ODI1NCAwLjA0ODgyNjYgMC45OTg4MDcgLTEuNzI3NzggMzIuNjU3MykiIGZpbGw9IiMwMEI5NUMiPjwvZWxsaXBzZT48L2c+PGcgZmlsdGVyPSJ1cmwoI2ZpbHRlcjNfZl8xMDg1OV80ODk0KSI+PGVsbGlwc2UgY3g9IjE5LjIyNDUiIGN5PSIyNC45MDQyIiByeD0iMTkuMjI0NSIgcnk9IjI0LjkwNDIiIHRyYW5zZm9ybT0ibWF0cml4KDAuOTk4ODA3IC0wLjA0ODgyNTQgMC4wNDg4MjY2IDAuOTk4ODA3IC0xLjcyNzc4IDMyLjY1NzMpIiBmaWxsPSIjMDBCOTVDIj48L2VsbGlwc2U+PC9nPjxnIGZpbHRlcj0idXJsKCNmaWx0ZXI0X2ZfMTA4NTlfNDg5NCkiPjxlbGxpcHNlIGN4PSIxOC44NDI5IiBjeT0iMjAuNzQ0MSIgcng9IjE4Ljg0MjkiIHJ5PSIyMC43NDQxIiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg1NDMwMSAtMC41MTk3NzkgMC41MTk3OSAwLjg1NDI5NCAtNy4xMzU3NCA0Ny41MDc4KSIgZmlsbD0iIzAwQjk1QyI+PC9lbGxpcHNlPjwvZz48ZyBmaWx0ZXI9InVybCgjZmlsdGVyNV9mXzEwODU5XzQ4OTQpIj48ZWxsaXBzZSBjeD0iNjYuNDYxNyIgY3k9IjI0Ljk3NyIgcng9IjE4LjA5MzMiIHJ5PSIxNy40MjI5IiBmaWxsPSIjMzE4NkZGIj48L2VsbGlwc2U+PC9nPjxnIGZpbHRlcj0idXJsKCNmaWx0ZXI2X2ZfMTA4NTlfNDg5NCkiPjxlbGxpcHNlIGN4PSIyMC45MjkyIiBjeT0iMjIuMDc1MiIgcng9IjIwLjkyOTIiIHJ5PSIyMi4wNzUyIiB0cmFuc2Zvcm09Im1hdHJpeCgwLjc5NTk5IDAuNjA1MzEgLTAuNjA1MzIgMC43OTU5ODIgLTIuODE4ODUgLTcuNDMzMjMpIiBmaWxsPSIjRkJCQzA0Ij48L2VsbGlwc2U+PC9nPjxnIGZpbHRlcj0idXJsKCNmaWx0ZXI3X2ZfMTA4NTlfNDg5NCkiPjxlbGxpcHNlIGN4PSIyNC4xMzExIiBjeT0iMjIuMjkxOSIgcng9IjI0LjEzMTEiIHJ5PSIyMi4yOTE5IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjgyNDAzNyAwLjU2NjUzNiAtMC41NjY1NDYgMC44MjQwMyAzOS42MzM4IDAuMzEwNjA4KSIgZmlsbD0iIzMxODZGRiI+PC9lbGxpcHNlPjwvZz48ZyBmaWx0ZXI9InVybCgjZmlsdGVyOF9mXzEwODU5XzQ4OTQpIj48cGF0aCBkPSJNNTQuMjI1NSAtMi4zMDQwM0M1Ny4wMTk1IDEuNDk0NjIgNTMuNDI5NCA4Ljg4MDQgNDYuMjA2OCAxNC4xOTI2QzM4Ljk4NDIgMTkuNTA0OCAzMC44NjQyIDIwLjczMTggMjguMDcwMiAxNi45MzMxQzI1LjI3NjIgMTMuMTM0NSAyOC44NjYzIDUuNzQ4NjcgMzYuMDg4OSAwLjQzNjQ4NkM0My4zMTE1IC00Ljg3NTcgNTEuNDMxNSAtNi4xMDI2NyA1NC4yMjU1IC0yLjMwNDAzWiIgZmlsbD0iIzc0OUJGRiI+PC9wYXRoPjwvZz48ZyBmaWx0ZXI9InVybCgjZmlsdGVyOV9mXzEwODU5XzQ4OTQpIj48ZWxsaXBzZSBjeD0iMjcuNTg1MyIgY3k9IjE3LjE0NzgiIHJ4PSIyNy41ODUzIiByeT0iMTcuMTQ3OCIgdHJhbnNmb3JtPSJtYXRyaXgoMC43MzMxNjYgLTAuNjgwMDQ5IDAuNjgwMDYxIDAuNzMzMTU1IC0xMi4yNTgzIDkuNDk2OTUpIiBmaWxsPSIjRkM0MTNEIj48L2VsbGlwc2U+PC9nPjxnIGZpbHRlcj0idXJsKCNmaWx0ZXIxMF9mXzEwODU5XzQ4OTQpIj48ZWxsaXBzZSBjeD0iMTQuNzgxOSIgY3k9IjguNTk2MzciIHJ4PSIxNC43ODE5IiByeT0iOC41OTYzNyIgdHJhbnNmb3JtPSJtYXRyaXgoMC44MTMxODYgMC41ODIwMDQgLTAuNTgyMDE2IDAuODEzMTc3IDYuMzc4NDIgMzAuNTExKSIgZmlsbD0iI0ZGRUU0OCI+PC9lbGxpcHNlPjwvZz48L2c+PGRlZnM+PGZpbHRlciBpZD0iZmlsdGVyMF9mXzEwODU5XzQ4OTQiIHg9Ii0xOS42MTgiIHk9IjEyLjkwMjciIHdpZHRoPSIzOC44NjgxIiBoZWlnaHQ9IjQyLjc1NjIiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj48ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCI+PC9mZUZsb29kPjxmZUJsZW5kIG1vZGU9Im5vcm1hbCIgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iQmFja2dyb3VuZEltYWdlRml4IiByZXN1bHQ9InNoYXBlIj48L2ZlQmxlbmQ+PGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMi40NTk2NSIgcmVzdWx0PSJlZmZlY3QxX2ZvcmVncm91bmRCbHVyXzEwODU5XzQ4OTQiPjwvZmVHYXVzc2lhbkJsdXI+PC9maWx0ZXI+PGZpbHRlciBpZD0iZmlsdGVyMV9mXzEwODU5XzQ4OTQiIHg9Ii0xNS4xMjIzIiB5PSItNDAuMDI5NiIgd2lkdGg9Ijg0LjM1MzMiIGhlaWdodD0iODUuMTYxNSIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPjxmZUZsb29kIGZsb29kLW9wYWNpdHk9IjAiIHJlc3VsdD0iQmFja2dyb3VuZEltYWdlRml4Ij48L2ZlRmxvb2Q+PGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiPjwvZmVCbGVuZD48ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIxMS44OTExIiByZXN1bHQ9ImVmZmVjdDFfZm9yZWdyb3VuZEJsdXJfMTA4NTlfNDg5NCI+PC9mZUdhdXNzaWFuQmx1cj48L2ZpbHRlcj48ZmlsdGVyIGlkPSJmaWx0ZXIyX2ZfMTA4NTlfNDg5NCIgeD0iLTIwLjc2ODIiIHk9IjExLjQ4MzUiIHdpZHRoPSI3OC45MTYxIiBoZWlnaHQ9IjkwLjIxOTYiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj48ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCI+PC9mZUZsb29kPjxmZUJsZW5kIG1vZGU9Im5vcm1hbCIgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iQmFja2dyb3VuZEltYWdlRml4IiByZXN1bHQ9InNoYXBlIj48L2ZlQmxlbmQ+PGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMTAuMTA4NiIgcmVzdWx0PSJlZmZlY3QxX2ZvcmVncm91bmRCbHVyXzEwODU5XzQ4OTQiPjwvZmVHYXVzc2lhbkJsdXI+PC9maWx0ZXI+PGZpbHRlciBpZD0iZmlsdGVyM19mXzEwODU5XzQ4OTQiIHg9Ii0yMC43NjgyIiB5PSIxMS40ODM1IiB3aWR0aD0iNzguOTE2MSIgaGVpZ2h0PSI5MC4yMTk2IiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiPjwvZmVGbG9vZD48ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJzaGFwZSI+PC9mZUJsZW5kPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjEwLjEwODYiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl8xMDg1OV80ODk0Ij48L2ZlR2F1c3NpYW5CbHVyPjwvZmlsdGVyPjxmaWx0ZXIgaWQ9ImZpbHRlcjRfZl8xMDg1OV80ODk0IiB4PSItMTkuODUiIHk9IjE0Ljk2NjQiIHdpZHRoPSI3OS4xODg2IiBoZWlnaHQ9IjgwLjkzNzgiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj48ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCI+PC9mZUZsb29kPjxmZUJsZW5kIG1vZGU9Im5vcm1hbCIgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iQmFja2dyb3VuZEltYWdlRml4IiByZXN1bHQ9InNoYXBlIj48L2ZlQmxlbmQ+PGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMTAuMTA4NiIgcmVzdWx0PSJlZmZlY3QxX2ZvcmVncm91bmRCbHVyXzEwODU5XzQ4OTQiPjwvZmVHYXVzc2lhbkJsdXI+PC9maWx0ZXI+PGZpbHRlciBpZD0iZmlsdGVyNV9mXzEwODU5XzQ4OTQiIHg9IjI5LjE1NjEiIHk9Ii0xMS42NTgyIiB3aWR0aD0iNzQuNjExMSIgaGVpZ2h0PSI3My4yNzAzIiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiPjwvZmVGbG9vZD48ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJzaGFwZSI+PC9mZUJsZW5kPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjkuNjA2MTMiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl8xMDg1OV80ODk0Ij48L2ZlR2F1c3NpYW5CbHVyPjwvZmlsdGVyPjxmaWx0ZXIgaWQ9ImZpbHRlcjZfZl8xMDg1OV80ODk0IiB4PSItMzguMjkxIiB5PSItMTYuMjY4NyIgd2lkdGg9Ijc3LjUzOCIgaGVpZ2h0PSI3OC4xNTEzIiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiPjwvZmVGbG9vZD48ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJzaGFwZSI+PC9mZUJsZW5kPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjguNzA1OTEiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl8xMDg1OV80ODk0Ij48L2ZlR2F1c3NpYW5CbHVyPjwvZmlsdGVyPjxmaWx0ZXIgaWQ9ImZpbHRlcjdfZl8xMDg1OV80ODk0IiB4PSI3Ljc4MDM4IiB5PSItNi4wOTgxIiB3aWR0aD0iNzguMjE4MSIgaGVpZ2h0PSI3Ni44OTgyIiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiPjwvZmVGbG9vZD48ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJzaGFwZSI+PC9mZUJsZW5kPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjcuNzc0NzMiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl8xMDg1OV80ODk0Ij48L2ZlR2F1c3NpYW5CbHVyPjwvZmlsdGVyPjxmaWx0ZXIgaWQ9ImZpbHRlcjhfZl8xMDg1OV80ODk0IiB4PSIxMy4yMDgyIiB5PSItMTguNDI1IiB3aWR0aD0iNTUuODc5MyIgaGVpZ2h0PSI1MS40NzkxIiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiPjwvZmVGbG9vZD48ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJzaGFwZSI+PC9mZUJsZW5kPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjYuOTU2OTQiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl8xMDg1OV80ODk0Ij48L2ZlR2F1c3NpYW5CbHVyPjwvZmlsdGVyPjxmaWx0ZXIgaWQ9ImZpbHRlcjlfZl8xMDg1OV80ODk0IiB4PSItMTUuNDczOSIgeT0iLTMxLjAyNzIiIHdpZHRoPSI3MC4yMDM0IiBoZWlnaHQ9IjY4LjY3MzUiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj48ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCI+PC9mZUZsb29kPjxmZUJsZW5kIG1vZGU9Im5vcm1hbCIgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iQmFja2dyb3VuZEltYWdlRml4IiByZXN1bHQ9InNoYXBlIj48L2ZlQmxlbmQ+PGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNS44NzU5OCIgcmVzdWx0PSJlZmZlY3QxX2ZvcmVncm91bmRCbHVyXzEwODU5XzQ4OTQiPjwvZmVHYXVzc2lhbkJsdXI+PC9maWx0ZXI+PGZpbHRlciBpZD0iZmlsdGVyMTBfZl8xMDg1OV80ODk0IiB4PSItMTQuMTczIiB5PSIyMC40NzQiIHdpZHRoPSI1NS4xMzczIiBoZWlnaHQ9IjUxLjI2MSIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPjxmZUZsb29kIGZsb29kLW9wYWNpdHk9IjAiIHJlc3VsdD0iQmFja2dyb3VuZEltYWdlRml4Ij48L2ZlRmxvb2Q+PGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiPjwvZmVCbGVuZD48ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSI3LjI3MjUzIiByZXN1bHQ9ImVmZmVjdDFfZm9yZWdyb3VuZEJsdXJfMTA4NTlfNDg5NCI+PC9mZUdhdXNzaWFuQmx1cj48L2ZpbHRlcj48bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMTA4NTlfNDg5NCIgeDE9IjE4LjE5MzEiIHkxPSI0Mi44MjEiIHgyPSI1MS40MzM1IiB5Mj0iMTQuNzk1OSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiM0ODkzRkMiPjwvc3RvcD48c3RvcCBvZmZzZXQ9IjAuMjciIHN0b3AtY29sb3I9IiM0ODkzRkMiPjwvc3RvcD48c3RvcCBvZmZzZXQ9IjAuNzc2OTgxIiBzdG9wLWNvbG9yPSIjOTY5REZGIj48L3N0b3A+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjQkQ5OUZFIj48L3N0b3A+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PC9zdmc+Cg=="},"displayName":"Google Gemini","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]}],"categories":[{"id":33,"name":"Social Media"},{"id":51,"name":"Multimodal AI"}],"image":[]}}