Kling Video Commerce (Ace Data Cloud)
The talking avatar that sells the thing
- status
- task_id
- media_urls_json
- first_media_url
- result_json
- trace_id
An avatar with a script
Video Commerce is Goods Studio's chattier cousin. Where Goods Studio makes a product video, this makes a presenter video: an avatar on screen, holding the product, delivering a sales pitch you wrote, with the price and audience you specified baked in. It's a UGC-ad generator, and it's the shape of tool that's been quietly eating the low end of the video-ad market for a couple of years.
The interesting design decision is that you don't just hand it a script and a product. You hand it goods_price, goods_target_audience and goods_selling_point as separate typed fields, and the service builds the pitch around them. allow_polish then lets it improve your copy. That's why it produces something coherent from relatively little input - you're giving it structure, not just text.
The honest caveat, same as the rest of this pack: it's a third-party reseller wrapper around a closed model with no community track record, and every render is metered. This is production work you're buying, not a hobby toy. Budget accordingly, and do your testing on the shortest, cheapest settings you can.
What goes in
contents is a JSON array, minimum two entries, each with a type:
avatar_image- a URL; the person who'll appear on screenavatar_id- text up to 128 characters; the same thing, but a pre-registered avatar referenceref_image- a URL; the productgoods_title- text, up to 500 charactersgoods_price- text, up to 256 characters (it's typed as text because "from $29.99" is a string, not a float)goods_target_audience- text, up to 200 charactersgoods_selling_point- text, up to 500 charactersspeech_script- text, up to 2000 characters
settings is a JSON object, and it's where the presentation gets dialled in: resolution (720p or 1080p), aspect_ratio (9:16 or 16:9 - vertical or horizontal, that's the whole choice), allow_polish (a boolean that lets the service rewrite your script), voice_id (from Kling Voices), speech_rate (0.8, 1 or 1.2), action_prompt (up to 2500 characters describing what the avatar should do), and bgm_enabled (a boolean for background music).
The division is clean once you see it: contents is the facts, settings is the performance. If the ad says the right things in the wrong way, you're fixing settings.
watermark is a STRING widget expecting true or false. callback_url if you want a webhook.
Outputs and plumbing
Widgets: parameters_json, contents, settings, watermark, callback_url.
Outputs: status, task_id, media_urls_json, first_media_url, result_json, trace_id. Asynchronous, so first run is pending; poll with Kling Retrieve Task and load with Kling Load Video.
Put a PreviewAny on status while you're building. A STRING output with nothing attached shows you nothing on the canvas, and "is it still rendering or did it fail" is the question you'll be asking most.
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, confirm publisher acedatacloud and package Kling by Ace Data Cloud (Registry ID kling). Dependencies are requests and jsonschema; the whole pack is a thin HTTP client and weighs nothing. Native video loading needs ComfyUI 0.39.0 or newer.
export ACEDATACLOUD_API_KEY=your_key_here # then launch ComfyUI
Common issues
The avatar needs to exist as a URL or an ID. avatar_image is a fetchable link; avatar_id references something already registered with the service. There's no webcam upload here and no file picker.
A cloned voice is a prerequisite for the voice you want. If settings.voice_id is empty you get the API default voice, which is rarely what people mean. Go make one in Kling Voices first - browsing presets there is a read-only call and costs nothing.
allow_polish is doing more than you think. With it on, the service treats your speech_script as a draft. If you need the exact words, leave it off.
Consent. An avatar image is usually a real person's face, and a cloned voice plus a synthetic face plus a sales pitch is the exact combination that gets platforms upset and regulators interested. Use your own likeness or one you have written permission for. The pack ships a short privacy note and puts the responsibility on you, which is about all a node pack can do.
One submission, no retry. Paid requests aren't retried after a connection failure; read-only task queries are. If a submit dies, look up the task ID before you queue again - the same video twice is twice the bill.
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 | — |