Guide

Connect a video, get a transcript back

Connect multi-hundred-MB media into the core — the curl flow, and what your agent does with the bytes once they're in.

5/18/2026 · connect0 · 3 min

Connect a media file into the core and your agent turns hours of audio into a transcript it can search and summarise.

You have a 30-minute call recording. You want a transcript. The browser-helper drag-drop works for ~100 MB; bigger than that, curl is friendlier.

The flow

SIZE=$(wc -c < ./meeting.mp4)
echo "Size: $SIZE bytes"

Ask the agent:

> Make me an upload link for meeting.mp4 — <SIZE> bytes, video/mp4.

Get the URL, then:

curl --upload-file ./meeting.mp4 \
     -H 'content-type: video/mp4' \
     --progress-bar \
     '<upload_url>' \
  | tee /dev/null

--progress-bar plus piping to tee /dev/null gives you a clean progress bar in stdout. Without it, curl writes the response (empty) to stdout and you lose the visual feedback.

Long uploads, link expiry

Default link TTL is 15 minutes. A 500 MB upload over a coffee-shop wifi can exceed that. Ask the agent for expires_in_seconds: 3600 to get the full hour:

> Make me a one-hour upload link for meeting.mp4 — it's a big file, slow network.

Transcription in the sandbox

The default sandbox image has ffmpeg + whisper.cpp:

sh "ffmpeg -i /workspace/media/meeting.mp4 -ar 16000 -ac 1 /workspace/media/meeting.wav -y"
sh "whisper /workspace/media/meeting.wav --model base.en --output_format txt --output_dir /workspace/transcripts/"

Whisper writes /workspace/transcripts/meeting.txt. From there, the agent can read, summarise, search.

Cost

Whisper-base.en on a 30-min audio file takes ~3 minutes of CPU on the default sandbox instance. Sandbox CPU is metered — see the billing guide — but a few minutes a day is well inside any reasonable plan.

For higher-quality models (whisper-large), the runtime grows roughly linearly with model size. Consider doing transcription on your own hardware and uploading the transcript instead, for very long recordings.

Privacy reminder

The audio file persists in R2 under the project prefix until you delete it. If the recording contains sensitive material:

sh "rm /workspace/media/meeting.mp4"
sh "rm /workspace/media/meeting.wav"

Once removed from R2, it's gone — no version history. The upload_link audit row stays (90-day retention) but contains no audio.

Limits

  • Single PUT, 4.995 TiB max — Cloudflare R2's hard limit. Multi-hour 4K video might brush against single-PUT comfort even if not the cap.
  • Sandbox CPU clock — a 4-hour recording will take meaningful minutes to transcribe. Run it async (let the agent kick it off, walk away, come back).
  • 64 KiB stdout cap on shwhisper output to stdout will truncate. Always pass --output_dir so it writes to disk; then sh "head -100 /workspace/transcripts/foo.txt".

Next steps

Where this fits

This is the Connect everything pillar of connect0 — the core that connects everything your company runs on. Large media connects into the core the same way any source does, and once it's there the agent's media toolchain can transcribe, search, and reason over it. Start building → · All guides →