{
  "id": "NIGMMSF0t7r5U6RG",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Zyntelliq post",
  "tags": [],
  "nodes": [
    {
      "id": "b2c92aa1-15a0-48dc-a38e-cf2305b196f8",
      "name": "Fetch AI News (RSS)",
      "type": "n8n-nodes-base.rssFeedRead",
      "position": [
        -1952,
        6304
      ],
      "parameters": {
        "url": "https://www.artificialintelligence-news.com/feed/",
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "81163e30-4fc1-49bf-9bd5-3bb49785c0ef",
      "name": "Extract Top Story",
      "type": "n8n-nodes-base.set",
      "position": [
        -1744,
        6304
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "title",
              "value": "={{ $json.title }}"
            },
            {
              "name": "summary",
              "value": "={{ $json.contentSnippet || $json.content || $json.summary || '' }}"
            }
          ]
        },
        "options": {},
        "keepOnlySet": true
      },
      "typeVersion": 1
    },
    {
      "id": "4eb943a3-eae6-47ed-bd76-cbef1446d5b2",
      "name": "Parse Script & Keyword",
      "type": "n8n-nodes-base.set",
      "position": [
        -1216,
        6304
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "script",
              "value": "={{ $json.text }}"
            },
            {
              "name": "keyword",
              "value": "={{ $('Extract Top Story').item.json.title.split(' ').slice(0,2).join(' ') }}"
            },
            {
              "name": "title",
              "value": "={{ $('Extract Top Story').item.json.title }}"
            }
          ]
        },
        "options": {},
        "keepOnlySet": true
      },
      "typeVersion": 1
    },
    {
      "id": "4858e595-65d2-4589-8af3-dc7e56842175",
      "name": "Merge Audio + Video URLs",
      "type": "n8n-nodes-base.code",
      "position": [
        -464,
        6304
      ],
      "parameters": {
        "jsCode": "const ttsItem = $('Voice RSS').first();\nconst pexItem = $('Pexels').first();\n\nconst videos = pexItem.json.videos || [];\nif (!videos.length) throw new Error('No Pexels videos found.');\n\nconst videoFiles = videos[0].video_files || [];\nconst portrait = videoFiles.find(f => f.width === 1080 && f.height === 1920)\n  || videoFiles.find(f => f.height > f.width)\n  || videoFiles[0];\n\nconst videoUrl = portrait.link;\nconst title = $('Parse Script & Keyword').first().json.title;\n\nreturn [{\n  json: {\n    videoUrl,\n    title: title.slice(0, 80),\n    keyword: 'artificial intelligence technology',\n    description: 'AI news in 45 seconds. Follow @Zyntelliq for daily AI updates.\\n\\n#AINews #Shorts #ArtificialIntelligence #Tech #Zyntelliq'\n  },\n  binary: {\n    audioData: ttsItem.binary.data\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "94261182-d64e-46fe-abc7-d90eea84a6f2",
      "name": "Shotstack \u2013 Start Render",
      "type": "n8n-nodes-base.httpRequest",
      "notes": "Free sandbox key from shotstack.io \u2014 200 renders/month.\nReplace YOUR_SHOTSTACK_SANDBOX_KEY.\nReturns a render ID. Next node polls until done.",
      "position": [
        -224,
        6304
      ],
      "parameters": {
        "url": "https://api.shotstack.io/edit/v1/render",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"timeline\": {\n    \"background\": \"#000000\",\n    \"tracks\": [\n      {\n        \"clips\": [{\n          \"asset\": {\n            \"type\": \"video\",\n            \"src\": \"{{ $json.videoUrl }}\",\n            \"volume\": 0\n          },\n          \"start\": 0,\n          \"length\": 60,\n          \"fit\": \"crop\"\n        }]\n      },\n      {\n        \"clips\": [{\n          \"asset\": {\n            \"type\": \"text-to-speech\",\n            \"text\": \"{{ $('Parse Script & Keyword').item.json.script.replace(/\\\"/g, '').replace(/\\n/g, ' ').slice(0,500) }}\",\n            \"voice\": \"Brian\",\n            \"language\": \"en-GB\"\n          },\n          \"start\": 0,\n          \"length\": 60\n        }]\n      }\n    ]\n  },\n  \"output\": {\n    \"format\": \"mp4\",\n    \"resolution\": \"mobile\",\n    \"aspectRatio\": \"9:16\",\n    \"fps\": 30\n  }\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "x-api-key",
              "value": "E0M9QeRYmPey5pKpjjplTYABi2jCtTvnEivK9V81"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4
    },
    {
      "id": "b0cde846-045d-4471-b602-f041e8ddc643",
      "name": "Save Render ID",
      "type": "n8n-nodes-base.set",
      "position": [
        16,
        6304
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "renderId",
              "value": "={{ $json.response.id }}"
            },
            {
              "name": "title",
              "value": "={{ $('Merge Audio + Video URLs').item.json.title }}"
            },
            {
              "name": "description",
              "value": "={{ $('Merge Audio + Video URLs').item.json.description }}"
            }
          ]
        },
        "options": {},
        "keepOnlySet": true
      },
      "typeVersion": 1
    },
    {
      "id": "f415a769-04d7-4463-b4a4-28ce0bcbe4b3",
      "name": "Wait 30s for Render",
      "type": "n8n-nodes-base.wait",
      "notes": "Shotstack typically takes 20-60s to render. Increase to 60s for longer videos.",
      "position": [
        224,
        6304
      ],
      "parameters": {
        "unit": "seconds",
        "amount": 30
      },
      "typeVersion": 1
    },
    {
      "id": "2710ff5b-d86b-440e-8579-51a50efcc78b",
      "name": "Shotstack \u2013 Get Render URL",
      "type": "n8n-nodes-base.httpRequest",
      "notes": "Polls for the final MP4 URL.\nResponse: response.url contains the download link when status is 'done'.",
      "position": [
        448,
        6304
      ],
      "parameters": {
        "url": "=https://api.shotstack.io/edit/v1/render/{{ $json.renderId }}",
        "options": {},
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "x-api-key",
              "value": "E0M9QeRYmPey5pKpjjplTYABi2jCtTvnEivK9V81"
            }
          ]
        }
      },
      "typeVersion": 4
    },
    {
      "id": "4e8a7be2-3992-42b2-a3ee-4d4f9b0bfb67",
      "name": "Prepare Upload Data",
      "type": "n8n-nodes-base.set",
      "position": [
        688,
        6304
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "mp4Url",
              "value": "={{ $json.response.url }}"
            },
            {
              "name": "title",
              "value": "={{ $('Save Render ID').item.json.title }}"
            },
            {
              "name": "description",
              "value": "={{ $('Save Render ID').item.json.description }}"
            }
          ]
        },
        "options": {},
        "keepOnlySet": true
      },
      "typeVersion": 1
    },
    {
      "id": "5eca5492-5fb3-4a67-9de1-3b634333ad58",
      "name": "Groq Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatGroq",
      "position": [
        -1520,
        6528
      ],
      "parameters": {
        "model": "llama-3.1-8b-instant",
        "options": {}
      },
      "credentials": {
        "groqApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "28d88a97-805b-4791-bea0-8781d93a1178",
      "name": "Voice RSS",
      "type": "n8n-nodes-base.httpRequest",
      "notes": "No API key needed. Returns MP3 binary.\nVoice options: Brian, Amy, Emma, Geraint, Russell, Nicole, Joey, Justin, Matthew\nMax 500 chars \u2014 script is trimmed automatically.\nOutput is binary data in $binary.data",
      "position": [
        -832,
        6224
      ],
      "parameters": {
        "url": "=https://api.voicerss.org/?key=6907a3c008b14c25960bd57c7346dc1c&hl=en-us&v=Linda&src={{ encodeURIComponent($json.script.slice(0,500)) }}&c=MP3&f=44khz_16bit_stereo",
        "options": {
          "response": {
            "response": {
              "responseFormat": "file"
            }
          }
        }
      },
      "typeVersion": 4
    },
    {
      "id": "a8617c86-8c5b-48c5-9a38-c4b2e2e8bb0a",
      "name": "Pexels",
      "type": "n8n-nodes-base.httpRequest",
      "notes": "Free API key from pixabay.com/api/docs\nReplace YOUR_PIXABAY_KEY with your actual key.\nReturns vertical video URLs.",
      "position": [
        -832,
        6464
      ],
      "parameters": {
        "url": "=https://api.pexels.com/videos/search?query={{ encodeURIComponent($json.keyword) }}&orientation=portrait&per_page=5",
        "options": {},
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "lrV7QgIMXOsvaeNa9e2Ivp1gGcqZqk33JXjQUPsRFteo7jLNiqpbDMU9"
            }
          ]
        }
      },
      "typeVersion": 4
    },
    {
      "id": "80b75ee9-f0d4-4dac-8847-1353d00e962a",
      "name": "Upload a video",
      "type": "n8n-nodes-base.youTube",
      "position": [
        1168,
        6304
      ],
      "parameters": {
        "title": "={{ $json.title }}",
        "options": {
          "description": "={{ $json.description }}",
          "privacyStatus": "public"
        },
        "resource": "video",
        "operation": "upload",
        "categoryId": "28",
        "regionCode": "IN",
        "binaryProperty": "=data"
      },
      "credentials": {
        "youTubeOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "c7049c79-ea34-4aed-b137-531163cf67d2",
      "name": "Download MP4",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        896,
        6304
      ],
      "parameters": {
        "url": "={{ $json.mp4Url }}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "file"
            }
          }
        }
      },
      "typeVersion": 4.4
    },
    {
      "id": "1d5549c2-b9ba-4ae8-b4de-815cc6246782",
      "name": "Generate Script",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        -1520,
        6304
      ],
      "parameters": {
        "text": "=You are a YouTube Shorts scriptwriter for Zyntelliq, a dark futuristic AI tech channel.\n\nWrite a punchy 45-second voiceover script (max 120 words) about:\n\nTitle: {{ $json.title }}\nSummary: {{ $json.summary }}\n\nRules:\n- Hook in the first 3 words\n- No filler words\n- No stage directions, no parentheses, no visual cues\n- Plain spoken words only\n- End with exactly: Follow Zyntelliq for more",
        "promptType": "define"
      },
      "typeVersion": 1.4
    },
    {
      "id": "bc5c45c4-dfc7-40fe-948e-8d63d8f66df9",
      "name": "Daily Schedule",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -2176,
        6304
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 24
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "2d15f135-461f-4249-9c3f-4229c5842708",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3120,
        5856
      ],
      "parameters": {
        "width": 736,
        "height": 480,
        "content": "\ud83e\udd16 AUTO AI NEWS YOUTUBE SHORTS PIPELINE\n\nThis workflow runs daily and fully automates a YouTube Shorts channel.\n\nWHAT IT DOES:\n1. Fetches the latest AI news headline from RSS\n2. Generates a 45-second voiceover script using Groq (Llama 3)\n3. Converts the script to speech via VoiceRSS\n4. Finds a matching portrait video on Pexels\n5. Renders the final 9:16 MP4 using Shotstack (cloud-based)\n6. Downloads the rendered video\n7. Uploads it directly to YouTube\n\n\u26a0\ufe0f BEFORE YOU START \u2014 set your API keys in the \u2699\ufe0f Configure Here node.\n\nREQUIRED KEYS:\n- Groq API key (free) \u2192 console.groq.com\n- VoiceRSS API key (free) \u2192 voicerss.org\n- Pexels API key (free) \u2192 pexels.com/api\n- Shotstack API key (free sandbox) \u2192 shotstack.io\n- YouTube OAuth2 credentials \u2192 Google Cloud Console"
      },
      "typeVersion": 1
    },
    {
      "id": "eda7902e-f438-4691-a533-f49492e2b35b",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2224,
        6016
      ],
      "parameters": {
        "width": 560,
        "height": 208,
        "content": "\u2699\ufe0f SET YOUR API KEYS HERE\n\nReplace these 4 values before activating:\n- YOUR_GROQ_API_KEY\n- YOUR_VOICERSS_API_KEY\n- YOUR_PEXELS_API_KEY\n- YOUR_SHOTSTACK_API_KEY\n\nAlso connect your YouTube account in the Upload node credentials."
      },
      "typeVersion": 1
    },
    {
      "id": "bca75529-edbd-4315-92cd-b041025d699a",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1568,
        6016
      ],
      "parameters": {
        "width": 464,
        "height": 224,
        "content": "\u270d\ufe0f SCRIPT GENERATION\n\nUses Groq (Llama 3) to write a 45-second spoken voiceover.\nRules enforced in the prompt:\n- Hook in the first 3 words\n- No stage directions or visual cues\n- Plain spoken words only\n- Max 120 words\n\n\ud83d\udca1 Edit the prompt to match your channel name and tone."
      },
      "typeVersion": 1
    },
    {
      "id": "f8fc74e5-c39e-4eb3-a196-6b1253978727",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1024,
        6016
      ],
      "parameters": {
        "width": 480,
        "height": 192,
        "content": "\ud83c\udf99\ufe0f TEXT-TO-SPEECH\n\nConverts the script to MP3 using VoiceRSS (free tier).\nScript is auto-trimmed to 500 characters.\n\nAvailable voices: Linda, Amy, Emma, Brian, Joey, Matthew, Geraint, Russell, Nicole, Justin\n\nChange the &v= parameter to switch voices.\nGet your free key at: voicerss.org"
      },
      "typeVersion": 1
    },
    {
      "id": "48280114-4f5b-4784-8b98-e08f263a6e53",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -944,
        6608
      ],
      "parameters": {
        "width": 368,
        "height": 240,
        "content": "\ud83c\udfac STOCK VIDEO SEARCH\n\nSearches Pexels for portrait-orientation videos matching the news keyword.\nAutomatically picks 1080x1920 resolution where available.\n\n\ud83d\udca1 The keyword is auto-extracted from the headline (first 2 words).\nYou can override it in the Parse Script & Keyword node.\n\nGet your free API key at: pexels.com/api"
      },
      "typeVersion": 1
    },
    {
      "id": "1663a267-95b8-40b1-adb0-e8abba897c3e",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -80,
        6080
      ],
      "parameters": {
        "width": 816,
        "height": 176,
        "content": "\ud83c\udf9e\ufe0f CLOUD VIDEO RENDERING\n\nShotstack combines the stock video + TTS audio into a 9:16 MP4 in the cloud.\nNo FFmpeg. No local processing. Fully serverless.\n\nFree sandbox = 200 renders/month \u2192 shotstack.io\nThe workflow waits 30 seconds then polls for the finished URL.\n\n\ud83d\udca1 Increase the Wait node to 60s if your videos are longer or rendering times out."
      },
      "typeVersion": 1
    },
    {
      "id": "c971220a-71df-4671-af8d-827cc1c93b1c",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        992,
        6016
      ],
      "parameters": {
        "width": 464,
        "height": 256,
        "content": "\ud83d\udce4 YOUTUBE UPLOAD\n\nUploads the final MP4 directly to your YouTube channel.\n\nDefault settings:\n- Category: Science & Technology (ID 28)\n- Privacy: public\n- Region: IN\n\n\ud83d\udca1 Change privacyStatus to \"private\" if you want to review before publishing.\nConnect your YouTube account via Google OAuth2 credentials."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "callerPolicy": "workflowsFromSameOwner",
    "timeSavedMode": "fixed",
    "availableInMCP": false,
    "executionOrder": "v1"
  },
  "versionId": "2998f708-427d-4798-bc6c-20ce427cb726",
  "connections": {
    "Pexels": {
      "main": [
        [
          {
            "node": "Merge Audio + Video URLs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Voice RSS": {
      "main": [
        [
          {
            "node": "Merge Audio + Video URLs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download MP4": {
      "main": [
        [
          {
            "node": "Upload a video",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Daily Schedule": {
      "main": [
        [
          {
            "node": "Fetch AI News (RSS)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save Render ID": {
      "main": [
        [
          {
            "node": "Wait 30s for Render",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Script": {
      "main": [
        [
          {
            "node": "Parse Script & Keyword",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Groq Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Generate Script",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Extract Top Story": {
      "main": [
        [
          {
            "node": "Generate Script",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch AI News (RSS)": {
      "main": [
        [
          {
            "node": "Extract Top Story",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Upload Data": {
      "main": [
        [
          {
            "node": "Download MP4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait 30s for Render": {
      "main": [
        [
          {
            "node": "Shotstack \u2013 Get Render URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse Script & Keyword": {
      "main": [
        [
          {
            "node": "Voice RSS",
            "type": "main",
            "index": 0
          },
          {
            "node": "Pexels",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge Audio + Video URLs": {
      "main": [
        [
          {
            "node": "Shotstack \u2013 Start Render",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Shotstack \u2013 Start Render": {
      "main": [
        [
          {
            "node": "Save Render ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Shotstack \u2013 Get Render URL": {
      "main": [
        [
          {
            "node": "Prepare Upload Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}