You spend twenty minutes editing a photo. It looks great in your camera roll. You post it, open your own profile, and the sky has gone blotchy, the edges look slightly smeared and the whole thing has lost its bite.
Nothing went wrong. Instagram did to your image exactly what it does to every image, and most of the damage is avoidable by exporting differently.
What Actually Happens on Upload
Between tapping share and the image appearing in a feed, your file goes through a pipeline. Each stage is lossy.
Stage 1: Resize. Instagram serves images at fixed display widths. The feed has settled on 1080 pixels wide for years. If you upload a 4032 pixel wide photo straight off an iPhone camera, roughly three quarters of the horizontal resolution is discarded by an automated downscale that has no idea what part of the image you care about.
Stage 2: Re-encode. The resized image is compressed as a JPEG at a quality level Instagram selects, tuned for delivery cost across billions of images rather than for your photo.
Stage 3: Format conversion. iPhones shoot HEIC by default. That gets converted, adding another encode step before the one above.
Stage 4: Colour handling. Modern iPhone photos are captured in Display P3, a wider colour space than the sRGB most web delivery assumes. Depending on the path, the conversion can shift saturated colours.
Every stage independently costs detail, and they compound. Worse, if your file was already a heavily compressed JPEG, Instagram is now compressing compression artefacts, which is the fastest way to get the blotchy look.
Why the Damage Lands Where It Does
JPEG compression works by splitting the image into 8 by 8 pixel blocks and discarding the fine detail within each block that the eye is least likely to notice. That model has predictable weak spots, and they explain every complaint people have about Instagram quality.
| What breaks | Why | Where you see it |
|---|---|---|
| Smooth gradients go blotchy | Subtle tonal steps fall below the threshold the encoder keeps | Clear skies, studio backdrops, sunset gradients |
| Fine texture turns to mush | High-frequency detail is the first thing discarded | Hair, fabric weave, foliage, sand |
| Halos around hard edges | Ringing artefacts at high-contrast boundaries | Text over image, branches against sky, buildings against light |
| Saturated colour gets patchy | Chroma is stored at lower resolution than luminance | Neon signs, bright red clothing, deep blues |
| Shadow areas get muddy | Little tonal variation to preserve, so blocks flatten | Dark backgrounds, night photography |
| Grain becomes digital noise | Film grain is high-frequency detail the encoder cannot keep cheaply | Any heavily grained edit |
That last row catches a lot of people. Adding heavy grain in editing is a good look, and it is also the single most expensive thing you can hand a JPEG encoder. The compressor cannot preserve fine random noise at a reasonable file size, so it approximates it into blotches. Grain that looks beautiful in your editor routinely looks like sensor noise after upload.
The Export Settings That Fix Most of It
Export at exactly 1080 pixels on the short side. Not 4032, not 2048. Do the downscale yourself in your editor, where the resampling is done well and you can sharpen afterwards. Uploading a huge file does not give Instagram more to work with. It just guarantees an automated downscale you had no control over.
The three sizes worth knowing:
- 1080 x 1350 for a 4:5 portrait feed post. This is the crop that occupies the most vertical space on a phone screen, so it is the default worth using.
- 1080 x 1080 for square.
- 1080 x 1920 for Stories and Reels.
Convert to sRGB before export. If your editor offers a colour profile choice, pick sRGB. The conversion happens either way. Doing it yourself means you see the result on your own display and can push saturation back where it belongs, instead of discovering the shift after posting.
Export JPEG at high quality, not maximum. Somewhere around 85 to 90 percent is the sweet spot. Maximum quality produces a very large file that Instagram will re-compress anyway, and the extra size buys you nothing downstream. What matters is that your file has no visible artefacts going in, because Instagram compresses whatever it receives, artefacts included.
Sharpen after resizing, gently. Downscaling softens an image. A light sharpening pass at the final size restores the bite. Overdo it and the halos you create become obvious artefacts after Instagram's encode, so err low.
Go easy on grain and heavy texture. If the look needs grain, use less than feels right in the editor. It will read as stronger after compression, not weaker.
The In-App Settings Most People Never Turn On
Instagram deliberately downgrades uploads under some conditions, and two toggles control it.
Turn off data saver. Under Settings, in the media and data quality section, there is an option to use less mobile data. With it on, the app uploads a more compressed file when you are not on WiFi.
Turn on high quality uploads. In the same area there is a setting for uploading at the highest quality available. It is not always on by default.
Post over WiFi with a good connection. With the settings above corrected this matters less, but a poor connection can still push the app toward a smaller upload.
Do not screenshot to crop. A screenshot re-encodes the image at screen resolution and throws away everything above it. Crop in an editor and export fresh.
Avoid the round trip. Editing in one app, saving, re-opening in another, saving again, then applying an in-app filter stacks four lossy encodes before Instagram has even seen the file. Do your editing in one pass and export once.
Things People Blame That Are Not the Cause
Your phone camera. A 12 or 48 megapixel capture is far beyond what a 1080 pixel wide display needs. Resolution is not the bottleneck. The encode is.
Instagram singling out your account. The pipeline is automated and identical for everyone. There is no per-account quality setting.
Posting at the wrong time. This one circulates constantly and there is no mechanism behind it. Compression does not vary by hour.
Using an in-app filter. The filter is applied before the same compression everyone else gets. It does not add a penalty, though a filter that boosts saturation or adds grain gives the encoder a harder job.
Getting the File Right Before It Leaves Your Phone
Most of the fixes above are export decisions, which means the work happens before you open Instagram at all: crop to the right aspect ratio, resize once to 1080, sharpen lightly, and keep the edit to a single pass so you are not stacking encodes.
Filtr is an iPhone camera and editing app for that pass. It handles the shooting and the look in one place, which matters here mostly because it removes the app-to-app round trip that quietly re-encodes your image two or three extra times before upload.
What no editing app can do is undo Instagram's compression, because that happens on their servers after you post. Nothing on your phone controls that stage. The only lever any of us has is what the file looks like going in, and a clean, correctly sized, lightly sharpened 1080 pixel export survives that encode dramatically better than a 4032 pixel file with heavy grain.
The Short Version
- Instagram resizes to 1080 pixels wide and re-encodes as JPEG. Both stages discard detail
- Export at 1080 x 1350 for portrait, 1080 x 1080 for square, 1080 x 1920 for Stories
- Convert to sRGB yourself so you see the colour shift before it happens
- JPEG at 85 to 90 percent quality. Maximum adds file size, not surviving detail
- Sharpen after resizing, and lightly, because halos become artefacts
- Heavy grain is the most compression-hostile thing you can add. Use less than looks right
- Turn off data saver, turn on high quality uploads, post on WiFi
- Never screenshot to crop, and never round trip between apps before posting