This workflow follows the Editimage → HTTP Request 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 →
{
"nodes": [
{
"name": "On clicking 'execute'",
"type": "n8n-nodes-base.manualTrigger",
"position": [
260,
210
],
"parameters": {},
"typeVersion": 1
},
{
"name": "Fetch new followers",
"type": "n8n-nodes-base.httpRequest",
"position": [
460,
210
],
"parameters": {
"url": "https://api.twitter.com/2/users/{YOUR_USER_ID}/followers?user.fields=profile_image_url&max_results=3",
"options": {},
"authentication": "headerAuth"
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"name": "Item Lists",
"type": "n8n-nodes-base.itemLists",
"position": [
660,
210
],
"parameters": {
"options": {},
"fieldToSplitOut": "data"
},
"typeVersion": 1
},
{
"name": "Function",
"type": "n8n-nodes-base.function",
"position": [
1660,
210
],
"parameters": {
"functionCode": "const binary = {};\nfor (let i=0; i < items.length; i++) {\n binary[`data${i}`] = items[i].binary.avatar;\n}\n\nreturn [\n {\n json: {\n numIcons: items.length,\n },\n binary,\n }\n];\n"
},
"typeVersion": 1
},
{
"name": "Merge",
"type": "n8n-nodes-base.merge",
"position": [
1910,
110
],
"parameters": {
"mode": "mergeByIndex"
},
"typeVersion": 1
},
{
"name": "Fetching images",
"type": "n8n-nodes-base.httpRequest",
"position": [
860,
210
],
"parameters": {
"url": "={{$json[\"profile_image_url\"].replace('normal','400x400')}}",
"options": {},
"responseFormat": "file",
"dataPropertyName": "avatar"
},
"typeVersion": 1
},
{
"name": "Fetch bg",
"type": "n8n-nodes-base.httpRequest",
"position": [
1660,
-40
],
"parameters": {
"url": "{TEMPLATE_IMAGE_URL}",
"options": {},
"responseFormat": "file",
"dataPropertyName": "bg"
},
"typeVersion": 1
},
{
"name": "Resize",
"type": "n8n-nodes-base.editImage",
"position": [
1060,
210
],
"parameters": {
"width": 200,
"height": 200,
"options": {},
"operation": "resize",
"dataPropertyName": "avatar"
},
"typeVersion": 1
},
{
"name": "Crop",
"type": "n8n-nodes-base.editImage",
"position": [
1260,
210
],
"parameters": {
"options": {
"format": "png"
},
"operation": "multiStep",
"operations": {
"operations": [
{
"width": 200,
"height": 200,
"operation": "create",
"backgroundColor": "#000000ff"
},
{
"color": "#ffffff00",
"operation": "draw",
"primitive": "circle",
"endPositionX": 25,
"endPositionY": 50,
"startPositionX": 100,
"startPositionY": 100
},
{
"operator": "In",
"operation": "composite",
"dataPropertyNameComposite": "avatar"
}
]
},
"dataPropertyName": "avatar"
},
"typeVersion": 1
},
{
"name": "Edit Image",
"type": "n8n-nodes-base.editImage",
"position": [
2110,
110
],
"parameters": {
"options": {},
"operation": "multiStep",
"operations": {
"operations": [
{
"operation": "composite",
"positionX": 1000,
"positionY": 375,
"dataPropertyNameComposite": "data0"
},
{
"operation": "composite",
"positionX": 1100,
"positionY": 375,
"dataPropertyNameComposite": "data1"
},
{
"operation": "composite",
"positionX": 1200,
"positionY": 375,
"dataPropertyNameComposite": "data2"
}
]
},
"dataPropertyName": "bg"
},
"typeVersion": 1
},
{
"name": "Resize1",
"type": "n8n-nodes-base.editImage",
"position": [
1450,
210
],
"parameters": {
"width": 75,
"height": 75,
"options": {},
"operation": "resize",
"dataPropertyName": "avatar"
},
"typeVersion": 1
},
{
"name": "HTTP Request",
"type": "n8n-nodes-base.httpRequest",
"position": [
2310,
110
],
"parameters": {
"url": "https://api.twitter.com/1.1/account/update_profile_banner.json",
"options": {
"bodyContentType": "multipart-form-data"
},
"requestMethod": "POST",
"authentication": "oAuth1",
"jsonParameters": true,
"sendBinaryData": true,
"binaryPropertyName": "banner:bg"
},
"credentials": {
"oAuth1Api": {
"name": "<your credential>"
}
},
"typeVersion": 1
}
],
"connections": {
"Crop": {
"main": [
[
{
"node": "Resize1",
"type": "main",
"index": 0
}
]
]
},
"Merge": {
"main": [
[
{
"node": "Edit Image",
"type": "main",
"index": 0
}
]
]
},
"Resize": {
"main": [
[
{
"node": "Crop",
"type": "main",
"index": 0
}
]
]
},
"Resize1": {
"main": [
[
{
"node": "Function",
"type": "main",
"index": 0
}
]
]
},
"Fetch bg": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"Function": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"Edit Image": {
"main": [
[
{
"node": "HTTP Request",
"type": "main",
"index": 0
}
]
]
},
"Item Lists": {
"main": [
[
{
"node": "Fetching images",
"type": "main",
"index": 0
}
]
]
},
"Fetching images": {
"main": [
[
{
"node": "Resize",
"type": "main",
"index": 0
}
]
]
},
"Fetch new followers": {
"main": [
[
{
"node": "Item Lists",
"type": "main",
"index": 0
}
]
]
},
"On clicking 'execute'": {
"main": [
[
{
"node": "Fetch new followers",
"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.
httpHeaderAuthoAuth1Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
How this works
This workflow empowers content creators and social media managers to effortlessly resize and edit images for their posts, ensuring professional visuals without complex software. It fetches new follower data via HTTP requests, pulls in original images and background elements, then applies precise resizing using the editImage node to maintain brand consistency. Ideal for teams handling frequent visual updates, it streamlines the process from trigger to final output in just 12 nodes.
Use this workflow when manually initiating image edits for event-driven tasks like updating social profiles after gaining followers, especially if you need quick HTTP-based fetches and simple transformations. Avoid it for automated, high-volume processing or AI-enhanced edits, as it relies on manual triggers and lacks advanced intelligence. Common variations include swapping HTTP requests for direct file uploads or adding merge nodes to blend multiple image sources for custom collages.
About this workflow
Manual Editimage. Uses manualTrigger, httpRequest, itemLists, editImage. Event-driven trigger; 12 nodes.
Source: https://github.com/Zie619/n8n-workflows — 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.
Manual Editimage. Uses manualTrigger, httpRequest, itemLists, editImage. Event-driven trigger; 12 nodes.
Code Editimage. Uses manualTrigger, editImage, httpRequest, stickyNote. Event-driven trigger; 16 nodes.
Code Editimage. Uses manualTrigger, lmChatGoogleGemini, sort, stickyNote. Event-driven trigger; 20 nodes.
Code Editimage. Uses manualTrigger, lmChatGoogleGemini, sort, stickyNote. Event-driven trigger; 20 nodes.
Add text to an image downloaded from the internet. Uses manualTrigger, editImage, httpRequest. Event-driven trigger; 3 nodes.