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 →
{
"id": "9r4T5kELOXAV8L1F",
"name": "3D Figurine Orthographic Views with Midjourney and GPT-4o-Image API",
"tags": [],
"nodes": [
{
"id": "30ff7c89-7fb6-4daf-b7f2-d178ee702243",
"name": "When clicking \u2018Test workflow\u2019",
"type": "n8n-nodes-base.manualTrigger",
"position": [
720,
220
],
"parameters": {},
"typeVersion": 1
},
{
"id": "26cb9d6e-6a73-4a27-805d-8577c84101fa",
"name": "Midjourney Generator",
"type": "n8n-nodes-base.httpRequest",
"position": [
940,
220
],
"parameters": {
"url": "https://api.piapi.ai/api/v1/task",
"method": "POST",
"options": {},
"jsonBody": "{\n \"model\": \"midjourney\",\n \"task_type\": \"imagine\",\n \"input\": {\n \"prompt\": \"IP design, pop mart style, cartoon-style characters, a little girl with a red satche on her back, a pair of big eyes, long eyelashes, with pigtails, wearing a red beret, red shoes, chubby body, wearing a red and white striped dress, clean white background, crystal-clear material::5, 3D rendering, 3D modeling --ar 3:4 --niji 6\",\n \"aspect_ratio\": \"3:2\",\n \"process_mode\": \"turbo\",\n \"skip_prompt_check\": false\n }\n}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"headerParameters": {
"parameters": [
{
"name": "x-api-key"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "4220555c-f4f4-43ab-8d03-1ae4b959bdd1",
"name": "Get Midjourney URL",
"type": "n8n-nodes-base.httpRequest",
"position": [
760,
460
],
"parameters": {
"url": "=https://api.piapi.ai/api/v1/task/{{ $json.data.task_id }}",
"options": {},
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "x-api-key",
"value": "72858adea87ad16865d5b0a24c3d9b9f58a6e7b1a8a8a8a0d6b81a9f3a9812f3"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "e81311ee-4522-4fb3-929f-1c062427c859",
"name": "Verify URL Acquisition",
"type": "n8n-nodes-base.if",
"position": [
960,
460
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "a0f8758e-d6fd-44f8-bd79-bc3c4dceddcf",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.data.status }}",
"rightValue": "completed"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "9519899e-c246-474e-8fd6-7dd16cf27a5b",
"name": "Wait for Generation",
"type": "n8n-nodes-base.wait",
"position": [
980,
700
],
"parameters": {},
"typeVersion": 1.1
},
{
"id": "693348ab-12ab-4896-9fda-a9141263ccbf",
"name": "Get Random Image URL",
"type": "n8n-nodes-base.code",
"position": [
1240,
520
],
"parameters": {
"jsCode": "// JavaScript Code for Function Node\nreturn {\n random_temp_url: $input.all()[0].json.data.output.temporary_image_urls[\n Math.floor(Math.random() * $input.all()[0].json.data.output.temporary_image_urls.length)\n ]\n};"
},
"typeVersion": 2
},
{
"id": "18f030a6-7333-45df-af1d-f8c5492084c6",
"name": "Generation 3-view Image with GPT-4o-Image",
"type": "n8n-nodes-base.httpRequest",
"position": [
1440,
520
],
"parameters": {
"url": "https://api.piapi.ai/v1/chat/completions",
"method": "POST",
"options": {},
"jsonBody": "={\n \"model\": \"gpt-4o-image-preview\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": [\n {\n \"type\": \"image_url\",\n \"image_url\": {\n \"url\": \"{{ $json.random_temp_url }}\"\n }\n },\n {\n \"type\": \"text\",\n \"text\": \"Convert this image into a 3D figurine image, with front view, side view, and back view in one page. Generate a turnaround sheet showing the figurine\u2019s front with full details, profile, and back views in left-to-right sequence. ar=10:3\"\n }\n ]\n }\n ],\n \"stream\": true\n}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer "
}
]
}
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "4d758715-79d5-4c2e-94d2-d1cfe1bdda6d",
"name": "Check if the URL is obtained",
"type": "n8n-nodes-base.if",
"position": [
1840,
520
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "08a2ebe6-dc95-4b8a-ada1-1173645cc3f4",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.finish_reason }}",
"rightValue": "not_found"
},
{
"id": "ed245d42-677f-4465-a3f1-d23c6e609f5e",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "690c002c-8641-4bb9-8c55-8b5cd6f01f2c",
"name": "Get Final Output",
"type": "n8n-nodes-base.code",
"position": [
2080,
540
],
"parameters": {
"jsCode": "// Method 2: n8n workflow compatible version\nreturn $input.all().map(item => {\n return {\n image_url: item.json.image_url\n };\n});"
},
"typeVersion": 2
},
{
"id": "db38b578-1078-4a89-b429-55ba337a21fc",
"name": "Get Image",
"type": "n8n-nodes-base.code",
"position": [
1660,
520
],
"parameters": {
"jsCode": "const chunks = $input.first().json.data.split('\\n\\n');\n\nlet imageUrl = null;\n\n// \u53cd\u5411\u904d\u5386 chunks (\u4ece\u6700\u65b0\u6570\u636e\u5f00\u59cb\u68c0\u67e5)\nfor (let i = chunks.length - 1; i >= 0; i--) {\n const chunk = chunks[i];\n \n if (!chunk.startsWith('data: ')) continue;\n \n try {\n const jsonStr = chunk.substring(6); // \u53bb\u6389 \"data: \" \u524d\u7f00\n if (jsonStr.trim() === '[DONE]') continue;\n \n const data = JSON.parse(jsonStr);\n \n // \u68c0\u67e5\u662f\u5426\u5305\u542b\u56fe\u7247\u6807\u8bb0\uff08Markdown \u56fe\u7247\u8bed\u6cd5\uff09\n if (data.choices && data.choices[0].delta.content) {\n const content = data.choices[0].delta.content;\n const urlMatch = content.match(/!\\[.*?\\]\\((https?:\\/\\/[^\\s]+)\\)/);\n \n if (urlMatch && urlMatch[1]) {\n imageUrl = urlMatch[1];\n break;\n }\n }\n } catch (e) {\n continue;\n }\n}\n\nreturn {\n image_url: imageUrl,\n finish_reason: imageUrl ? \"success\" : \"not_found\"\n};"
},
"typeVersion": 2
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "0e663ca1-c9b2-4fb2-a8bb-14ed8bb63d11",
"connections": {
"Get Image": {
"main": [
[
{
"node": "Check if the URL is obtained",
"type": "main",
"index": 0
}
]
]
},
"Get Midjourney URL": {
"main": [
[
{
"node": "Verify URL Acquisition",
"type": "main",
"index": 0
}
]
]
},
"Wait for Generation": {
"main": [
[
{
"node": "Get Midjourney URL",
"type": "main",
"index": 0
}
]
]
},
"Get Random Image URL": {
"main": [
[
{
"node": "Generation 3-view Image with GPT-4o-Image",
"type": "main",
"index": 0
}
]
]
},
"Midjourney Generator": {
"main": [
[
{
"node": "Get Midjourney URL",
"type": "main",
"index": 0
}
]
]
},
"Verify URL Acquisition": {
"main": [
[
{
"node": "Get Random Image URL",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait for Generation",
"type": "main",
"index": 0
}
]
]
},
"Check if the URL is obtained": {
"main": [
[
{
"node": "Generation 3-view Image with GPT-4o-Image",
"type": "main",
"index": 0
}
],
[
{
"node": "Get Final Output",
"type": "main",
"index": 0
}
]
]
},
"When clicking \u2018Test workflow\u2019": {
"main": [
[
{
"node": "Midjourney Generator",
"type": "main",
"index": 0
}
]
]
},
"Generation 3-view Image with GPT-4o-Image": {
"main": [
[
{
"node": "Get 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.
httpHeaderAuth
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
How this works
Generate precise orthographic views of your 3D figurine designs effortlessly, turning conceptual sketches into professional multi-angle visuals that streamline prototyping and client presentations. This workflow suits designers, 3D modellers, and product developers who need quick, accurate representations without manual rendering tools. It begins with Midjourney to create initial images, then leverages the GPT-4o-Image API to compile front, side, and top views into a cohesive orthographic sheet, saving hours of tedious adjustments.
Use this when you have a basic figurine description ready for rapid visualisation in early design stages, especially for custom toys or miniatures. Avoid it for highly complex models requiring photorealistic details, as Midjourney's style may introduce artistic variations. Common adaptations include swapping Midjourney prompts for specific themes or adding nodes to export views directly to design software like Blender.
About this workflow
3D Figurine Orthographic Views with Midjourney and GPT-4o-Image API. Uses manualTrigger, httpRequest. Event-driven trigger; 10 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.
Create Animated Stories using GPT-4o-mini, Midjourney, Kling and Creatomate API. Uses httpRequest, stickyNote, manualTrigger. Event-driven trigger; 51 nodes.
Generate Leads with Google Maps - AlexK1919. Uses manualTrigger, scheduleTrigger, executeWorkflowTrigger, stopAndError. Event-driven trigger; 42 nodes.
Limit Code. Uses microsoftOutlookTrigger, httpRequest, limit, noOp. Event-driven trigger; 41 nodes.
AutoQoutesV2_template. Uses manualTrigger, httpRequest, stickyNote, googleSheets. Event-driven trigger; 28 nodes.
Turn YouTube Videos into Summaries, Transcripts, and Visual Insights. Uses manualTrigger, stickyNote, httpRequest. Event-driven trigger; 26 nodes.