Dim a bright product clip before captions: free check, then encode
Make white captions readable on a bright product clip: the free /v1/video-filter/check, then a dim op at the $0.02 encode rate, then Timeline.

When captions are hard to read over a bright product clip, dim the clip first. Sume's video filter takes one clip, applies a dim op that multiplies the luma by an amount in (0, 1], and returns a new MP4. Test the program for free with POST /v1/video-filter/check, then encode with POST /v1/video-filter. The public rate is $0.02 per encode job, per the Video filter page, which also tells you to read the live price from GET /v1/catalog. The check creates no job, reserves no credits and starts no encoder.
Step 1: the free check
0.45 makes the clip less bright and 1 changes nothing. Black stays black and the chroma does not change. The API refuses 0 and anything above 1. The check returns object: video_filter_check with valid, diagnostics[], the compiled filter names and, for a valid program, an estimate. A program can pass the check and still fail on the worker for a reason such as memory or time, and you would then get a structured job error.
curl -X POST https://api.sume.com/v1/video-filter/check \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"video_url": "https://media.sume.com/artifacts/artf_demo/talk.mp4",
"ops": [{ "op": "dim", "amount": 0.6 }]
}'Step 2: encode
The source must be a clip on media.sume.com in your workspace. The API does not fetch from the open internet, so import an outside clip first with POST /v1/media-imports. The encode needs an Idempotency-Key. The default mode is async, and mode: "sync" waits at most 30 seconds for a 200 with the finished job and returns 202 if the job is not done by then. Poll GET /v1/jobs/:id/status and read GET /v1/jobs/:id/result. The result has kind: video_filter, a new video_url that is never the source, duration_seconds and ops_applied. The source clip does not change.
Limits and refusals
The source must be at most 300 seconds, and a program holds at most 8 ops. The output keeps the geometry, frame rate and audio of the source unless the program changes them. Put captions on afterwards, since the filter does not draw text: drawtext and subtitles are not on the allowlist.
| Code | When |
|---|---|
| video_filter_amount_out_of_range | The dim amount is not in (0, 1] |
| unsupported_media_source | video_url is not on the Sume media host |
| source_not_found | The media.sume.com URL is dead or from another workspace |
| unsupported_media_type | The HEAD result is not a video |
| output_duration_exceeded | The source is longer than 300 s |
Dim how much
Start at 0.6 for a bright shot and look at one still. A heavy dim, such as 0.3, makes a product look dull and moves the eye from the product to the text. If a single scene is too bright, dim only that clip before you join, and leave the others alone. A filter does one clip, and assembly stays on Timeline 1.0, so a flow for an ad is: dim the bright clips, put all the clips in a Timeline compose, and add captions there.
For a batch of clips, send each check first and only encode the clips whose valid is true. The check is free, and it answers in the same call, so a loop of checks costs you nothing but requests. The public rate is stated per encode job, so a batch of 30 clips is 30 jobs at the rate on the page.
Sources
Related posts
More in Media tools
- Discord soundboard clip from Sume music: 5.2 s, 512 kb, mp3 or ogg
Discord's soundboard accepts mp3 or ogg up to 512 kb and 5.2 s. Cut a Sume track with timeline audio split to mp3 and check the size; wav will not fit.
- Documentary underscore with AI music: a 3-minute brief and cost
How to brief an instrumental underscore for a 3-minute documentary with narration: one Lyria request, a ducked bed in Timeline, and the full audio cost.
- Does Kling motion control make a photo talk? Where sound comes from
Kling 3.0 motion control copies movement from a reference video onto a still and takes no audio input. For speech from audio, use Fabric or H3 Max on Sume.
- End a vertical Short on a fade: Timeline fade_out_seconds 0.5
Timeline output.fade_in_seconds and fade_out_seconds run 0 to 5 s, and their sum cannot exceed the output length. Request, limits, and error code.
Written by Sume