Kling 3 audio on or off: $0.14 or $0.21 a second, which shots?

On Sume, Kling 3 is $0.14 a second with audio off and $0.21 with audio on at 720p or 1080p. A 12-second clip is $1.68 silent or $2.52 with sound.

5 min readSume
All posts

Kling 3 on Sume costs $0.14 a second with audio off and $0.21 with audio on, at both 720p and 1080p, so sound adds 50%. A 12-second clip is $1.68 silent and $2.52 with audio. Set it per job with generate_audio: send false for shots that will sit under a voiceover or a music bed, and true only when the clip's own sound is part of the ad.

The rates are the catalog's list prices times 1.25, from the Video Router guide and Video Generation, read 2026-10-05; the job total is rounded up to the cent.

Cost by clip length

Kling 3 accepts 4 to 15 seconds, 16:9, 9:16 or 1:1, and first and last frames, but no reference media.

Kling 3 cost on Sume by length and audio (read 2026-10-05)
Clip lengthAudio off at $0.14Audio on at $0.21Sound adds
5 s$0.70$1.05$0.35
8 s$1.12$1.68$0.56
12 s$1.68$2.52$0.84
15 s$2.10$3.15$1.05

Which shots need sound

Keep audio on for a shot where the sound sells it: a pour, a zip, a click, ambient street noise, or a line of dialogue. Turn it off for a hero loop, a turntable, a B-roll cutaway, and anything you will cover with text-to-speech or a music track.

One check pays for itself: render one 5-second clip each way and compare usage.cost in the poll response. If you only use the audio from one clip in ten, run the other nine silent.

  • Voiceover ad: audio off on every shot.
  • Product demo with real-sounding action: audio on for the action shot only.
  • Silent social loop: audio off.

Request

generate_audio is a documented top-level field on /v1/videos.

import os, time, requests

H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
payload = {
    "model": "kling-3",
    "prompt": "A zipper pulled shut on a canvas tote, close-up, soft daylight",
    "duration": 5,
    "resolution": "1080p",
    "aspect_ratio": "1:1",
    "generate_audio": False,
}
job = requests.post("https://api.sume.com/v1/videos", headers=H, json=payload).json()
while True:
    time.sleep(30)
    s = requests.get(job["polling_url"], headers=H).json()
    if s["status"] in ("completed", "failed", "cancelled"):
        break
print(s["status"], s.get("unsigned_urls"), s.get("usage"))

Sources

Related posts

More in Pricing

All Pricing posts

Written by Sume