How to brighten a dark video: exposure, gamma, or levels
Brighten a dark video with FFmpeg's exposure, eq gamma, or colorlevels filter, run as one Sume video filter job. To darken instead, use the dim op.

To brighten a dark video, raise its exposure or its gamma with a filter and re-encode it: in FFmpeg, exposure=exposure=0.5 adds half a stop of exposure, and eq=gamma=1.3 raises the gamma from its default of 1. With Sume, send a clip already hosted on media.sume.com and the filter, as its filtergraph, to POST /v1/video-filter, and you get back a new, brighter MP4 with the same sound.
The filter options come from the FFmpeg filters documentation and the Sume facts from the Video filter docs and the Sume API reference, all read on 2026-09-27. Which filters Sume accepts, and how it encodes, is read from its filter compiler and describes current behavior.
Which filter brightens a dark video?
All four filters in the table below are on Sume's filter allowlist today. Their values are starting points to adjust; only the colorlevels line is FFmpeg's own example.
- Filters chain with commas in one graph, for example
exposure=exposure=0.3,eq=gamma=1.1, up to 32 named filters and 2,048 characters. - Which setting looks right depends on the footage. To compare a few without encoding the whole clip each time, cut a short excerpt with video trim and filter that first.
| Filtergraph | What it sets | Range and default |
|---|---|---|
exposure=exposure=0.5 | The exposure correction, in EV (stops) | −3.0 to 3.0 EV, default 0 |
eq=gamma=1.3 | The gamma. FFmpeg notes a high value can turn bright areas plain white; gamma_weight reduces that | 0.1 to 10.0, default 1 |
eq=brightness=0.1 | The brightness | −1.0 to 1.0, default 0 |
colorlevels=rimax=0.902:gimax=0.902:bimax=0.902 | The red, green, and blue input white points; FFmpeg's own example for making output lighter | −1.0 to 1.0, default 1 |
How do I brighten a video with the Sume API?
Send the clip and the filter to POST /v1/video-filter with an Idempotency-Key. The clip must already be your workspace's media.sume.com artifact or asset, such as an earlier Sume job's output; which URLs each endpoint accepts explains the rule.
POST /v1/video-filter/checkruns the encode's schema, allowlist, and source checks on the same body for free, with no job and no reserved credits. It doesn't run the encoder, so a program that passes can still fail on the worker, for example on a bad expression, and that comes back as a job error.- The default
modeisasync: pollGET /v1/jobs/:id/status, thenGET /v1/jobs/:id/resultfor the newvideo_url. The output keeps the source's size, frame rate, and audio, and the source stays untouched. The filter allowlist post lists how the output is encoded.
curl -X POST https://api.sume.com/v1/video-filter \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: brighten-001" \
-d '{
"video_url": "https://media.sume.com/artifacts/artf_demo/dark-clip.mp4",
"filtergraph": "eq=gamma=1.3"
}'How do I make a video less bright?
Use the filter's built-in dim op, such as "ops": [{ "op": "dim", "amount": 0.7 }]. It only darkens, since amount must be above 0 and at most 1, and it keeps black at black without shifting the colors; Trim, filter, or detach audio covers the op. A negative exposure value in the filtergraph also darkens.
What are the limits?
- A filter changes the levels of the pixels in the file. Where the camera recorded pure black, there's no detail to bring back.
- One clip per job, up to 300 seconds; a longer source fails with
output_duration_exceeded. - The filter refuses HDR sources (PQ or HLG) with
hdr_source_unsupported. APOST /v1/video-inspectprobe, which is unbilled, reportshdrbefore you submit. - The check is free, and each encode is billed per job; the docs say to confirm the rate in
GET /v1/catalog. For fixing a color cast rather than brightness, see how to color correct a video.
Sources
Related posts
More in Media tools
- How to burn an SRT file into a video
Burning an SRT file draws its lines into the picture. Sume's captions API takes no .srt file, so turn each block into a cue and send the cues instead.
- How to calculate speech rate in words per minute
Speech rate is words spoken divided by speaking time in minutes. Word timestamps from speech-to-text measure both, per recording or per sentence.
- How to convert HEVC (H.265) video to H.264
Convert HEVC (H.265) to H.264 by re-encoding the video stream. On Sume, an exact trim of a whole non-HDR clip returns an H.264 MP4.
- How to crop a video without losing quality
A normal crop re-encodes the frames, so lose as little as you can: crop once, from the original, and don't scale back up. How Sume encodes each edit.
Written by Sume