This workflow corresponds to n8n.io template #8998 — we link there as the canonical source.
This workflow follows the Googlegemini → Telegram recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"meta": {
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "5dbb5361-0f1a-403a-a6d2-f8aaeebcd2c4",
"name": "Telegram Trigger",
"type": "n8n-nodes-base.telegramTrigger",
"position": [
1136,
832
],
"parameters": {
"updates": [
"message"
],
"additionalFields": {
"download": false
}
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "113490e2-abd8-4aa6-8b3e-58030c4d731a",
"name": "Filter: Has Caption and File",
"type": "n8n-nodes-base.filter",
"position": [
1328,
832
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "1cb10407-8c50-4e81-ac9b-72c03cab65d6",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $('Telegram Trigger').item.json.message.caption }}",
"rightValue": ""
},
{
"id": "cbf13e8f-7620-4db5-ba40-ecbb248c05b4",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.message.document.file_id }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "ffe1e575-905b-406b-8617-2a7a69632285",
"name": "Note: Filter",
"type": "n8n-nodes-base.stickyNote",
"position": [
1184,
624
],
"parameters": {
"color": 3,
"width": 396,
"height": 192,
"content": "## \ud83d\udd0d Filter: Has Caption and File\n\n**Purpose:** Validates incoming message has both a caption (prompt) and document file.\n\n**Note:** AND logic; skips workflow if either missing to avoid errors."
},
"typeVersion": 1
},
{
"id": "c12c8013-87db-412b-aca1-5e14867a46b3",
"name": "Download Image",
"type": "n8n-nodes-base.telegram",
"position": [
1520,
832
],
"parameters": {
"fileId": "={{ $json.message.document.file_id }}",
"resource": "file",
"additionalFields": {}
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "2995feff-c0a7-49d3-b85b-da18e37ba341",
"name": "Note: Download Image",
"type": "n8n-nodes-base.stickyNote",
"position": [
1504,
1040
],
"parameters": {
"color": 6,
"width": 332,
"height": 192,
"content": "## \ud83d\udce5 Download Image\n\n**Purpose:** Fetches the image file from Telegram servers as binary data.\n\n**Note:** Uses file_id from trigger; downloads immediately as files expire after 1 hour."
},
"typeVersion": 1
},
{
"id": "01d5b33c-5a08-4df9-9eee-293a336535d2",
"name": "Edit Image with AI",
"type": "@n8n/n8n-nodes-langchain.googleGemini",
"position": [
1728,
832
],
"parameters": {
"images": {
"values": [
{}
]
},
"prompt": "={{ $('Telegram Trigger').item.json.message.caption }}",
"options": {
"binaryPropertyOutput": "data"
},
"resource": "image",
"operation": "edit"
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "b8993e29-7dd8-4cf8-9789-7bd2a3e7bf6b",
"name": "Note: Edit AI",
"type": "n8n-nodes-base.stickyNote",
"position": [
1680,
592
],
"parameters": {
"color": 5,
"width": 396,
"height": 192,
"content": "## \ud83d\uddbc\ufe0f Edit Image with AI\n\n**Purpose:** Applies Gemini AI edits to the downloaded image using caption as prompt. **Nano-Banana**\n\n**Note:** Outputs edited binary; handles creative transformations like 'add elements'."
},
"typeVersion": 1
},
{
"id": "e33f9709-25b0-4a37-8aea-dd64f7fe8489",
"name": "Send Edited Image",
"type": "n8n-nodes-base.telegram",
"position": [
1952,
832
],
"parameters": {
"chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
"operation": "sendPhoto",
"binaryData": true,
"additionalFields": {}
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "c6cc872e-2396-4450-acfa-17c08ca67ec5",
"name": "Overview Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
432,
432
],
"parameters": {
"color": 4,
"width": 632,
"height": 1176,
"content": "# \ud83e\udd16 AI Image Editor using Nano-Banana Telegram Bot\n\n## \ud83d\udccb What This Template Does\nThis workflow powers a Telegram bot that automatically processes incoming image documents with text prompts. It downloads the file, uses Google Gemini AI to edit the image based on your caption, and instantly replies with the enhanced version.\n\n## \ud83d\udd27 Prerequisites\n- A Telegram bot created via @BotFather\n- Google AI Studio account for Gemini API access\n- n8n instance with Telegram and Google Gemini nodes enabled\n\n## \ud83d\udd11 Required Credentials\n\n### Telegram API Setup\n1. Open Telegram and message @BotFather\n2. Use `/newbot` to create your bot and note the token\n3. In n8n, go to Credentials \u2192 Add Credential \u2192 Search \"Telegram API\"\n4. Paste the token and save\n\n### Google Gemini API Setup\n1. Visit aistudio.google.com and sign in with Google\n2. Click \"Get API key\" \u2192 Create API key in a new project\n3. In n8n, go to Credentials \u2192 Add Credential \u2192 Search \"Google Gemini API\"\n4. Enter the API key and save\n\n## \u2699\ufe0f Configuration Steps\n1. Import the provided JSON into your n8n workflows\n2. Assign the Telegram credential to the trigger and Telegram nodes\n3. Assign the Gemini credential to the Edit Image node\n4. Activate the workflow and note your bot's username\n5. Test by sending an image document with a caption to your bot\n\n## \ud83c\udfaf Use Cases\n- **Personal creativity**: Send a selfie with \"make me a superhero\"\n- **Social media**: Upload photos with \"enhance lighting\"\n- **Educational**: Share sketches with \"colorize and detail\"\n- **Team collab**: Prompt \"remove background\" in groups\n\n## \u26a0\ufe0f Troubleshooting\n- **No trigger**: Verify token and enable message updates\n- **Download fail**: Resend file; check it's a document\n- **Edit error**: Check API quotas; shorten prompts\n- **No send**: Verify binary data in execution log"
},
"typeVersion": 1
},
{
"id": "bdce77c5-a7f3-480d-95e8-1a183eedf038",
"name": "Note: Trigger1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1104,
1024
],
"parameters": {
"color": 6,
"width": 332,
"height": 192,
"content": "## \ud83d\udce5 Telegram Trigger\n\n**Purpose:** Listens for new messages with documents and optional captions.\n\n**Note:** Filters to 'message' updates only; starts the editing flow on receipt."
},
"typeVersion": 1
}
],
"connections": {
"Download Image": {
"main": [
[
{
"node": "Edit Image with AI",
"type": "main",
"index": 0
}
]
]
},
"Telegram Trigger": {
"main": [
[
{
"node": "Filter: Has Caption and File",
"type": "main",
"index": 0
}
]
]
},
"Edit Image with AI": {
"main": [
[
{
"node": "Send Edited Image",
"type": "main",
"index": 0
}
]
]
},
"Filter: Has Caption and File": {
"main": [
[
{
"node": "Download Image",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
googlePalmApitelegramApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Transform your Telegram chats into a creative powerhouse with this AI-driven image editing bot. Send an image document with a descriptive caption, and watch it get intelligently edited in seconds—no design skills required!
Source: https://n8n.io/workflows/8998/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Most expense tracker apps (like Money Lover, Spendee, or Wallet) have a common friction point: Data Entry. You have to unlock your phone, find the app, wait for it to load, navigate menus, and manuall
Sales Lead Qualifier. Uses telegramTrigger, googleSheets, telegram, googleGemini. Event-driven trigger; 41 nodes.
This n8n workflow enables automated transcription of voice messages in Telegram groups with built-in access control and intelligent fallback mechanisms. It's designed for teams that need to convert au
This workflow is a complete, AI-powered content engine designed to help automation experts build their personal brand on LinkedIn. It transforms a technical n8n workflow (in JSON format) into a polish
Kilua-Bot. Uses telegramTrigger, telegram, googleGemini, httpRequest. Event-driven trigger; 17 nodes.