fetchly

fetchly

Docker app from GillBates' Repository

Overview

Self-hosted media downloader for YouTube, TikTok, Instagram & Facebook. Paste a link, preview it, pick a format - with a live job dashboard, waveform audio trimming, and Lalal.ai stem separation. Features: - Download video or audio from YouTube, TikTok, Instagram, and Facebook - Live dashboard for queued, active, completed, and failed jobs - Trim audio visually on an interactive waveform - Optional Lalal.ai integration to split vocals/instrumentals (API key entered in-app under Settings) - Authenticated access with CSRF protection, anti-bot checks, and login rate limiting IMPORTANT - Required Environment Variables: - FETCHLY_SECRET_KEY: signs session cookies. Generate with: openssl rand -base64 32 - FETCHLY_ADMIN_PASSWORD: password for the admin login (username defaults to "admin") The container refuses to start without both of these set. Reverse Proxy: - fetchly speaks plain HTTP inside the container. If terminating TLS at a reverse proxy, set FETCHLY_BEHIND_HTTPS=1 so session cookies are marked Secure. Only publicly accessible URLs work - private videos will not download. Source: https://github.com/Gill-Bates/fetchly

fetchly

Self-hosted media downloader for YouTube, TikTok, Instagram & Facebook.
Paste a link, preview it, pick a format — with a live job dashboard, waveform audio trimming, BPM analysis, and Lalal.ai stem separation.

GitHub Release Docker Pulls Docker Image Size
License Platform


fetchly dashboard: link input, video preview, format picker, and recent downloads
Dashboard — paste a link, preview the media, pick a format, and track every job live.

More screenshots

fetchly login screen
Authenticated login with invisible, server-verified anti-bot protection.

fetchly settings: Lalal.ai integration and per-platform cookie tiles
Integrations — connect Lalal.ai for stem separation and paste browser cookies for sign-in-only downloads.

fetchly settings: host resources, component versions, update check, and changelog
System — host resources, component versions, one-click update checks, and the in-app changelog.


Download, shape, share

fetchly turns yt-dlp into a self-hosted media workspace. Pick formats in a web UI, follow every job live, trim audio visually, find its tempo, create stems, and share finished downloads without handing your media to another service.

Features

Feature What you get
Download everywhere Save video or audio from YouTube, TikTok, Instagram, and Facebook in one place.
Stay in control Follow every job from a live dashboard, from queued through downloading and analysis to finished, cancelled, or failed.
Choose your quality Pick the quality you want, then decide what the highest tier produces: H.264 for files that play everywhere, AV1 for the smallest files, or the untouched source for the best resolution.
Brand every video Burn the fetchly logo — or your own uploaded SVG or PNG — and your hostname, once set, into the corner of every downloaded video, or switch it off.
Trim with precision Cut audio visually with an interactive waveform before you download or process it further.
Find the tempo Analyze BPM and beat confidence, then use the result to guide audio trimming.
Create clean stems Connect Lalal.ai to separate vocals and instrumentals when you need production-ready tracks.
Share what you made Send friends and family a share link to a finished download — no account needed on their side, with an optional limit on how many times it can be used.
Keep it private Run everything yourself with persistent storage, authentication, CSRF protection, anti-bot checks, and login rate limiting.
Ready to run Get the complete application and its required dependencies in one Docker image.

Supported platforms

Platform Video Audio
YouTube YouTube ✅ ✅
TikTok TikTok ✅ ✅
Instagram Instagram ✅ ✅
Facebook Facebook ✅ ✅

Note: Public URLs work without account cookies. Age- or login-gated content may work after importing a current signed-in session under Settings → Integrations; platforms can still reject stale or revoked sessions.

Quickstart

Docker is the recommended way to run fetchly. The image (Docker Hub) bundles ffmpeg, yt-dlp, yt-dlp-ejs, and deno — nothing else to install.

Docker Compose

# compose.yaml
services:
  fetchly:
    image: giiibates/fetchly:latest
    container_name: fetchly
    restart: unless-stopped
    stop_grace_period: 20s
    ports:
      # Loopback until the admin account exists — a port published without a
      # host address is reachable from the whole network.
      - "127.0.0.1:8000:8000"
    environment:
      FETCHLY_SECRET_KEY: ${FETCHLY_SECRET_KEY:?generate with: openssl rand -base64 32}
    volumes:
      - ./data:/app/data
export FETCHLY_SECRET_KEY="$(openssl rand -base64 32)"
docker compose up -d

A fuller compose file with logging, timezone, and reverse-proxy notes lives in docker/docker-compose.yml.

Open http://127.0.0.1:8000 and create an admin account in Settings → Security. Only then widen the port binding (0.0.0.0:8000:8000) or put fetchly behind a reverse proxy. stop_grace_period stays above the container's 15 s graceful shutdown so the SQLite WAL checkpoint completes.

Learn more

The fetchly documentation covers installation, configuration, reverse proxies, security, platform cookies, the API, and troubleshooting.


Buy Me A Coffee

Download Statistics

2,179
Total Downloads

Related apps

Details

Repository
giiibates/fetchly:latest
Last Updated2026-09-04
First Seen2026-08-31

Runtime arguments

Web UI
http://[IP]:[PORT:8000]
Network
bridge
Shell
bash
Privileged
false
Extra Params
--restart unless-stopped

Template configuration

Secret KeyVariable

REQUIRED: Signs session cookies. Generate with: openssl rand -base64 32. The app refuses to start without this.

Target
FETCHLY_SECRET_KEY
Admin PasswordVariable

REQUIRED: Password for the admin login.

Target
FETCHLY_ADMIN_PASSWORD
Admin UsernameVariable

Admin login username

Target
FETCHLY_ADMIN_USER
Default
admin
Behind HTTPSVariable

Set to 1 when serving over HTTPS (e.g. behind a reverse proxy) so session cookies are marked Secure

Target
FETCHLY_BEHIND_HTTPS
Default
0|1
Value
0
Log LevelVariable

Verbosity of the container logs. Default: INFO. Use DEBUG only for troubleshooting - it is noisy.

Target
LOG_LEVEL
Default
INFO|DEBUG|WARNING|ERROR|CRITICAL
Value
INFO
TimezoneVariable

Container timezone (IANA name, e.g. Etc/UTC or Europe/Berlin), used for timestamps in the UI and logs

Target
TZ
Default
Etc/UTC
WebUIPorttcp

fetchly Web UI/API port

Target
8000
Default
8000
DataPathrw

Jobs, SQLite database, and downloads

Target
/app/data
Default
/mnt/user/appdata/fetchly/data