AutomationFlowsAI & RAG › AI Hairstyle Preview Generator with Openai and Line Group Sharing

AI Hairstyle Preview Generator with Openai and Line Group Sharing

Bykote2 @kote2 on n8n.io

This workflow takes an image + instruction text from an n8n Form, edits only the hairstyle while keeping the face unchanged, uploads the result to Cloudinary, and pushes the image to a designated LINE group. It’s designed for salons or creative teams that need quick, consistent…

Event trigger★★★★☆ complexity8 nodesForm TriggerHTTP Request
AI & RAG Trigger: Event Nodes: 8 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #7535 — we link there as the canonical source.

This workflow follows the Form Trigger → 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 →

Download .json
{
  "id": "3nvbG23fEvkCCBSy",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "export_hairstyle-preview",
  "tags": [],
  "nodes": [
    {
      "id": "b6cf5de7-a5ef-47ae-9423-1c4afe97888e",
      "name": "On form submission",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -144,
        0
      ],
      "parameters": {
        "options": {},
        "formTitle": "Hairstyle Preview",
        "formFields": {
          "values": [
            {
              "fieldType": "file",
              "fieldLabel": "pic",
              "multipleFiles": false,
              "requiredField": true
            },
            {
              "fieldType": "textarea",
              "fieldLabel": "content",
              "requiredField": true
            }
          ]
        },
        "authentication": "basicAuth"
      },
      "credentials": {
        "httpBasicAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "ebb4764a-c163-4d9b-a2b7-65d64e1f4acd",
      "name": "Create Image",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        96,
        0
      ],
      "parameters": {
        "url": "https://api.openai.com/v1/images/edits",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "multipart-form-data",
        "authentication": "predefinedCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "prompt",
              "value": "=Keep the person's face exactly the same as in the input image. Do not alter or replace the face. \nOnly modify the hairstyle. Make sure the hairstyle looks natural and realistic. \nThe overall identity of the person must remain unchanged.\n\nUser request: {{ $json.content }}"
            },
            {
              "name": "model",
              "value": "gpt-image-1"
            },
            {
              "name": "size",
              "value": "1024x1536"
            },
            {
              "name": "image",
              "parameterType": "formBinaryData",
              "inputDataFieldName": "pic"
            },
            {
              "name": "quality",
              "value": "high"
            }
          ]
        },
        "nodeCredentialType": "openAiApi"
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "1156faf1-46ee-45ab-ac91-0325f735be62",
      "name": "Convert to File",
      "type": "n8n-nodes-base.convertToFile",
      "position": [
        336,
        0
      ],
      "parameters": {
        "options": {},
        "operation": "toBinary",
        "sourceProperty": "data[0].b64_json"
      },
      "typeVersion": 1.1
    },
    {
      "id": "ae98386d-cc94-49dd-a8dd-7a042f976fd8",
      "name": "Upload Image",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        592,
        0
      ],
      "parameters": {
        "url": "https://api.cloudinary.com/v1_1/{{CLOUDINARY_CLOUD_NAME}}/image/upload",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "multipart-form-data",
        "bodyParameters": {
          "parameters": [
            {
              "name": "file",
              "parameterType": "formBinaryData",
              "inputDataFieldName": "data"
            },
            {
              "name": "upload_preset",
              "value": "{{CLOUDINARY_UPLOAD_PRESET}}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "399838c0-b325-4f28-bf43-ff45a54d54aa",
      "name": "LINE output",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        800,
        0
      ],
      "parameters": {
        "url": "https://api.line.me/v2/bot/message/push",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n\"to\": \"{{LINE_GROUP_ID}}\",\n\"messages\": [\n{\n  \"type\": \"image\",\n  \"originalContentUrl\": \"{{ $json.secure_url }}\",\n  \"previewImageUrl\": \"{{ $json.secure_url }}\"\n}\n]\n} ",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer {{LINE_CHANNEL_TOKEN}}"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "71b229c4-bbf4-4b1a-a463-9898f7a2dee5",
      "name": "LINE input",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -16,
        448
      ],
      "parameters": {
        "path": "01d98d79-2c96-4a75-a4e1-b2faddb8d0a6",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 2
    },
    {
      "id": "2d679cdf-83b1-4a32-9a15-08ad8ee93de1",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -784,
        -128
      ],
      "parameters": {
        "color": 5,
        "width": 560,
        "height": 896,
        "content": "# Hairstyle Preview & LINE Group Share\n\n### Overview\n\nThis workflow takes an **image + instruction text** from an n8n Form, edits **only the hairstyle** while **keeping the face unchanged**, uploads the result to **Cloudinary**, and **pushes** the image to a designated **LINE group**. It\u2019s designed for salons or creative teams that need quick, consistent \u201chair-only\u201d edits and one-click sharing to a staff group.\n\n### Key Features\n\n* Accepts image and free-form instructions via **n8n Forms**\n* Enforces **identity preservation**: face is not altered; **only the hairstyle** is modified\n* Uses **OpenAI Image Edit** to generate the edited image\n* Uploads the output to **Cloudinary** and returns a public URL\n* Sends the final image to a **LINE group** via the **Push API** (no `replyToken` required)\n* Optional safety: store the **groupId** once (via webhook) in n8n **Data Store** and reuse it, avoiding mis-sending to individuals\n\n### Requirements\n\n* OpenAI API key (Image Edit capable model)\n* Cloudinary account with an **unsigned** `upload_preset`\n* LINE Official Account (Messaging API enabled) and the bot **added to the target group** (to capture `groupId` once)\n* n8n with **Forms** enabled and **Data Store** available\n\n### Notes\n\n* Replace placeholders like `CLOUDINARY_CLOUD_NAME`, `CLOUDINARY_UPLOAD_PRESET`, `LINE_CHANNEL_TOKEN`, and `LINE_GROUP_ID` with your values.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "49d75f49-9a26-47a4-ae78-37f5db81b08d",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -192,
        224
      ],
      "parameters": {
        "color": 3,
        "width": 464,
        "height": 384,
        "content": "## Please use this node to find out the LINE group ID\n- Invite the bot to a group, then send any message.\n- This webhook will capture the event, and the JSON payload will include source.groupId.\n- Copy and save this value for later use.\n- **\u26a0\ufe0fYou can safely delete this node after retrieving the group ID.**"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "7b478bb1-7e58-47aa-be3e-f002aa8e404a",
  "connections": {
    "Create Image": {
      "main": [
        [
          {
            "node": "Convert to File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload Image": {
      "main": [
        [
          {
            "node": "LINE output",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convert to File": {
      "main": [
        [
          {
            "node": "Upload Image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "On form submission": {
      "main": [
        [
          {
            "node": "Create 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.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow takes an image + instruction text from an n8n Form, edits only the hairstyle while keeping the face unchanged, uploads the result to Cloudinary, and pushes the image to a designated LINE group. It’s designed for salons or creative teams that need quick, consistent…

Source: https://n8n.io/workflows/7535/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

This workflow is ideal for content creators, video marketers, and research professionals who need to extract actionable insights, detailed transcripts, or metadata from YouTube videos efficiently. It

HTTP Request, Google Drive, Gmail +2
AI & RAG

Legal, Procurement, and Compliance teams at mid-size companies. ESN and agencies selling AI-powered contract review as a service.

Form Trigger, HTTP Request, Form +4
AI & RAG

This workflow takes a Loom link, extracts the video ID, uses the Loom API to download the video, then sends it to Gemini along with your question. Finally, it sends the output to Slack.

HTTP Request, Form Trigger, Slack
AI & RAG

This template is designed for filmmakers, content creators, social media managers, and AI developers who want to harness OpenAI's Sora 2 for creating physically accurate, cinematic videos with synchro

HTTP Request, Form Trigger, Form +1
AI & RAG

Transform text prompts into stunning images or edit existing visuals using OpenAI's latest GPT-4 Vision model through an intuitive web form interface.

Google Drive, HTTP Request, Form Trigger +1