No description
Find a file
2025-03-27 18:32:36 +01:00
public feat: v1 2025-03-25 00:11:18 +01:00
server feat: allow deleting failed status 2025-03-26 14:40:12 +01:00
src feat: allow more than just youtube links (test) 2025-03-27 18:32:36 +01:00
.dockerignore feat: add docker 2025-03-25 00:18:43 +01:00
.env feat: v1 2025-03-25 00:11:18 +01:00
.env.example fix: sidedbar and library refresh 2025-03-25 01:14:33 +01:00
.gitignore del: test data 2025-03-25 10:03:43 +01:00
docker-compose.yml feat: theme switch and keyboard shortcuts 2025-03-26 00:09:55 +01:00
Dockerfile feat: add yt-dlp check and update on starup 2025-03-25 10:35:09 +01:00
eslint.config.js feat: v1 2025-03-25 00:11:18 +01:00
index.html Revert "fix: no ssl" 2025-03-25 00:32:43 +00:00
LICENSE feat: added license 2025-03-25 12:25:14 +01:00
package-lock.json feat: theme switch and keyboard shortcuts 2025-03-26 00:09:55 +01:00
package.json feat: theme switch and keyboard shortcuts 2025-03-26 00:09:55 +01:00
postcss.config.js feat: v1 2025-03-25 00:11:18 +01:00
README-API.md chore: update API readme 2025-03-26 16:37:48 +01:00
README-Docker.md chore: update readme files 2025-03-25 23:43:20 +01:00
README.md chore: update readme features 2025-03-26 00:27:09 +01:00
screenshot.png feat: update readme screenshots 2025-03-26 00:24:16 +01:00
screenshot2.png feat: update readme screenshots 2025-03-26 00:22:48 +01:00
start.sh feat: add docker 2025-03-25 00:18:43 +01:00
tailwind.config.js feat: v1 2025-03-25 00:11:18 +01:00
tubeoffline.sh feat: add docker 2025-03-25 00:18:43 +01:00
update-env.sh feat: add docker 2025-03-25 00:18:43 +01:00
vite.config.js Revert "fix: no ssl" 2025-03-25 00:32:43 +00:00

TubeOffline - YouTube Offline Library

An elegant offline YouTube video library using YT-DLP with a React frontend and Express backend.

TubeOffline Home Page

TubeOffline Video Page

Table of Contents

⚠️ Disclaimer / AI-Generated Project Warning

This project was mostly coded using AI (Claude 3.7 Sonnet Thinking).

This code is provided as-is. While effort has been made to ensure functionality, it comes with no warranty or guarantee of support.

Please note:

  • Use of this code is at your own risk.
  • No official support will be provided for setup, usage, customization, or troubleshooting.
  • Community contributions and improvements via pull requests are welcome, but please do not expect personalized assistance.

For any issues or questions, consider consulting online resources, community forums, or attempting to resolve problems independently.

Features

  • Download and store YouTube videos locally using YT-DLP
  • Beautiful library interface to browse and watch offline videos
  • Create and organize playlists
  • Automatic English subtitle downloading when available
  • Metadata extraction and tag-based browsing
  • High-quality video playback with subtitle support
  • Real-time download progress updates
  • Search functionality for your offline library
  • Theme switcher with light and dark mode
  • Keyboard shortcuts for playback control

The easiest way to run TubeOffline is using Docker:

  1. Make sure you have Docker and Docker Compose installed

  2. Clone the repository:

    git clone https://git.eidenz.moe/Eidenz/tube-offline.git
    cd tube-offline
    
  3. Make the management script executable and start the application:

    chmod +x tubeoffline.sh
    ./tubeoffline.sh start
    
  4. Access TubeOffline in your browser at http://localhost:5000 (or your custom port if configured)

For more details on using Docker, see README-Docker.md.

Manual Installation

Prerequisites

  • Node.js (v14 or higher)
  • npm (v6 or higher)
  • yt-dlp (must be installed and in your PATH)

Installing yt-dlp

Windows

winget install yt-dlp

or download from https://github.com/yt-dlp/yt-dlp/releases and add to PATH

macOS

brew install yt-dlp

Linux

sudo curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp
sudo chmod a+rx /usr/local/bin/yt-dlp

Installation

  1. Clone the repository:
git clone https://git.eidenz.moe/Eidenz/tube-offline.git
cd tube-offline
  1. Install dependencies:
npm install
  1. Start the development server:
npm run dev

This will start both the frontend (Vite) and backend (Express) servers concurrently.

Production Build

To create a production build:

npm run build

The built files will be in the dist directory. To serve these files along with the backend:

npm start

Configuration

You can modify the server configuration in .env:

  • PORT: Backend server port (default: 5000)
  • DATA_DIR: Directory to store all data (database, videos, thumbnails, subtitles)
  • DEFAULT_VIDEO_QUALITY: Default video quality for downloads
  • DOWNLOAD_SUBTITLES: Whether to download subtitles by default
  • MAX_CONCURRENT_DOWNLOADS: Maximum number of concurrent downloads

Updating

To update TubeOffline to the latest version:

./tubeoffline.sh update

This will automatically:

  1. Pull the latest code from the repository
  2. Rebuild the Docker container
  3. Restart the application with the updated version

Manual Update

If you're running the application manually:

# Pull the latest changes
git pull

# Install any new dependencies
npm install

# Rebuild the application
npm run build

# Restart the server
npm start

Tech Stack

Frontend

  • React
  • React Router Dom
  • Framer Motion for animations
  • Tailwind CSS for styling
  • Vite for development and building
  • React Player for video playback
  • Axios for API requests
  • React Beautiful DnD for drag-and-drop playlist management

Backend

  • Express.js
  • Better-SQLite3 for database
  • yt-dlp for YouTube downloading
  • WebSockets for real-time updates

License

MIT