Add film grain
Add film grain or noise to a photo, free and in your browser with no upload. Set the amount, the grain size and a seed, and the same settings always produce exactly the same grain.
Breaks up flat gradients and banding. A little goes a long way.
In detail
Grain adds film grain by pushing each pixel's red, green and blue up or down by a random offset from a seeded generator. Because the noise depends only on the seed and the image dimensions, the same settings always produce the same grain: the preview holds still while you drag a slider, and an export can be repeated exactly.
Amount runs 0 to 100, grain size 1 to 8 pixels per block, and two toggles decide whether the grain is monochrome and whether it is weighted toward the shadows, the way film breaks up in the dark. Grain adds detail an encoder has to store, so the file grows, and the tool reports by how much.
Add film grain at a glance
- Input
- JPG, PNG, WebP, AVIF, HEIC, GIF (first frame), BMP, TIFF, SVG and other image formats
- Output
- The original format, PNG, WebP or JPEG
- What it does
- Amount and grain size
- Seeded, repeatable noise
- Monochrome or color grain
- A shadow-weighted option
- The file size cost reported
- Who it is for
- Photographers and designers after an analog look, or anyone hiding banding in a gradient.
- Limits
- Grained files are larger, and the tool measures the difference.
- The preview is drawn smaller than the export.
- Privacy
- Runs entirely in your browser: no file is uploaded, and nothing is kept after you close the tab.
How to add film grain to a photo
- Drop your images Drag one or more files onto the drop area. The preview draws the grain live as you set it.
- Set the amount The amount slider runs 0 to 100 and starts at 18. Past about 40 it stops reading as film and starts reading as damage.
- Set the grain size Noise is drawn in square blocks of 1 to 8 pixels. Larger blocks are coarser, closer to a fast film stock.
- Choose monochrome or color speckle Monochrome grain, on by default, uses one offset for all three channels. Turn it off for color speckle, which reads as digital noise. "Shadows only" weights the grain by inverse luminance, the way film breaks up in the dark and holds in the light.
- Set the seed and process Type a seed from 0 to 999999 or press Reroll for a new one, then press Apply. The first file of the batch is also encoded without grain, so the notice can report what the noise actually cost in bytes.
Add film grain: common questions
Does adding grain make the file bigger?
Almost always, and Grain measures it rather than guessing. Noise is exactly the detail an encoder throws away first, so a grained JPEG or WebP is larger than the same image without it. After you press Apply, the tool encodes the first file of the batch a second time with the grain turned off and reports both sizes and the percentage difference.
Can I reproduce the same grain later?
Yes. Grain uses a seeded Mulberry32 generator and draws one noise value per block before any pixel in that block is read, so the sequence depends on the seed and the image dimensions and never on the image content. Two runs with the same seed, size and dimensions produce byte-identical output. The seed is a number from 0 to 999999 that you can type in directly.
Why does the grain in the preview look different from the export?
The preview is drawn no larger than 1000 pixels on its long edge, with the block size scaled down to match, so it shows the same texture at the same relative coarseness but not the same pixels. When the block size is above 1 pixel and the preview is smaller than the source, Grain says so and names the width it drew at. The export always carries the block size you set, at full resolution.