A command-line downloader for Instagram content, built on instaloader. It archives a profile's grid posts, stories and highlights to a local folder, with captions indexed alongside the media.
python3 -m venv .venv && source .venv/bin/activate
pip install instaloader# photos only (grid + stories + highlights, no reels/videos)
python3 howtoloadfromIG.py --user YOUR_HANDLE --target TARGET_HANDLE --photosYou log in as --user; the first run prompts for the password and 2FA and then
saves a session file, so later runs need neither. Session files are gitignored
and never leave your machine.
Useful flags:
| Flag | Effect |
|---|---|
--photos |
Skip all videos and reels |
--story-videos |
Keep story videos even with --photos |
--no-stories |
Skip stories |
--no-highlights |
Skip highlights |
./download_photos.sh <profile> [profile ...] is a thin wrapper for the
photos-only case; set IG_LOGIN to your handle first.
Output lands in instagram_downloads_<target>/.
Automated collection is against Instagram's Terms of Service, and this tool logs in as you — accounts that scrape at volume get rate-limited or banned. Downloading media of identifiable people also makes you responsible for how that data is stored and shared, and under regimes like the GDPR that is a legal obligation, not just an ethical one.
Use it on your own account, on content you have permission to archive, or on public content where local law allows it. Don't use it to monitor, track or build profiles of people who have not agreed to it.
howtoloadfromIG.py is the maintained entry point. IGdownloadV1_2fa.py,
fetch_top_reels.py, run_live_collector.py and src/ig_tracker/ are earlier
experiments toward a metrics-tracking web app that was never finished; they are
kept for reference and are not wired into the downloader.
MIT — see LICENSE.