A small private tool for preparing Instagram media for download.
Dropframe lets you paste an Instagram link, preview the available media, and download an individual item or an entire carousel as a ZIP. It is designed for personal, private use and keeps downloaded files only temporarily.
- Photos, videos, posts, and reels
- Photo and video carousels
- Active stories and highlights
- Private content only when the Instagram session in
cookies.txtalready has access
Dropframe downloads the best version Instagram makes available. That may not be the original file uploaded by its author.
Only download content you own or have permission to use. Dropframe is not affiliated with, endorsed by, or an official tool of Instagram.
Public posts may work without signing in. For stories, highlights, private content, or more reliable access, export your browser's logged-in Instagram session to Netscape/Mozilla cookie format and save it as:
auth/cookies.txt
The file is intentionally ignored by Git and never copied into the Docker image. See the cookie setup guide before adding it.
Open two terminals.
# Terminal 1 — API
cd backend
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --host 127.0.0.1 --port 8000# Terminal 2 — web app
cd frontend
npm install
npm run devThen visit the local address printed by Vite, normally http://127.0.0.1:5173.
Build and publish an ARM64 image in your own registry, then reference it from your Compose file:
ghcr.io/your-account/dropframe:latest
Mount the optional cookie directory as read-only:
instagram-downloader:
image: ghcr.io/your-account/dropframe:latest
restart: unless-stopped
ports:
- "127.0.0.1:8082:8080"
volumes:
- /srv/dropframe/auth:/app/auth:roIf you use cookies.txt, the application runs as UID 10001. Give that user read access on the host while keeping the file private:
sudo chown -R 10001:10001 /srv/dropframe/auth
sudo chmod 750 /srv/dropframe/auth
sudo chmod 600 /srv/dropframe/auth/cookies.txtAfter a new image is published:
docker compose pull instagram-downloader
docker compose up -d --force-recreate instagram-downloader- Files and job metadata are temporary and are removed automatically after 15 minutes.
cookies.txtis optional. Without it, Dropframe attempts public content only.- If Instagram asks you to log in again or access stops working, export a fresh
cookies.txtfrom a browser session that can view the target content. - There is no user account, database, or permanent media storage in Dropframe.
React + TypeScript, FastAPI, gallery-dl, yt-dlp, FFmpeg, Nginx, Docker, and GitHub Actions.
Keep it private, keep your cookies private. 🔒