Loading repository data…
Loading repository data…
franklioxygen / repository
Self-hosted downloader and player for YouTube, Bilibili, Twitch, MissAV, and yt-dlp sites. Features channel subscriptions, auto-downloads, and local storage for media. Organize your library into collections with a sleek UI. Includes built-in Cloudflare Tunnel support for secure remote access without port forwarding. Docker-ready deployment.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
Self-hosted downloader and player for YouTube, Bilibili, Twitch, MissAV, and yt-dlp sites. Features channel subscriptions, auto-downloads, local media storage, and private RSS feed links for external readers. Organize your library into collections with a sleek UI. Includes built-in Cloudflare Tunnel support for secure remote access without port forwarding. Docker-ready deployment.
🚀 100% Prompt-Engineered. 0 Lines of Manual Code. Built using the franklioxygen/agent-workflows workflow.
cookies.txt to enable downloading of age-restricted or premium content.yt-dlp arguments, network proxy, and other advanced settings via settings page.For installation and usage instructions, please refer to Browser Extension.
MikMok is a short-form video web client for MyTube. It connects to MyTube through the API and offers a feed-style viewing experience tailored for short videos.
mytube-android is a native Android client for MyTube. It connects to your MyTube server through the API for browsing and playback on mobile devices.
mytube-mcp is a Model Context Protocol (MCP) server for MyTube. It exposes your MyTube instance to AI assistants and agents through the API, so they can search, manage, and play your video library on your behalf.
For a detailed breakdown of the project structure, please refer to Directory Structure.
By default, media and caches live under backend/uploads/:
| Folder | Purpose |
|---|---|
videos/ | Downloaded video files and, when enabled, full-size thumbnails/subtitles/TV companion files stored next to videos. |
images/ | Full-size thumbnails when thumbnail storage is set to the isolated images folder. |
images-small/ | Internal downscaled preview cache for the UI. It mirrors the full-size thumbnail folder layout and can be ignored or excluded from media-server libraries. |
subtitles/ | Subtitle files when subtitle storage is set to the isolated subtitles folder. |
avatars/ | Channel/avatar artwork used by the app and media-server export. |
cloud-thumbnail-cache/ | Internal cache for thumbnails fetched from cloud-backed media. |
Requirements: Node.js 20.19+, 22.12+, 23.x, 24.x, 25.x, or 26.x and npm v9+. The backend depends on better-sqlite3; unsupported Node versions fail during npm install (often with misleading node-gyp / Visual Studio errors on Windows). Docker images ship with Node 22.
For installation and setup instructions, please refer to Getting Started.
When login protection is enabled, admins can create named visitor accounts under Settings -> Security. Visitor accounts are read-only, and account changes such as create, disable, delete, and password reset apply immediately without saving the broader settings form.
Existing installations with a shared visitor password are migrated automatically to a visitor account. Users who had the shared password can sign in with username visitor and the same password. The legacy shared-password login endpoint remains for compatibility and is deprecated.
For the three-tier admin trust and deployment security model, please refer to Deployment Security Model.
For a list of available API endpoints, please refer to API Endpoints.
The application uses environment variables for configuration.
frontend/.env)VITE_API_URL=/api
VITE_BACKEND_URL=
backend/.env)PORT=5551
# Optional: declare the admin trust boundary for this deployment.
# Valid values: application | container | host
# Default: container
# MYTUBE_ADMIN_TRUST_LEVEL=container
Data and uploads are stored under backend/data and backend/uploads by default (relative to the backend working directory).
Copy backend/.env.example to backend/.env and adjust as needed. The frontend ships with frontend/.env; use frontend/.env.local to override defaults.
MyTube uses SQLite with Drizzle ORM for data persistence. The database is automatically created and migrated on first startup:
backend/data/mytube.dbKey database tables:
videos: Video metadata and file pathscollections: Video collections/playlistssubscriptions: Channel/creator subscriptionsrss_tokens: Private RSS feed links, filters, access status, and access countersdownloads: Active download queuedownload_history: Completed download historyvideo_downloads: Tracks downloaded videos to prevent duplicatessettings: Application configurationWe welcome contributions! Please see CONTRIBUTING.md for details on how to get started, our development workflow, and code quality gu