{"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    Yaron@nofluff.online\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}]]}}}