by joseph
🧵 Generate Conversational Twitter/X Threads with GPT-4o AI (n8n Workflow) This workflow uses OpenAI (GPT-4o) and Twitter/X to automatically generate and publish engaging, conversational threads in response to a trigger (e.g., from a chatbot or form). 🚀 What Does It Do? Listens for an incoming message (e.g., via webhook or another n8n input). Uses GPT-4o to craft a narrative-style Twitter thread in a personal, friendly tone. Publishes the first tweet, then automatically posts each following tweet as a reply—building a full thread. 🛠️ What Do You Need to Configure? Before using this template, make sure to set up the following credentials: OpenAI Add your OpenAI API key in the OpenAI Chat Model node. This is used to generate the thread content. Twitter/X Add your Twitter OAuth2 credentials to the First Tweet and Thread Reply nodes. This allows the workflow to publish tweets on your behalf. ✨ Who Is This For? This template is perfect for: Content creators who want to share ideas regularly Personal brands looking to grow their presence Social media managers automating thread creation 🔧 How to Customize It You can easily adjust the tone, structure, or length of the threads by modifying the system prompt in the OpenAI node. For example: To create threads with humor, change the prompt to “Write in a witty and humorous tone.” To tailor it for marketing, prompt it with “Write a persuasive product-focused Twitter thread.” You can also integrate this workflow with: Telegram bots Web forms (e.g., Typeform, Tally) CRM tools or newsletter platforms 📋 Sample Output Prompt sent to the workflow: “Tips for growing on Twitter in 2025” Generated thread: ++Tweet 1:++ Thinking of growing your presence on Twitter/X in 2024? Here's a thread with the most effective strategies that actually work 🧵 ++Reply 1:++ Engage, don’t broadcast Twitter is a conversation platform. Reply to others, quote-tweet, and start discussions instead of just posting links. ++Reply 2:++ Consistency beats virality Tweeting regularly builds trust and visibility. You don't need to go viral — just show up.
by Viktor Klepikovskyi
Preventing Google Sheets Quota Errors during Batch Processing This template provides a robust solution for dealing with Google Sheets API rate limits. It is designed for workflows that update a large number of rows in a Google Sheet and frequently fail with "too many requests" errors. The template uses a Wait node connected to the error output of the Google Sheets node, creating a retry loop that delays execution for a set period before attempting the update again. To use this template, simply replace the placeholder Google Sheets nodes with your own credentials and sheet. You can find an example Google Sheet for this template here. For a full explanation of this approach, check out the blog post here.
by Yaron Been
Izzaanel Betia AI Generator Description None Overview This n8n workflow integrates with the Replicate API to use the izzaanel/betia model. This powerful AI model can generate high-quality other content based on your inputs. Features Easy integration with Replicate API Automated status checking and result retrieval Support for all model parameters Error handling and retry logic Clean output formatting Parameters Required Parameters prompt** (string): Prompt for generated image. If you include the trigger_word used in the training process you are more likely to activate the trained object, style, or concept in the resulting image. Optional Parameters mask** (string, default: None): Image mask for image inpainting mode. If provided, aspect_ratio, width, and height inputs are ignored. seed** (integer, default: None): Random seed. Set for reproducible generation image** (string, default: None): Input image for image to image or inpainting mode. If provided, aspect_ratio, width, and height inputs are ignored. model** (string, default: dev): Which model to run inference with. The dev model performs best with around 28 inference steps but the schnell model only needs 4 steps. width** (integer, default: None): Width of generated image. Only works if aspect_ratio is set to custom. Will be rounded to nearest multiple of 16. Incompatible with fast generation height** (integer, default: None): Height of generated image. Only works if aspect_ratio is set to custom. Will be rounded to nearest multiple of 16. Incompatible with fast generation go_fast** (boolean, default: False): Run faster predictions with model optimized for speed (currently fp8 quantized); disable to run in original bf16 extra_lora** (string, default: None): Load LoRA weights. Supports Replicate models in the format <owner>/<username> or <owner>/<username>/<version>, HuggingFace URLs in the format huggingface.co/<owner>/<model-name>, CivitAI URLs in the format civitai.com/models/<id>[/<model-name>], or arbitrary .safetensors URLs from the Internet. For example, 'fofr/flux-pixar-cars' lora_scale** (number, default: 1): Determines how strongly the main LoRA should be applied. Sane results between 0 and 1 for base inference. For go_fast we apply a 1.5x multiplier to this value; we've generally seen good performance when scaling the base value by that amount. You may still need to experiment to find the best value for your particular lora. megapixels** (string, default: 1): Approximate number of megapixels for generated image How to Use Set up your Replicate API key in the workflow Configure the required parameters for your use case Run the workflow to generate other content Access the generated output from the final node API Reference Model: izzaanel/betia API Endpoint: https://api.replicate.com/v1/predictions Requirements Replicate API key n8n instance Basic understanding of other generation parameters
by Yaron Been
Settyan Flash V2.0.1 Beta.10 AI Generator Description None Overview This n8n workflow integrates with the Replicate API to use the settyan/flash-v2.0.1-beta.10 model. This powerful AI model can generate high-quality other content based on your inputs. Features Easy integration with Replicate API Automated status checking and result retrieval Support for all model parameters Error handling and retry logic Clean output formatting Parameters Required Parameters prompt** (string): Prompt for generated image. If you include the trigger_word used in the training process you are more likely to activate the trained object, style, or concept in the resulting image. Optional Parameters mask** (string, default: None): Image mask for image inpainting mode. If provided, aspect_ratio, width, and height inputs are ignored. seed** (integer, default: None): Random seed. Set for reproducible generation image** (string, default: None): Input image for image to image or inpainting mode. If provided, aspect_ratio, width, and height inputs are ignored. model** (string, default: dev): Which model to run inference with. The dev model performs best with around 28 inference steps but the schnell model only needs 4 steps. width** (integer, default: None): Width of generated image. Only works if aspect_ratio is set to custom. Will be rounded to nearest multiple of 16. Incompatible with fast generation height** (integer, default: None): Height of generated image. Only works if aspect_ratio is set to custom. Will be rounded to nearest multiple of 16. Incompatible with fast generation go_fast** (boolean, default: False): Run faster predictions with model optimized for speed (currently fp8 quantized); disable to run in original bf16 extra_lora** (string, default: None): Load LoRA weights. Supports Replicate models in the format <owner>/<username> or <owner>/<username>/<version>, HuggingFace URLs in the format huggingface.co/<owner>/<model-name>, CivitAI URLs in the format civitai.com/models/<id>[/<model-name>], or arbitrary .safetensors URLs from the Internet. For example, 'fofr/flux-pixar-cars' lora_scale** (number, default: 1): Determines how strongly the main LoRA should be applied. Sane results between 0 and 1 for base inference. For go_fast we apply a 1.5x multiplier to this value; we've generally seen good performance when scaling the base value by that amount. You may still need to experiment to find the best value for your particular lora. megapixels** (string, default: 1): Approximate number of megapixels for generated image How to Use Set up your Replicate API key in the workflow Configure the required parameters for your use case Run the workflow to generate other content Access the generated output from the final node API Reference Model: settyan/flash-v2.0.1-beta.10 API Endpoint: https://api.replicate.com/v1/predictions Requirements Replicate API key n8n instance Basic understanding of other generation parameters
by Yaron Been
Settyan Flash V2.0.0 Beta.10 AI Generator Description None Overview This n8n workflow integrates with the Replicate API to use the settyan/flash-v2.0.0-beta.10 model. This powerful AI model can generate high-quality other content based on your inputs. Features Easy integration with Replicate API Automated status checking and result retrieval Support for all model parameters Error handling and retry logic Clean output formatting Parameters Required Parameters prompt** (string): Prompt for generated image. If you include the trigger_word used in the training process you are more likely to activate the trained object, style, or concept in the resulting image. Optional Parameters mask** (string, default: None): Image mask for image inpainting mode. If provided, aspect_ratio, width, and height inputs are ignored. seed** (integer, default: None): Random seed. Set for reproducible generation image** (string, default: None): Input image for image to image or inpainting mode. If provided, aspect_ratio, width, and height inputs are ignored. model** (string, default: dev): Which model to run inference with. The dev model performs best with around 28 inference steps but the schnell model only needs 4 steps. width** (integer, default: None): Width of generated image. Only works if aspect_ratio is set to custom. Will be rounded to nearest multiple of 16. Incompatible with fast generation height** (integer, default: None): Height of generated image. Only works if aspect_ratio is set to custom. Will be rounded to nearest multiple of 16. Incompatible with fast generation go_fast** (boolean, default: False): Run faster predictions with model optimized for speed (currently fp8 quantized); disable to run in original bf16 extra_lora** (string, default: None): Load LoRA weights. Supports Replicate models in the format <owner>/<username> or <owner>/<username>/<version>, HuggingFace URLs in the format huggingface.co/<owner>/<model-name>, CivitAI URLs in the format civitai.com/models/<id>[/<model-name>], or arbitrary .safetensors URLs from the Internet. For example, 'fofr/flux-pixar-cars' lora_scale** (number, default: 1): Determines how strongly the main LoRA should be applied. Sane results between 0 and 1 for base inference. For go_fast we apply a 1.5x multiplier to this value; we've generally seen good performance when scaling the base value by that amount. You may still need to experiment to find the best value for your particular lora. megapixels** (string, default: 1): Approximate number of megapixels for generated image How to Use Set up your Replicate API key in the workflow Configure the required parameters for your use case Run the workflow to generate other content Access the generated output from the final node API Reference Model: settyan/flash-v2.0.0-beta.10 API Endpoint: https://api.replicate.com/v1/predictions Requirements Replicate API key n8n instance Basic understanding of other generation parameters
by Yaron Been
Barbacoaexpert1 Ai Haircuts AI Generator Description None Overview This n8n workflow integrates with the Replicate API to use the barbacoaexpert1/ai-haircuts model. This powerful AI model can generate high-quality other content based on your inputs. Features Easy integration with Replicate API Automated status checking and result retrieval Support for all model parameters Error handling and retry logic Clean output formatting Parameters Required Parameters prompt** (string): Prompt for generated image. If you include the trigger_word used in the training process you are more likely to activate the trained object, style, or concept in the resulting image. Optional Parameters mask** (string, default: None): Image mask for image inpainting mode. If provided, aspect_ratio, width, and height inputs are ignored. seed** (integer, default: None): Random seed. Set for reproducible generation image** (string, default: None): Input image for image to image or inpainting mode. If provided, aspect_ratio, width, and height inputs are ignored. model** (string, default: dev): Which model to run inference with. The dev model performs best with around 28 inference steps but the schnell model only needs 4 steps. width** (integer, default: None): Width of generated image. Only works if aspect_ratio is set to custom. Will be rounded to nearest multiple of 16. Incompatible with fast generation height** (integer, default: None): Height of generated image. Only works if aspect_ratio is set to custom. Will be rounded to nearest multiple of 16. Incompatible with fast generation go_fast** (boolean, default: False): Run faster predictions with model optimized for speed (currently fp8 quantized); disable to run in original bf16 extra_lora** (string, default: None): Load LoRA weights. Supports Replicate models in the format <owner>/<username> or <owner>/<username>/<version>, HuggingFace URLs in the format huggingface.co/<owner>/<model-name>, CivitAI URLs in the format civitai.com/models/<id>[/<model-name>], or arbitrary .safetensors URLs from the Internet. For example, 'fofr/flux-pixar-cars' lora_scale** (number, default: 1): Determines how strongly the main LoRA should be applied. Sane results between 0 and 1 for base inference. For go_fast we apply a 1.5x multiplier to this value; we've generally seen good performance when scaling the base value by that amount. You may still need to experiment to find the best value for your particular lora. megapixels** (string, default: 1): Approximate number of megapixels for generated image How to Use Set up your Replicate API key in the workflow Configure the required parameters for your use case Run the workflow to generate other content Access the generated output from the final node API Reference Model: barbacoaexpert1/ai-haircuts API Endpoint: https://api.replicate.com/v1/predictions Requirements Replicate API key n8n instance Basic understanding of other generation parameters
by Yaron Been
Monexia Nietgoed AI Generator Description None Overview This n8n workflow integrates with the Replicate API to use the monexia/nietgoed model. This powerful AI model can generate high-quality other content based on your inputs. Features Easy integration with Replicate API Automated status checking and result retrieval Support for all model parameters Error handling and retry logic Clean output formatting Parameters Required Parameters prompt** (string): Prompt for generated image. If you include the trigger_word used in the training process you are more likely to activate the trained object, style, or concept in the resulting image. Optional Parameters mask** (string, default: None): Image mask for image inpainting mode. If provided, aspect_ratio, width, and height inputs are ignored. seed** (integer, default: None): Random seed. Set for reproducible generation image** (string, default: None): Input image for image to image or inpainting mode. If provided, aspect_ratio, width, and height inputs are ignored. model** (string, default: dev): Which model to run inference with. The dev model performs best with around 28 inference steps but the schnell model only needs 4 steps. width** (integer, default: None): Width of generated image. Only works if aspect_ratio is set to custom. Will be rounded to nearest multiple of 16. Incompatible with fast generation height** (integer, default: None): Height of generated image. Only works if aspect_ratio is set to custom. Will be rounded to nearest multiple of 16. Incompatible with fast generation go_fast** (boolean, default: False): Run faster predictions with model optimized for speed (currently fp8 quantized); disable to run in original bf16 extra_lora** (string, default: None): Load LoRA weights. Supports Replicate models in the format <owner>/<username> or <owner>/<username>/<version>, HuggingFace URLs in the format huggingface.co/<owner>/<model-name>, CivitAI URLs in the format civitai.com/models/<id>[/<model-name>], or arbitrary .safetensors URLs from the Internet. For example, 'fofr/flux-pixar-cars' lora_scale** (number, default: 1): Determines how strongly the main LoRA should be applied. Sane results between 0 and 1 for base inference. For go_fast we apply a 1.5x multiplier to this value; we've generally seen good performance when scaling the base value by that amount. You may still need to experiment to find the best value for your particular lora. megapixels** (string, default: 1): Approximate number of megapixels for generated image How to Use Set up your Replicate API key in the workflow Configure the required parameters for your use case Run the workflow to generate other content Access the generated output from the final node API Reference Model: monexia/nietgoed API Endpoint: https://api.replicate.com/v1/predictions Requirements Replicate API key n8n instance Basic understanding of other generation parameters
by CustomJS
This n8n template demonstrates how to download multiple PDF files from public URLs and merge them into a single PDF using the PDF Toolkit from www.customjs.space. @custom-js/n8n-nodes-pdf-toolkit Notice Community nodes can only be installed on self-hosted instances of n8n. What this workflow does Downloads** each PDF using an HTTP Request. Populates* files into an array with *Merge** node from n8n. Merges** all downloaded PDFs using the Merge PDF node from the @custom-js/n8n-nodes-pdf-toolkit. Writes** the final merged PDF to disk. Requirements Self-hosted** n8n instance CustomJS API key** for merging multiple PDF files. PDF files to be merged** to be converted into a PDF Workflow Steps: Manual Trigger: Runs with user interaction. HTTP Request Node For PDF Download: Pass urls for PDF files to merge. Merge Node For Array Population: Just populates two files into an array. Merge PDF files: Uses the CustomJS node to merge the incoming PDF files into a single PDF file. If size of PDF files exceeds 6MB, you can simply pass an array of URLs for PDF files. Usage Get API key from customJS Sign up to customJS platform. Navigate to your profile page Press "Show" button to get API key Set Credentials for CustomJS API on n8n Copy and paste your API key generated from CustomJS here. Design workflow A Manual Trigger for starting workflow. Two HTTP Request Nodes for downloading PDF files. A Merge Node for populating files as an array. Merge PDFs node for merging files Write to Disk node for saving merged PDF file. You can replace logic for triggering and returning results. For example, you can trigger this workflow by calling a webhook and get a result as a response from webhook. Simply replace Manual Trigger and Write to Disk nodes. Perfect for Bundling reports or invoices. Generating document sets from external sources. Automating PDF handling without writing custom code
by MC Naveen
I wanted a system to monitor website content changes and notify me. So I made it using n8n. Especially my competitor blogs. I wanted to know how often they are posting new articles. (I used their sitemap.xml file) (The below workflow may vary) In the Below example, I used HackerNews for example. Explanation: First HTTP Request node crawls the webpage and grabs the website source code Then wait for x minutes Again, HTTP Node crawls the webpage If Node compares both results are equal if anything is changed. It’ll go to the false branch and notify me in telegram. Workflow: Sample Response:
by Hubschrauber
Summary This template uses the item handling nodes, and expression-support in n8n, without using a Code node, to extract multiple attachments from a GMail (trigger input) message/event, and (conditionally) upload each of them to Google Drive. Note: There is another template titled Get Multiple Attachments from Gmail and upload them to GDrive that does basically the same thing, but it uses a Code node. Details Using Split Out instead of Code The “secret” to how this works is that n8n supports a special input field name $binary that references the entire set of (multiple) binary data sub-elements in a single input item. It may look like an expression, but in this case it is a “fixed” (literal) value used as the Fields to Split Out parameter value. Dealing with names that are prefixed/suffixed with an Index The next challenge with multiple attachments from a GMail message is that each one is still assigned different name like "attachment_0", "attachment_1", etc. This makes it tricky to reference them in a generic way. However, once n8n splits the items out, the binary in each item is always the first (i.e. index-zero / [0]) and ONLY key/value. So, that makes it possible get the key-name and attributes of the corresponding value indirectly with some clever expression syntax. Input Data Field Name -> Expression: {{ $binary.keys()[0] }} - This returns the name, regardless of whether it is "attachment_0", "attachment_1", or whatever else. Attachment file name: -> Expression: {{ $binary.values()[0].fileName }} Attachment file name extension: -> Expression: {{ $binary.values()[0].fileExtension }} Attachment file type: -> Expression: {{ $binary.values()[0].fileType }} Attachment file size (e.g. string "100 kB"): -> Expression: {{ $binary.values()[0].fileSize }} Attachment file size (numeric): -> Expression: {{ $binary.values()[0].fileSize.split(' ')[0].toNumber() }} Attachment mime type: -> Expression: {{ $binary.values()[0].mimeType }} Attachment id (storage GUID): -> Expression: {{ $binary.values()[0].id }} Flow Control Since each of the attachments becomes a single item, it is relatively straightforward to introduce other n8n nodes like If, Switch, or Filter and route each single attachment item into different workflow paths. The template demonstrates how each attachment binary could be routed based on its file size, as an example.
by darrell_tw
Workflow Description This workflow demonstrates how to use the LINE Messaging API to handle two scenarios: Replying to a user's message using a reply token. Sending a push message to a specific LINE user using their user ID. Key Features Webhook Integration: Receives and processes incoming messages from LINE using a webhook. Conditional Logic: Checks if the received event type is a message and handles it accordingly. Reply Message: Automatically responds to the user's message using the LINE reply token. Push Message: Sends a test message to a specific LINE user using their unique user ID. Pre-Configuration To simplify the setup process, create a Header Auth credential in n8n: Name**: Authorization Value**: Bearer {line token} This will authenticate all API requests to the LINE Messaging API. Node Configurations 1.1. Webhook from LINE Message Purpose**: Captures incoming events from the LINE Messaging API. Configuration**: HTTP Method: POST Path: {n8n-webhook-page} 1.2. If Condition Purpose**: Checks if the received event type is message. Configuration**: Condition: {{ $json.body.events[0].type }} equals "message" 1.3. Line: Reply with Token Purpose**: Replies to the user's message using the LINE reply token. Configuration**: Method: POST URL: https://api.line.me/v2/bot/message/reply JSON Body: { "replyToken": "{{ $('Webhook from Line Message').item.json.body.events[0].replyToken }}", "messages": [ { "type": "text", "text": "收到您的訊息 : {{ $('Webhook from Line Message').item.json.body.events[0].message.text }}" } ] } 2.1. Manual Trigger: Test Workflow Purpose**: Triggers the workflow for testing the push message functionality. Configuration**: No additional setup required. 2.2. Edit Fields Purpose**: Prepares the unique LINE user ID for the push message. Configuration**: Field: line_uid: Uxxxxxxxxxxxx 2.3. Line: Push Message Purpose**: Sends a test message to a specific LINE user. Configuration**: Method: POST URL: https://api.line.me/v2/bot/message/push JSON Body: { "to": "{{ $json.line_uid }}", "messages": [ { "type": "text", "text": "推播測試" } ] } 工作流程描述 此工作流程展示如何使用 LINE Messaging API 處理兩種情境: 使用 reply token 回應使用者的訊息。 使用使用者的 user ID 發送 推播訊息。 主要功能 Webhook 整合:透過 Webhook 接收並處理來自 LINE 的訊息。 條件邏輯:檢查接收到的事件類型是否為訊息並進行處理。 回應訊息:使用 LINE 的 reply token 自動回覆使用者的訊息。 推播訊息:使用 LINE User ID 向指定用戶發送測試訊息。 預先設定 為簡化設定流程,請在 n8n 中建立 Header Auth 憑證: 名稱**:Authorization 值**:Bearer {line token} 此設定將用於認證所有 LINE Messaging API 的請求。 節點設定 1.1. Webhook from LINE Message 用途**:接收來自 LINE Messaging API 的事件。 設定**: HTTP 方法:POST 路徑:{n8n-webhook-page} 1.2. If 條件判斷 用途**:檢查接收到的事件類型是否為 message。 設定**: 條件: {{ $json.body.events[0].type }} 等於 "message" 1.3. Line: Reply with Token 用途**:使用 LINE reply token 回應使用者訊息。 設定**: 方法:POST URL:https://api.line.me/v2/bot/message/reply JSON 主體: { "replyToken": "{{ $('Webhook from Line Message').item.json.body.events[0].replyToken }}", "messages": [ { "type": "text", "text": "收到您的訊息 : {{ $('Webhook from Line Message').item.json.body.events[0].message.text }}" } ] } 2.1. 手動觸發:測試工作流程 用途**:測試推播訊息功能。 設定**:無需額外設定。 2.2. Edit Fields 用途**:準備推播訊息所需的 LINE 使用者 ID。 設定**: 欄位: line_uid:Uxxxxxxxxxxxx 2.3. Line: 推播訊息 用途**:向特定 LINE 使用者發送測試訊息。 設定**: 方法:POST URL:https://api.line.me/v2/bot/message/push JSON 主體: { "to": "{{ $json.line_uid }}", "messages": [ { "type": "text", "text": "推播測試" } ] } 完成示意圖 (Storyboard Example):
by Samir Saci
Tags: Automation, Finance, Google Sheets, API Note: This workflow uses the Exchange rate API and requires a valid API key. Context I’m a Supply Chain Data Scientist who builds automations to streamline operations, reduce manual tasks, and boost decision-making through real-time data. In this workflow, I automated the task of fetching live currency exchange rates, updating a Google Sheet with the latest values, and archiving historical records — all without writing any code. > Improve your productivity by automating admin tasks with n8n! 📬 For business inquiries, you can add me on LinkedIn Who is this template for? This template is perfect for: Finance teams** tracking multi-currency cashflows Analysts** building dashboards or models requiring updated FX data Anyone working with spreadsheets** who needs up-to-date exchange rates It updates: A live sheet with the latest USD-based exchange rates An archive tab to track historical changes over time How does it work? This workflow runs in N8N and performs the following steps: 🌐 Calls the ExchangeRate API to get the latest rates based on USD 🧠 Extracts and formats key fields: base currency, timestamp, and conversion values 📊 Updates a main Google Sheet with the latest data (using upsert logic) 🗂️ Appends all rates to a second Google Sheet tab for historical tracking You can schedule this workflow to run daily, hourly, or on-demand. What do I need to start? You don’t need to write a single line of code. Prerequisites: A Google Sheet with two tabs: Rate Sheet and Archives (Link of the publicly available example in the template) A valid Exchangerate API key Google Sheets API** connected via OAuth2 Next Steps Use the sticky notes in the workflow to understand how to: Add your Exchangerate API key Map the fields to match your Google Sheet layout Schedule the run frequency using the Cron node Optionally add Slack or email alerts if the base rate changes For more information, check my tutorial: 🎥 Watch My Tutorial 🚀 Want to build finance automation workflows like this? 📬 Let’s connect on LinkedIn Notes You can adapt this template for other currencies by changing the API endpoint This workflow was built using *n8n 1.85.4** Submitted: April 15th, 2025*