Developers
Building on the Sume API: keys and hosts, jobs and runs, polling, webhooks, idempotency, errors and rate limits, the SDK, the CLI, and MCP auth.

Phone clip with rotation metadata: vertical? Read video inspect
A phone MP4 can store 1920x1080 pixels plus a rotation tag and play as vertical. Read width, height and rotation from video inspect before you judge a Short.

Ported Sora wrapper blocked until done? Sume sync stops at 30 s
A wrapper that blocks until the video is done will time out on Sume sync mode, which waits at most 30 seconds. Return the job id and poll, never resubmit.

Re-render 300 old Sora prompts: queue capacity by plan
A 300-prompt backlog does not fit in one burst. Use Sume's accepted-job limits per plan, the wave_size_hint, and queue_full handling to pace the re-render.

Reels safe-zone boxes in Python: a pure function for any frame size
Meta's Reels percentages are relative, so one pure Python function gives the safe box for any frame size. It runs offline and feeds a caption anchor.

Resume an Omni batch after a crash with stable idempotency keys
A worker dies halfway through 40 Omni clips. Build Idempotency-Key from the item id so a rerun resubmits safely, and treat 409 and 429 as signals, not failures.

Retry-on-timeout wrapper from the Sora days? Add an idempotency key
A wrapper that retries a video submit on timeout can create two paid Sume jobs. Build an Idempotency-Key from the request, and learn what a replay returns.

Retry policy by Sume job error category
Sume failed jobs carry a category and retryability. Retry queue and capacity errors with a cap, stop on validation and quota, and skip blanket retries.

Seedance 2.5 vendor terms mapped to Sume request fields
How ByteDance and BytePlus terms for Seedance 2.5 map to Sume Video Router fields: references, first and last frame, audio, and the limits that differ.

Downloading the mp4 inside the webhook? Sume's 10 s limit
A callback handler that fetches the video before replying will time out. Sume allows each webhook delivery 10 seconds and 10 attempts: store the id, return 2xx.

Sume Free plan and Omni: one running, five queued, seventh gets 429
On a Sume Free workspace one video job runs and five wait; a seventh submit returns 429 queue_full. What that means for an Omni test batch and its cost.

Sume submit budgets: 120 to 1,200 writes a minute for an Omni batch
Sume rate limits submits per plan: Free 120, Pro 300, Startup 600 and Scale 1,200 a minute; reads get 40 times that. Why queue size, not the rate, paces Omni.

Synthesia says 3 to 5 minutes per video; how to watch a Sume job
Synthesia's quickstart says videos usually finish in 3 to 5 minutes. Sume avatar jobs run async; read status, then the events endpoint for a slow render.

Verify a Sume job webhook in Python for finished Omni clips
Check x-sume-webhook-signature on job.completed callbacks: HMAC SHA-256 over timestamp.raw_body, 5-minute tolerance, rotation-safe, empty secret rejected.

Which short-video lengths fit one video-trim call? 0.2 to 900 seconds
One Sume video-trim call outputs 0.2 to 900 seconds, so a 3-minute Short fits easily. A 10-minute TikTok ad fits; a 60-minute source does not.

YouTube audio: AAC-LC, Opus or Eclipsa, and what a Sume export carries
YouTube's upload settings name AAC-LC, Opus and Eclipsa Audio at 48 kHz stereo. Read audio_codec, channels and sample rate from video inspect before you upload.

Synthesia needs a Legacy (v2) key; Sume keys carry scopes per call
Synthesia's quickstart warns an Interactive Avatars key will not create videos. Sume uses one bearer key whose scopes gate Formats, jobs and webhooks.

AI video API: seed and size return 400 on Sume; what to send instead
No Sume video model accepts seed, and size returns 400 unsupported_parameter. Use resolution and aspect_ratio, and keep the prompt and frames to redo a take.

Wan 3.0 has no fine-tuning or batch mode; what Sume requests allow
Alibaba's Wan 3.0 docs list batch inference, fine-tuning and function calling as unsupported. Sume adds its own limit: non-empty provider.options is a 400.

Profit per SKU across channels: add AI media cost from Sume
Amazon lists cross-channel profitability as upcoming. Add what your product images and clips cost per SKU by reading Sume's usage ledger by job id.

Idempotency keys for a SKU catalog: SKU, asset, version
A fresh uuid per request makes Sume's Idempotency-Key decorative. Build it from SKU, asset and version so a retried holiday batch is not charged twice.

Burn text onto a silent video: fixing caption_no_speech
A silent clip fails Sume's speech-to-captions path with caption_no_speech. Pass authored cues with text, start and end to burn overlay copy with no ASR.

Index-Echo bilingual SRT from a Chinese video to Sume cues
Index-Echo S2TT turns Chinese speech into timed bilingual subtitles in 60-second windows. Convert its SRT into Sume caption cues and burn the English line.

Syllable-controlled translation for voiceover that must fit
Translated speech often runs longer than the original. Index-Homura targets length-controlled translation. How to budget words against clip time before TTS.

Index-Translate subtitles: translate cues, then burn them in
Bilibili's Index-Translate covers 150 languages with a free OpenAI-compatible API. Translate each cue, then burn the result with Sume video captions.

Free Index-Translate API for client subtitles: what to check
Index-Translate's free endpoint is labelled an online demo with no stated rate limit. A checklist before client transcripts go in, and the self-host option.

Keep brand names intact in translated, burned-in captions
Index-Translate supports glossary instructions, but vendor notes say compliance is not guaranteed. Check every term in code before Sume burns the cues in.

Translate all subtitle cues in one JSON request, then validate
Index-Translate lists JSON format preservation. Send a clip's cues as one JSON array, then validate count, timings and length before Sume burns them.

Translate a long transcript in 60-second chunks for captions
Index-Translate's FP8 card sets a 4096-token limit and Sume caption jobs cover 60 seconds. Split cues into windows, translate each, and shift times to zero.

Pick a subtitle translation model with a 20-cue pilot
Vendor benchmark scores do not tell you how a model handles your captions. Run the same 20 cues through each candidate, burn them, and compare on screen.

Restyle burned-in captions without transcribing twice
Pass source_caption_id instead of video_url to re-burn a video under a new Sume caption style. Word timings are reused, so no second speech-to-text runs.

150-language subtitles: which scripts Sume captions document
A translation model can output 150 languages, but Sume documents Latin and Hangul caption styles. Test other scripts on a short clip before a batch.

Canary 5-10% of image jobs to a new Sume image model in Python
Route a stable slice of image jobs to a new model by hashing the job key, log the model and cost, and widen the slice only if review scores hold.

Hourly synthetic monitor for an image API on a cheap Sume model
A scheduled script that makes one real image call, checks status, URL and latency, and exits non-zero on failure. Budget it from the endpoint's cost_usd.

Redeliver a missed speech-to-text webhook without rerunning the job
Your receiver was down when a Sume STT job finished. Redeliver the terminal webhook with one call instead of paying to transcribe again.

Test a Sume STT webhook locally: webhook_url must be public HTTPS
Sume rejects localhost, private-network and non-HTTPS webhook_url values. Put a tunnel in front of your dev server, or poll while you build.

Dagster asset retries and Sume: stop a retry from billing twice
A Dagster RetryPolicy re-runs the whole asset function. Give the Sume submit a stable Idempotency-Key and fail terminal jobs with allow_retries=False.

Dramatiq retry_when for Sume: retry only retryable errors
A Dramatiq actor with retry_when that retries 429 and 5xx but not 402 or 400, and sends one stable Idempotency-Key so a retried Sume submit is not billed twice.

Hangfire AutomaticRetry for Sume: stable key, no double bill
Hangfire retries failed jobs 10 times by default. Cap attempts on a Sume submit job and send one stable Idempotency-Key so a retry never makes a second job.

Oban worker that polls a Sume job: snooze instead of sleeping
Submit a Sume job once, then let an Oban worker check status, return {:snooze, seconds} while it runs and finish on terminal. Elixir with Req, no sleep loop.

Lazy-load placeholder for an AI image: average color from Sume
Compute the average color of a generated image with Pillow, use it as the background of the image box and avoid a white flash while the real file loads.

Responsive srcset widths from one Sume master image with Pillow
Generate one high-resolution image, then resize it into several widths and print the srcset and sizes attributes. Python script for a Sume image result.

AI image prompt regression test: check size, ratio and alpha in CI
Before you swap or upgrade an image model, run a fixed prompt set through Sume and assert pixel size, aspect ratio and alpha with Pillow. Python test included.

Datadog DogStatsD metrics for Sume jobs: tags that stay small
Count Sume submits, terminal statuses and durations with DogStatsD, tagged by route, status and code, and keep job ids and request ids out of the tag set.

Prometheus counters for Sume API errors, split by code and status
Wrap every Sume call in a counter and histogram labeled by route template, status and error.code, never by job id or request id, then alert on retryable rates.

Log x-sume-request-id on every Sume call in Python
Capture the x-sume-request-id response header in a requests hook, attach it to each log line with logging.Filter and contextvars, and quote it to support.

Sume TTS emotion is a 64 character string: write a guide that fits
The emotion field in Sume TTS generation_config takes 1 to 64 characters. How to write a short, usable guide and test it against a neutral take.

Can you cancel a Sume TTS job? Only before generation starts
Sume cancels a job only before generation work begins. After that the cancel call is rejected with 409. How to code for both outcomes.

Format webhook 3xx: Sume does not follow redirects, use the final URL
A webhook endpoint that redirects counts as a failed delivery attempt. Register the final HTTPS URL, mind www and trailing-slash redirects, then redeliver.