detach_source_has_no_audio: check probe.has_audio first
Audio detach fails with detach_source_has_no_audio on silent video. Probe has_audio with a free frames-false video inspect first. Refusal codes listed.

detach_source_has_no_audio means the video you passed to audio detach has no audio track. Prevent it by probing first: a video inspect with frames: false returns probe.has_audio and makes no stills. The probe-only inspect is not billed, per the Sume pricing notes, so the check costs nothing.
The guard
Probe, then detach only when the clip has sound. The inspect default is mode: sync, which waits up to 30 seconds.
import os, requests
BASE = "https://api.sume.com"
H = {"Authorization": "Bearer " + os.environ["SUME_API_KEY"]}
url = "https://media.sume.com/artifacts/artf_demo/talk.mp4"
r = requests.post(BASE + "/v1/video-inspect",
headers={**H, "Idempotency-Key": "probe-001"},
json={"video_url": url, "frames": False})
r.raise_for_status()
print(r.json()) # read probe.has_audio before detachingStable refusal codes
These are the codes the detach docs list; each means a different fix.
| Code | Meaning | Fix |
|---|---|---|
detach_source_has_no_audio | No audio track | Probe first; skip silent clips |
audio_detach_range_empty | end <= start, or range over 900 s | Correct the range |
detach_start_past_source | start beyond the duration | Use a start inside the clip |
source_duration_exceeded | Source over 1800 s | Trim first |
unsupported_media_source | Not a media.sume.com URL | Import with POST /v1/media-imports |
source_not_found | Dead URL or other workspace | Check the artifact id |
Cost of the mistake
A detach is $0.01. The point of the probe is less the cent than the batch: a loop over 500 clips with 40 silent ones fails 40 jobs and leaves 40 failed jobs to sort out. Filter on has_audio and you queue only the files that will succeed.
Sources
Related posts
More in Developers
- detach_source_has_no_audio: the free probe that prevents it on Sume
Sume audio detach fails with detach_source_has_no_audio on a video with no sound track. A frames-off video inspect reads probe.has_audio first. Codes inside.
- Deterministic Sume Idempotency-Key: body hash plus a take counter
Hash customer, take number and canonical body into one key. A retry replays the job; a deliberate redo bumps the take. Python, stdlib only.
- Docs page to explainer video: chunk the script under the TTS cap
Split a long document into voice-over chunks under Sume's 20,000-character TTS request limit and price them at $0.0475 per 1,000 characters. Runnable Python.
- Does a replayed sume/auto video submit get the same model and price?
Yes. The Sume docs say Auto resolves from the normalized request and catalog version, so an idempotent replay returns the same route and price.
Written by Sume