Levels: Set the Black Point, White Point and Midtones
Auto mode picks its points from percentiles rather than the single darkest and brightest pixels, so one hot pixel cannot decide your whole correction. The curve being applied is drawn on screen while you drag.
Drop images here
or click to browse · or paste with Ctrl+V
JPG · PNG · WebP · GIF · BMP · AVIF
Mode
The curve being applied
This is the actual lookup table applied to every channel.
Presets
Your photos are never uploaded. The histogram, the lookup table and the export all run inside this browser tab.
People also use
Everything this tool does
Auto that actually works
Points come from percentiles rather than the darkest and brightest pixels. On a flat test image with four outlier pixels, min and max stretched it by 1.02, doing nothing; percentiles at 0.5 percent stretched it by 3.19.
You choose the clipping tolerance
How much of the extremes auto may sacrifice is a slider, not a hidden constant. Zero uses the true extremes, which is exactly the fragile behaviour most tools ship with.
A guaranteed monotonic curve
The mapping is built as a clamped linear remap followed by a power function, both non-decreasing. Checked across every setting the sliders allow, no lookup table decreases at any step.
The curve is drawn while you drag
The graph under the sliders is the real 256 entry table, not an illustration, with the identity line behind it so you can see exactly what is being changed.
Per-channel auto for casts
Stretching each channel independently fixes contrast and a colour cast in one pass, which is the right tool for scanned prints and old photos.
Drag to compare
Before and after share one frame with a slider, which is how you catch shadow detail you have just crushed.
Six purpose-built presets
Auto contrast, auto with cast removal, add punch, brighten midtones, deepen midtones and a faded look.
Batch with one ZIP
Auto adapts to each image individually, while manual settings apply identically, so you can pick per-image or consistent as the job needs.
Transparency preserved
The alpha channel is untouched for PNG and WebP output.
Nothing is uploaded
No server, no queue, nothing to delete afterwards. Close the tab and every trace of the image goes with it.
What each control does
Levels is three decisions: where black starts, where white starts, and how the tones in between are distributed. Everything else on this page is a way of making those three decisions faster.
| Control | What it does | Try | Watch for |
|---|---|---|---|
| Black point | everything below becomes pure black | 5-25 on flat photos | Crushed shadow detail |
| White point | everything above becomes pure white | 230-250 on flat photos | Blown highlights |
| Midtones above 1 | brightens without moving the ends | 1.1-1.6 | Washed out look |
| Midtones below 1 | darkens without moving the ends | 0.6-0.9 | Blocked shadows |
| Auto contrast | stretches tones, keeps the colour | clip 0.3-1 | Nothing much |
| Auto per channel | also removes a colour cast | clip 0.3-1 | Can shift colours |
| Allowed clipping 0 | uses the true darkest and brightest | almost never | One pixel sets everything |
256
entry lookup table
3
modes
0
files uploaded
Live
curve display
ZIP
batch download
Free
no account needed
FlipMyFormat vs other levels tools
| Capability | FlipMyFormat | Typical free tool |
|---|---|---|
| Files stay in your browser | ||
| Auto points from percentiles, not extremes | ||
| Adjustable clipping tolerance | ||
| Live display of the actual curve | ||
| Per-channel auto for colour casts | ||
| Batch ZIP download without paying | ||
| No watermark on the output |
How to use levels without destroying the photo
Levels is the most useful correction tool there is and also the easiest one to overdo, because the two most satisfying moves are both destructive. Pulling the black point up makes a photo look instantly punchier, and every pixel below that point is now identical pure black, which means any detail that lived in the shadows has been permanently discarded. Pulling the white point down does the same at the other end. Both are legitimate when a photo genuinely has empty range at the ends, which is what a flat or hazy image looks like, and both are damaging when applied out of habit to a photo that was already using its full range. The safe way to work is to move each end point inward until it just touches where the picture's tones actually begin, and then stop. The midtone control is the one to be generous with instead, because it redistributes brightness without discarding anything: nothing becomes pure black or pure white that was not already, so a midtone adjustment is very nearly reversible while an end point adjustment is not. As for the auto modes, use auto contrast as a starting point rather than an answer. It will get most photos most of the way there in one click, and then a small midtone nudge afterwards usually finishes the job. Auto per channel is a different tool wearing the same coat: it stretches each colour independently, which fixes a colour cast at the same time, but on a photo that is legitimately dominated by one colour it will drain that colour just as grey world white balance does.
- 1
Add your photos
Drag them in, click to browse, or paste with Ctrl+V. Flat, hazy or underexposed photos benefit most.
- 2
Try auto contrast first
It stretches the tones your photo actually uses across the full range. Switch to per channel if there is also a colour cast.
- 3
Fine tune the midtones and export
The black and white points set the ends; midtones decide everything between. Save individually or take the batch as one ZIP.
Why auto levels sometimes does nothing
One pixel should not decide the correction
The obvious way to write auto levels is to find the darkest and brightest pixels in the photo and stretch that range to fill zero to 255. It fails constantly, and always for the same reason: almost every photograph contains at least one pixel that is already very close to black and one that is already very close to white, from sensor noise, a specular glint, a dust spot or a dead pixel. Those two pixels then tell the algorithm the range is already full, and auto levels does nothing at all on an image that visibly needs help. Using percentiles instead asks where the bulk of the picture starts and ends, ignoring a small fraction at each extreme. We tested both on a deliberately flat image whose tones ran from 90 to 170, with four outlier pixels added at 2 and 253: the minimum and maximum approach stretched it by a factor of 1.02, effectively doing nothing, while the percentile approach at 0.5 percent stretched it by 3.19 and restored the full range.
A lookup table, and why monotonic matters
Every setting here is turned into a single 256 entry table before any pixel is touched. That is partly speed, since the curve is evaluated 256 times rather than once per pixel, but the more useful consequence is a guarantee. The table is built from a clamped linear remap followed by a power function, both of which are non-decreasing, so the whole mapping is non-decreasing: if one pixel was darker than another before, it cannot come out brighter afterwards. That sounds obvious until you have seen a levels implementation that inverts a narrow band of tones because of a sign error in its gamma handling. We check the property directly across every combination of black point, white point and midtone setting the sliders allow, and no table anywhere in that space decreases at any step.
What people use it for
Flat, hazy photos
The classic case. Auto contrast finds the narrow range the picture actually uses and stretches it across the full scale.
Scanned prints and negatives
Old prints lose contrast and gain a cast. Per-channel auto fixes both at once.
Underexposed photos
A midtone lift brightens without clipping anything, which is safer than raising exposure globally.
Documents and whiteboards
Pulling the white point down makes paper properly white and text properly readable.
Product photography
Consistent manual settings across a set keep every product photo matching, which auto per image would not.
Preparing images for print
Print loses shadow detail, so a small midtone lift before printing often keeps more of it than the untouched file would.
Faded film looks
Pulling the white point down deliberately, or raising the output black, is the basis of a faded print aesthetic.
Fixing screenshots
Screenshots of washed out displays clean up in one auto pass.
Six tips worth knowing
Move each end point inward only until it touches where the picture's tones actually begin, then stop. Beyond that you are deleting detail.
Midtones are the safe control. They redistribute brightness without making anything pure black or pure white that was not already.
Use auto contrast as a starting point, not an answer. A small midtone nudge afterwards usually finishes the job.
Per-channel auto fixes a colour cast too, but it will drain the colour from a photo that is legitimately dominated by one hue.
Leave allowed clipping around 0.3 to 1 percent. Zero makes auto fragile, because a single noisy pixel then defines the whole range.
For a matching set, use manual settings on a batch. Auto adapts to each photo separately, so frames end up slightly different.
Troubleshooting
Auto did nothing to my photo
With clipping at zero, one very dark and one very bright pixel tell auto the range is already full. Raise the allowed clipping to around 0.5 percent.
My shadows went solid black
The black point is too high, and everything below it is now identical. Bring it down until you can see detail returning.
The photo looks washed out
The midtone slider is probably above 1 while the white point is also pulled down. Pick one; doing both flattens the picture.
Auto per channel changed my colours
That is what it does. It stretches each channel separately, which removes a cast but also drains a legitimately dominant colour. Use auto contrast instead.
Frequently asked questions
What does a levels adjustment do?
It decides where black starts, where white starts, and how brightness is distributed between them. Tones below the black point become pure black, tones above the white point become pure white, and the midtone control redistributes everything in between.
Why does auto levels do nothing on some photos?
Because it is using the darkest and brightest pixels. Almost every photo has one pixel near black and one near white from noise or a glint, which tells the algorithm the range is already full.
How does this tool avoid that?
Auto uses percentiles instead. On a flat test image running from 90 to 170 with four outlier pixels added, min and max stretched it by 1.02, doing nothing, while percentiles at 0.5 percent stretched it by 3.19.
What should the allowed clipping be?
Around 0.3 to 1 percent for most photos. Zero uses the true extremes and is fragile; above about 2 percent you start visibly sacrificing real shadow and highlight detail.
What is the difference between the two auto modes?
Auto contrast measures brightness and applies one stretch to all three channels, so colours are unchanged. Auto per channel stretches each channel separately, which fixes a colour cast at the same time.
Which adjustments are destructive?
Moving the black or white point inward is, because everything beyond becomes a single value and that detail is gone. The midtone control is not, since it redistributes brightness without flattening either end.
What does the midtone number mean?
It is a gamma value. Above 1 brightens the middle of the range while leaving pure black and pure white where they are; below 1 darkens it the same way.
What is the graph under the sliders?
The actual 256 entry lookup table being applied, redrawn as you drag, with a dashed identity line behind it. Where the curve sits above the dashed line, those tones are being brightened.
Can levels invert part of my image?
Not here. The table is built from two non-decreasing operations, so the whole mapping is non-decreasing. Checked across every setting the sliders allow, no table decreases at any step.
Should I use levels before or after other edits?
Early. Getting the tonal range right first means every later adjustment is working on a sensible starting point rather than fighting a flat image.
Why did my shadows go solid black?
The black point is above where your shadow detail lives, so all of it collapsed to a single value. Lower the black point until detail returns.
Can I use this on a batch?
Yes. Auto adapts to each image separately, which suits a mixed folder. Manual settings apply identically, which is what you want for a matching set.
Is this the same as brightness and contrast?
Related but more precise. Brightness and contrast apply one broad curve; levels lets you set both ends and the middle independently, which is why it can rescue photos that brightness and contrast cannot.
Are my photos uploaded to a server?
No. The histogram, the lookup table and the export all run in your browser using the canvas API. Nothing is sent anywhere.
Which format should I export?
Keep the original format for photographs. Stretching tones exaggerates existing JPEG artefacts, so re-export at quality 90 or above if the source was a JPEG.
Is transparency preserved?
Yes for PNG and WebP output. The alpha channel is untouched. JPG has no alpha, so transparent areas are filled with the background colour first.
Can the adjustment be undone?
Midtone changes are very nearly reversible. End point changes are not, because everything beyond them was collapsed to one value. Keep your original either way.
Does it add a watermark or need an account?
No to both. No sign-up, no email wall, no daily limit and no watermark on the output.