Add a soft glow to an AI video by API: gblur and screen blend

Make a dreamy bloom on a finished clip with one Sume video-filter graph: split, gblur, then a screen blend at 0.35 opacity. Free check, $0.02 encode.

4 min readSume
All posts

To add a soft glow to a finished video through Sume, send one filtergraph to video filter: split[a][b];[a]gblur=sigma=18[c];[b][c]blend=all_mode=screen:all_opacity=0.35. It blurs a copy of the frame and screens it back over the sharp one, so highlights bleed light and shadows stay put. The check is free, the encode is $0.02, and the result is a new MP4.

The recipe suits clean synthetic footage, for example an image-to-video clip from grok-imagine-video-1.5 (one of the ids in Sume's video router list) or a hero still made with Nano Banana 2.1 and then animated. Nothing in the graph depends on resolution, because every value is a ratio or a blur radius.

What does each part of the graph do?

Video filter takes a filters-only graph. The server adds the input and the output, so you never write [0:v] or an output label. Internal labels such as [a] are allowed, which is what lets one clip feed two branches.

split[a][b] makes two identical streams. gblur=sigma=18 softens the first into [c]. blend=all_mode=screen:all_opacity=0.35 mixes the second stream with the blurred one: screen mode can only brighten, and the opacity keeps the effect at about a third of full strength. The last filter in the graph is mapped to the encoder, so the blend result is the clip you get back.

  • Raise sigma for a wider bloom; lower all_opacity for something subtle.
  • Keep the graph on one line with no spaces inside a filter. Quotes, backslashes, dollar signs and ampersands are refused.
  • Screen blending lifts overall brightness; if your captions sit on top later, run a dim op afterwards or lower the opacity.

How do I check it before paying?

Post the same body to the check route first. It runs the schema, the filter allowlist and the source preflight, creates no job and reserves no credits. A passing check also returns an estimate and a next_action of submit_video_filter.

The graph names split, gblur and blend, all on the allowlist. A check cannot prove the box will have enough memory or time, so a valid program can still fail in the job; that comes back as 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/clip.mp4",
    "filtergraph": "split[a][b];[a]gblur=sigma=18[c];[b][c]blend=all_mode=screen:all_opacity=0.35"
  }'

What are the limits to plan around?

The table lists the numbers that matter for this recipe. They come from the video-filter page and the allowlist in the repository.

Video filter limits that apply to the glow recipe (Sume docs, read 2026-10-11)
LimitValue
Source length300 s
Price per encode$0.02, check is free
Filters per graph32
Graph length2048 characters
OutputNew media.sume.com MP4; source untouched
AudioKept as in the source unless the program changes it

Where does the glow go in a longer edit?

Glow is a pixel pass, so do it on the clip before assembly: filter first, then place the result in a Timeline video slot. Cutting a range is a separate job (video trim), and the filter does not accept trim or setpts.

If the glow washes out the picture, a second pass costs another $0.02. Test on a short trim of the clip first, and compare one frame from each version with video frames before you commit the whole file.

Sources

Related posts

More in Media tools

All Media tools posts

Written by Sume