Skip to content

Repository files navigation

FrameFetch

High-resolution video and photo downloader for YouTube, Instagram, Facebook, TikTok, X/Twitter, and many other sites.

Paste or drag-and-drop media URLs into a local web UI. Downloads run in parallel, land on disk in high quality, and support per-site authentication, multi-account round-robin, and proxy settings.

Built with Flask and yt-dlp.


Screenshot

image

Features

  • Download videos and photos from social media via URL
  • Multi-threaded queue (parallel downloads)
  • Drag-and-drop or paste multiple URLs
  • High-resolution format selection (best video + audio)
  • Per-site authentication (cookies, login, API keys)
  • Multiple accounts per site with round-robin and health status
  • Paste HTTP / cURL requests to auto-configure auth
  • Proxy support (HTTP / SOCKS5) for geo-restricted media
  • Windows and Linux / macOS launchers

Requirements

  • Python 3.10+ (3.11–3.14 recommended)
  • FFmpeg (optional but recommended for merging best video + audio)
  • Network access to the platforms you download from

Quick start

Windows

run.bat

Or manually:

py -3 -m venv .venv
.venv\Scripts\pip install -r requirements.txt
.venv\Scripts\python app.py

Linux / macOS

chmod +x run.sh
./run.sh

Or manually:

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python app.py

Open http://127.0.0.1:5000 in your browser.

Listen on LAN / server

HOST=0.0.0.0 PORT=5000 ./run.sh

On Windows PowerShell:

$env:HOST="0.0.0.0"; $env:PORT="5000"; .\.venv\Scripts\python.exe app.py

Usage

  1. Paste one or more media URLs (one per line), or drag links onto the composer.
  2. Click Start download.
  3. Watch progress in the Download queue.
  4. Files are saved under the local downloads/ folder (also downloadable from the UI).

Authentication (private / age-gated media)

  1. Open Auth settings.
  2. Pick a site (Instagram, Facebook, YouTube, …).
  3. Add account or Paste request (raw HTTP / cURL / headers).
  4. Enable healthy accounts — red status accounts are skipped.
  5. Use Accounts status to toggle, edit, or delete accounts.

Proxy

  1. Open Auth settings → Network / Proxy.
  2. Enter a proxy URL (http://…, socks5://…) or host/port credentials.
  3. Enable and save — applied to all downloads.

Project layout

├── app.py              # Flask web server + API
├── downloader.py       # Thread pool + yt-dlp downloads
├── auth_config.py      # Per-site multi-account auth
├── proxy_config.py     # Proxy settings
├── templates/          # HTML UI
├── static/             # CSS / JS
├── config/             # Local secrets (gitignored) + examples
├── downloads/          # Downloaded media (gitignored)
├── requirements.txt
├── run.bat             # Windows launcher
└── run.sh              # Linux / macOS launcher

Configuration

Local runtime data is not committed:

Path Purpose
config/auth.json Auth accounts & cookies metadata
config/proxy.json Proxy settings
config/cookies/ Uploaded cookie files
downloads/ Downloaded media

Example templates:

Copy and rename if you want to seed config manually; the app also creates these files from the UI.


API (local)

Method Path Description
GET / Web UI
POST /api/download Start downloads { "urls": ["…"] }
GET /api/jobs List jobs
POST /api/jobs/<id>/cancel Cancel a job
GET /api/settings/auth Auth profiles
GET / PUT /api/settings/proxy Proxy settings
GET /api/health Health check

Troubleshooting

Issue What to try
YouTube 403 Forbidden Add logged-in YouTube cookies under Auth; update yt-dlp; enable a proxy
YouTube Video unavailable Region lock → proxy; age-gate → cookies; or the video may be removed
[Errno 22] Invalid argument Fixed via Windows-safe filenames; update to latest code and restart
Merge / best quality fails Install FFmpeg and ensure it is on PATH
Private Instagram / Facebook Use browser cookies or upload cookies.txt for that site

Keep yt-dlp current:

pip install -U "yt-dlp[default]"

Legal / ethics

Use FrameFetch only for content you have the right to download. Respect each platform’s terms of service and copyright law. This tool is for personal / educational use.


License

MIT — see LICENSE.

About

FrameFetch — local web app to download high-res videos & photos from YouTube, Instagram, Facebook, TikTok & more. Paste or drag URLs, parallel downloads, per-site multi-account auth, proxy support. Built with Flask + yt-dlp. Windows & Linux.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages