Sign inSign up

neosy/elengrab

By neosy

Updated 1 day ago

Fast self-hosted video/audio downloader from multiple platforms (YouTube, TikTok, Twitch, etc.)

Image
Web servers
2

7.1K

neosy/elengrab repository overview

Elengrab

Fast cross-platform application for downloading and watching video and audio with flexible format and quality options. Integrates with media processing utilities such as yt-dlp and ffmpeg. Supports downloading from more than 1,000 websites and platforms, including YouTube, Facebook, Instagram, Twitter/X, Twitch, Pinterest, Reddit, VK Video, Rutube, and more.

Elengrab provides a simple and very fast web interface for downloading and watching media directly in the browser, with a YouTube-like viewing experience, thumbnails, video previews, and a dedicated interface optimized for mobile devices. Supports Grid View, short links for sharing, and flexible playback options. On mobile devices, videos can be shared directly from apps such as YouTube and Instagram to Elengrab, where they are automatically picked up and downloaded.

The project is fully written in Go, with a frontend built using plain HTML and CSS, HTMX, and vanilla JavaScript without external libraries. It can run as a single binary on Windows, Linux, and macOS, or in a lightweight Docker container for easy deployment. Elengrab also includes full PWA support, allowing it to be installed and used as a standalone application. Different operating modes allow you to enable authentication and use Elengrab as a full-featured web service accessible over the Internet. This makes it well suited for creating a fast-access home media service as well as a personal media service accessible from anywhere.


Supported Tags

  • latest — The most recent stable release.
  • X.Y.Z — Standard build with version.
  • X.Y.Z-deno — Build with Deno included. Deno is the open-source JavaScript/TypeScript runtime.

Features

  • Support for downloading video and audio from 1,000+ websites, powered by yt-dlp extractors.
  • Configurable format and quality settings.
  • Cookie-based authentication support for YouTube and other supported websites.
  • Task queue for media processing.
  • Concurrent processing of multiple tasks.
  • Instant addition and removal of tasks from the queue.
  • Built-in media search.
  • In-browser video and audio playback.
  • Video thumbnails and media type indicators.
  • Video preview on desktop and mobile devices.
  • Watch progress tracking with resume playback and view statistics.
  • Grid View and list view for browsing media.
  • Short links for sharing media.
  • Mobile sharing support for importing videos directly from apps such as YouTube and Instagram.
  • PWA support for installing Elengrab as a standalone application.
  • Multiple access modes for anonymous, read-only, session-isolated, and authenticated access.
  • Configurable media visibility and public access.
  • Animated status indicators for download and processing tasks.
  • Real-time task and media updates via SSE.
  • Channel and website icons displayed in the interface.
  • Responsive interface optimized for desktop and mobile devices.
  • Dark theme.
  • Cross-platform support: Windows, macOS, and Linux.
  • Docker support for easy deployment.

Quick Start

Run docker with minimum settings
docker run -d \
  --name elengrab \
  -v elengrab_downloads:/app_n/downloads \
  -p 8080:8080 \
  neosy/elengrab:latest

Environment Variables

VariableDefaultDescription
ELENGRAB_LOG_LEVELwarnLogging level. Options: debug, info, warn, error.
ELENGRAB_SQLITE_DATA_DIRsqlite/dataDirectory where SQLite database files are stored.
ELENGRAB_SQLITE_BACKUPS_DIRsqlite/backupsDirectory where SQLite backup files are stored.
ELENGRAB_ROOT_DIR(not set)Application base directory. If empty, defaults to: ~/.elengrab on Linux/macOS, %LOCALAPPDATA%\Elengrab on Windows.
ELENGRAB_DOWNLOADER_BIN_DIR/usr/local/binDirectory containing yt-dlp binary.
ELENGRAB_ASSETS_DIRassetsDirectory containing application assets.
ELENGRAB_DOWNLOADS_DIRdownloadsDirectory where downloaded files are stored inside the container. Must be mapped to a host volume.
ELENGRAB_COOKIES_DIRcookiesDirectory where cookie files are stored. Files must be in Netscape cookies.txt format (compatible with yt-dlp).
ELENGRAB_DOWNLOAD_WORKERS3Number of concurrent workers used for processing YouTube video and audio tasks in parallel.
ELENGRAB_MODEpublicControls access mode. Possible values: public (anonymous, full access, shared download history), public_readonly (anonymous, read-only access to public media only), guest (anonymous, session-isolated download history), authenticated (login required, permission-based access).
ELENGRAB_BASE_URL(not set)Base URL of the Elengrab service, for example https://example.com. Used, for example, to generate short links.
ELENGRAB_ALLOW_COOKIESfalseEnables use of cookies for multimedia sources. Requires Deno. The youtube.txt file should be located in the directory specified by ELENGRAB_COOKIES_DIR.
ELENGRAB_MAINTENANCE_ENABLE_MOVE_UNMATCHED_FILESfalseEnables the periodic operation that moves files not present in the database tables from the download folder to the .lost folder. Default is false (disabled).

