Check probe.has_audio before captions to avoid caption_no_speech

A silent clip fails Sume speech captions with caption_no_speech. Run video_inspect with frames false, read probe.has_audio, then pick STT captions or text cues.

3 min readSume
All posts

Before you caption a batch of holiday clips, read probe.has_audio from video_inspect with frames: false. The Sume captions docs say speech captions work only when the clip has audible speech, and a silent clip fails with caption_no_speech and next_action: use_overlay_captions. The inspect docs name the same check: a frames: false inspect is enough to read probe.has_audio. If it is false, send text cues instead.

Decision table

Branch on the probe result.

Which caption input to use, per the Sume docs read 2026-10-08
probe.has_audioCaption inputResult
trueNo text, or script_text for alignmentSTT transcribes and burns
truewords or cuesYour text burns; STT does not run
falsecues or segmentsYour text burns at your times
falsenonecaption_no_speech error

Steps

  • Import the clip with POST /v1/media-imports, since inspect takes media.sume.com URLs.
  • Call POST /v1/video-inspect with frames: false and an Idempotency-Key. The default mode waits up to 30 seconds and returns 200, or 202 if it takes longer.
  • Read probe.has_audio in the result (GET /v1/video-inspect/:id if you got a 202).
  • Route silent clips to a cues caption job, and clips with speech to a speech caption job.
  • Do not request a transcript for silent clips: the docs return inspect_source_has_no_audio.

The inspect call has its own cost, billed by compute, and I did not find a fixed price in the docs. The caption price is $0.20 per job for up to 60 seconds.

Batch pattern

For a folder of 60 clips, loop in two passes. In the first pass, run inspect with frames: false on every clip and write the has_audio flag next to the URL. In the second pass, send speech caption jobs for the true ones and cue caption jobs for the false ones, taking the cue text from a spreadsheet keyed by clip.

This keeps the paid caption calls from failing on silent clips and keeps the cue copy under review. Use a stable Idempotency-Key per clip and per pass so a restart does not double-submit.

If a clip has a music-only audio track, has_audio may be true while there is no speech. In that case the speech route can still fail with caption_no_speech, so handle that error by falling back to cues.

Budget and detail

Treat the probe result as a gate in your own code. A small function that takes the inspect result and returns either "speech" or "cues" keeps the decision in one place, and you can log it per clip. When the inspect request itself fails, for example with a source that is not on the Sume host, stop and fix the import rather than guessing which route to take.

What Sume does not do

Sume does not auto-switch from speech to cue captions, and the error does not tell you what text to burn. Whether a failed caption job is billed is not stated on the pages I read, so check the job's result and your balance.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume