selfhostedworld.com logoselfhostedworld.com

Try describing what you need:

Youtarr logo

Youtarr

★ 1.7k

A self-hosted alternative to Youtube

ISC LicenseOpen Source — No Paywall2 Containers — 2 containers — light hosting footprintDocker · Compose · SourceNeeds MariaDB9+ active committers (12mo)

About

Youtarr is a self-hosted application for automatically downloading and organizing YouTube content from channels and playlists. It is aimed at people who want to archive videos, watch them offline, or...

Community Ratings

No ratings yet
Channel ManagementVideo BrowserSettingsDownload Manager

Features

  • automatic channel downloads
  • playlist mirroring
  • Plex/Jellyfin/Emby metadata
  • watch status sync
  • in-app playback
  • SponsorBlock integration
  • scheduled downloads
  • auto-cleanup
  • REST API
  • web interface

Details

Last Updated
Oct 14, 2026
Created
May 13, 2023
Install Methods
dockerdocker-composesource
Requirements
DockerDocker ComposeGitBash shellMariaDB/MySQL
Authentication
local
API
REST
Backup & Export
database-dumpfile-backup
Runtime / Stack
Docker
Privacy & Independence
Cloud: OptionalOffline Capable
User Model
Multi-User
Deployment

Deployment: Docker Compose ✓2 Containers — light hosting footprintRuns as 2 containers

Run Youtarr with Docker Compose

Compose file from the Youtarr project repository.

2 services · database: mariadb · infra: mariadb

no resource limits declared

needs persistent storage (5 volumes)

docker-compose.yml · @ 46c1701 · scanned Sep 27, 2026

# IMPORTANT NOTES:
# 1) UID/GID and folder setup:
# By default, the youtarr service runs as ROOT (UID 0, GID 0) for compatibility with existing setups.
# For improved security, you can set YOUTARR_UID and YOUTARR_GID environment variables to run the container as a non-root user.
# If you do so, ensure that the following directories exist on the host with the correct ownership/permissions before
# starting the container:
# - ./config
# - ./jobs
# - ./server/images
# - <YOUTUBE_OUTPUT_DIR> (as specified in environment variable)
# Docker will create these directories as ROOT if they do not exist!
#
# To create and set ownership/permissions, you can use the following commands:
# Example (using example YOUTUBE_OUTPUT_DIR of /path/to/youtube_videos and YOUTARR_UID/GID of 1000/1000):
# mkdir -p config jobs server/images /path/to/youtube_videos
# sudo chown -R 1000:1000 config jobs server/images /path/to/youtube_videos
#
# 2) Database setup notes:
# The default bundled MariaDB uses ./database as a bind mount for backwards compatibility.
# On Docker Desktop (Windows/macOS), ARM hosts, and some NAS/virtualized filesystems,
# bind-mounted MariaDB data can become corrupted during schema migrations. For a safer named
# volume, use docker-compose.arm.yml or run ./scripts/migrate-to-named-volume.sh
# for an existing bind-mounted install.

services:
  youtarr-db:
    image: mariadb:10.3
    container_name: youtarr-db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD:-123qweasd}
      MYSQL_DATABASE: ${DB_NAME:-youtarr}
      MYSQL_TCP_PORT: ${DB_PORT:-3321}
      # Set utf8mb4 as default for new installations
      # Only set MYSQL_USER / MYSQL_PASSWORD if you configure a non-root DB_USER user in .env
      # MYSQL_USER: ${DB_USER}
      # MYSQL_PASSWORD: ${DB_PASSWORD}
      MYSQL_CHARSET: utf8mb4
      MYSQL_COLLATION: utf8mb4_unicode_ci
    volumes:
      - ./database:/var/lib/mysql
    command: --port=${DB_PORT:-3321} --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --innodb-file-per-table=1 --innodb-large-prefix=ON
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-P", "${DB_PORT:-3321}", "-u", "${DB_USER:-root}", "-p${DB_PASSWORD:-123qweasd}"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 30s

  youtarr:
    image: ${YOUTARR_IMAGE:-dialmaster/youtarr:latest}
    container_name: youtarr
    restart: unless-stopped
    # Optional: Run as specific UID:GID for security (defaults to root if not set for backwards compatibility with existing users)
    user: "${YOUTARR_UID:-0}:${YOUTARR_GID:-0}"
    depends_on:
      youtarr-db:
        condition: service_healthy
    environment:
      # DEPRECATED but retained for backwards compatibility with old images for now
      IN_DOCKER_CONTAINER: 1
      TZ: ${TZ:-UTC}
      DB_HOST: ${DB_HOST:-youtarr-db}
      DB_PORT: ${DB_PORT:-3321}
      DB_USER: ${DB_USER:-root}
      DB_PASSWORD: ${DB_PASSWORD:-123qweasd}
      DB_NAME: ${DB_NAME:-youtarr}
      # Optional: Disable authentication (for platforms with external auth like Elfhosted)
      AUTH_ENABLED: ${AUTH_ENABLED:-}
      # Optional: Seed initial admin credentials for headless deployments
      AUTH_PRESET_USERNAME: ${AUTH_PRESET_USERNAME:-}
      AUTH_PRESET_PASSWORD: ${AUTH_PRESET_PASSWORD:-}
      # Optional: Configure Express proxy header trust
      TRUST_PROXY: ${TRUST_PROXY:-}
      # Optional external cookies; /app/config uses the existing mount (see docs/CONFIG.md).
      YOUTARR_COOKIES_FILE: ${YOUTARR_COOKIES_FILE:-}
      # Logging configuration
      LOG_LEVEL: ${LOG_LEVEL:-info}
      # This is just informational and lets the app know where the videos will be stored on the host
      YOUTUBE_OUTPUT_DIR: ${YOUTUBE_OUTPUT_DIR}
      # Optional: Custom data path for platforms like Elfhosted (defaults to /usr/src/app/data)
      # This is the internal path where videos are downloaded inside the container and is not needed for most users
      # DATA_PATH: /storage/rclone/storagebox/youtube

    ports:
      - "${YOUTARR_HOST_PORT:-3087}:3011"
    volumes:
      - ${YOUTUBE_OUTPUT_DIR}:/usr/src/app/data
      - ./server/images:/app/server/images
      - ./config:/app/config
      - ./jobs:/app/jobs
    healthcheck:
      test: ["CMD", "curl", "--fail", "--silent", "--show-error", "--output", "/dev/null", "http://localhost:3011/api/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

networks:
  default:
    name: youtarr-network

# Named volume definition (used by docker-compose.arm.yml override)
volumes:
  youtarr-db-data:

This file may be out of date. Check the Youtarr documentation for current setup steps.

Track your self-hosted stack

Bookmark software to try, rate tools you've used, and keep your collection in one place.

Metadata extracted from README on Aug 31, 2026

Related Software

TrackWatch logo

TrackWatch

25
Self-hosted music release tracker for Spotify users that automatically follows artists and updates a playlist with new releases.
Media ManagementPermissive LicenseAudio Streaming+3
Cloud Required
Details
Mixpost logo

Mixpost

133
Mixpost is a social media management platform for scheduling content, managing accounts, and collaborating with teams.
Analytics ToolsAutomation ToolsSocial Media+4
Open Core
Details
Seerr logo

Seerr

12.9k
Seerr is a free and open source application for managing media library requests and integrating with services like Jellyfin, Plex, Emby, Sonarr, and Radarr.
Media ManagementPermissive LicenseMedia Servers+2
Single Container
Details
tubesync logo

tubesync

2.8k
TubeSync is a web-based personal video recorder for YouTube that syncs channels and playlists to local storage and can update media servers like Plex or Jellyfin.
Media ManagementMedia ServersFile Synchronization+4
Cloud Required
Details
Rapidbay logo

Rapidbay

897
RapidBay is a self-hosted web app for searching torrents, selecting video files, and streaming or casting them after automatic conversion.
Media ServersPermissive LicenseMedia Management+3
Details
Reaparr logo

Reaparr

700
Reaparr is a web project promoted on its website and DockerHub, but the provided README does not describe its function clearly.
Media ManagementCopyleft LicenseMedia Servers+2
Details
Pinchflat logo

Pinchflat

5.4k
Pinchflat is a self-hosted YouTube media manager for downloading content from channels and playlists with yt-dlp.
Media ManagementMedia ServersDigital Archiving+4
Single ContainerFully FOSS
Details
YoutubeDL-Server logo

YoutubeDL-Server

319
A simple web and REST interface for downloading YouTube videos onto a server.
Media ManagementMedia ServersAutomation Tools+2
2 Containers
Details
ChannelTube logo

ChannelTube

330
ChannelTube is a tool for synchronizing and fetching content from YouTube channels using yt-dlp.
Media ManagementDigital ArchivingAutomation Tools+4
Details
yt-dlp Web UI logo

yt-dlp Web UI

2.6k
A web UI and RPC server for yt-dlp that helps fetch videos and monitor upcoming livestreams.
Media ManagementCopyleft LicenseMedia Servers+2
Single Container
Details
Tracearr logo

Tracearr

2.7k
A monitoring platform for Plex, Jellyfin, and Emby that provides a unified dashboard, playback analytics, account sharing detection, and automations.
Media ManagementMedia ServersAnalytics Tools+1
3 Containers
Details
Jellyfin logo

Jellyfin

58.1k
Jellyfin is a free software media server for managing and streaming personal media to client devices.
Multimedia StreamingCopyleft LicenseMedia Management+3
Details