n8n Workflow

Easy Image Captioning With Gemini 1 5 Pro

This n8n workflow automates tasks and integrates with various services. Easy Image Captioning With Gemini 1 5 Pro - ready to import and run in your n8n instance.

n8n workflow.json

About This Script

This n8n workflow automates tasks and integrates with various services. Easy Image Captioning With Gemini 1 5 Pro - ready to import and run in your n8n instance.
Features:
  • Makes HTTP requests to external APIs
Source Code
{
    "nodes": [
        {
            "id": "0b64edf1-57e0-4704-b78c-c8ab2b91f74d",
            "name": "When clicking \u2018Test workflow\u2019",
            "type": "n8n-nodes-base.manualTrigger",
            "position": [
                480,
                300
            ],
            "parameters": [],
            "typeVersion": 1
        },
        {
            "id": "a875d1c5-ccfe-4bbf-b429-56a42b0ca778",
            "name": "Google Gemini Chat Model",
            "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
            "position": [
                1280,
                720
            ],
            "parameters": {
                "options": [],
                "modelName": "models/gemini-1.5-flash"
            },
            "credentials": {
                "googlePalmApi": {
                    "id": "dSxo6ns5wn658r8N",
                    "name": "Google Gemini(PaLM) Api account"
                }
            },
            "typeVersion": 1
        },
        {
            "id": "a5e00543-dbaa-4e62-afb0-825ebefae3f3",
            "name": "Structured Output Parser",
            "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
            "position": [
                1480,
                720
            ],
            "parameters": {
                "jsonSchemaExample": "{\n\t\"caption_title\": \"\",\n\t\"caption_text\": \"\"\n}"
            },
            "typeVersion": 1.2
        },
        {
            "id": "bb9af9c6-6c81-4e92-a29f-18ab3afbe327",
            "name": "Get Info",
            "type": "n8n-nodes-base.editImage",
            "position": [
                1100,
                400
            ],
            "parameters": {
                "operation": "information"
            },
            "typeVersion": 1
        },
        {
            "id": "8a0dbd5d-5886-484a-80a0-486f349a9856",
            "name": "Resize For AI",
            "type": "n8n-nodes-base.editImage",
            "position": [
                1100,
                560
            ],
            "parameters": {
                "width": 512,
                "height": 512,
                "options": [],
                "operation": "resize"
            },
            "typeVersion": 1
        },
        {
            "id": "d29f254a-5fa3-46fa-b153-19dfd8e8c6a7",
            "name": "Calculate Positioning",
            "type": "n8n-nodes-base.code",
            "position": [
                2020,
                720
            ],
            "parameters": {
                "mode": "runOnceForEachItem",
                "jsCode": "const { size, output } = $input.item.json;\n\nconst lineHeight = 35;\nconst fontSize = Math.round(size.height / lineHeight);\nconst maxLineLength = Math.round(size.width/fontSize) * 2;\nconst text = `\"${output.caption_title}\". ${output.caption_text}`;\nconst numLinesOccupied = Math.round(text.length / maxLineLength);\n\nconst verticalPadding = size.height * 0.02;\nconst horizontalPadding = size.width * 0.02;\nconst rectPosX = 0;\nconst rectPosY = size.height - (verticalPadding * 2.5) - (numLinesOccupied * fontSize);\nconst textPosX = horizontalPadding;\nconst textPosY = size.height - (numLinesOccupied * fontSize) - (verticalPadding/2);\n\nreturn {\n  caption: {\n    fontSize,\n    maxLineLength,\n    numLinesOccupied,\n    rectPosX,\n    rectPosY,\n    textPosX,\n    textPosY,\n    verticalPadding,\n    horizontalPadding,\n  }\n}\n"
            },
            "typeVersion": 2
        },
        {
            "id": "12a7f2d6-8684-48a5-aa41-40a8a4f98c79",
            "name": "Apply Caption to Image",
            "type": "n8n-nodes-base.editImage",
            "position": [
                2380,
                560
            ],
            "parameters": {
                "options": [],
                "operation": "multiStep",
                "operations": {
                    "operations": [
                        {
                            "color": "=#0000008c",
                            "operation": "draw",
                            "endPositionX": "={{ $json.size.width }}",
                            "endPositionY": "={{ $json.size.height }}",
                            "startPositionX": "={{ $json.caption.rectPosX }}",
                            "startPositionY": "={{ $json.caption.rectPosY }}"
                        },
                        {
                            "font": "/usr/share/fonts/truetype/msttcorefonts/Arial.ttf",
                            "text": "=\"{{ $json.output.caption_title }}\". {{ $json.output.caption_text }}",
                            "fontSize": "={{ $json.caption.fontSize }}",
                            "fontColor": "#FFFFFF",
                            "operation": "text",
                            "positionX": "={{ $json.caption.textPosX }}",
                            "positionY": "={{ $json.caption.textPosY }}",
                            "lineLength": "={{ $json.caption.maxLineLength }}"
                        }
                    ]
                }
            },
            "typeVersion": 1
        },
        {
            "id": "4d569ec8-04c2-4d21-96e1-86543b26892d",
            "name": "Sticky Note",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                -120,
                80
            ],
            "parameters": {
                "width": 423.75,
                "height": 431.76353488372104,
                "content": "Configuration note: update with your credentials or endpoint.",
                "color": "#FFF59D"
            },
            "typeVersion": 1
        },
        {
            "id": "45d37945-5a7a-42eb-8c8c-5940ea276072",
            "name": "Merge Image & Caption",
            "type": "n8n-nodes-base.merge",
            "position": [
                1620,
                400
            ],
            "parameters": {
                "mode": "combine",
                "options": [],
                "combineBy": "combineByPosition"
            },
            "typeVersion": 3
        },
        {
            "id": "53a26842-ad56-4c8d-a59d-4f6d3f9e2407",
            "name": "Merge Caption & Positions",
            "type": "n8n-nodes-base.merge",
            "position": [
                2200,
                560
            ],
            "parameters": {
                "mode": "combine",
                "options": [],
                "combineBy": "combineByPosition"
            },
            "typeVersion": 3
        },
        {
            "id": "b6c28913-b16a-4c59-aa49-47e9bb97f86d",
            "name": "Get Image",
            "type": "n8n-nodes-base.httpRequest",
            "position": [
                680,
                300
            ],
            "parameters": {
                "url": "https://images.pexels.com/photos/1267338/pexels-photo-1267338.jpeg?auto=compress&cs=tinysrgb&w=600",
                "options": []
            },
            "typeVersion": 4.2
        },
        {
            "id": "6c25054d-8103-4be9-bea7-6c3dd47f49a3",
            "name": "Sticky Note1",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                340,
                80
            ],
            "parameters": {
                "color": "#FFF59D",
                "width": 586.25,
                "height": 486.25,
                "content": "Configuration note: update with your credentials or endpoint."
            },
            "typeVersion": 1
        },
        {
            "id": "d1b708e2-31c3-4cd1-a353-678bc33d4022",
            "name": "Sticky Note2",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                960,
                140
            ],
            "parameters": {
                "color": "#FFF59D",
                "width": 888.75,
                "height": 783.75,
                "content": "Configuration note: update with your credentials or endpoint."
            },
            "typeVersion": 1
        },
        {
            "id": "36a39871-340f-4c44-90e6-74393b9be324",
            "name": "Sticky Note3",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                1880,
                280
            ],
            "parameters": {
                "color": "#FFF59D",
                "width": 753.75,
                "height": 635,
                "content": "Configuration note: update with your credentials or endpoint."
            },
            "typeVersion": 1
        },
        {
            "id": "d175fe97-064e-41da-95fd-b15668c330c4",
            "name": "Sticky Note4",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                2660,
                280
            ],
            "parameters": {
                "width": 563.75,
                "height": 411.25,
                "content": "Configuration note: update with your credentials or endpoint.",
                "color": "#FFF59D"
            },
            "typeVersion": 1
        },
        {
            "id": "23db0c90-45b6-4b85-b017-a52ad5a9ad5b",
            "name": "Image Captioning Agent",
            "type": "@n8n/n8n-nodes-langchain.chainLlm",
            "position": [
                1280,
                560
            ],
            "parameters": {
                "text": "Generate a caption for this image.",
                "messages": {
                    "messageValues": [
                        {
                            "message": "=You role is to provide an appropriate image caption for user provided images.\n\nThe individual components of a caption are as follows: who, when, where, context and miscellaneous. For a really good caption, follow this template: who + when + where + context + miscellaneous\n\nGive the caption a punny title."
                        },
                        {
                            "type": "HumanMessagePromptTemplate",
                            "messageType": "imageBinary"
                        }
                    ]
                },
                "promptType": "define",
                "hasOutputParser": true
            },
            "typeVersion": 1.4
        }
    ],
    "connections": {
        "Get Info": {
            "main": [
                [
                    {
                        "node": "Merge Image & Caption",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Get Image": {
            "main": [
                [
                    {
                        "node": "Resize For AI",
                        "type": "main",
                        "index": 0
                    },
                    {
                        "node": "Get Info",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Resize For AI": {
            "main": [
                [
                    {
                        "node": "Image Captioning Agent",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Calculate Positioning": {
            "main": [
                [
                    {
                        "node": "Merge Caption & Positions",
                        "type": "main",
                        "index": 1
                    }
                ]
            ]
        },
        "Merge Image & Caption": {
            "main": [
                [
                    {
                        "node": "Calculate Positioning",
                        "type": "main",
                        "index": 0
                    },
                    {
                        "node": "Merge Caption & Positions",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Image Captioning Agent": {
            "main": [
                [
                    {
                        "node": "Merge Image & Caption",
                        "type": "main",
                        "index": 1
                    }
                ]
            ]
        },
        "Google Gemini Chat Model": {
            "ai_languageModel": [
                [
                    {
                        "node": "Image Captioning Agent",
                        "type": "ai_languageModel",
                        "index": 0
                    }
                ]
            ]
        },
        "Structured Output Parser": {
            "ai_outputParser": [
                [
                    {
                        "node": "Image Captioning Agent",
                        "type": "ai_outputParser",
                        "index": 0
                    }
                ]
            ]
        },
        "Merge Caption & Positions": {
            "main": [
                [
                    {
                        "node": "Apply Caption to Image",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "When clicking \u2018Test workflow\u2019": {
            "main": [
                [
                    {
                        "node": "Get Image",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        }
    },
    "n8n_version": "1.5.0"
}
Requirements
n8n instance, API credentials for connected services
Tags
#n8n #automation #workflow
Quick Actions
More in n8n Workflows