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.
Sume video filter fails with unsupported_pixel_format when the probed pix_fmt of the source does not start with yuv. The error carries next_action: use_yuv_source and the pix_fmt it found. It is checked on the worker before any encode.
The worker comment, read 2026-10-05, explains the intent: the dim op is a luma lookup table defined for the YUV family, and the filter fails closed on a source it would misrepresent, with a named reason rather than a silent no-op encode.
What typically triggers it
Most delivery video is already yuv420p, so this is rare. It shows up with screen captures or graphics exports saved in an RGB-family format, and with some intermediate codecs. If pix_fmt is null in the probe, the check does not block, because an empty value passes.
Find out before you pay
- Run video inspect with
frames: falseand readprobe.pix_fmt. - If it starts with
yuv, the filter will accept it on this check. - If not, re-export the clip as H.264 yuv420p in your editor and import the new file.
The three source refusals side by side
| Reason code | Trigger | next_action |
|---|---|---|
| filter_source_not_video | No video stream, or a still image | use_video_source |
| hdr_source_unsupported | PQ or HLG transfer | use_sdr_source |
| unsupported_pixel_format | pix_fmt not starting with yuv | use_yuv_source |
None of these are retryable. The same file returns the same error, so fix the source and submit again. The free POST /v1/video-filter/check validates your program and the host and type of the URL, but the worker probe is what enforces these three.
Sources
Related posts
More in Media tools
- 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.
- Video inspect stills come back 432x768: set max_edge 1920
Video inspect clamps stills to a 768 long edge by default, so a 1080x1920 clip returns 432x768 frames. Set max_edge up to 2160, or use video frames.
- Video inspect frames: at and fps together return a 400 conflict
Sume video inspect frames takes either at[] or fps, never both. The conflict and required codes, the 24-still cap, and how to sample a clip evenly.
Written by Sume