Skip to content

Repository files navigation

IG Downloader

IG Downloader is a Chrome Manifest V3 extension that adds a sidebar to Instagram web pages. It detects visible photos and videos, then lets you download supported media through Chrome's built-in download manager.

Current Features

  • Sidebar injected on supported Instagram pages.
  • Photo detection from DOM images, OpenGraph metadata, script data, preload links, and performance resources.
  • Video detection from DOM videos, metadata, script data, preload links, and performance resources.
  • Direct photo downloads when an HTTP(S) image URL is available.
  • Direct video downloads when an HTTP(S) video URL is available.
  • Reconstructable stream downloads for unencrypted HLS (.m3u8) and common DASH (.mpd) manifests.
  • Blob-backed video preview support using a captured still frame from Instagram's video player.
  • Download support for captured blob-video still preview pictures.
  • Sidebar collapse and toolbar-icon toggle.
  • Instagram single-page navigation handling.

Important Video Behavior

Instagram often serves videos and Reels through temporary blob: URLs or segmented streams. These page-local blob URLs cannot be downloaded directly by a Manifest V3 background service worker.

Some Instagram URLs also look like .mp4 files but include range or byte parameters such as bytestart, byteend, or range. Those URLs are usually partial stream fragments, not complete playable MP4 files. The extension treats those as preview-only instead of downloading an unplayable video chunk.

When a blob-backed video exposes an unencrypted HLS or DASH manifest, the extension can fetch the manifest, assemble the listed segments in an offscreen document, and download the completed file. MPEG-TS HLS playlists are saved as .ts; fMP4/DASH streams are saved as .mp4.

When no reconstructable manifest is available, the extension attempts to capture a still preview picture from the existing Instagram video element:

  • Before capture succeeds, the row button shows Unavailable.
  • After capture succeeds, the button changes to Download.
  • Clicking Download saves the captured still picture as a JPEG.
  • This downloads the still preview image, not the full video.

Direct HTTP(S) video URLs, when detected and not identified as partial stream fragments, can also be downloaded as video files.

Installation

Manual Installation

  1. Open Chrome and go to chrome://extensions/.
  2. Enable Developer mode.
  3. Click Load unpacked.
  4. Select this extension folder.
  5. Open or refresh https://www.instagram.com/.

Chrome Web Store

If published, install the extension from its Chrome Web Store listing. Keep the listing description consistent with the behavior documented here.

Usage

  1. Open Instagram in Chrome.
  2. Browse to a post, Reel, profile grid, or feed item.
  3. Review detected media in the right-side sidebar.
  4. Click Download next to a supported item.
  5. Use the toolbar icon to toggle the sidebar.

Permissions

The extension requests the following permissions:

  • downloads: required to save detected media through Chrome's download manager.
  • activeTab: used when the toolbar icon is clicked to interact with the current tab.
  • offscreen: used to assemble stream segments into a Blob because MV3 service workers do not have DOM Blob URL APIs.

The extension requests host access only for:

  • https://www.instagram.com/*
  • https://instagram.com/*
  • https://m.instagram.com/*
  • common Instagram media CDN hosts such as https://*.cdninstagram.com/*, https://*.fbcdn.net/*, and https://*.fbsbx.com/*

No <all_urls> permission is used.

Privacy

IG Downloader runs locally in the browser.

  • It does not collect Instagram credentials.
  • It does not collect personal information.
  • It does not send media URLs or browsing activity to an external server.
  • It does not use analytics.
  • It does not include a donation flow, payment service, EmailJS integration, or external backend.
  • Detected media data is kept in memory for the current page session.

Downloads are initiated only when the user clicks a sidebar download button.

Security Notes

  • Sidebar rows are built with DOM APIs instead of injecting page-controlled media URLs as raw HTML.
  • The background service worker accepts only HTTP(S) URLs and generated data:image/... URLs for downloads.
  • Download filenames are sanitized before being passed to chrome.downloads.download.
  • Blob video URLs are not passed to the background worker for direct download.
  • The manifest uses narrow Instagram host permissions and only the permissions needed by the current implementation.

Limitations

  • Full video download is available when Instagram exposes a complete direct HTTP(S) video URL or an unencrypted reconstructable HLS/DASH manifest.
  • Blob-backed videos without a reconstructable manifest can provide still preview image downloads, not full video downloads.
  • Encrypted HLS, DRM-protected DASH, and partial-only playback buffers are not reconstructed.
  • Separate audio/video renditions that require muxing are not reconstructed in this pass.
  • MP4-looking range or byte-segment URLs are preview-only because they usually save as unplayable fragments.
  • Some protected or cross-origin video streams may block still-frame capture.
  • Instagram media URLs may expire quickly.
  • Instagram markup and media delivery can change, which may require detector updates.

Development Checks

Run syntax checks after code changes:

node --check content.js
node --check background.js
node --check offscreen.js

Before packaging for the Chrome Web Store:

  1. Reload the unpacked extension in chrome://extensions/.
  2. Open Instagram and confirm the sidebar appears.
  3. Test photo download.
  4. Test direct video download when a direct video URL is detected.
  5. Test stream reconstruction when an unencrypted HLS or DASH manifest is detected.
  6. Test blob-video still preview capture and still-image download when no reconstructable manifest is available.
  7. Confirm the Chrome Web Store listing, privacy disclosures, and screenshots match the actual extension behavior.

Legal Notice

This extension is intended for personal use. Users are responsible for complying with Instagram's terms, copyright law, and any other applicable rules. Do not use this extension to access or download content without appropriate rights or permission.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages