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.

Chrome Web Store marquee 1400x560: crop a 21:9 Sume image
The optional marquee is 1400x560, a 5:2 ratio no Sume model lists. Generate 21:9 on FLUX.2 Pro and crop 6.7% of the height, or lose 20% from a 2:1 image.

Chrome extension icon: 96 px art in a 128 px PNG, from Sume
Chrome's store icon is a 128x128 PNG: 96x96 artwork with 16 px transparent padding per side. Generate a transparent mark on Sume and pad it in Pillow.

Chrome extension icons 16/32/48/128 from one Sume master
Chrome's manifest icons are PNG-preferred at 16, 32, 48 and 128 px, and SVG is not supported. Make one 1:1 master on Sume and downsample it in Pillow.

TikTok title 2,200 limit counts UTF-16: a Python length check
TikTok caps the direct post title at 2,200 UTF-16 runes. Emoji count as two, so Python len() undercounts. A short check to run before you post.

TikTok direct post init: 6 requests per minute per token, batch queue
TikTok's direct post reference limits init calls to 6 per minute per access token. Ten rendered videos take two minutes to start; a small queue handles it.

TikTok chunked upload: how many 5-64 MB parts for a 30-minute render
TikTok accepts 1 to 1,000 sequential chunks of 5 to 64 MB. A 1.8 GB file is 28 or 29 chunks at 64 MB. Sizing a Sume render for chunked upload, with a script.

TikTok 4 GB file cap: the average bitrate for 10, 30 and 60 minutes
4 GB over 3,600 seconds leaves about 8.9 Mbps on average. Here is the arithmetic for 10, 30 and 60 minutes and what to check on a Sume render before upload.

MAI-Voice-2.1 Python quickstart: Speech SDK and SSML to MP3
Microsoft's MAI-Voice-2.1 Python sample uses the Azure Speech SDK, SSML and a 24 kHz MP3 output. The code, the settings and what to change.

MAI-Voice REST header vs Sume TTS output_format object
MAI-Voice-2.1 sets audio format in an X-Microsoft-OutputFormat header. Sume TTS uses an output_format object. Defaults and options side by side.

reqwest timeout versus read_timeout for Sume polls and downloads
reqwest has no timeout by default. timeout() is a total deadline including the body; read_timeout() resets per read. Which to use for Sume status polls.

Sume SDK backoff: 500 ms to 8 s, retry-after capped at 60 s
The Sume TypeScript client waits min(500 x 2^attempt, 8000) ms, honors retry-after up to 60 s, and adds 20 percent jitter. The full table by attempt.

Sume ratelimit-limit differs on reads and writes: read the header
ratelimit-limit shows the budget the current call spent from, so a GET shows reads and a POST shows writes. Read the header; do not hard-code the plan table.

Go http.Client Timeout covers the body: Sume job poll
Go's Client.Timeout includes redirects and reading the body and keeps running after Do returns. Use it per poll and put the job deadline on a context.

Webhook timestamp tolerance: Sume 300 s versus Stripe 5 min
Sume's verifyWebhook rejects deliveries older than 300 seconds by default. Why clock skew matters, why toleranceSeconds 0 is a trap, and how to fix drift.

Redis SET NX EX to dedupe Sume webhooks by request_id
SET key value NX EX returns OK for the first delivery and nil for a duplicate. Claim a Sume webhook request_id, process it, then mark it done or release it.

Redis lease so one worker polls each Sume job
Take a lease with SET NX EX and a random token, release it with a compare-and-delete script. One poller per Sume job saves reads, and duplicates stay harmless.

Ack a Sume webhook in 10 s, then queue it in SQS
Sume gives each webhook attempt 10 seconds, and Stripe advises a quick 2xx before heavy work. Verify, enqueue to SQS, return 204, size the visibility timeout.

Mux 12-hour asset limit vs Sume's 1,800-second Timeline render cap
Mux allows one asset up to 12 hours; a single Sume Timeline render stops at 1,800 seconds (30 minutes). Longer programs are renders you join in order.

TikTok 60-minute videos: API cap is 10 minutes, Sume renders 30
TikTok's developer docs list 10 minutes for API posts; Sume Timeline renders up to 1,800 seconds per job at $0.10 per minute. Plan a long cut around both.

App Store screenshots reject alpha: flatten a Sume PNG first
App Store Connect screenshots cannot include alpha or transparency. A PNG with an alpha channel from an image API needs flattening; here is a Pillow check.

Google Play screenshots: 9:16 at 1080x1920, side limit 2x
Play screenshots need 320 to 3840 px and a long side at most twice the short side. Four 1080 x 1920 9:16 shots also meet the promo eligibility note on the page.

Discord API image data: send a Sume image as a data URI
Discord takes avatar and icon images as a data URI in JPEG, PNG or GIF. Fetch the Sume result, base64-encode it with the right content type, and send it.

Spotify playlist cover upload: base64 JPEG under 256 KB from Sume
Spotify's playlist cover endpoint takes base64 JPEG data, 256 KB max. Make a 1:1 image on Sume, shrink it in Pillow, check the encoded size, then PUT it.