Volumes

VolumeDescription
db:/app_n/sqlite/dataStores SQLite database files.
db_backups:/app_n/sqlite/backupsStores backups of SQLite databases.
downloads:/app_n/downloadsStores downloaded files.
cookies:/app_n/cookiesStores cookie files used by the application (see ELENGRAB_COOKIES_DIR).
media:/app_n/mediaStores auxiliary media files such as thumbnails and other resources.

Requirements

Minimum
  • CPU: 1–2 cores
  • Memory: ~512 MB RAM
  • Concurrent downloads: 1 worker
  • Dependencies: yt-dlp and ffmpeg must be installed

This configuration is suitable for low-resource servers. To limit concurrency, set:

ELENGRAB_DOWNLOAD_WORKERS=1
  • CPU: 4 cores
  • Memory: 4 GB RAM
  • Concurrent downloads: 3 workers (default)
  • Dependencies: yt-dlp and ffmpeg must be installed
  • Optional: Deno is required when using cookie support

By default, the Docker container is configured to use this setup.

Notes

The main resource consumers are yt-dlp and ffmpeg, especially during video downloading, merging, and transcoding.

Resource usage increases with the number of concurrent workers. The number of concurrent workers can be adjusted using the following environment variable:

ELENGRAB_DOWNLOAD_WORKERS=3

Usage

Run Docker with default settings
docker run -d \
  --name elengrab \
  -v elengrab_db:/app_n/sqlite/data \
  -v elengrab_db_backups:/app_n/sqlite/backups \
  -v elengrab_downloads:/app_n/downloads \
  -v elengrab_cookies:/app_n/cookies \
  -p 8080:8080 \
  neosy/elengrab:latest

Docker Compose

Create a file docker-compose.yml with the following content:

version: "3.8"

services:
  elengrab:
    image: neosy/elengrab:latest
    container_name: elengrab
    restart: unless-stopped
    ports:
      - "8080:8080"
    environment:
      TZ: "Europe/Moscow"
      ELENGRAB_DOWNLOAD_WORKERS: "3"
    volumes:
      - elengrab_db:/app_n/sqlite/data
      - elengrab_db_backups:/app_n/sqlite/backups
      - elengrab_downloads:/app_n/downloads
      - elengrab_cookies:/app_n/cookies

Then:

docker-compose up -d

After this, Elengrab will be accessible at http://localhost:8080


Docker Compose for Docker Swarm

Create a file docker-compose.yml with the following content:

version: '3.5'

services:
  server:
    image: neosy/elengrab
    ports:
      - 8080:8080
    environment:
      TZ: "Europe/Moscow"
      ELENGRAB_DOWNLOAD_WORKERS: "3"
    volumes:
      - db:/app_n/sqlite/data
      - db_backups:/app_n/sqlite/backups
      - downloads:/app_n/downloads
      - cookies:/app_n/cookies
    deploy:
      mode: replicated
      replicas: 1
      resources:
        limits:
          cpus: "4.0"
          memory: "4G"

volumes:
  db:
  db_backups:
  downloads:
  cookies:

Deploying in Docker Swarm
  1. Initialize Docker Swarm (if not already initialized):
docker swarm init
  1. Deploy the stack using your docker-compose.yml:
docker stack deploy -c docker-compose.yml elengrab
  1. Check the running services:
docker service ls
  1. Access Elengrab at http://<your-host-ip>:8080 and enjoy downloading videos and audio.

Source Code

The full source code of Elengrab is available on GitHub: https://github.com/neosy/elengrab

Live Demo

A public instance of Elengrab is available at: https://elengrab.n-hub.ru

Tag summary

Content type

Image

Digest

sha256:b8a1ed1f2

Size

117.9 MB

Last updated

1 day ago

docker pull neosy/elengrab