fal-ai/kling/v1-5/kolors-virtual-try-on
Input
Hint: Drag and drop image files from your computer, images from web pages, paste from clipboard (Ctrl/Cmd+V), or provide a URL. Accepted file types: jpg, jpeg, png, webp, gif, avif

Hint: Drag and drop image files from your computer, images from web pages, paste from clipboard (Ctrl/Cmd+V), or provide a URL. Accepted file types: jpg, jpeg, png, webp, gif, avif

Customize your input with more control.
Logs
Kolors Virtual Try On - Free Change Clothes with AI Online | Kling v1.5
Virtual try-on model for fashion e-commerce. Composites a garment onto a person in a photo using Kling Kolors v1.5.
Endpoint
fal-ai/kling/v1-5/kolors-virtual-try-on
Cost: $0.07 / generation
Best for: Garment-on-model compositing, fashion e-commerce
About the Model
Kling Kolors Virtual Try-On v1.5 is a commercial-grade virtual try-on model developed by Kuaishou as part of the Kling image generation suite. It uses diffusion-based inpainting to realistically composite a garment onto a person: preserving the model's pose, skin tone, and body shape while accurately rendering fabric texture, color, and fit.
The model is image-in, image-out. It takes a photo of a person and a photo of a garment, and returns a single composited result. It is optimized for fashion e-commerce use cases and is cleared for commercial use.
Kolors refers to the underlying image generation backbone, which is Kuaishou's proprietary text-to-image model trained on a large Chinese and multilingual dataset. In the context of virtual try-on, the Kolors backbone handles perceptual quality and photorealism, while the Kling v1.5 wrapper handles garment alignment and pose conditioning.
Quick Start
JavaScript / Node.js
bashnpm install --save @fal-ai/client
bashexport FAL_KEY="YOUR_API_KEY"
javascriptimport { fal } from "@fal-ai/client"; const result = await fal.subscribe("fal-ai/kling/v1-5/kolors-virtual-try-on", { input: { human_image_url: "https://example.com/person.jpg", garment_image_url: "https://example.com/shirt.jpg" }, logs: true, onQueueUpdate: (update) => { if (update.status === "IN_PROGRESS") { update.logs.map((log) => log.message).forEach(console.log); } }, }); console.log(result.data.image.url); // output image URL
Python
bashpip install fal-client
bashexport FAL_KEY="YOUR_API_KEY"
pythonimport fal_client def on_queue_update(update): if isinstance(update, fal_client.InProgress): for log in update.logs: print(log["message"]) result = fal_client.subscribe( "fal-ai/kling/v1-5/kolors-virtual-try-on", arguments={ "human_image_url": "https://example.com/person.jpg", "garment_image_url": "https://example.com/shirt.jpg" }, with_logs=True, on_queue_update=on_queue_update, ) print(result["image"]["url"]) # output image URL
Schema
Input
| Parameter | Type | Description |
|---|---|---|
`human_image_url` | string | URL of the person photo. Front-facing, clear body visibility recommended. |
`garment_image_url` | string | URL of the garment photo. Flat lay with clean edges and no background preferred. |
`sync_mode` | boolean | If `true`, returns the image directly in the response instead of via queue. |
json{ "human_image_url": "https://example.com/person.jpg", "garment_image_url": "https://example.com/shirt.jpg" }
Output
| Field | Type | Description |
|---|---|---|
`image.url` | string | URL of the generated try-on image |
`image.width` | integer | Image width in pixels |
`image.height` | integer | Image height in pixels |
`image.content_type` | string | MIME type (e.g. `image/png`) |
`image.file_name` | string | File name |
`image.file_size` | integer | File size in bytes |
json{ "image": { "url": "https://v3.fal.media/files/panda/Hoy3zhimzVKi3F2uoGBnh_result.png", "width": 768, "height": 1024, "content_type": "image/png", "file_name": "result.png", "file_size": 595094 } }
Note: The output is a single image object, not an array. Access the URL at
`result["image"]["url"]`(Python) or`result.data.image.url`(JS), not`result[0]`.
Strengths and Limitations
Works well with:
- Upper body garments (shirts, jackets, tops)
- Simple silhouettes
- Front-facing models
Known limitations:
- Struggles with garment type switching (e.g. swapping a skirt for pants)
- Complex layering may not render accurately
Input Image Tips
Person photo:
- Front-facing pose
- Full or upper-body visibility
- Minimal occlusion (arms not crossed, etc.)
Garment photo:
- Flat lay or model shot with clean edges
- White or plain background preferred
- Avoid heavy shadows or folds
File Handling
You can pass images as public URLs or upload them via the client:
javascript// Upload a local file and use the returned URL const file = new File([fileData], "garment.jpg", { type: "image/jpeg" }); const url = await fal.storage.upload(file);
pythonurl = fal_client.upload_file("path/to/garment.jpg")
Base64 data URIs are also accepted, though they may slow down large requests.
Queue (Long-running Requests)
For async usage, submit to the queue and poll for results:
javascriptconst { request_id } = await fal.queue.submit("fal-ai/kling/v1-5/kolors-virtual-try-on", { input: { human_image_url: "...", garment_image_url: "..." }, webhookUrl: "https://your-webhook.url/results", // optional }); const status = await fal.queue.status("fal-ai/kling/v1-5/kolors-virtual-try-on", { requestId: request_id, logs: true, }); const result = await fal.queue.result("fal-ai/kling/v1-5/kolors-virtual-try-on", { requestId: request_id, });
Related Endpoints
If this model doesn't fit your use case, consider:
`fal-ai/leffa/virtual-tryon``fal-ai/image-apps-v2/virtual-try-on`
