NEW · FFmpeg.wasm · 100% Browser-Based

Video Color Grader

Adjust exposure, contrast, saturation, and hue with a live preview frame — FFmpeg.wasm renders the graded output in your browser. No upload, no signup, no watermark.

🎬
Drop a video file
MP4 · MOV · WebM · MKV · AVI · GIF
Files stay on your device · Never uploaded

Related Tools on UDT

Video Frame Extractor →
Pull frames out as PNG or JPEG, every N seconds or at exact timestamps.
Video Resizer →
Resize to 9:16 vertical, 1:1 square, or any aspect ratio with positioned crop, letterbox or blur fill.
Video Watermark →
Add text or image watermarks — position, opacity, size, font controls.
All Video Tools →
Browse the full Video Suite — 12+ tools, all in-browser.

Why Do This in Your Browser?

Color grading lives at the intersection of art and math — and the math has been the same for thirty years. Lift, gamma, gain. Saturation. Hue rotation. Color temperature. The controls are well-defined and the math runs comfortably on a modern CPU. The reason 'color grading' implies a desktop app isn't the underlying math; it's the realtime preview that 4K timeline work demands.

For short social clips, a single graded preview frame plus an in-browser render is enough. The tool grades one frame on a canvas (up to 480 px wide) as you move the sliders, then runs the final pass through FFmpeg.wasm's color filters when you're happy with the look. The preview uses the same formulas as the render's eq, hue and colorchannelmixer filters: on our test stills it landed within 1 to 2.3 levels (out of 255) of desktop FFmpeg on average.

How It Works

Six controls, each a slider: exposure (adds up to ±0.5 to brightness), contrast (×0.5 to ×1.5), saturation (0 to ×2), hue rotation (−180° to +180°), gamma (0.5 to 1.5, a midtone shift) and temperature (up to ±15% on the red and blue channels). Each change updates the preview frame; drag the Frame slider to check another moment, or tick Show original to compare. When you're done, click Render and FFmpeg.wasm applies the same settings to the whole video at full resolution.

Six built-in presets cover common looks: Cinematic (slightly darker, more contrast, cooler), Vivid (boosted saturation), Moody (lowered exposure, cool tint), Warm Vintage (warmer, softer contrast, brighter midtones), Bleach Bypass (reduced saturation, high contrast) and Bright & Clean (a little brighter and softer). Presets are starting points; tweak from there. To grade a still photo instead of video — or to design a look on a frame and export it as a reusable .cube LUT with Cinematic Looks for use in a desktop editor. This tool does not load LUTs.

Tip: Grading is non-destructive at preview but bakes into the final render. To compare before/after on the full output, render a clip with no grading first as a reference.

Common Use Cases

Phone-Shot Footage Polish
Auto-modes on phones produce muddy, flat-looking video. A quick pass on exposure, contrast and saturation often lifts it.
Action Cam Recovery
GoPro and similar action cams look washed-out by default; boost contrast and saturation for the look most people expect.
Cinematic Social Posts
Cooler, punchier color is a common look for cinematic social posts. The Cinematic preset is a one-click starting point.
Brand-Color Conformity
Adjust temperature and hue to push video toward a brand palette before posting.
Day-for-Night Effects
Push exposure and gamma down and temperature cool for a day-for-night look.
Old Footage Restoration
Raise gamma to open up the midtones, add a little saturation and warm the temperature.

What each preset does, measured

Every slider maps to a fixed FFmpeg filter value, and the export runs exactly that chain: eq=brightness=E/200:contrast=1+C/200:saturation=1+S/100:gamma=1+G/200, then hue=h=H (degrees), then colorchannelmixer=rr=1+0.15·T/100:bb=1−0.15·T/100. So Temperature is a red-against-blue gain, not a white balance in kelvin: +100 multiplies red by 1.15 and blue by 0.85.

To show what the presets actually do, each one was run with that chain through FFmpeg 6.1 (the same filter code the in-browser engine uses) on a 640×360 test frame at moderate saturation, like ordinary footage, and measured with FFmpeg's signalstats filter. Settings are Exposure / Contrast / Saturation / Gamma / Temperature; luma is on the 0–255 scale.

PresetSettingsAverage lumaSaturationRed minus bluePixels clipped
Cinematic-5 / +15 / +10 / -5 / -10-8.1+10%-2.117.0%
Vivid+5 / +10 / +30 / 0 / 0+3.8+31%+0.316.6%
Moody-15 / +20 / -10 / -10 / -20-21.3-13%-2.217.6%
Vintage0 / -5 / -5 / +10 / +25+4.5-4%+10.40.0%
Bleach Bypass0 / +25 / -40 / 0 / 0-1.6-40%+1.10.9%
Clean+5 / -5 / +5 / +5 / 0+8.3+6%-0.30.0%

Two things stand out. First, Cinematic, Vivid and Moody each push about one pixel in six to pure black or pure white in at least one channel (the source had none), because the contrast boost stretches the extremes; if your shot already has bright skies or deep shadows, lower Contrast a few points after applying one of them. Second, saturation has headroom only where colours are not already at the edge of the gamut: on a fully saturated colour chart the same Vivid preset raised average saturation by just 1%, since most pixels were already clipped. Bleach Bypass is the exception that always works, because it removes saturation rather than adding it.

There is no LUT (.cube) import; for LUT-based looks or secondary corrections on one colour range, use a desktop grader such as DaVinci Resolve.

Frequently Asked Questions

Is this color grader really free?+
Yes. No watermark, no time limit and no signup.
Is the live preview the same as the final render?+
It uses the same formulas. The preview grades one frame, at most 480 px wide, with the eq, hue and colorchannelmixer math the render uses. On test stills it came within 1 to 2.3 levels (out of 255) of desktop FFmpeg on average, and on a test clip the graded preview differed from FFmpeg's graded frame no more than the ungraded preview did, so the remaining gap comes from decoding and scaling, not the grade. The render works at your source resolution and re-encodes to H.264, which adds its own small compression differences.
Are my videos uploaded anywhere?+
No. The preview frame is decoded and graded on a canvas in your browser, and the final render runs in FFmpeg.wasm, also in your browser. Your video never leaves your device. If your browser cannot decode the file (common with MKV, AVI and HEVC), the preview is unavailable but the render still works.
Can I import LUTs?+
Not yet. The current version uses parametric controls only. LUT (.cube file) import is on the roadmap — the technical work is FFmpeg's lut3d filter plus a .cube parser. If LUTs are critical, a desktop tool like DaVinci Resolve is the right pick.
What do exposure, gamma, and contrast actually do?+
Exposure shifts all pixels brighter or darker uniformly. Contrast spreads dark pixels darker and bright pixels brighter (or compresses them). Gamma shifts the midtones without much effect on pure black or pure white. Together they let you push the response curve to taste — exposure for overall level, contrast for separation, gamma for midtone weight.
What's the difference between hue and temperature?+
Hue rotates every color through the wheel by the chosen degrees — typically subtle (±10°). Temperature shifts the white balance toward orange (warm) or blue (cool). Use temperature first to set the overall feel, then hue for fine-tuning specific color casts.
How long does rendering take?+
FFmpeg.wasm runs on your CPU with no GPU acceleration, so expect it to be several times slower than desktop FFmpeg. Render time grows with clip length and resolution, and phones are slower than laptops. Short clips are the sweet spot.
What's the underlying engine and license?+
FFmpeg.wasm v0.12.x with @ffmpeg/core v0.12.6, using the eq, hue and colorchannelmixer filters and libx264 for the output. FFmpeg itself is LGPL by default, but the @ffmpeg/core build this tool loads includes x264, which makes that build GPL; the wasm wrapper is MIT. The preview uses plain Canvas API pixel math, no external library.