Change anyone's hairstyle and hair color from a single photo, powered by FLUX.1 Kontext [pro]. Choose from 90+ hairstyles and 30 hair colors — or let 'Random' surprise you — while keeping the face untouched.
Test this model instantly in the Console Playground — no code required
Copy usage instructions for Claude, ChatGPT, or other AI
curl -X POST "https://api.core.today/v1/predictions" \
-H "Content-Type: application/json" \
-H "X-API-Key: cdt_your_api_key" \
-d '{
"model": "flux-kontext-apps/change-haircut",
"input": {
"input_image": "https://example.com/portrait.png",
"gender": "none",
"haircut": "Random",
"hair_color": "Random",
"aspect_ratio": "match_input_image"
}
}'| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
seed | integer | No | - | Random seed. Set for reproducible generation |
gender | string | No | none | The gender of the person (optional hint) nonemalefemale |
haircut | string | No | No change | The hairstyle to apply — 90+ presets including Bob, Pixie Cut, Layered, French Braid, Undercut, Slicked Back, Hollywood Waves, Box Braids, Chignon, and more. 'Random' picks one for you No changeRandomStraightWavyCurlyBobPixie CutLayeredMessy BunHigh PonytailLow PonytailBraided PonytailFrench BraidDutch BraidFishtail BraidSpace BunsTop KnotUndercutMohawkCrew CutFaux HawkSlicked BackSide-PartedCenter-PartedBlunt BangsSide-Swept BangsShagLobAngled BobA-Line BobAsymmetrical BobGraduated BobInverted BobLayered ShagChoppy LayersRazor CutPermOmbréStraightenedSoft WavesGlamorous WavesHollywood WavesFinger WavesTousledFeatheredPageboyPigtailsPin CurlsRollersetTwist OutBantu KnotsDreadlocksCornrowsBox BraidsCrochet BraidsDouble Dutch BraidsFrench Fishtail BraidWaterfall BraidRope BraidHeart BraidHalo BraidCrown BraidBraided CrownBubble BraidBubble PonytailBallerina BraidsMilkmaid BraidsBohemian BraidsFlat TwistCrown TwistTwisted BunTwisted Half-UpdoTwist and Pin UpdoChignonSimple ChignonMessy ChignonFrench TwistFrench Twist UpdoFrench RollUpdoMessy UpdoKnotted UpdoBallerina BunBanana Clip UpdoBeehiveBouffantHair BowHalf-Up Top KnotHalf-Up, Half-DownMessy Bun with a HeadbandMessy Bun with a ScarfMessy Fishtail BraidSideswept PixieMohawk FadeZig-Zag PartVictory Rolls |
hair_color | string | No | No change | The hair color to apply. 'Random' picks one for you No changeRandomBlondeBrunetteBlackDark BrownMedium BrownLight BrownAuburnCopperRedStrawberry BlondePlatinum BlondeSilverWhiteBluePurplePinkGreenBlue-BlackGolden BlondeHoney BlondeCaramelChestnutMahoganyBurgundyJet BlackAsh BrownAsh BlondeTitaniumRose Gold |
input_image | string | Yes | - | Image of the person whose haircut you want to edit (jpeg, png, gif, or webp) |
aspect_ratio | string | No | match_input_image | Aspect ratio of the generated image. 'match_input_image' keeps the input's ratio match_input_image1:116:99:164:33:43:22:34:55:421:99:212:11:2 |
output_format | string | No | png | Output format for the generated image jpgpng |
safety_tolerance | integer | No | 2 | Safety tolerance, 0 is most strict and 2 is most permissive. 2 is currently the maximum allowed. |
There are 3 ways to provide files for the input_image parameter:
Attach files directly to POST /v1/predictions/upload. No separate upload step needed.
curl -X POST "https://api.core.today/v1/predictions/upload" \
-H "X-API-Key: cdt_your_api_key" \
-F "model=flux-kontext-apps/change-haircut" \
-F 'input={"prompt":"your prompt here"}' \
-F "file:input_image=@your_file.png"Pass a publicly accessible URL directly. You can also use file_url from the Storage API.
{
"model": "flux-kontext-apps/change-haircut",
"input": {
"prompt": "your prompt here",
"input_image": "https://example.com/image.jpg"
}
}Common parameters used when calling POST /v1/predictions.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
model | string | Yes | - | Model identifier |
input | object | Yes | - | Object containing the model-specific parameters from the table above |
output_folder | string | No | - | Folder path for output files (max 256 chars, '..' not allowed) |
webhook_url | string | No | - | Webhook URL to call on completion |
is_public | boolean | No | false | If true, output files are also available via permanent public URLs |
Let the model pick both a new hairstyle and hair color
curl -X POST "https://api.core.today/v1/predictions" \
-H "Content-Type: application/json" \
-H "X-API-Key: cdt_your_api_key" \
-d '{
"model": "flux-kontext-apps/change-haircut",
"input": {
"input_image": "https://example.com/portrait.png",
"gender": "none",
"haircut": "Random",
"hair_color": "Random",
"aspect_ratio": "match_input_image"
}
}'Keep the current haircut and try a rose gold color
curl -X POST "https://api.core.today/v1/predictions" \
-H "Content-Type: application/json" \
-H "X-API-Key: cdt_your_api_key" \
-d '{
"model": "flux-kontext-apps/change-haircut",
"input": {
"input_image": "https://example.com/portrait.png",
"haircut": "No change",
"hair_color": "Rose Gold"
}
}'POST /v1/predictions