{"meta":{"instanceId":"workflow-d32701c9","versionId":"1.0.0","createdAt":"2025-09-29T07:07:53.108403","updatedAt":"2025-09-29T07:07:53.108411","owner":"n8n-user","license":"MIT","category":"automation","status":"active","priority":"high","environment":"production"},"nodes":[{"id":"95c798a4-bc34-4219-b7c3-6b4a4070886b","name":"When clicking ‘Test workflow’","type":"n8n-nodes-base.manualTrigger","position":[-320,1080],"parameters":{},"typeVersion":1,"notes":"This manualTrigger node performs automated tasks as part of the workflow."},{"id":"09987590-1ec2-48d4-aa04-32b85addd9e6","name":"Split Out","type":"n8n-nodes-base.splitOut","position":[420,1080],"parameters":{"options":{},"fieldToSplitOut":"newsTitle"},"typeVersion":1,"notes":"This splitOut node performs automated tasks as part of the workflow."},{"id":"758e3f60-01dc-46c7-bb53-7460eaed92e3","name":"Extract News Block","type":"n8n-nodes-base.html","position":[220,1080],"parameters":{"options":{},"operation":"extractHtmlContent","extractionValues":{"values":[{"key":"YOUR_CREDENTIAL_HERE","cssSelector":".eGcloy","returnArray":true,"returnValue":"html"}]}},"typeVersion":1.2,"notes":"This html node performs automated tasks as part of the workflow."},{"id":"20440f9a-a40c-4419-af6d-383de041d078","name":"Extract News Content","type":"n8n-nodes-base.html","position":[600,1080],"parameters":{"options":{},"operation":"extractHtmlContent","dataPropertyName":"newsTitle","extractionValues":{"values":[{"key":"YOUR_CREDENTIAL_HERE","cssSelector":"h2"},{"key":"YOUR_CREDENTIAL_HERE","attribute":"href","cssSelector":"a","returnValue":"attribute"},{"key":"YOUR_CREDENTIAL_HERE","cssSelector":".kYtujW"}]}},"typeVersion":1.2,"notes":"This html node performs automated tasks as part of the workflow."},{"id":"47a50ada-127a-4037-8fe7-41c0caebb3de","name":"Aggregate","type":"n8n-nodes-base.aggregate","position":[2000,1060],"parameters":{"options":{},"aggregate":"aggregateAllItemData"},"typeVersion":1,"notes":"This aggregate node performs automated tasks as part of the workflow."},{"id":"33050a43-842d-464d-b227-a6c2c870c0af","name":"Fetch BBC News Detail","type":"n8n-nodes-base.httpRequest","position":[1400,1060],"parameters":{"url":"{{ $env.BASE_URL }}","options":{}},"typeVersion":4.2,"notes":"This httpRequest node performs automated tasks as part of the workflow."},{"id":"646bfe6b-cac6-4177-9b59-dc205b44b7eb","name":"Extract Detail","type":"n8n-nodes-base.html","position":[1600,1060],"parameters":{"options":{},"operation":"extractHtmlContent","extractionValues":{"values":[{"key":"YOUR_CREDENTIAL_HERE","cssSelector":".dlWCEZ .fYAfXe","returnArray":true}]}},"typeVersion":1.2,"notes":"This html node performs automated tasks as part of the workflow."},{"id":"6e14f528-1e94-411f-8601-3c713d492aa9","name":"Filter Empty Detail","type":"n8n-nodes-base.filter","position":[1800,1060],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"7066e88c-03da-4196-b1c5-80bc16fa3fc6","operator":{"type":"array","operation":"notEmpty","singleValue":true},"leftValue":"={{ $json.newsDetail }}","rightValue":""}]}},"typeVersion":2.2,"notes":"This filter node performs automated tasks as part of the workflow."},{"id":"5863e420-2392-468a-8e03-5d4c273168e0","name":"If script exists","type":"n8n-nodes-base.if","position":[2620,1060],"parameters":{"options":{},"conditions":{"options":{"version":1,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"2e968b41-88f7-4b28-9837-af50ae130979","operator":{"type":"string","operation":"exists","singleValue":true},"leftValue":"=voice_id {{ $json.output.podcast_script }}","rightValue":""}]}},"typeVersion":2,"notes":"This if node performs automated tasks as part of the workflow."},{"id":"90b370d3-5712-401d-b769-490014e2b17c","name":"Basic Podcast LLM Chain","type":"n8n-nodes-base.noOp","position":[2200,1060],"parameters":{"text":"=News Articles:{{ $json.data.map(item => item.newsDetail) }}","messages":{"messageValues":[{"message":"= \n*Convert the following one or multiple news articles into a podcast script formatted for direct use in ElevenLabs. If there is only one news piece, transform it into a compelling and engaging narrative. If multiple news stories are provided, structure them like a news bulletin, presenting each piece sequentially with smooth transitions. Avoid a formal or dry tone; instead, use a natural, conversational, and warm style. The podcast should feel dynamic, engaging, and informative while maintaining a storytelling approach.*  \n\n- *Ensure the script is formatted as a single, continuous text block suitable for direct speech synthesis.*  \n- *Start with an engaging introduction that sets the tone for the podcast.*  \n- *Narrate each news story smoothly, with natural transitions between segments.*  \n- *End with a closing statement that leaves the listener informed and engaged.*  \n- *Output must be in JSON format, with the full script as a single string under the key `\"podcast_script\"`.*  \n\n---\n\n### **Input Format:**  \n```json\n{\n  \"news_articles\": [\n    {\n      \"title\": \"First News Title\",\n      \"content\": \"First news article content...\"\n    },\n    {\n      \"title\": \"Second News Title\",\n      \"content\": \"Second news article content...\"\n    }\n  ]\n}\n```\n\n---\n\nExpected JSON Output Format:\n \n{\n  \"podcast_script\": \"Welcome to today's news podcast! We have some exciting stories lined up for you. Let's start with our first story. [First news article content rewritten in a conversational, engaging style]... Moving on to our next topic... [Second news article content rewritten dynamically]... That’s all for today’s news bulletin! Stay informed and see you next time.\"\n}\n\n\n "}]},"promptType":"define","hasOutputParser":true},"typeVersion":1,"notes":"This chainLlm node performs automated tasks as part of the workflow."},{"id":"24c212c2-6d06-4fe1-841b-bc52a21060b1","name":"Gemini","type":"n8n-nodes-base.noOp","position":[1600,1600],"parameters":{"options":{},"modelName":"models/gemini-2.0-pro-exp-02-05"},"credentials":{"googlePalmApi":{"id":"5x46RlCURyTUmbGW","name":"Google Gemini(PaLM) Api account 2"}},"typeVersion":1,"notes":"This lmChatGoogleGemini node performs automated tasks as part of the workflow."},{"id":"02e9f1ee-dc80-403c-8c19-0e6f918cf8ed","name":"Output Parser","type":"n8n-nodes-base.noOp","position":[2360,1280],"parameters":{"jsonSchemaExample":"{\n\t\"podcast_script\": \"California\"\n}"},"typeVersion":1,"notes":"This outputParserStructured node performs automated tasks as part of the workflow."},{"id":"395ddac7-b2a4-48c5-b2d3-d21078d29c54","name":"News Classifier","type":"n8n-nodes-base.noOp","position":[980,1080],"parameters":{"options":{},"inputText":"=I will only send the headline as input:\n{{ $json.title }} {{ $json.description }}","categories":{"categories":[{"category":"Suitable","description":"=Role: News Content Suitability Assessor (Positive)\n\nTask: Determine if the given news headline is highly likely to be suitable for storytelling, focusing on positive and engaging aspects.\n\nCriteria (Focus on what makes it suitable):\n\nCuriosity and Interest: Does the headline present an event, discovery, or information that is likely to pique the curiosity of a broad audience? Does it have a \"wow\" factor or relate to a significant trend?\n\nStorytelling Potential: Does the headline lend itself well to narrative expansion? Could it be the start of an engaging story, a key point in a developing situation, or a surprising conclusion?\n\nPositive or Neutral Tone: Is the headline generally positive, neutral, or focused on solutions/progress? (Avoid headlines that primarily focus on conflict, negativity, or routine events).\n\nRelevance: Does the headline touch upon topics that are relevant to a wide audience, such as health, science, technology, interesting discoveries, or positive global events?\n\nOutput Format:\n\nHeadline: [Original news headline]\n\nSuitable: [Yes / No] (Only say \"Yes\" if strongly confident)\n\nReason (Brief): [Briefly explain why it's likely suitable, focusing on the positive aspects.]\n\nExample (for the LLM to learn from):\n\nHeadline: \"Scientists Discover New Species of Butterfly in Amazon Rainforest\"\n\nSuitable: Yes\n\nReason: Discovery, biodiversity, positive natural event, intriguing.\n\nHeadline: \"Stock Market Experiences Minor Fluctuations\"\n\nSuitable: No\n\nReason: Routine economic event, lacks general interest."},{"category":"Not Suitable","description":"=Role: News Content Filter (Negative)\n\nTask: Identify news headlines that are clearly unsuitable for storytelling due to negative content, lack of general interest, or ethical concerns.\n\nCriteria (Focus on what makes it unsuitable):\n\nNegative Content: Does the headline contain violence, crime, accidents, death, suffering, or other traumatic events?\n\nPolitical/Economic Routine: Does the headline focus on routine political announcements, standard economic reports (like minor market changes), or internal political disputes?\n\nDivisive or Harmful Content: Does the headline contain hate speech, discrimination, strong political bias, or potentially harmful misinformation?\n\nLack of General Interest: Is the headline highly niche, specific to a very small group, or about a topic unlikely to interest a broad audience?\n\nOutput Format:\n\nHeadline: [Original news headline]\n\nNot Suitable: [Yes / No] (Only say \"Yes\" if strongly confident)\n\nReason (Brief): [Briefly explain why it's clearly unsuitable.]\n\nExample (for the LLM to learn from):\n\nHeadline: \"Local Politician Announces Campaign Platform\"\n\nNot Suitable: Yes\n\nReason: Routine political event, lacks broad appeal.\n\nHeadline: \"Car Crash Results in Minor Injuries\"\n\nNot Suitable: Yes\n\nReason: Negative event (accident), though thankfully not severe."}]}},"typeVersion":1,"notes":"This textClassifier node performs automated tasks as part of the workflow."},{"id":"13fac9ed-688c-4af9-a810-d49a74b98c22","name":"Fetch BBC News Page","type":"n8n-nodes-base.httpRequest","position":[-60,1080],"parameters":{"url":"{{ $env.WEBHOOK_URL }}","options":{},"responseFormat":"string"},"typeVersion":1,"notes":"This httpRequest node performs automated tasks as part of the workflow."},{"id":"e2aa33f3-aa7c-4a9d-ac3c-32f9f5872606","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-120,920],"parameters":{"width":500,"height":340,"content":"## This node fetches the main BBC News page, which contains links to various news articles."},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"0821b944-44cb-41ed-b5ff-70f99018c5dc","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[960,840],"parameters":{"color":2,"width":340,"height":360,"content":"## This node uses a Gemini LLM to classify news articles based on their titles and descriptions. It determines if the content is suitable for a podcast.\n\n"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"d32b2ebb-0a4d-4d27-9262-894ab7a65cce","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[1360,820],"parameters":{"color":3,"width":400,"height":420,"content":"## This node fetches the detailed content of the news articles that were classified as suitable for a podcast."},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"e6e1d180-b2c2-4b62-a611-7c039037ed69","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[2180,880],"parameters":{"color":4,"width":340,"height":320,"content":"## This node uses a Gemini LLM to convert the news articles into a podcast script.\n"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"d8776355-967d-4875-b948-25792f6f38ec","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[2840,920],"parameters":{"color":5,"width":360,"height":300,"content":"##  It structures the script for direct use with the Hugging Face text-to-speech model."},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"631a2caf-c640-41df-9215-2b542de51ccb","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[-660,740],"parameters":{"width":460,"height":280,"content":"## 3rd Party Application Requirements:\n\n### Gemini \nYou've already set up a Gemini LLM. No access token is needed for this.\n### Hugging Face\n You'll need an access token for the Hugging Face text-to-speech model \n"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"655e6799-5b7c-4747-b3a9-d01b47f5cba8","name":"Limit 10 Items","type":"n8n-nodes-base.limit","position":[800,1080],"parameters":{"maxItems":10},"typeVersion":1,"notes":"This limit node performs automated tasks as part of the workflow."},{"id":"64d011d2-9c51-4f1f-a3b8-edf3fcbc6710","name":"Hugging Face Text-to-Speech.","type":"n8n-nodes-base.httpRequest","position":[2900,1060],"parameters":{"url":"{{ $env.WEBHOOK_URL }}","method":"POST","options":{},"sendBody":true,"authentication":"{{ $credentials.predefinedCredentialType }}","bodyParameters":{"parameters":[{"name":"inputs","value":"={{ $json.output.podcast_script }}"}]},"nodeCredentialType":"YOUR_CREDENTIAL_HERE"},"credentials":{"huggingFaceApi":{"id":"FF4PO5RYOJqZ0vhQ","name":"HuggingFaceApi account"}},"typeVersion":4.2,"notes":"This httpRequest node performs automated tasks as part of the workflow."}],"connections":{"Fetch BBC News Detail":{"main":[[],[],[],[],[],[],[],[],[]]},"Fetch BBC News Page":{"main":[[],[],[],[],[],[],[],[],[]]},"Hugging Face Text-to-Speech.":{"main":[[],[],[],[],[],[],[],[],[]]},"Gemini":{"main":[[]]}},"name":"Manualtrigger Workflow","settings":{"executionOrder":"v1","saveManualExecutions":true,"callerPolicy":"workflowsFromSameOwner","errorWorkflow":null,"timezone":"UTC","executionTimeout":3600,"maxExecutions":1000,"retryOnFail":true,"retryCount":3,"retryDelay":1000},"description":"Automated workflow: Manualtrigger Workflow. This workflow integrates 14 different services: textClassifier, filter, httpRequest, stickyNote, lmChatGoogleGemini. It contains 29 nodes and follows best practices for error handling and security.","notes":"Excellent quality workflow: Manualtrigger Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}