Instagram Photo Downloader
Save full-resolution images from any public Instagram post — whether you're searching "download Instagram photos" or "Instagram photo saver", same tool.
Full-size IG photos, not the compressed preview
Instagram serves photos in several sizes (150px, 640px, 1080px…). We pull the largest variant available — usually 1080px on each side — so what you save looks as sharp as the original upload.
How it works
- 1. Copy the post linkFrom the Instagram post, tap the three-dot menu → Copy link.
- 2. Paste it abovePaste and hit Download. Single-photo posts and multi-photo carousels both work.
- 3. Save each photoFor carousels you'll see a numbered list (Photo 1 of N, Photo 2 of N, …) with a Download button per photo.
Features
Single + carousel
Single-image posts and multi-photo carousels both supported in one tool.
Full resolution
The largest size Instagram stores — typically 1080×1080 or 1080×1350.
Per-photo preview
Carousel results show a 48×48 thumbnail so you know which photo is which before downloading.
Original format preserved
Usually .webp (modern Instagram format). Convert to JPG in your OS if you prefer.
About that barcode-looking filename
Pull a photo down, open your Downloads folder, and the filename is something like 483603789_17871380199302275_2048372915_n.webp. Ugly, yeah. Not your fault though — and not really ours, as it turns out.
Instagram's image CDN (scontent-*.cdninstagram.com) returns a 403 Forbidden on any request from a server when we try to set a Content-Disposition header — which is the mechanism that lets a site say "save this file as X.jpg". For video and audio we can do that trick on our backend; for photos, no. Instagram's CDN treats server-side photo requests as hotlinking and blocks the header.
The workaround we landed on: send you to the image directly via a 302 redirect. Your browser downloads straight from Instagram's CDN, which works fine, but your browser also has no instructions about what to name the file. So it uses the URL path. Which is the internal IG blob ID. Which looks like a barcode.
Rename after download. There's no cleaner way until Instagram relaxes that CDN rule, and they've been tightening it, not relaxing it.
WEBP isn't a downgrade
Most Instagram photos from 2022 onwards come down as .webp instead of .jpg. Which trips people up — "weird format, lower quality, right?" Not really.
WebP at Instagram's default quality looks visually identical to JPG at equivalent settings, but the file is maybe 25–35% smaller on disk. The catch? There isn't one, really. Every modern OS opens it natively — recent macOS, recent Windows (once the Photos app has updated), recent iOS, and any Android from the last decade handle it fine. MDN's reference for WebP at https://developer.mozilla.org/en-US/docs/Web/Media/Guides/Formats/Image_types#webp_image covers the browser support matrix if you want to verify. Preview, the Photos app, the Windows viewer — no complaints.
If your downstream software chokes on WebP (some old image editors, some social platforms' uploaders), convert with any image viewer: right-click → Export As → JPG. macOS Preview does it in two clicks. No quality loss you'll see unless you pixel-peep at 400%.
Multi-photo posts — one click per slide for now
A multi-photo post returns a numbered list. Photo 1 of N, Photo 2 of N, straight through. Every row gets its own Download button, every row runs independently, and every row inherits the same barcode-filename problem — they're photos, the CDN rules apply.
We show a 48×48 thumbnail next to each row so you can tell which is which without clicking through. Useful for big carousels where the slides blur together in memory.
A "Download all as ZIP" button is on the backlog. Not shipped yet because the zip-streaming server side has to sit alongside our existing ffmpeg workers without starving them. Engineering tradeoff, not a missing checkbox.
What "full resolution" actually means on Instagram
Instagram stores photos at a maximum of 1080 pixels on the long edge. That's the ceiling. Creator uploaded a 12-megapixel original? Doesn't matter — IG resamples down before it hits the CDN.
You'll see 1080×1080 back for square posts most of the time. Portrait posts come out as 1080×1350 (the 4:5 aspect ratio the feed prefers). Landscape is rarer — when it does happen, around 1080×566, and the grid tends to crop those anyway.
We fetch the largest variant the CDN exposes. No hidden bigger version unlocks with the right API call. Ceiling is ceiling. Creator wanting your own originals back? Those live in your phone's camera roll — Instagram doesn't keep them around.
Why some carousels return a partial result
You'll see it once in a while: paste a 10-photo carousel, get back seven rows. The other three errored with "not available".
Usually that's one or two slides served from a CDN node that happens to be flaky during your request. Refresh the page, paste the URL again, and all ten typically show up the second time.
Rarely, it's Instagram's side actually serving different slides from different CDN shards, where one shard is temporarily unhappy. We don't retry automatically because retry storms are what get our IP pool flagged. Manual retry, minimum 30 seconds apart, almost always works.
What we observed
- Tested on macOS with Chrome in April 2026: clicking a photo variant's Download button occasionally returns an Instagram CDN error page reading 'URL signature mismatch'. Root cause: Instagram's image CDN (scontent-*.cdninstagram.com) binds signed download URLs to the originating IP address. When our server fetches the signed URL through a residential proxy and then 302-redirects your browser to it, the browser's IP differs from the signing IP, and the CDN rejects the request. Trying a different resolution variant on the same post often succeeds — the signatures are generated independently per resolution. (2026-04-22)
- The error, when it happens, is on Instagram's side — our server has no way to fully proxy photo downloads because the CDN also blocks server-side fetches attempting to set a friendly filename (Content-Disposition 403). Photos are fundamentally harder than video on Instagram's current CDN defenses; video downloads have no equivalent failure mode. (2026-04-22)
FAQ
- Why does the file have a weird name like 483603789_17871380199302275_....webp?
- Instagram's image CDN won't let us pre-set a filename (it 403s any request from our server for photos), so the browser saves the file with Instagram's own internal ID. Video and audio downloads keep the instayolo-<shortcode>.<ext> naming. You can rename photos after download.
- Why .webp instead of .jpg?
- Instagram has migrated most new photos to WEBP, which compresses better at the same quality. Any modern OS (macOS 11+, Windows 10+, iOS/Android) opens .webp natively. You can convert to JPG with any image viewer if needed.
- Can I download all photos from a carousel at once?
- Not yet — today each photo has its own Download button, so it's one click per photo. A 'Download all as ZIP' feature is on the roadmap.
- What's the maximum photo size?
- Instagram typically stores photos up to 1080×1350 (for portrait posts) or 1080×1080 (for square). That's what you'll get.
- Do you support private account photos?
- No. Public content only. This is a non-negotiable principle of the tool.
More downloaders
Something unclear? The FAQ covers format, quality, privacy, and legality. For a different content type, jump to every downloader we run. Team + contact on About.