Video filter hdr_source_unsupported: what to do with an HDR clip
A Sume video filter job fails with hdr_source_unsupported on PQ or HLG clips. Why the filter refuses them, and three ways to get a usable result.

A Sume video filter job fails with hdr_source_unsupported when the clip is HDR, meaning its transfer characteristic is PQ (smpte2084) or HLG (arib-std-b67). The job stops before any encode, and the error carries next_action: use_sdr_source and the color_transfer it saw. No re-encode runs that would have damaged the picture.
The reason is in the worker code, read on 2026-10-05: a luma multiply inside a PQ or HLG signal is not a dim in linear light, and the yuv420p output would drop the mastering metadata silently. Rather than return a clip that looks wrong, the filter refuses with a named code. The worker's error message calls it a v1 limit; see the video filter docs for the rest of the filter contract.
Which clips trigger it?
Any source whose probed color_transfer is smpte2084 or arib-std-b67. Phones that record HDR video and some camera exports fall here. A normal SDR clip, with bt709 or no transfer tag, passes. The check applies to both filter ops (dim and crop) and to a filtergraph, because it runs on the source before the program.
Three ways out
- Start from an SDR export. Most phones and editors can export an SDR copy of an HDR clip. Import that file instead and resubmit.
- Skip the pixel pass. If you only needed a crop for the shape, trim with
precision: "keyframe", which copies the stream and lets HDR through, then crop in your delivery tool. - Check first. A video inspect probe returns
hdr: truefor the same two transfers, so a pipeline can branch before it submits anything.
Check before you submit
The free POST /v1/video-filter/check validates the program and the source preflight without creating a job. It does not run the encode, so the HDR refusal itself comes from the worker probe, not the check. The inspect probe is the earlier and cheaper signal.
Treat hdr_source_unsupported as a routing signal, not a retryable failure. Resubmitting the same clip returns the same error.
Sources
Related posts
More in Media tools
- video_filter_ops_empty 400: run video-filter/check before paying $0.02
video_filter_ops_empty means no ops[] and no filtergraph. Send one dim or crop op, or a filtergraph, and call the free /v1/video-filter/check first.
- Video filter unsupported_pixel_format: why a non-YUV source fails
Sume video filter only accepts sources with a YUV pixel format. What unsupported_pixel_format means, how to spot it with video inspect, and how to fix it.
- Video frames always returns 202: mode sync does not give a 200
Sume video frames pins async, so a submit returns 202 even with mode sync. How it differs from video inspect, which waits up to 30 s, and how to poll.
- Video frames: one frame with url null and the job still succeeds
In Sume video frames, a failed instant returns url null while the job completes. How to detect partial results and retry only the missing times.
Written by Sume