Keep one color, gray out the rest of a video: chromahold API

Sume's video filter allowlists chromahold, which keeps one key color and turns the rest gray. Set color, similarity and blend, then check the graph for free.

4 min readSume
All posts

A selective-color or color-pop look keeps one hue, such as a red jacket, and drops the rest of the frame to gray. In Sume that is chromahold inside the filtergraph of Video filter, where it is listed under Tone / colour. In a one-pixel test with ffmpeg 9.0.1, a pure red frame stayed red and a green one came out gray with the settings below. The output is a new MP4.

Which chromahold options set the look?

Options of chromahold as listed in the FFmpeg filter documentation, read 2026-10-01.
OptionWhat it does
colorThe key color to keep, default black. Name or hex.
similarityHow close a pixel must be to the key to stay colored, 0.00001 to 1, default 0.01. The default is very tight, so raise it.
blendSoftness at the edge of the kept range, 0 to 1, default 0.
yuvSet true if you give the key color in YUV instead of RGB, default false.

How do I run a color-pop pass?

Pick the key from a frame of your clip (a video inspect still is enough to sample it), then check the graph. Real footage has shading, so expect to try a few similarity values between 0.1 and 0.4 on a short clip before running the full file.

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/product.mp4",
    "filtergraph": "chromahold=color=red:similarity=0.25:blend=0.1"
  }'

Why is only part of my subject staying colored?

Lighting. A red jacket in shadow and in sun are different pixel values, and a narrow similarity keeps only the band around the key. Raise similarity in small steps and add blend so the edge fades instead of cutting. If the wrong objects keep color, lower it again or choose a key closer to the subject's mid-tone.

How is this different from making a video black and white?

A full desaturate has no kept color at all; see make a video black and white. Chromahold is the in-between: one hue survives. It keys by color, not by object, so anything else of a similar hue in frame stays colored too. For isolating a subject by shape, Sume's video filter has no mask option.

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

All Developers posts

Written by Sume