
flux-kontext-apps/change-haircut - Image Generator
Description
Categories
🤖 AI & Machine Learning
Nodes Used
n8n-nodes-base.ifn8n-nodes-base.ifn8n-nodes-base.setn8n-nodes-base.setn8n-nodes-base.setn8n-nodes-base.setn8n-nodes-base.setn8n-nodes-base.coden8n-nodes-base.waitn8n-nodes-base.wait
PriceGratis
Views0
Last Updated11/28/2025
workflow.json
{
"meta": {
"instanceId": "83acd8e9-a8d1-49c6-b5c2-20f1209c2e52",
"model_name": "change-haircut",
"model_type": "image",
"version_id": "735c13ba40448758e00e6bb2d764624508bed5a07bbb6a5f33e41482fed8ac88",
"model_owner": "flux-kontext-apps",
"generated_at": "2025-08-01T14:50:47.651090"
},
"name": "flux-kontext-apps/change-haircut - Image Generator",
"nodes": [
{
"id": "26721044-90de-48a9-99a1-473d63229c26",
"name": "Manual Trigger",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-896,
-176
],
"parameters": {},
"typeVersion": 1
},
{
"id": "b068279a-20bb-489c-916b-d35dd851087f",
"name": "Set API Token",
"type": "n8n-nodes-base.set",
"position": [
-608,
-80
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "api_token",
"name": "api_token",
"type": "string",
"value": "YOUR_REPLICATE_API_TOKEN"
}
]
}
},
"typeVersion": 3.3
},
{
"id": "38447427-677b-4b90-9d1a-4419c93e74b4",
"name": "Set Image Parameters",
"type": "n8n-nodes-base.set",
"position": [
-288,
-128
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "api_token",
"name": "api_token",
"type": "string",
"value": "={{ $('Set API Token').item.json.api_token }}"
},
{
"id": "seed",
"name": "seed",
"type": "number",
"value": -1
},
{
"id": "gender",
"name": "gender",
"type": "string",
"value": "none"
},
{
"id": "haircut",
"name": "haircut",
"type": "string",
"value": "No change"
},
{
"id": "hair_color",
"name": "hair_color",
"type": "string",
"value": "No change"
},
{
"id": "input_image",
"name": "input_image",
"type": "string",
"value": "https://picsum.photos/512/512"
},
{
"id": "aspect_ratio",
"name": "aspect_ratio",
"type": "string",
"value": "match_input_image"
},
{
"id": "output_format",
"name": "output_format",
"type": "string",
"value": "png"
},
{
"id": "safety_tolerance",
"name": "safety_tolerance",
"type": "number",
"value": 2
}
]
}
},
"typeVersion": 3.3
},
{
"id": "10868fbb-05b7-4d0d-862b-975d87f866f4",
"name": "Create Image Prediction",
"type": "n8n-nodes-base.httpRequest",
"position": [
-64,
-128
],
"parameters": {
"url": "https://api.replicate.com/v1/predictions",
"method": "POST",
"options": {
"response": {
"response": {
"neverError": true,
"responseFormat": "json"
}
}
},
"jsonBody": "={\n \"version\": \"flux-kontext-apps/change-haircut:735c13ba40448758e00e6bb2d764624508bed5a07bbb6a5f33e41482fed8ac88\",\n \"input\": {\n \"seed\": {{ $json.seed }},\n \"gender\": \"{{ $json.gender }}\",\n \"haircut\": \"{{ $json.haircut }}\",\n \"hair_color\": \"{{ $json.hair_color }}\",\n \"input_image\": \"{{ $json.input_image }}\",\n \"aspect_ratio\": \"{{ $json.aspect_ratio }}\",\n \"output_format\": \"{{ $json.output_format }}\",\n \"safety_tolerance\": {{ $json.safety_tolerance }}\n }\n}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "=Bearer {{ $json.api_token }}"
},
{
"name": "Prefer",
"value": "wait"
}
]
}
},
"typeVersion": 4.1
},
{
"id": "c4f61ef8-b1ee-4a3b-b9f0-fadff64d9dc6",
"name": "Wait 5s",
"type": "n8n-nodes-base.wait",
"position": [
160,
-128
],
"webhookId": "d2c4ca16-0eb2-45b4-8a2d-eec2f99df89c",
"parameters": {
"unit": "seconds",
"amount": 5
},
"typeVersion": 1
},
{
"id": "82880bc3-5895-419d-8f72-e2fea6b988b3",
"name": "Check Status",
"type": "n8n-nodes-base.httpRequest",
"position": [
384,
-128
],
"parameters": {
"url": "=https://api.replicate.com/v1/predictions/{{ $('Create Image Prediction').item.json.id }}",
"options": {
"response": {
"response": {
"neverError": true,
"responseFormat": "json"
}
}
},
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "=Bearer {{ $('Set API Token').item.json.api_token }}"
}
]
}
},
"typeVersion": 4.1
},
{
"id": "7fc7d9a7-23c9-4a17-b677-8f711b4d3ef0",
"name": "Is Complete?",
"type": "n8n-nodes-base.if",
"position": [
528,
-240
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "c93d7ba1-0ef9-4087-aa10-389cb2a2c6bd",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.status }}",
"rightValue": "succeeded"
}
]
}
},
"typeVersion": 2
},
{
"id": "cddce3a6-1f1e-4dc3-987e-0835b6ced575",
"name": "Has Failed?",
"type": "n8n-nodes-base.if",
"position": [
848,
-80
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "d1bfd044-3a07-4c18-b55f-72d192596139",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.status }}",
"rightValue": "failed"
}
]
}
},
"typeVersion": 2
},
{
"id": "beb349c6-1de0-4bbb-a4e2-cebd64c43c50",
"name": "Wait 10s",
"type": "n8n-nodes-base.wait",
"position": [
720,
128
],
"webhookId": "51a05aef-e220-406d-8c2c-e59c82c3e26e",
"parameters": {
"unit": "seconds",
"amount": 10
},
"typeVersion": 1
},
{
"id": "63f73552-9889-44fc-97b9-f14e7679c18b",
"name": "Success Response",
"type": "n8n-nodes-base.set",
"position": [
832,
-320
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "success-response",
"name": "response",
"type": "object",
"value": "={{ { success: true, image_url: $json.output, prediction_id: $json.id, status: $json.status, message: 'Image generated successfully' } }}"
}
]
}
},
"typeVersion": 3.3
},
{
"id": "b8fe732c-12b2-4f22-8b0f-be1a720797fa",
"name": "Error Response",
"type": "n8n-nodes-base.set",
"position": [
1344,
144
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "error-response",
"name": "response",
"type": "object",
"value": "={{ { success: false, error: $json.error || 'Image generation failed', prediction_id: $json.id, status: $json.status, message: 'Failed to generate image' } }}"
}
]
}
},
"typeVersion": 3.3
},
{
"id": "2295937c-372e-47ce-ae5b-99628437d014",
"name": "Display Result",
"type": "n8n-nodes-base.set",
"position": [
1552,
-144
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "final-result",
"name": "final_result",
"type": "object",
"value": "={{ $json.response }}"
}
]
}
},
"typeVersion": 3.3
},
{
"id": "4ee2b569-2914-40bb-a4f1-eedc14a35682",
"name": "Log Request",
"type": "n8n-nodes-base.code",
"position": [
160,
-320
],
"parameters": {
"jsCode": "// Log generation details for monitoring\nconst data = $input.all()[0].json;\n\nconsole.log('flux-kontext-apps/change-haircut Request:', {\n timestamp: new Date().toISOString(),\n prediction_id: data.id,\n model_type: 'image'\n});\n\nreturn $input.all();"
},
"typeVersion": 2
},
{
"id": "816a7673-8a56-4e79-bcb6-dcedcc07f691",
"name": "Sticky Note9",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1536,
-304
],
"parameters": {
"color": 4,
"width": 580,
"height": 320,
"content": "=======================================\n CHANGE-HAIRCUT GENERATOR\n=======================================\nFor any questions or support, please contact:\n [email protected]\n\nExplore more tips and tutorials here:\n - YouTube: https://www.youtube.com/@YaronBeen/videos\n - LinkedIn: https://www.linkedin.com/in/yaronbeen/\n======================================="
},
"typeVersion": 1
},
{
"id": "ce73747d-c223-41cd-802b-4654cc53d2b4",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1536,
48
],
"parameters": {
"color": 4,
"width": 589,
"height": 1958,
"content": "## 🤖 **FLUX-KONTEXT-APPS/CHANGE-HAIRCUT - IMAGE GENERATION WORKFLOW**\n\n**🔥 Powered by Replicate API and n8n Automation**\n\n---\n\n### 📝 **Model Overview**\n\n- **Owner**: flux-kontext-apps\n- **Model**: change-haircut\n- **Type**: Image Generation\n- **API Endpoint**: https://api.replicate.com/v1/predictions\n\n**🎯 What This Model Does:**\nQuickly change someone's hair style and hair color, powered by FLUX.1 Kontext [pro]\n\n---\n\n### 📋 **Parameter Reference**\n\n**🔴 Required Parameters:** input_image\n**🔵 Optional Parameters:** seed, gender, haircut, hair_color, aspect_ratio, output_format, safety_tolerance\n\n**📖 Detailed Parameter Guide:**\n- **seed** (integer): Random seed. Set for reproducible generation\n- **gender** (string): The gender of the person (Default: none)\n- **haircut** (string): The haircut to give them (Default: No change)\n- **hair_color** (string): The color of the person's hair (Default: No change)\n- **input_image** (string): Image of the person's haircut you want to edit. Must be jpeg, png, gif, or webp.\n- **aspect_ratio** (string): Aspect ratio of the generated image. Use 'match_input_image' to match the aspect ratio of the inp... (Default: match_input_image)\n- **output_format** (string): Output format for the generated image (Default: png)\n- **safety_tolerance** (integer): Safety tolerance, 0 is most strict and 2 is most permissive. 2 is currently the maximum allowed. (Default: 2)\n\n---\n\n### 🔧 **Workflow Components Explained**\n\n**🎯 Manual Trigger**\n- Starts the workflow execution\n- Click to begin image generation process\n\n**🔐 Set API Token** \n- Configures your Replicate API authentication\n- Replace 'YOUR_REPLICATE_API_TOKEN' with your actual token\n- Essential for accessing the flux-kontext-apps/change-haircut model\n\n**⚙️ Set Image Parameters**\n- Configures all input parameters for the model\n- Includes both required and optional parameters\n- Pre-filled with sensible defaults for testing\n\n**🚀 Create Image Prediction**\n- Sends the generation request to Replicate API\n- Uses the image parameters you configured\n- Returns a prediction ID for status tracking\n\n**⏳ Wait & Status Checking Loop**\n- Waits 5 seconds then checks prediction status\n- Continues checking until completion or failure\n- Implements intelligent retry logic with 10-second delays\n\n**✅ Success/Error Handling**\n- Routes successful completions to success response\n- Handles failures gracefully with error details\n- Returns structured JSON response with URLs/errors\n\n**📊 Logging & Monitoring**\n- Logs all requests for debugging and monitoring\n- Tracks timestamps and prediction IDs\n- Helps identify issues during development\n\n---\n\n### 🌟 **Key Benefits**\n\n- **🎨 Instant Image Generation**: Transform ideas into images using state-of-the-art AI\n- **🔄 Automated Workflow**: Handles the complete generation pipeline automatically\n- **🛡️ Error Resilience**: Built-in retry logic and comprehensive error handling\n- **📈 Production Ready**: Includes logging, monitoring, and structured responses\n- **🔧 Customizable**: Easy to modify parameters and extend functionality\n- **⚡ Efficient Processing**: Optimized API calls with intelligent status checking\n\n---\n\n### 🚀 **Quick Start Instructions**\n\n1. **🔑 Get Your API Key**\n - Sign up at https://replicate.com\n - Navigate to your account settings\n - Copy your API token\n\n2. **🔧 Configure the Workflow**\n - Replace 'YOUR_REPLICATE_API_TOKEN' with your actual token\n - Adjust parameters in the 'Set Image Parameters' node\n - Customize the prompt or other inputs as needed\n\n3. **▶️ Execute the Workflow**\n - Click the 'Manual Trigger' to start\n - Monitor the execution in the n8n interface\n - Check logs for detailed execution information\n\n4. **📥 Get Your Results**\n - Successful generations return a URL to your image\n - Download or use the generated content as needed\n - Results are available immediately upon completion\n\n---\n\n### 🔍 **Troubleshooting Guide**\n\n**Common Issues:**\n- **Invalid API Token**: Ensure your Replicate token is valid and has sufficient credits\n- **Parameter Validation**: Check that required parameters match expected types\n- **Generation Timeout**: Some images take longer - monitor the logs\n- **Output Format**: Verify the model returns the expected output format\n\n**Best Practices:**\n- Test with default parameters first\n- Monitor your Replicate usage and billing\n- Keep API tokens secure and never commit them to code\n- Use appropriate parameter values for your use case\n\n---\n\n**🔗 Additional Resources:**\n- Model Documentation: https://replicate.com/flux-kontext-apps/change-haircut\n- Replicate API Docs: https://replicate.com/docs\n- n8n Documentation: https://docs.n8n.io\n\n---"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"versionId": "1",
"connections": {
"Wait 5s": {
"main": [
[
{
"node": "Check Status",
"type": "main",
"index": 0
}
]
]
},
"Wait 10s": {
"main": [
[
{
"node": "Check Status",
"type": "main",
"index": 0
}
]
]
},
"Has Failed?": {
"main": [
[
{
"node": "Error Response",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait 10s",
"type": "main",
"index": 0
}
]
]
},
"Log Request": {
"main": [
[
{
"node": "Wait 5s",
"type": "main",
"index": 0
}
]
]
},
"Check Status": {
"main": [
[
{
"node": "Is Complete?",
"type": "main",
"index": 0
}
]
]
},
"Is Complete?": {
"main": [
[
{
"node": "Success Response",
"type": "main",
"index": 0
}
],
[
{
"node": "Has Failed?",
"type": "main",
"index": 0
}
]
]
},
"Set API Token": {
"main": [
[
{
"node": "Set Image Parameters",
"type": "main",
"index": 0
}
]
]
},
"Error Response": {
"main": [
[
{
"node": "Display Result",
"type": "main",
"index": 0
}
]
]
},
"Manual Trigger": {
"main": [
[
{
"node": "Set API Token",
"type": "main",
"index": 0
}
]
]
},
"Success Response": {
"main": [
[
{
"node": "Display Result",
"type": "main",
"index": 0
}
]
]
},
"Set Image Parameters": {
"main": [
[
{
"node": "Create Image Prediction",
"type": "main",
"index": 0
}
]
]
},
"Create Image Prediction": {
"main": [
[
{
"node": "Log Request",
"type": "main",
"index": 0
}
]
]
}
}
}