Download media from Instagram
Project description
BasketCase
Download images and videos from Instagram.
Notable features:
- Stories can be downloaded without being seen.
- Downloads media from a list of URLs.
- Downloads media of the highest quality available.
- Downloads a high-quality profile picture.
"Green Day - Basket Case" on YouTube 🤕
Installation methods
pipx
pipx greatly simplifies user installations and avoids conflicts with the system by isolating every program in its own virtual environment.
pipx install basketcase
venv
Or you could simply install it in a virtual environment created with
the venv module.
python -m venv ~/.venv
. ~/.venv/bin/activate
pip install basketcase
Command-line usage
basketcase get "https://instagram.com/p/POST_ID"
Downloaded resources will be stored in the current working directory by default. Override with the
get --outputoption.
To download from multiple URLs, create a text file (e.g. urls.txt)
and populate it with resource URLs:
https://instagram.com/p/POST_ID
https://instagram.com/reel/REEL_ID
https://instagram.com/USERNAME
basketcase get ./urls.txt
See --help for more info.
Supported URLs
| Supported URL | Description |
|---|---|
https://instagram.com/USERNAME |
User profile. Downloads stories from the past 24 hours, and the profile picture. |
https://instagram.com/p/POST_ID |
Standard feed post |
https://instagram.com/reel/REEL_ID |
Reels movie |
https://instagram.com/stories/highlights/HIGHLIGHT_ID/ |
A collection of stories, or "highlights" |
https://instagram.com/s/CODE |
An alternative URL commonly used for highlighted stories |
https://instagram.com/tv/CODE |
Similar to reels |
Session management
To retrieve your Instagram cookies, follow these steps:
- Navigate to instagram.com on your browser.
- Open up Developer Tools, switch to the Network tab, then reload the page.
- On the list, find the initial request that returns HTML, and inspect its request headers.
- Copy the value of the
Cookieheader and put it in a text file (e.g.cookies.txt).
Example cookies.txt:
datr=REDACTED; ig_did=REDACTED; csrftoken=REDACTED; mid=REDACTED; ig_nrcb=1; ds_user_id=REDACTED; sessionid=REDACTED; ps_l=1; ps_n=1; rur="REDACTED"; wd=773x818
basketcase session add-cookies ./cookies.txt --set-name "jane.doe"
# New session created (id=1) with 10 cookie(s)
This is the recommended method, since we should try to look like a real browser as much as we can to avoid "automated behavior" warnings.
Alternatively, add a single sessionid cookie.
basketcase session add-cookie "COOKIE_VALUE" --set-name "john.doe"
# New session created (id=1) with one 'sessionid' cookie
Specify its identifier when downloading.
basketcase get -s 1 URL_OR_FILE
List all available sessions with
basketcase session list.To disable sessions, use
get --no-session.If only one exists, it is treated as the default.
When the instance is closed (
BasketCase.close()) or the script exits, cookies from the HTTP client are saved in the database. This keeps your cookies up-to-date.
User data
Cookies and other application data are kept in your home directory
(i.e. ~/.basketcase).
Known limitations
This program relies on the APIs used by the web browser Instagram client, which can change without a notice.
Multiple authors, owner is private
Fails to locate a suitable extractor for a standard feed post with multiple authors, in which the owner - or main author - has a private profile you cannot see.
Development setup
This project uses pipenv for dependency and virtual environment management, so make sure it's installed. pipx is a convenient tool to manage your virtual-environment user installations, and it can be used to install pipenv.
1. Install build dependencies
These must be installed using the system package manager. The package name examples listed below are from Debian.
- Python development headers and libraries (e.g.
python3-dev). - lxml requires
libxml2andlibxslt, as documented here (e.g.libxml2-dev libxslt-dev). - cffi requires libffi (e.g.
libffi-dev).
2. Create the environment
cd to the project root, then run pipenv install --dev.
Test
To discover and run all tests in this project, activate the project venv,
cd to the project root and run python -m unittest. Test coverage is
still low and needs some effort.
Package build and upload
First, increment the version in pyproject.toml.
Then build the package.
python -m build
If that succeeds, commit and push the version change, then tag the release.
git tag -a VERSION_NUMBER -m 'Briefly describe the changes'
git push REMOTE VERSION_NUMBER
Finally, publish it.
python -m twine upload dist/*
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file basketcase-8.0.2.tar.gz.
File metadata
- Download URL: basketcase-8.0.2.tar.gz
- Upload date:
- Size: 30.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c9b6bae47e8d87f990cc103d3333a7537d082d3e5bf2a24b4c1a0f3fd135fa2c
|
|
| MD5 |
397236b908ce289e6030620a7f2b6bf0
|
|
| BLAKE2b-256 |
1755a34a8ac128dbd7be20e8f51eddd10c41b2ab84e61ab7d90cfecf89e306d6
|
File details
Details for the file basketcase-8.0.2-py3-none-any.whl.
File metadata
- Download URL: basketcase-8.0.2-py3-none-any.whl
- Upload date:
- Size: 30.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ea1c9cf62c1ed344a24069f0b18adf75c162abd1b4b827604a02f105f6a34448
|
|
| MD5 |
016674bdbe04101dd3d9dc9a3b1e15da
|
|
| BLAKE2b-256 |
acf07036527f92b9cda75e3a63887ca0904fe222dca11e6f551548217a70cf95
|