Google Play app icon: 512x512 32-bit PNG with alpha, 1024 KB
Play wants a 512 x 512, 32-bit PNG with alpha, at most 1024 KB. Get a transparent square from ChatGPT Image 2.5 on Sume, then resize and check the size.

Android adaptive icon: 108 dp layers, 66 dp safe zone, from Sume
Adaptive icon layers are 108 x 108 dp with a 66 x 66 dp visible zone and 18 dp margins. Generate a transparent foreground on Sume and scale it inside the zone.

LCP hero image from an AI API: self-host, size it, fetchpriority
web.dev treats an LCP of 2.5 s or less as good. Copy a Sume hero image to your own host, set width and height, and use fetchpriority high; do not lazy-load it.

Google Images formats and filenames for Sume output
Google Search supports BMP, GIF, JPEG, PNG, WebP, SVG and AVIF in img src, and wants short filenames and real alt text. Rename Sume downloads first.

AI avatar waiting UX: Tavus hair check vs Sume queued status
Tavus hides the join delay with a hair check before the live room; Sume jobs sit in queued or processing with no queue position or ETA.

Tavus live interaction events vs Sume terminal-only webhooks
Tavus streams events over a live data channel; Sume sends terminal job events only, up to 10 attempts 30 s apart with a 10 s timeout. Keep polling as backup.

YouTube upload frame rate: keep the source rate, omit fps in Timeline
YouTube asks for the frame rate you recorded at. Sume Timeline matches the sources if output.fps is omitted; if set, it takes 24, 25, 30 or 60.

TikTok 23-60 fps and 360-4096 px: Sume Timeline and Trim conform
TikTok accepts 23 to 60 fps and 360 to 4096 pixels per side. Sume Timeline fps is 24, 25, 30 or 60 and size is 256-2160; Trim conform needs exact mode.

Unit test Sume SDK retries with a fake fetch
createSumeClient takes a fetch option for tests. Feed it a 503 then a 200 to prove the SDK retries a GET and sends one x-api-key, with no network.

httpx MockTransport: test a Sume poll loop with no network
Pass httpx.MockTransport to httpx.Client to feed a Sume status poller canned replies, assert it stops on terminal and honors next_poll_after_seconds.

aiohttp ClientTimeout: the 300 s default and Sume polling
aiohttp's default total timeout is 5 minutes. Set ClientTimeout total and sock_read for Sume status polls, and keep a job deadline in your own loop.

GitHub social preview as a transparent PNG: which Sume model
GitHub says PNG previews can be transparent, which helps dark mode. On Sume only ChatGPT Image 2.5 lists background transparent, and it has no 2:1 ratio.

images_create and videos_create are not in Sume's MCP tools_list
Sume Image 1.0 and Video 1.0 are REST-only, so images_create and videos_create are absent from hosted MCP tools_list. What to call over MCP instead.

Same Sume MCP URL, different tools: what your credential can see
Two clients on one Sume MCP URL can list different tools. Credential scope sets the surface, so compare mcp_health tools[] before blaming the client.

ky does not retry POST by default: Sume submit with a key
ky retries GET but not POST, and it also retries 413. How to configure it so a Sume submit retries safely and a too-large body fails fast.

Cheapest paid call per Sume endpoint: a CI smoke-test budget
A smoke run touching 14 paid Sume endpoints at their catalog minimum costs about $0.60. Per-endpoint table plus 20, 30 or 528 runs a month.

Twilio MMS image limit is 5 MB: compress a Sume image to fit
Twilio's MMS media limit is 5 MB, with image/jpeg, png, gif, heic, heif, tiff and bmp accepted. A 4K PNG may blow past it; recompress to JPEG before sending.

Use timeline audio concat segments to set Timeline video starts
After a Sume timeline audio concat, copy each segments[].start into video[].start. A Python snippet, plus the rules video[0].start must be 0.

oasdiff breaking: catch Sume OpenAPI changes in CI
Commit a snapshot of the Sume OpenAPI spec and run oasdiff breaking against the live document in CI, so changes that break your client show up before release.

Tenacity retries forever with no wait: safe Sume submit
Tenacity's default is to retry forever without waiting. Four settings turn it into a bounded, jittered retry that is safe around a paid Sume submit.

Sume schedule run statuses: completed, failed, canceled, skipped
Sume schedule runs report completed, failed, canceled with one l, and skipped. They are a remap of internal statuses, so job-side strings do not carry over.

jobs_events after jobs_get: which stage did a failed Sume job stop at?
Over Sume MCP, jobs_get gives a failed job's public_reason and retryable flag; jobs_events gives the stage timeline. When to call each.

Instagram API limit: 100 posts per 24 hours and a Reels render queue
Instagram caps API-published posts at 100 per rolling 24 hours per account. A normal calendar stays far below it; a backfill of renders may not.

Sume schedule 404 action_not_found: five causes behind one code
One 404 action_not_found covers an unknown id, an archived schedule, a foreign workspace, a wrong handle or slug, or a team-owned schedule. A checklist.

Recast 402 insufficient_credits: the balance a 30 s swap needs
A 30-second H3 Max Recast reserves $11.25 at 768p or $16.875 at 1080p on Sume; a balance below that returns 402. Reserve table and three ways to fit.