Kling Virtual Try On (Ace Data Cloud)
New outfit, same person, one API call
- status
- task_id
- media_urls_json
- first_media_url
- result_json
- trace_id
Two images in, one composite out
Virtual Try On is the simplest node in this pack, and one of the most immediately useful: a product image and a person image go in, a person wearing that product comes out. No prompt, no model selection, no motion. It's garment transfer as a service call.
The local competition is real and worth knowing about. Reference-conditioned editing handles this now - Flux 2 does try-on with a few reference images and no LoRA, at a speed that makes batch work plausible, and that's free per run once you own the checkpoint. So why call an API? Because you don't want to own it: no download, no VRAM, no workflow to debug, and you can run it from a laptop. Also because garment fidelity in a specific product photo is exactly the kind of fiddly compositing job people get tired of babysitting. Pay the per-call price, get the composite.
How it works
contents is a JSON array of at least two entries, and the contract is strict about which two:
[
{"type": "product_image", "url": "https://.../jacket.png"},
{"type": "person_image", "url": "https://.../me.jpg"}
]
Those are the only two types - product_image and person_image. Each entry needs both type and url, and each URL has to be reachable by the service. That's the whole required input.
settings is optional and consists of three booleans, all of which are questions about what to preserve: keep_face, keep_pose, keep_background. How you set them is how you set the job's character - keeping face and pose but letting the background go is a studio-catalogue look; keeping everything means the result should sit convincingly in the original photo. Worth running once with all three off to see the model's own instincts before you start constraining it.
watermark is a STRING widget expecting true or false; the client coerces it to a real boolean. callback_url takes a webhook if you'd rather not poll.
The contract is validated locally with jsonschema before the request is sent, so a malformed contents array is a free error rather than a paid one.
Outputs and getting the result back
Widgets: parameters_json, contents, settings, watermark, callback_url. Outputs: the standard six STRINGs - status, task_id, media_urls_json, first_media_url, result_json, trace_id.
Here's the wrinkle: this pack has no image loader. It registers loaders for VIDEO and AUDIO only, so there's no way to turn a returned image URL into a ComfyUI IMAGE tensor from inside this pack. If your workflow needs the composite as pixels - upscaling it, face-swapping it, feeding it to an image-to-image pass - you need another pack's URL-image loader, or you save it out of first_media_url by hand. Mildly annoying, and easy to mistake for a missing install. The image is fine; the plumbing just isn't here.
If you only want to look at the result, result_json into a PreviewAny is the fastest route, and first_media_url is a plain link you can open in a browser.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/AceDataCloud/KlingComfyUI
cd KlingComfyUI && python -m pip install -r requirements.txt
# restart ComfyUI
Manager: search Kling, publisher acedatacloud, package Kling by Ace Data Cloud (Registry ID kling). Requirements: requests and jsonschema. There's nothing to download and no GPU involved, which is the entire point of the category.
export ACEDATACLOUD_API_KEY=your_key_here # then launch ComfyUI
Common issues
"Invalid contents: does not meet the API's minItems constraint." You sent only one image. It wants both the product and the person, every time.
Wrong type names. person and product aren't valid; it's person_image and product_image. The error will point at the offending index.
Product photos need to be clean. A photo of a garment on a hanger, in flat layers, with the whole item visible, beats a busy lifestyle shot where the jacket is 15% of the frame and half in shadow. The model has to segment the garment before it can move it.
Images must be public URLs. No upload widget on this node.
Read the compliance angle once. Try-on of clothing is the benign end of synthetic imagery, but the moment the person image isn't yours - a customer's photo, a model's portfolio shot, a scraped headshot - you're in consent-and-publicity-rights territory, and the pack's privacy note puts that squarely on you. Same rule as every likeness tool: use what you're entitled to use.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| parameters_json | STRING | {} | — |
| contents | STRING | — | |
| settings | STRING | — | |
| watermark | STRING | — | |
| callback_url | STRING | — |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| status | STRING | — |
| task_id | STRING | — |
| media_urls_json | STRING | — |
| first_media_url | STRING | — |
| result_json | STRING | — |
| trace_id | STRING | — |