2026-10-31 · 5 min read

Captions for Product Demo Videos: Make Every Demo Watchable on Mute

A product demo video does its best work in the worst conditions: muted autoplay in a feed, a silent embed in a changelog, a link someone opens in a quiet office. If the story of the feature lives only in the voiceover, most viewers never hear it. Captions turn a muted demo back into a pitch.

For a single launch video, any editor can add them. The problem shows up when demos multiply: one per release, per feature flag, per audience segment. caption.sh exists for that case. Send the finished cut, get back an MP4 with word-timed, styled captions burned in, and keep the look identical across every demo you ship.

One call per cut

KEY=$CAPTION_API_KEY
resp=$(curl -s -X POST https://api.caption.sh/v1/videos \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{"source_url":"https://cdn.example.com/demos/v2.4-onboarding.mp4","options":{"font":"inter"}}')
job=$(echo "$resp" | jq -r .job_id)
if [ -z "$job" ] || [ "$job" = "null" ]; then echo "submit failed: $resp"; exit 1; fi
deadline=$((SECONDS + 900))
while [ $SECONDS -lt $deadline ]; do
  resp=$(curl -s https://api.caption.sh/v1/jobs/$job -H "Authorization: Bearer $KEY")
  status=$(echo "$resp" | jq -r .status)
  if [ "$status" = "done" ]; then
    curl -sL -H "Authorization: Bearer $KEY" https://api.caption.sh/v1/jobs/$job/result -o captioned-demo.mp4
    break
  fi
  if [ "$status" = "error" ]; then echo "job failed: $resp"; exit 1; fi
  sleep 5
done
[ -f captioned-demo.mp4 ] || { echo "timed out"; exit 1; }

The result endpoint redirects to a signed link, and results are stored for 24 hours and then deleted, so download the file as part of the same pipeline run rather than bookmarking it. If you submit more than one key can handle at once, the API answers with a 429 per key; retry after a short wait and the job goes through.

Where captioned demos pull their weight

  • Feature launch posts: the muted autoplay in the feed is often the first impression, and moving captions carry the explanation the voiceover was going to give.
  • Docs and changelog embeds: viewers can follow a walkthrough without unmuting, which matters anywhere sound is rude or unavailable.
  • Sales follow-ups: a demo cut with captions survives being forwarded into a thread full of people who will never press play with sound.

If your demos already exist as final MP4s, there is nothing to re-edit. Point the API at each file, collect the captioned versions, and swap them into the places your demos already live. Get a key at caption.sh and run your latest demo through it.

Back to all articles