🌊 Nami
An open-source CLI media downloader for Instagram, TikTok, Facebook, and X
Nami is a lightweight, open-source media downloader designed for seamless batch extraction across social platforms. Combining gallery-dl and yt-dlp with an interactive Rich terminal interface, Nami automates deduplication, rate-limit retries, and browser cookie handling.
Installation • Usage Flow • Supported Platforms • Directory Layout • Configuration
Features
- Photos & Videos: Batch download high-resolution photos, reels, videos, and posts.
- Instagram Stories & Highlights: Extract stories and highlight archives automatically.
- Smart Anti-Duplicate Archiving: Automatic
archive.txttracking avoids re-downloading existing media. - Automated Cookie Integration: Supports Netscape cookie files and browser session extraction (
--cookies-from-browser). - Cookie Fallback & Retry Logic: Automatically attempts anonymous fallbacks and handles rate-limits gracefully.
- Terminal UI: Powered by
richwith customizable contrast themes (light/dark).
Supported Platforms
| Platform | Photos | Videos | Stories | Highlights | Authentication Mode | Status |
|---|---|---|---|---|---|---|
| Included | Included | Included | Included | Netscape Cookie / Anonymous | Active | |
| TikTok | Included | Included | N/A | N/A | Browser DB / Netscape Cookie | Active |
| Included | Included | N/A | N/A | Netscape Cookie / Anonymous | Active | |
| X (Twitter) | Included | Included | N/A | N/A | Netscape Cookie / Anonymous | Active |
Installation
Install nami directly via pip:
pip install nami
All dependencies (rich, gallery-dl, yt-dlp) are automatically installed.
To upgrade to the latest release:
pip install -U nami
Usage Flow
1. Project Workspace Initializer
When you launch nami for the first time, it automatically creates your local workspace structure:
Nami/
├── downloads/ # Extracted media organized by platform & account
├── cookies/ # Optional Netscape cookie files (*_cookies.txt)
└── profiles/ # Target account URL text files (*_profiles.txt)
2. Configure Profile Sources
Add your target account URLs into the designated text files inside Nami/profiles/:
Nami/profiles/
├── instagram_profiles.txt # Add Instagram profile URLs (one per line)
├── tiktok_profiles.txt # Add TikTok profile URLs
├── facebook_profiles.txt # Add Facebook profile URLs
└── x_profiles.txt # Add X / Twitter profile URLs
3. Session Authentication
Place Netscape-formatted cookie files inside Nami/cookies/ to download private content or bypass login restrictions:
instagram.com_cookies.txtfacebook.com_cookies.txtx.com_cookies.txt
4. Interactive Execution & Filtering
Launch the application to run batch downloads across your configured profile lists:
nami
┌──────────────────────── Nami ────────────────────────┐
│ What do you want to download? │
│ │
│ 1 Photos only │
│ 2 Videos only │
│ 3 Stories only │
│ 4 Highlights only │
│ 5 Photos + Videos │
│ 6 Stories + Highlights │
│ 7 All │
│ 8 Settings │
│ 0 Exit │
└──────────────────────────────────────────────────────┘
Configuration & Environment Variables
User settings are saved automatically in ~/.nami/nami_config.json. You can also configure Nami via environment variables:
| Variable | Description | Default |
|---|---|---|
NAMI_THEME |
Terminal theme styling (dark or light) |
dark |
NAMI_BASE_DIR |
Custom output downloads directory path | Configured path |
NAMI_COOKIES_DIR |
Custom Netscape cookie directory path | Configured path |
NAMI_PROFILES_DIR |
Custom profile text files directory path | Configured path |
NAMI_BROWSER |
Browser for automated cookie extraction (brave, chrome, edge, firefox) |
brave |
NAMI_USER_AGENT |
Custom HTTP User-Agent string for request headers | Chrome 131 standard string |
NAMI_SKIP_ENV_CHECK |
Set to 1 to skip initial dependency verification |
0 |
Customizing Theme Contrast
Adjust terminal theme styling by setting NAMI_THEME:
# Light Terminal Theme
export NAMI_THEME=light
# Dark Terminal Theme (Default)
export NAMI_THEME=dark
License
Distributed under the MIT License. Developed and maintained by Igect under OpenSelena.
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 nami-3.0.2.tar.gz.
File metadata
- Download URL: nami-3.0.2.tar.gz
- Upload date:
- Size: 18.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6ed821631381b65528d5a619f46174dea48e909da79bf4a588edbae84e0535dd
|
|
| MD5 |
7f6e76a538dd9b1d5cf49757125db45b
|
|
| BLAKE2b-256 |
5431334851980d9386c5129bca092c9a500e028ceffe09f1888c1a847269c52e
|
Provenance
The following attestation bundles were made for nami-3.0.2.tar.gz:
Publisher:
publish.yml on OpenSelena/nami
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
nami-3.0.2.tar.gz -
Subject digest:
6ed821631381b65528d5a619f46174dea48e909da79bf4a588edbae84e0535dd - Sigstore transparency entry: 2447748754
- Sigstore integration time:
-
Permalink:
OpenSelena/nami@14b96b2828edc7ad6b9da79af63800f3565e4e1b -
Branch / Tag:
refs/tags/v3.0.2 - Owner: https://github.com/OpenSelena
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@14b96b2828edc7ad6b9da79af63800f3565e4e1b -
Trigger Event:
release
-
Statement type:
File details
Details for the file nami-3.0.2-py3-none-any.whl.
File metadata
- Download URL: nami-3.0.2-py3-none-any.whl
- Upload date:
- Size: 16.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9f9f1176682b1aff94083091402933159a3d5dfeb5549d860c5b738a22a8060d
|
|
| MD5 |
4a7152a2484646b36d6265220d0f12ac
|
|
| BLAKE2b-256 |
6a497d628d9cb00697728a704a3b907c87c420e6bad7e14d594a23c0066fc50b
|
Provenance
The following attestation bundles were made for nami-3.0.2-py3-none-any.whl:
Publisher:
publish.yml on OpenSelena/nami
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
nami-3.0.2-py3-none-any.whl -
Subject digest:
9f9f1176682b1aff94083091402933159a3d5dfeb5549d860c5b738a22a8060d - Sigstore transparency entry: 2447749657
- Sigstore integration time:
-
Permalink:
OpenSelena/nami@14b96b2828edc7ad6b9da79af63800f3565e4e1b -
Branch / Tag:
refs/tags/v3.0.2 - Owner: https://github.com/OpenSelena
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@14b96b2828edc7ad6b9da79af63800f3565e4e1b -
Trigger Event:
release
-
Statement type: