{"workflow":{"id":12729,"name":"Generate social videos with AI avatars using VEED, Claude, and OpenAI","views":306,"recentViews":1,"totalViews":306,"createdAt":"2026-01-15T14:26:01.079Z","description":"# Generate social videos with AI avatars using VEED and Claude\n\n## Overview\n\nThis n8n workflow automatically generates **TikTok/Reels-ready talking head videos** from scratch. You provide a topic and intention, and the workflow handles everything: scriptwriting, avatar generation, voiceover creation, and video rendering.\n\n**Output**: Vertical (9:16) AI-generated videos with lip-synced avatars, ready for social media posting.\n\n---\n\n## What It Does\n\n```\nTopic + Intention → Claude writes script → OpenAI generates avatar → OpenAI creates voiceover → VEED renders video → Saved to Google Drive + logged to Sheets\n```\n\n### Pipeline Breakdown\n\n| Step | Tool | What Happens |\n|------|------|--------------|\n| 1. Script Generation | Claude Sonnet 4 | Creates hook, script (30-45 sec), caption, and image prompt based on your topic and intention |\n| 2. Avatar Generation | OpenAI gpt-image-1 | Generates photorealistic portrait image (1024×1536) |\n| 3. Voiceover | OpenAI TTS-1-HD | Converts script to natural speech (Nova voice) |\n| 4. Video Rendering | VEED Fabric 1.0 | Lip-syncs avatar to audio, creates final video |\n| 5. Storage | Google Drive | Uploads final MP4 |\n| 6. Logging | Google Sheets | Records all metadata (script, caption, URLs, timestamps) |\n\n---\n\n## Required Connections\n\n### API Keys (entered in Configuration node)\n\n| Service | Key Type | Where to Get |\n|---------|----------|--------------|\n| **Anthropic** | API Key | https://console.anthropic.com/settings/keys |\n| **OpenAI** | API Key | https://platform.openai.com/api-keys |\n\n&gt; ⚠️ **OpenAI Note**: `gpt-image-1` requires organization verification. Go to https://platform.openai.com/settings/organization/general to verify.\n\n### n8n Credentials (connect in n8n)\n\n| Node | Credential Type | Purpose |\n|------|-----------------|---------|\n| **�� Generate Video (VEED)** | FAL.ai API | VEED video rendering |\n| **�� Upload to Drive** | Google Drive OAuth2 | Store final videos |\n| **�� Log to Sheets** | Google Sheets OAuth2 | Track all generated content |\n\n---\n\n## Configuration Options\n\nEdit the **⚙️ Workflow Configuration** node to customize. The configuration uses a JSON format:\n\n```json\n{\n  \"topic\": \"AI video creation tools\",\n  \"intention\": \"informative\",\n  \"brand_name\": \"YOUR_BRAND_NAME\",\n  \"target_audience\": \"content creators and marketers\",\n  \"trending_hashtags\": \"#AIvideo #ContentCreation #VideoMarketing #AItools #TikTokTips\",\n  \"num_videos\": 1,\n  \"anthropic_api_key\": \"YOUR_ANTHROPIC_API_KEY\",\n  \"openai_api_key\": \"YOUR_OPENAI_API_KEY\",\n  \"video_resolution\": \"720p\",\n  \"video_aspect_ratio\": \"9:16\",\n  \"custom_avatar_description\": \"\",\n  \"custom_script\": \"\"\n}\n```\n\n### Configuration Fields Explained\n\n| Field | Required | Description |\n|-------|----------|-------------|\n| `topic` | ✅ | The subject of your video (e.g., \"AI productivity tools\") |\n| `intention` | ✅ | Content style: `informative`, `lead_generation`, or `disruption` |\n| `brand_name` | ✅ | Your brand/product name to mention |\n| `target_audience` | ✅ | Who you're creating content for |\n| `trending_hashtags` | ✅ | Hashtags to include in the caption |\n| `num_videos` | ✅ | How many videos to generate (1-5 recommended) |\n| `anthropic_api_key` | ✅ | Your Anthropic API key |\n| `openai_api_key` | ✅ | Your OpenAI API key |\n| `video_resolution` | ✅ | Video quality: `720p` or `1080p` |\n| `video_aspect_ratio` | ✅ | Aspect ratio: `9:16` (vertical) or `16:9` (horizontal) |\n| `custom_avatar_description` | ❌ | Optional: Describe your avatar (leave empty for AI-generated) |\n| `custom_script` | ❌ | Optional: Your own script (leave empty for AI-generated) |\n\n### Intention Types\n\n| Intention | Content Style | Best For |\n|-----------|---------------|----------|\n| `informative` | Educational, value-driven, builds trust | Thought leadership, tutorials |\n| `lead_generation` | Creates curiosity, soft CTA | Product awareness, funnels |\n| `disruption` | Bold, provocative, scroll-stopping | Viral potential, brand awareness |\n\n---\n\n## Custom Avatar & Script Options\n\nThe workflow supports flexible content generation - you can let Claude generate everything, or provide your own inputs.\n\n### Custom Avatar Description\n\nLeave `custom_avatar_description` empty to let Claude decide, or provide your own:\n\n```json\n\"custom_avatar_description\": \"a female influencer in her 30s, with a coworking space in the background, attractive but charismatic\"\n```\n\n**Examples:**\n- `\"a woman in her 20s with gym clothes\"`\n- `\"a bearded man in his 30s wearing a hoodie\"`\n- `\"a professional woman with glasses in business casual\"`\n\n### Custom Script\n\nLeave `custom_script` empty to let Claude write it, or provide your own:\n\n```json\n\"custom_script\": \"This is my custom script. VEED is a great platform for creating videos like this. You can try it too!\"\n```\n\n**Guidelines for custom scripts:**\n- Keep it 30-45 seconds when read aloud\n- Maximum ~450 characters\n- Avoid special characters for TTS compatibility\n- Write naturally, as if speaking\n\n### Behavior Matrix\n\n| custom_avatar_description | custom_script | What Claude Generates |\n|---------------------------|---------------|----------------------|\n| Empty | Empty | Avatar + Script + Caption |\n| Provided | Empty | Script + Caption |\n| Empty | Provided | Avatar + Caption |\n| Provided | Provided | Caption only |\n\n---\n\n## Content Angles (auto-rotated)\n\nWhen generating multiple videos, the workflow automatically varies the approach:\n\n| # | Angle | Hook Style |\n|---|-------|------------|\n| 1 | Problem-solution | Opens with a question |\n| 2 | Myth-busting | Opens with controversial statement |\n| 3 | Quick-tip | Opens with a number/statistic |\n| 4 | Before-after | Opens with transformation |\n| 5 | Trend-commentary | Opens with news/timely angle |\n\n---\n\n## Output\n\n### Per Video Generated\n\n| Asset | Format | Location |\n|-------|--------|----------|\n| Final Video | MP4 (720p, 9:16) | Google Drive folder |\n| Avatar Image | PNG (1024×1536) | tmpfiles.org (temporary) |\n| Voiceover | MP3 | tmpfiles.org (temporary) |\n| Metadata | Row entry | Google Sheets |\n\n### Google Sheets Columns\n\n| Column | Description |\n|--------|-------------|\n| topic | Video topic |\n| intention | Content intention used |\n| brand_name | Brand mentioned |\n| content_theme | 2-3 word theme summary |\n| script_audio | Full voiceover script |\n| script_image | Image generation prompt |\n| caption | Ready-to-post TikTok caption with hashtags |\n| image_url | Temporary avatar image URL |\n| audio_url | Temporary audio URL |\n| video_url | Google Drive link to final video |\n| status | done/error |\n| created_at | Timestamp |\n\n---\n\n## Estimated Costs Per Video\n\n| Service | Usage | Approximate Cost |\n|---------|-------|------------------|\n| Claude Sonnet 4 | ~2K tokens | ~$0.01 |\n| OpenAI gpt-image-1 | 1 image (1024×1536) | ~$0.04-0.08 |\n| OpenAI TTS-1-HD | ~450 characters | ~$0.01 |\n| VEED/FAL.ai | 1 video render | ~$0.10-0.20 |\n| **Total** | | **~$0.15-0.30 per video** |\n\n&gt; Costs vary based on script length and current API pricing.\n\n---\n\n## Setup Checklist\n\n### Step 1: Import Workflow\n- [ ] Import `generate-social-videos-with-ai-avatars-using-veed-and-claude.json` into n8n\n\n### Step 2: Configure API Keys\n- [ ] Open the **⚙️ Workflow Configuration** node\n- [ ] Replace `YOUR_ANTHROPIC_API_KEY` with your actual Anthropic API key\n- [ ] Replace `YOUR_OPENAI_API_KEY` with your actual OpenAI API key\n- [ ] Verify your OpenAI organization at https://platform.openai.com/settings/organization/general (required for gpt-image-1)\n\n### Step 3: Connect n8n Credentials\n- [ ] Click on **�� Generate Video (VEED)** node → Add FAL.ai credential\n- [ ] Click on **�� Upload to Drive** node → Add Google Drive OAuth2 credential\n- [ ] Click on **�� Log to Sheets** node → Add Google Sheets OAuth2 credential\n\n### Step 4: Configure Storage\n- [ ] Update the **�� Upload to Drive** node with your Google Drive folder URL\n- [ ] Update the **�� Log to Sheets** node with your Google Sheets URL\n- [ ] Create column headers in your Google Sheet: `topic`, `intention`, `brand_name`, `content_theme`, `script_audio`, `script_image`, `caption`, `image_url`, `audio_url`, `video_url`, `status`, `created_at`\n\n### Step 5: Customize Content\n- [ ] Update `topic`, `brand_name`, `target_audience`, and `trending_hashtags`\n- [ ] Optionally add `custom_avatar_description` and/or `custom_script`\n\n### Step 6: Test\n- [ ] Set `num_videos: 1` for initial testing\n- [ ] Execute the workflow\n- [ ] Check Google Drive for the output video\n- [ ] Verify metadata was logged to Google Sheets\n\n---\n\n## MCP Integration (Optional)\n\nThis workflow can also be exposed to Claude Desktop via n8n's Model Context Protocol (MCP) integration, allowing you to generate videos through natural language prompts.\n\n### To enable MCP:\n\n1. Add a **Webhook Trigger** node to the workflow (in addition to the Manual Trigger)\n2. Connect it to the same **⚙️ Workflow Configuration** node\n3. Go to **Settings** → **Instance-level MCP** → Enable the workflow\n4. Configure Claude Desktop with your n8n MCP server URL\n\n### Claude Desktop Configuration (Windows):\n\n```json\n{\n  \"mcpServers\": {\n    \"n8n-mcp\": {\n      \"command\": \"supergateway\",\n      \"args\": [\n        \"--streamableHttp\",\n        \"https://YOUR_N8N_INSTANCE.app.n8n.cloud/mcp-server/http\",\n        \"--header\",\n        \"authorization:Bearer YOUR_MCP_ACCESS_TOKEN\"\n      ]\n    }\n  }\n}\n```\n\n&gt; **Note**: Install `supergateway` globally first: `npm install -g supergateway`\n\n---\n\n## Limitations & Notes\n\n### Technical Limitations\n\n- **tmpfiles.org**: Temporary file URLs expire after ~1 hour. Final videos are safe in Google Drive.\n- **VEED processing**: Takes 2-5 minutes per video depending on length.\n- **n8n Cloud network**: Some external domains are blocked; workflow uses base64 for images to avoid this.\n\n### Content Considerations\n\n- Scripts are optimized for 30-45 seconds (TTS-friendly)\n- Avatar images are AI-generated (not real people)\n- Captions include hashtags automatically\n- Each video in a batch gets a different content angle\n\n### Best Practices\n\n1. **Start small**: Test with 1 video before scaling to 5\n2. **Review scripts**: Claude generates good content but review before posting\n3. **Monitor costs**: Check API usage dashboards weekly\n4. **Backup sheets**: The Google Sheet serves as your content database\n\n---\n\n## Troubleshooting\n\n| Issue | Solution |\n|-------|----------|\n| \"Organization must be verified\" | Verify at platform.openai.com/settings/organization/general |\n| VEED authentication error | Re-add FAL.ai credential to VEED node |\n| Google Drive \"no binary field\" | Ensure Download Video outputs to field named `data` |\n| JSON parse error from Claude | Workflow has fallback content; check Claude node output |\n| Image URL blocked | Workflow uses base64 to avoid this; ensure gpt-image-1 model |\n| MCP \"Server disconnected\" (Windows) | Install supergateway globally: `npm install -g supergateway` |\n| MCP path error on Windows | Use `supergateway` directly instead of `npx` |\n\n---\n\n## Version History\n\n| Version | Date | Changes |\n|---------|------|---------|\n| 2.0 | Jan 2026 | Added custom avatar/script options, MCP integration support, improved configuration |\n| 1.0 | Jan 2026 | Initial release with portrait mode, gpt-image-1, native VEED node |\n\n---\n\n## Credits\n\nBuilt with:\n- **n8n** - Workflow automation\n- **Anthropic Claude** - Script generation\n- **OpenAI** - Image & audio generation\n- **VEED Fabric** - AI video rendering\n- **Google Workspace** - Storage & logging","workflow":{"id":"m57fyIGOHcVm_DzcOJso9","meta":{"instanceId":"dad5fcc32113ba8bb80eb1361380849427c50ebb586d233d41f3f7c26f32ab71","templateCredsSetupCompleted":true},"name":"Generate social videos with AI avatars using VEED and Claude","tags":[],"nodes":[{"id":"faf9466b-1b0c-443f-be17-627379ef2ac1","name":"When clicking 'Execute workflow'","type":"n8n-nodes-base.manualTrigger","position":[2480,1168],"parameters":{},"typeVersion":1},{"id":"826715fd-5123-4c78-be23-e70a21d4536e","name":"⚙️ Workflow Configuration","type":"n8n-nodes-base.set","position":[2704,1168],"parameters":{"mode":"raw","options":{},"jsonOutput":"{\n  \"topic\": \"AI video creation tools\",\n  \"intention\": \"informative\",\n  \"brand_name\": \"YOUR_BRAND_NAME\",\n  \"target_audience\": \"content creators and marketers\",\n  \"trending_hashtags\": \"#AIvideo #ContentCreation #VideoMarketing #AItools #TikTokTips\",\n  \"num_videos\": 1,\n  \"anthropic_api_key\": \"YOUR_ANTHROPIC_API_KEY\",\n  \"openai_api_key\": \"YOUR_OPENAI_API_KEY\",\n  \"video_resolution\": \"720p\",\n  \"video_aspect_ratio\": \"9:16\",\n  \"custom_avatar_description\": \"\",\n  \"custom_script\": \"\"\n}"},"typeVersion":3.4},{"id":"43174c93-3ec4-4d80-94da-5029bc1fe205","name":"📋 Generate Video Tasks","type":"n8n-nodes-base.code","position":[2944,1168],"parameters":{"jsCode":"const config = $input.first().json;\nconst numVideos = config.num_videos || 1;\n\n// Generate array of video tasks with unique angles\nconst videoAngles = [\n  { angle: \"problem-solution\", hook_style: \"question\" },\n  { angle: \"myth-busting\", hook_style: \"controversial\" },\n  { angle: \"quick-tip\", hook_style: \"number\" },\n  { angle: \"before-after\", hook_style: \"transformation\" },\n  { angle: \"trend-commentary\", hook_style: \"news\" }\n];\n\nconst tasks = [];\nfor (let i = 0; i < numVideos; i++) {\n  tasks.push({\n    json: {\n      ...config,\n      video_index: i + 1,\n      content_angle: videoAngles[i % videoAngles.length].angle,\n      hook_style: videoAngles[i % videoAngles.length].hook_style\n    }\n  });\n}\n\nreturn tasks;"},"typeVersion":2},{"id":"1cfd2f7c-d245-4710-a599-4b264dec6c65","name":"🔄 Loop Through Videos","type":"n8n-nodes-base.splitInBatches","position":[3184,1168],"parameters":{"options":{}},"typeVersion":3},{"id":"c98a35a7-2aff-49b7-9829-1a1152c38891","name":"🧠 Build Claude Prompt","type":"n8n-nodes-base.code","position":[3408,1280],"parameters":{"jsCode":"const config = $input.first().json;\n\n// Check if user provided custom inputs\nconst hasCustomAvatar = config.custom_avatar_description && config.custom_avatar_description.trim() !== '';\nconst hasCustomScript = config.custom_script && config.custom_script.trim() !== '';\n\n// Build the prompt for Claude\nconst intentionGuides = {\n  \"informative\": \"Focus on educating the viewer. Provide genuine value and actionable insights. Build trust through expertise.\",\n  \"lead_generation\": \"Create curiosity and desire. Include a soft call-to-action. Make viewers want to learn more about the tool/service.\",\n  \"disruption\": \"Challenge conventional thinking. Be bold and provocative. Make viewers stop scrolling and pay attention.\"\n};\n\nconst hookStyles = {\n  \"question\": \"Start with a thought-provoking question that challenges assumptions\",\n  \"controversial\": \"Start with a bold, slightly controversial statement that makes people want to hear more\",\n  \"number\": \"Start with a specific number or statistic that grabs attention\",\n  \"transformation\": \"Start by describing a transformation or before/after scenario\",\n  \"news\": \"Start with a 'breaking' or trending angle that feels timely\"\n};\n\n// Build dynamic prompt based on what's needed\nlet taskInstructions = '';\nlet responseFormat = '';\n\nif (!hasCustomAvatar && !hasCustomScript) {\n  // Generate both\n  taskInstructions = `### 1. IMAGE PROMPT (for AI avatar):\nCreate a detailed prompt for generating a photorealistic human avatar in PORTRAIT orientation. Consider:\n- Professional but approachable appearance\n- Age 25-40, appropriate for tech content\n- Gender: choose what fits the content best\n- Head and shoulders framing, looking at camera\n- Neutral or vibrant background (NOT white - use colors, gradients, or contextual settings)\n- Good lighting, high quality\n- Clothing that matches the content theme and target audience\n- IMPORTANT: Frame for vertical/portrait composition\n\n### 2. VIDEO SCRIPT (voiceover, 30-45 seconds max):\nCreate an engaging script that:\n- OPENS with a powerful hook using the specified hook style\n- Delivers value related to the topic\n- Maintains conversational, TikTok-native tone\n- Is optimized for text-to-speech (natural phrasing, no special characters)\n- Maximum 450 characters\n- Ends with engagement driver (question, CTA, or thought-provoker)\n- Subtly incorporates the brand if relevant (not salesy)\n\n### 3. CAPTION:\nWrite a TikTok caption (under 150 chars) + include the trending hashtags.`;\n  responseFormat = '{\"image_prompt\": \"detailed image prompt here\", \"audio_script\": \"video script here\", \"caption\": \"caption with hashtags here\", \"avatar_gender\": \"male or female\", \"content_theme\": \"2-3 word theme\"}';\n\n} else if (hasCustomAvatar && !hasCustomScript) {\n  // Only generate script (avatar provided)\n  taskInstructions = `### 1. VIDEO SCRIPT (voiceover, 30-45 seconds max):\nCreate an engaging script that:\n- OPENS with a powerful hook using the specified hook style\n- Delivers value related to the topic\n- Maintains conversational, TikTok-native tone\n- Is optimized for text-to-speech (natural phrasing, no special characters)\n- Maximum 450 characters\n- Ends with engagement driver (question, CTA, or thought-provoker)\n- Subtly incorporates the brand if relevant (not salesy)\n\n### 2. CAPTION:\nWrite a TikTok caption (under 150 chars) + include the trending hashtags.`;\n  responseFormat = '{\"audio_script\": \"video script here\", \"caption\": \"caption with hashtags here\", \"content_theme\": \"2-3 word theme\"}';\n\n} else if (!hasCustomAvatar && hasCustomScript) {\n  // Only generate avatar (script provided)\n  taskInstructions = `### 1. IMAGE PROMPT (for AI avatar):\nCreate a detailed prompt for generating a photorealistic human avatar in PORTRAIT orientation. Consider:\n- Professional but approachable appearance\n- Age 25-40, appropriate for tech content\n- Gender: choose what fits the content best\n- Head and shoulders framing, looking at camera\n- Neutral or vibrant background (NOT white - use colors, gradients, or contextual settings)\n- Good lighting, high quality\n- Clothing that matches the content theme and target audience\n- IMPORTANT: Frame for vertical/portrait composition\n\n### 2. CAPTION:\nWrite a TikTok caption (under 150 chars) + include the trending hashtags.`;\n  responseFormat = '{\"image_prompt\": \"detailed image prompt here\", \"caption\": \"caption with hashtags here\", \"avatar_gender\": \"male or female\", \"content_theme\": \"2-3 word theme\"}';\n\n} else {\n  // Both provided - only generate caption\n  taskInstructions = `### 1. CAPTION:\nWrite a TikTok caption (under 150 chars) + include the trending hashtags.`;\n  responseFormat = '{\"caption\": \"caption with hashtags here\", \"content_theme\": \"2-3 word theme\"}';\n}\n\nconst prompt = `You are an expert short-form video content strategist specializing in tech and AI content for TikTok and social media.\n\n## CONTENT BRIEF:\n- Topic: ${config.topic}\n- Brand/Tool: ${config.brand_name}\n- Target Audience: ${config.target_audience}\n- Content Intention: ${config.intention.toUpperCase()}\n- Content Angle: ${config.content_angle}\n- Trending Hashtags to incorporate: ${config.trending_hashtags}\n\n## INTENTION GUIDE:\n${intentionGuides[config.intention] || intentionGuides.informative}\n\n## HOOK STYLE:\n${hookStyles[config.hook_style] || hookStyles.question}\n\n## YOUR TASK:\nCreate content for a 30-45 second talking-head video in VERTICAL FORMAT (9:16 for TikTok/Reels). Generate:\n\n${taskInstructions}\n\nRespond ONLY with valid JSON in this exact format (no markdown, no code blocks):\n${responseFormat}`;\n\nreturn [{\n  json: {\n    ...config,\n    claude_prompt: prompt,\n    has_custom_avatar: hasCustomAvatar,\n    has_custom_script: hasCustomScript\n  }\n}];"},"typeVersion":2},{"id":"2cda4f21-e3bc-4ed1-911d-2917fb0fca8e","name":"🤖 Claude: Generate Content","type":"n8n-nodes-base.httpRequest","position":[3648,1280],"parameters":{"url":"https://api.anthropic.com/v1/messages","method":"POST","options":{},"jsonBody":"={\n  \"model\": \"claude-sonnet-4-20250514\",\n  \"max_tokens\": 2000,\n  \"messages\": [\n    {\n      \"role\": \"user\",\n      \"content\": {{ JSON.stringify($json.claude_prompt) }}\n    }\n  ]\n}","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"x-api-key","value":"={{ $json.anthropic_api_key }}"},{"name":"anthropic-version","value":"2023-06-01"},{"name":"Content-Type","value":"application/json"}]}},"typeVersion":4.3},{"id":"cb6b083f-2fe9-47b3-bc19-4a03c50bc9fb","name":"📋 Parse Claude Response","type":"n8n-nodes-base.code","position":[3888,1280],"parameters":{"jsCode":"const item = $input.first();\nconst claudeResponse = item.json;\nconst config = $('🧠 Build Claude Prompt').item.json;\n\n// Extract the text content from Claude's response\nlet responseText = '';\nif (claudeResponse.content && claudeResponse.content[0]) {\n  responseText = claudeResponse.content[0].text;\n}\n\n// Parse the JSON from Claude's response\nlet parsed = {};\ntry {\n  let cleanText = responseText.trim();\n  // Remove markdown code blocks if present\n  if (cleanText.startsWith('```json')) {\n    cleanText = cleanText.replace(/```json\\n?/, '').replace(/\\n?```$/, '');\n  } else if (cleanText.startsWith('```')) {\n    cleanText = cleanText.replace(/```\\n?/, '').replace(/\\n?```$/, '');\n  }\n  parsed = JSON.parse(cleanText.trim());\n} catch (e) {\n  // Fallback content\n  parsed = {\n    image_prompt: \"\",\n    audio_script: \"\",\n    caption: \"Check out this AI video! #AIvideo #ContentCreation #VideoMarketing\",\n    avatar_gender: \"female\",\n    content_theme: \"AI video\"\n  };\n}\n\n// Build the final image prompt\nlet finalImagePrompt = '';\nif (config.has_custom_avatar && config.custom_avatar_description) {\n  // Use custom avatar description and enhance it for image generation\n  finalImagePrompt = `Photorealistic portrait photo of ${config.custom_avatar_description}. Head and shoulders framing, looking directly at camera, natural expression, high quality, portrait orientation, vibrant or contextual background (not white), good lighting, 4K quality.`;\n} else if (parsed.image_prompt) {\n  finalImagePrompt = parsed.image_prompt;\n} else {\n  finalImagePrompt = \"Photorealistic portrait photo of a friendly content creator in their late 20s, casual stylish clothing, head and shoulders framing, looking directly at camera, confident smile, colorful gradient background, good lighting, portrait orientation, high quality\";\n}\n\n// Build the final script\nlet finalScript = '';\nif (config.has_custom_script && config.custom_script) {\n  finalScript = config.custom_script.trim();\n} else if (parsed.audio_script) {\n  finalScript = parsed.audio_script;\n} else {\n  finalScript = \"What if I told you that creating professional videos no longer requires expensive equipment or editing skills? AI video tools are completely changing the game for content creators. In just minutes, you can go from an idea to a polished video ready for social media. The question is: are you ready to level up your content?\";\n}\n\nreturn [{\n  json: {\n    topic: config.topic,\n    intention: config.intention,\n    brand_name: config.brand_name,\n    video_index: config.video_index,\n    script_image: finalImagePrompt,\n    script_audio: finalScript,\n    caption: parsed.caption || \"Check out this AI-generated video! #AIvideo #ContentCreation\",\n    avatar_gender: parsed.avatar_gender || \"female\",\n    content_theme: parsed.content_theme || \"AI video\",\n    openai_api_key: config.openai_api_key,\n    video_resolution: config.video_resolution,\n    video_aspect_ratio: config.video_aspect_ratio,\n    used_custom_avatar: config.has_custom_avatar,\n    used_custom_script: config.has_custom_script\n  }\n}];"},"typeVersion":2},{"id":"7aa724fb-736f-46cf-ba4a-e4e40f98dc3e","name":"🎨 Generate Avatar (OpenAI)","type":"n8n-nodes-base.httpRequest","position":[4128,1280],"parameters":{"url":"https://api.openai.com/v1/images/generations","method":"POST","options":{},"jsonBody":"={\n  \"model\": \"gpt-image-1\",\n  \"prompt\": {{ JSON.stringify($json.script_image) }},\n  \"n\": 1,\n  \"size\": \"1024x1536\",\n  \"quality\": \"high\"\n}","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"Authorization","value":"=Bearer {{ $json.openai_api_key }}"},{"name":"Content-Type","value":"application/json"}]}},"typeVersion":4.3},{"id":"399e2a91-be1a-4e90-93d1-9b5f059cc955","name":"📸 Extract Image Data","type":"n8n-nodes-base.code","position":[4368,1280],"parameters":{"jsCode":"const item = $input.first();\nconst imageResponse = item.json;\nconst previousData = $('📋 Parse Claude Response').item.json;\n\nlet imageBase64 = '';\n\n// gpt-image-1 returns b64_json by default\nif (imageResponse.data && imageResponse.data[0] && imageResponse.data[0].b64_json) {\n  imageBase64 = imageResponse.data[0].b64_json;\n}\n\nif (!imageBase64) {\n  throw new Error('No base64 image data received from OpenAI. Response: ' + JSON.stringify(imageResponse));\n}\n\nreturn [{\n  json: {\n    ...previousData\n  },\n  binary: {\n    image_data: {\n      data: imageBase64,\n      mimeType: 'image/png',\n      fileName: 'avatar.png'\n    }\n  }\n}];"},"typeVersion":2},{"id":"d74ba138-544f-497d-9681-ece8812280bb","name":"☁️ Upload Image","type":"n8n-nodes-base.httpRequest","position":[4592,1280],"parameters":{"url":"https://tmpfiles.org/api/v1/upload","method":"POST","options":{"response":{"response":{"responseFormat":"json"}}},"sendBody":true,"contentType":"multipart-form-data","bodyParameters":{"parameters":[{"name":"file","parameterType":"formBinaryData","inputDataFieldName":"image_data"}]}},"typeVersion":4.3},{"id":"0ab57308-8206-402b-b778-e705ce7127dc","name":"💾 Store Image URL","type":"n8n-nodes-base.code","position":[4816,1280],"parameters":{"jsCode":"const uploadResponse = $input.first().json;\nconst previousData = $('📸 Extract Image Data').item.json;\n\n// Convert tmpfiles URL to direct download URL\nconst publicImageUrl = uploadResponse.data.url.replace(\n  /^http:\\/\\/tmpfiles\\.org\\/(\\d+)\\/(.*)$/i,\n  'https://tmpfiles.org/dl/$1/$2'\n);\n\nreturn [{\n  json: {\n    ...previousData,\n    public_image_url: publicImageUrl\n  }\n}];"},"typeVersion":2},{"id":"fdb0a9e7-71a9-4906-a74a-0f7ec213ef1a","name":"🔊 Generate Audio (TTS)","type":"n8n-nodes-base.httpRequest","position":[5040,1280],"parameters":{"url":"https://api.openai.com/v1/audio/speech","method":"POST","options":{"response":{"response":{"responseFormat":"file","outputPropertyName":"audio"}}},"jsonBody":"={\n  \"model\": \"tts-1-hd\",\n  \"input\": {{ JSON.stringify($json.script_audio) }},\n  \"voice\": \"nova\",\n  \"response_format\": \"mp3\"\n}","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"Authorization","value":"=Bearer {{ $json.openai_api_key }}"},{"name":"Content-Type","value":"application/json"}]}},"typeVersion":4.3},{"id":"cb24f84a-6b96-4fc1-8e82-634d390ea2ba","name":"🎵 Convert Audio","type":"n8n-nodes-base.code","position":[5264,1280],"parameters":{"jsCode":"return items.map(item => {\n  const b = item.binary?.audio;\n  if (!b) return item;\n\n  item.binary.audio_mp3 = {\n    ...b,\n    fileName: 'voiceover.mp3',\n    mimeType: 'audio/mpeg'\n  };\n\n  return item;\n});"},"typeVersion":2},{"id":"46b78438-86cb-442c-8180-80b1d86876ca","name":"☁️ Upload Audio","type":"n8n-nodes-base.httpRequest","position":[5488,1280],"parameters":{"url":"https://tmpfiles.org/api/v1/upload","method":"POST","options":{"response":{"response":{"responseFormat":"json"}}},"sendBody":true,"contentType":"multipart-form-data","bodyParameters":{"parameters":[{"name":"file","parameterType":"formBinaryData","inputDataFieldName":"audio_mp3"}]}},"typeVersion":4.3},{"id":"ee599f88-8246-446e-95f0-6223c29f168b","name":"📦 Prepare VEED Request","type":"n8n-nodes-base.code","position":[5712,1280],"parameters":{"jsCode":"const audioUpload = $input.first().json;\nconst previousData = $('💾 Store Image URL').item.json;\n\n// Convert tmpfiles URL to direct download URL\nconst publicAudioUrl = audioUpload.data.url.replace(\n  /^http:\\/\\/tmpfiles\\.org\\/(\\d+)\\/(.*)$/i,\n  'https://tmpfiles.org/dl/$1/$2'\n);\n\nreturn [{\n  json: {\n    image_url: previousData.public_image_url,\n    audio_url: publicAudioUrl,\n    resolution: previousData.video_resolution || '720p',\n    aspect_ratio: previousData.video_aspect_ratio || '9:16',\n    topic: previousData.topic,\n    intention: previousData.intention,\n    brand_name: previousData.brand_name,\n    video_index: previousData.video_index,\n    script_audio: previousData.script_audio,\n    script_image: previousData.script_image,\n    caption: previousData.caption,\n    content_theme: previousData.content_theme\n  }\n}];"},"typeVersion":2},{"id":"74053fe2-b750-46d2-8b41-378917955e3f","name":"🎬 Generate Video (VEED)","type":"n8n-nodes-veed.veed","position":[5952,1280],"parameters":{"options":{},"audioUrl":"={{ $json.audio_url }}","imageUrl":"={{ $json.image_url }}","resolution":"={{ $json.resolution }}","aspectRatio":"={{ $json.aspect_ratio }}"},"typeVersion":1},{"id":"792788e1-6080-4e15-8a15-dbdaa87ebc78","name":"📁 Prepare Upload","type":"n8n-nodes-base.code","position":[6176,1280],"parameters":{"jsCode":"const veedResult = $input.first().json;\nconst prepData = $('📦 Prepare VEED Request').item.json;\n\nconst now = new Date();\nconst monthNames = ['January', 'February', 'March', 'April', 'May', 'June',\n  'July', 'August', 'September', 'October', 'November', 'December'];\nconst monthFolder = `${monthNames[now.getMonth()]} ${now.getFullYear()}`;\nconst dateStr = now.toISOString().split('T')[0];\nconst fileName = `${dateStr}-${prepData.topic.replace(/\\s+/g, '_')}_${prepData.video_index}_${Date.now()}.mp4`;\n\n// Get video URL from VEED response - check various possible response structures\nlet videoUrl = '';\nif (veedResult.video && veedResult.video.url) {\n  videoUrl = veedResult.video.url;\n} else if (veedResult.output && veedResult.output.video_url) {\n  videoUrl = veedResult.output.video_url;\n} else if (veedResult.videoUrl) {\n  videoUrl = veedResult.videoUrl;\n} else if (veedResult.url) {\n  videoUrl = veedResult.url;\n}\n\nreturn [{\n  json: {\n    video_url: videoUrl,\n    file_name: fileName,\n    month_folder: monthFolder,\n    topic: prepData.topic,\n    intention: prepData.intention,\n    brand_name: prepData.brand_name,\n    video_index: prepData.video_index,\n    script_audio: prepData.script_audio,\n    script_image: prepData.script_image,\n    caption: prepData.caption,\n    content_theme: prepData.content_theme,\n    image_url: prepData.image_url,\n    audio_url: prepData.audio_url,\n    status: videoUrl ? 'done' : 'error',\n    veed_raw_response: veedResult\n  }\n}];"},"typeVersion":2},{"id":"0d5813ff-dfd6-4745-b8d2-b3cf85a99356","name":"⬇️ Download Video","type":"n8n-nodes-base.httpRequest","position":[6416,1280],"parameters":{"url":"={{ $json.video_url }}","options":{"response":{"response":{"responseFormat":"file"}}}},"typeVersion":4.3},{"id":"b68991c0-835b-4466-a1c2-a429437debf9","name":"📤 Upload to Drive","type":"n8n-nodes-base.googleDrive","position":[6640,1280],"parameters":{"name":"={{ $('📁 Prepare Upload').item.json.file_name }}","driveId":{"__rl":true,"mode":"list","value":"My Drive","cachedResultUrl":"https://drive.google.com/drive/my-drive","cachedResultName":"My Drive"},"options":{},"folderId":{"__rl":true,"mode":"url","value":"YOUR_GOOGLE_DRIVE_FOLDER_URL"}},"typeVersion":3},{"id":"6bd0a1e7-9d33-4ffe-b5a9-908f5b3ec381","name":"✅ Prepare Final Data","type":"n8n-nodes-base.code","position":[6864,1280],"parameters":{"jsCode":"const driveResult = $input.first().json;\nconst prepData = $('📁 Prepare Upload').item.json;\n\nconst driveFileUrl = driveResult.webViewLink || \n  `https://drive.google.com/file/d/${driveResult.id}/view`;\n\nreturn [{\n  json: {\n    topic: prepData.topic,\n    intention: prepData.intention,\n    brand_name: prepData.brand_name,\n    content_theme: prepData.content_theme,\n    script_audio: prepData.script_audio,\n    script_image: prepData.script_image,\n    caption: prepData.caption,\n    image_url: prepData.image_url,\n    audio_url: prepData.audio_url,\n    video_url: driveFileUrl,\n    status: 'done',\n    created_at: new Date().toISOString()\n  }\n}];"},"typeVersion":2},{"id":"c8b3a865-4aa7-4ae8-9bdb-667a31a19f13","name":"📝 Log to Sheets","type":"n8n-nodes-base.googleSheets","position":[7088,1280],"parameters":{"columns":{"value":{},"schema":[],"mappingMode":"autoMapInputData","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"name","value":"Sheet1"},"documentId":{"__rl":true,"mode":"url","value":"YOUR_GOOGLE_SHEETS_URL"}},"typeVersion":4.7},{"id":"1a7d44bb-12a9-4815-ba54-d040642482c2","name":"🔄 Continue Loop1","type":"n8n-nodes-base.noOp","position":[7312,1280],"parameters":{},"typeVersion":1},{"id":"5fef2c70-7dc3-417e-9fb7-2e3e1b4f15b1","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[1904,896],"parameters":{"width":500,"height":784,"content":"# Generate social videos with AI avatars using VEED and Claude\n\n## How it works\nThis workflow automates the creation of short-form social videos featuring AI-generated talking-head avatars.\n\n1. You configure your topic, content intention (informative, lead generation, or disruption), brand name, and target audience\n2. Claude AI generates a video script optimized for TikTok/Reels, an image prompt for the avatar, and a caption with hashtags\n3. OpenAI's gpt-image-1 creates a photorealistic portrait avatar based on the prompt\n4. OpenAI's TTS generates natural voiceover audio from the script\n5. The avatar image and audio are uploaded to temporary storage\n6. VEED renders a lip-synced talking-head video combining the avatar and audio\n7. The final video is downloaded and uploaded to your Google Drive\n8. Video metadata and links are logged to Google Sheets for tracking\n\n## Setup steps\n1. Add your Anthropic API key and OpenAI API key in the Configuration node\n2. Connect your VEED/FAL.ai credential to the VEED node\n3. Connect Google Drive and Google Sheets OAuth2 credentials\n4. Update the Drive folder URL and Sheets document URL\n5. Customize the topic, brand name, target audience, and video settings"},"typeVersion":1},{"id":"62b3a1d6-47a5-41e3-b0fa-46dcfbbf71c0","name":"Sticky Note Configuration","type":"n8n-nodes-base.stickyNote","position":[2416,1040],"parameters":{"color":7,"width":450,"height":462,"content":"### Configuration\nSet your topic, API keys, and video settings. Supports custom avatar descriptions and scripts."},"typeVersion":1},{"id":"865efaa2-ebff-48a8-9d2f-333e72efc637","name":"Sticky Note AI Content","type":"n8n-nodes-base.stickyNote","position":[2880,1040],"parameters":{"color":7,"width":1172,"height":464,"content":"### AI Content Generation\nClaude creates the script, image prompt, and social caption based on your topic and intention."},"typeVersion":1},{"id":"55973e05-0aa5-4309-a03d-6299d689ab67","name":"Sticky Note Avatar Audio","type":"n8n-nodes-base.stickyNote","position":[4064,1040],"parameters":{"color":7,"width":1568,"height":462,"content":"### Avatar & Audio\nOpenAI generates a photorealistic avatar image and converts the script to natural speech."},"typeVersion":1},{"id":"7349858c-b29c-40c9-b5cd-f271f76b74f9","name":"Sticky Note Video Rendering","type":"n8n-nodes-base.stickyNote","position":[5648,1040],"parameters":{"color":7,"width":462,"height":462,"content":"### Video Rendering\nVEED creates the final lip-synced talking-head video from your avatar and audio."},"typeVersion":1},{"id":"d63164f9-675a-4488-b4b3-de50a03abe1a","name":"Sticky Note Storage Logging","type":"n8n-nodes-base.stickyNote","position":[6128,1040],"parameters":{"color":7,"width":1364,"height":462,"content":"### Storage & Logging\nDownloads the video, uploads to Google Drive, and logs all metadata to Google Sheets."},"typeVersion":1}],"active":false,"pinData":{},"settings":{"availableInMCP":false,"executionOrder":"v1"},"versionId":"f5471b15-9e31-46fc-ae0d-c7e55fb85ee8","connections":{"🎵 Convert Audio":{"main":[[{"node":"☁️ Upload Audio","type":"main","index":0}]]},"📝 Log to Sheets":{"main":[[{"node":"🔄 Continue Loop1","type":"main","index":0}]]},"☁️ Upload Audio":{"main":[[{"node":"📦 Prepare VEED Request","type":"main","index":0}]]},"☁️ Upload Image":{"main":[[{"node":"💾 Store Image URL","type":"main","index":0}]]},"📁 Prepare Upload":{"main":[[{"node":"⬇️ Download Video","type":"main","index":0}]]},"🔄 Continue Loop1":{"main":[[{"node":"🔄 Loop Through Videos","type":"main","index":0}]]},"💾 Store Image URL":{"main":[[{"node":"🔊 Generate Audio (TTS)","type":"main","index":0}]]},"📤 Upload to Drive":{"main":[[{"node":"✅ Prepare Final Data","type":"main","index":0}]]},"⬇️ Download Video":{"main":[[{"node":"📤 Upload to Drive","type":"main","index":0}]]},"✅ Prepare Final Data":{"main":[[{"node":"📝 Log to Sheets","type":"main","index":0}]]},"📸 Extract Image Data":{"main":[[{"node":"☁️ Upload Image","type":"main","index":0}]]},"🔄 Loop Through Videos":{"main":[[],[{"node":"🧠 Build Claude Prompt","type":"main","index":0}]]},"🧠 Build Claude Prompt":{"main":[[{"node":"🤖 Claude: Generate Content","type":"main","index":0}]]},"📋 Generate Video Tasks":{"main":[[{"node":"🔄 Loop Through Videos","type":"main","index":0}]]},"📦 Prepare VEED Request":{"main":[[{"node":"🎬 Generate Video (VEED)","type":"main","index":0}]]},"🔊 Generate Audio (TTS)":{"main":[[{"node":"🎵 Convert Audio","type":"main","index":0}]]},"🎬 Generate Video (VEED)":{"main":[[{"node":"📁 Prepare Upload","type":"main","index":0}]]},"📋 Parse Claude Response":{"main":[[{"node":"🎨 Generate Avatar (OpenAI)","type":"main","index":0}]]},"⚙️ Workflow Configuration":{"main":[[{"node":"📋 Generate Video Tasks","type":"main","index":0}]]},"🎨 Generate Avatar (OpenAI)":{"main":[[{"node":"📸 Extract Image Data","type":"main","index":0}]]},"🤖 Claude: Generate Content":{"main":[[{"node":"📋 Parse Claude Response","type":"main","index":0}]]},"When clicking 'Execute workflow'":{"main":[[{"node":"⚙️ Workflow Configuration","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":28,"nodeTypes":{"n8n-nodes-base.set":{"count":1},"n8n-nodes-base.code":{"count":9},"n8n-nodes-base.noOp":{"count":1},"n8n-nodes-veed.veed":{"count":1},"n8n-nodes-base.stickyNote":{"count":6},"n8n-nodes-base.googleDrive":{"count":1},"n8n-nodes-base.httpRequest":{"count":6},"n8n-nodes-base.googleSheets":{"count":1},"n8n-nodes-base.manualTrigger":{"count":1},"n8n-nodes-base.splitInBatches":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"VEED","username":"veed","bio":"VEED is an ai video creation platform used by 75% of Fortune 500 companies. Our N8N templates help marketers and creators to generate talking videos directly within their n8n workflows — unlocking use cases across marketing automation, personalized video generation, and content creation pipelines.","verified":true,"links":["www.veed.io"],"avatar":"https://gravatar.com/avatar/0f7f1db2a9431b2d05ff987882ad3c68629aec97e576012689032baf760700ae?r=pg&d=retro&size=200"},"nodes":[{"id":18,"icon":"file:googleSheets.svg","name":"n8n-nodes-base.googleSheets","codex":{"data":{"alias":["CSV","Sheet","Spreadsheet","GS"],"resources":{"generic":[{"url":"https://n8n.io/blog/love-at-first-sight-ricardos-n8n-journey/","icon":"❤️","label":"Love at first sight: Ricardo’s n8n journey"},{"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-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/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/creating-triggers-for-n8n-workflows-using-polling/","icon":"⏲","label":"Creating triggers for n8n workflows using polling"},{"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/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"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/how-honest-burgers-use-automation-to-save-100k-per-year/","icon":"🍔","label":"How Honest Burgers Use Automation to Save $100k per year"},{"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/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-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/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.googlesheets/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Data & Storage","Productivity"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\",\"output\"]","defaults":{"name":"Google Sheets"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNS42OSAxIDUyIDE3LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0OC4yOTMgNjBIMTIuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDkgNTYuMzEyVjQuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTIuNzA3IDF6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM1LjY5IDEgNTIgMTcuMjI1SDM5LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzkuMjExIDE3LjIyNSA1MiAyMi40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTIwLjEyIDMxLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMS42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzEuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNC42OSAwIDUxIDE2LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0Ny4yOTMgNTlIMTEuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDggNTUuMzEyVjMuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTEuNzA3IDB6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM0LjY5IDAgNTEgMTYuMjI1SDM4LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzguMjExIDE2LjIyNSA1MSAyMS40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTE5LjEyIDMwLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMC42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzAuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjwvZz48L3N2Zz4="},"displayName":"Google Sheets","typeVersion":5,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":4,"name":"Productivity"}]},{"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":26,"icon":"fa:arrow-right","name":"n8n-nodes-base.noOp","codex":{"data":{"alias":["nothing"],"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/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/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/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/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.noop/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"organization\"]","defaults":{"name":"No Operation, do nothing","color":"#b0b0b0"},"iconData":{"icon":"arrow-right","type":"icon"},"displayName":"No Operation, do nothing","typeVersion":1,"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":39,"icon":"fa:sync","name":"n8n-nodes-base.splitInBatches","codex":{"data":{"alias":["Loop","Concatenate","Batch","Split","Split In Batches"],"resources":{"generic":[{"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/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"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"organization\"]","defaults":{"name":"Loop Over Items","color":"#007755"},"iconData":{"icon":"sync","type":"icon"},"displayName":"Loop Over Items (Split in Batches)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":58,"icon":"file:googleDrive.svg","name":"n8n-nodes-base.googleDrive","codex":{"data":{"resources":{"generic":[{"url":"https://n8n.io/blog/your-business-doesnt-need-you-to-operate/","icon":" 🖥️","label":"Hey founders! Your business doesn't need you to operate"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googledrive/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Data & Storage"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\"]","defaults":{"name":"Google Drive"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgODEgNzMiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0ibm9uZSI+PHBhdGggZmlsbD0iIzAwNjZkYSIgZD0ibTYuMDQ4IDYxLjI2IDMuNTI4IDYuMDk0Yy43MzMgMS4yODMgMS43ODcgMi4yOTEgMy4wMjQgMy4wMjRsMTIuNi0yMS44MUgwYTguMyA4LjMgMCAwIDAgMS4xIDQuMTI0eiIvPjxwYXRoIGZpbGw9IiMwMGFjNDciIGQ9Ik00MCAyMi45MSAyNy40IDEuMWMtMS4yMzcuNzMzLTIuMjkxIDEuNzQxLTMuMDI0IDMuMDI0TDEuMSA0NC40NDVBOC4zIDguMyAwIDAgMCAwIDQ4LjU2OGgyNS4yeiIvPjxwYXRoIGZpbGw9IiNlYTQzMzUiIGQ9Ik02Ny40IDcwLjM3OGMxLjIzNy0uNzMzIDIuMjkxLTEuNzQxIDMuMDI0LTMuMDI0bDEuNDY2LTIuNTIgNy4wMS0xMi4xNDJhOC4zIDguMyAwIDAgMCAxLjEtNC4xMjRINTQuNzk4bDUuMzYzIDEwLjUzOHoiLz48cGF0aCBmaWxsPSIjMDA4MzJkIiBkPSJNNDAgMjIuOTEgNTIuNiAxLjFDNTEuMzYzLjM2NyA0OS45NDMgMCA0OC40NzcgMEgzMS41MjRjLTEuNDY2IDAtMi44ODcuNDEyLTQuMTI0IDEuMXoiLz48cGF0aCBmaWxsPSIjMjY4NGZjIiBkPSJNNTQuNzk5IDQ4LjU2OEgyNS4ybC0xMi42IDIxLjgxYzEuMjM3LjczMyAyLjY1NyAxLjEgNC4xMjQgMS4xaDQ2LjU1MmMxLjQ2NiAwIDIuODg3LS40MTIgNC4xMjQtMS4xeiIvPjxwYXRoIGZpbGw9IiNmZmJhMDAiIGQ9Ik02Ny4yNjIgMjQuMjg0IDU1LjYyNCA0LjEyNEM1NC44OTEgMi44NDEgNTMuODM3IDEuODMzIDUyLjYgMS4xTDQwIDIyLjkxbDE0LjggMjUuNjU5aDI1LjE1NWE4LjMgOC4zIDAgMCAwLTEuMS00LjEyNHoiLz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Google Drive","typeVersion":3,"nodeCategories":[{"id":3,"name":"Data & Storage"}]},{"id":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":838,"icon":"fa:mouse-pointer","name":"n8n-nodes-base.manualTrigger","codex":{"data":{"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.manualworkflowtrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\"]","defaults":{"name":"When clicking ‘Execute workflow’","color":"#909298"},"iconData":{"icon":"mouse-pointer","type":"icon"},"displayName":"Manual Trigger","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":31,"name":"Content Creation"},{"id":51,"name":"Multimodal AI"}],"image":[]}}