Instagram-Downloader README

The project's README from github.com/hoaianle/Instagram-Downloader. As one markdown file: README.md.

Instagram-Downloader

icon

How this work

With regex and some ReactFiber magic, I'm able to know which post you wanna download and fetch the api to download the photos for you.

Browser compatibility

This extension should work fine on the following browsers with fetch() API and Chromium base browser, tested Browser:

Download and install

Chrome or other Chromium browsers

Firefox (Development)

Settings

Everything is configured in one dialog. Open it from the Downloader settings entry that the extension adds to the left sidebar, right below your profile link.

The dialog has two sections, described below: Download button style and File name templates. Preferences are saved per-browser in localStorage and apply immediately, no reload needed.

The dialog follows Instagram's light/dark theme automatically. There is no theme option because the extension mirrors whatever Instagram is already using.

Download button style

Controls which download controls the extension shows. Pick one of three modes:

Mode What you get
Modern (default) Download buttons rendered directly on each post and on stories. No floating panel.
Legacy The classic floating Download button plus the media panel.
Both Modern and Legacy controls at the same time.

The mode applies instantly - the buttons and panel appear or disappear without a page reload.

Modern (inline) buttons

Legacy media panel

The panel is the older interface, and it's what the keyboard shortcuts drive.

Multi select

Multi select lives in the media panel, so you need the panel open - Legacy or Both mode, or press D in Modern mode.

File name templates

The File name templates section controls how downloaded files are named. It's split into three independent scopes, because a story and a post don't have the same useful metadata:

Each scope has its own row of tokens, plus a live preview showing the resulting Single file name and ZIP archive name.

Building a template

Underscores are inserted automatically between values, so you never have to type them. Tokens that have no value for a given download are skipped instead of leaving a blank or a stray underscore.

Available variables

Variable Value
#original_filename The filename Instagram reports for the media.
#username The account that posted it.
#date Publication date, formatted with the date format chosen below.
#title Caption text, or the highlight name.
#id The post's shortcode.
#resolution Pixel dimensions, e.g. 1080x1920.
#video_bitrate Video bitrate, e.g. 4.2Mbps.
#video_codec Video codec, e.g. VP9.

Single-file only. #original_filename, #resolution, #video_bitrate and #video_codec describe one specific file, so they are used for individual media names but omitted from the ZIP archive name. A ZIP is named from the post, not from its files.

Date format

Applies to #date in every scope. Uses Instagram's publication date in UTC.

Option Example
YYYY-MM-DD (default) 2026-09-17
DD_MM_YYYY 17_09_2026
MM_DD_YYYY 09_17_2026
MMM DD, YYYY Sep 17, 2026

Default templates

Scope Default
Posts #username_#id_#date
Stories #username_#id_#date
Highlights #username_#title

Sanitizing

Names are cleaned up before they hit disk, so a caption or username can't produce an invalid file:

Features

Customize

You can modify anything you want except some constants start with "IG_" that definitely gonna break this extension.

Edit Hide / Show Transition effects

.display-container.hide {
    transform-origin: 85% bottom;
    transform: scale(0);
    pointer-events: none;
    opacity: 0.6;
}

Panel and Legacy button geometry live in src/style/style.css:

/* .display-container is the media panel */
width: calc(80vh / 5 * 3);
height: 75vh;
max-width: 480px;
max-height: 800px;
bottom: 140px;
inset-inline-end: 20px;

/* .download-button is the Legacy button */
width: 120px;
height: 30px;
bottom: 100px;
inset-inline-end: 34px;

Both use inset-inline-end, so they follow Instagram's layout direction automatically.

Keyboard shortcut

Some keyboard shortcuts will not work if you use an external application for typing.

These shortcuts drive the Legacy panel.

D works in every mode. It clicks the Download button programmatically, so it still opens the panel in Modern mode even though the button itself is hidden there.

esc/C closes the panel, and S toggles select mode. Both are no-ops while the panel is closed, which is always the case in Modern mode until you press D.

Shortcuts are disabled on DM pages (/direct).

Settings storage

Preferences live in localStorage under the instagram.com origin. Useful for scripting or resetting a broken preference:

Key Value
instagramDownloaderUiMode inline (default), panel, or both
instagramDownloaderFilenameTemplates JSON object keyed by scope: post, stories, highlights
instagramDownloaderDateFormat One of the four date formats above

For example, to force the Legacy panel without opening the dialog:

localStorage.setItem('instagramDownloaderUiMode', 'panel');
location.reload();

Deprecated features

These features was deprecated for some reason.

Here is Demo

Demo v6.0.0

Instagram-Downloader (hoaianle/Instagram-Downloader)

Searching Database…

What is this?A Chrome extension that downloads photos and videos from Instagram posts, TV, reels, stories, and highlights directly from the page you're viewing.
Is this a Chrome-only tool or does it work in other browsers?It's built as a Chromium extension but also works in Firefox with fetch() API support; it's been tested on Chrome, MS Edge, and Firefox.
Do I need any accounts or API keys to use it?No, it just works by visiting Instagram in your browser and fetching data via regex and ReactFiber internals; no API key or login setup is mentioned.
Any install pitfalls I should know about?If you keep the extension on an external drive or partition that your Linux distro doesn't auto-mount, it will disappear until you remount the drive and restart the browser.
Is this an extension or a standalone app?It's a browser extension (not a standalone desktop app), loaded directly into Chrome, Edge, or Firefox.
How do I actually download something once installed?Go to any post, reel, story, or highlight and click the Download button that appears to fetch the data, then click individual photos/videos to save them.
Can I download multiple photos at once?Yes, toggle multi-select mode by clicking Photos, select individual items (or select all by click-and-hold), then click Download to save everything as a zip file.
Does it support high-quality video downloads?Yes, it downloads the highest-quality DASH video and audio streams and muxes them locally without re-encoding.
Are there keyboard shortcuts?Yes: D to download, Esc or C to close, and S to select all; these only work when you're not focused on an input, textarea, or textbox-role element.
Creator
hoaianle
Size
0.7 MB
Stars
441
Age
4y
Commits · 90 Days