Add a soft glow to video by API: split, gblur, screen blend
Sume's video filter allowlists split, gblur and blend, enough for a dreamy glow: blur a copy, then screen it over the original at partial opacity.

A dreamy, soft-focus glow is a classic composite: blur a copy of the frame, then screen it over the sharp original. In Video filter the three pieces are all allowlisted, split and blend under Compositing and gblur under Blur / sharpen / noise, and internal labels such as [a] and [b] are allowed. Stream specifiers like [0:v] are refused because the server wraps the graph itself.
Which options set the glow strength?
| Option | What it does |
|---|---|
gblur sigma | Blur radius in pixels, default 0.5. Larger values spread the glow. |
blend all_mode | Blend mode for all components; screen brightens where the blurred copy is light. |
blend all_opacity | Strength of the blended copy, 0 to 1. 0.5 is a restrained starting point. |
How do I write the graph?
Split the clip into labels a and b, blur b, then blend the two. The graph must start with a filter and end with a filter, not a label, so the blend is the last element. In a local ffmpeg 9.0.1 run on a test pattern this exact graph encoded without 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/portrait.mp4",
"filtergraph": "split[a][b];[b]gblur=sigma=12[bl];[a][bl]blend=all_mode=screen:all_opacity=0.5"
}'Will the glow hurt skin or text legibility?
It lifts highlights and lowers local contrast, so small on-screen text can look weaker. Keep all_opacity low for clips with burned-in text, or apply the look before captioning, since caption burn-in is a separate job.
Is this the same as the vignette or grain looks?
It is a different look. A vignette darkens edges, and grain adds noise; see add a vignette and film grain. They can share one graph, up to 32 named filters, if you want a full vintage-soft treatment.
What does a filter job cost and where are the limits?
The docs list $0.02 per encode job, with a source of at most 300 seconds, a filtergraph of at most 2048 characters and 32 named filters. The /v1/video-filter/check route runs the same allowlist and source checks for free and returns valid and next_action; a graph that passes can still fail on the worker (bad expression, memory, time), which comes back as a structured job error.
Sources
Related posts
More in Developers
- Soften skin in video by API with smartblur (whole-frame)
Sume video filter allowlists smartblur, which blurs but keeps outlines. No face detection, so it softens the whole frame; tune radius, strength threshold.
- Sora characters gone: reuse a subject with reference images
Sora's reusable Characters left with the Videos API. Sume has no saved character; send the same reference images with each request to wan-3.0 or minimax-h3.
- Sora polling loop ported: Sume statuses and a 30-second poll
Sora's guide polled every 10 to 20 seconds for queued, in_progress, completed, failed. Sume's jobs read pending, in_progress, completed, failed, cancelled.
- Sora remix and edits ended: edit a video with Gemini Omni Flash
Sora's remix, then its edits endpoint, went away with the Videos API on 2026-09-24. On Sume, send video_url and an edit prompt to gemini-omni-flash-1.1.
Written by Sume