A self-hosted YouTube video archiver with a modern web interface. Download, manage, and organize your YouTube videos, playlists, and channels locally.
Caution
This project is in early development (alpha stage). It may contain bugs, break unexpectedly, or have incomplete features. Use at your own risk.
- Download videos from YouTube URLs
- Real-time download progress tracking
- Basic queue management
- Modern web interface built with Next.js and shadcn/ui
- Dark/Light mode support
- Advanced download options (quality selection, format selection)
- Media conversion tools (video to audio, format conversion)
- Metadata extraction and management
- Search and categorization
- Mobile-friendly streaming interface
- Docker and Docker Compose
- Git
- Bash shell (for running the management script)
- Clone the repository:
git clone https://github.com/Fx64b/video-archiver.git
cd video-archiver
- Set .env variables:
cp web/.env.local.example web/.env.local
- Start the application:
./run.sh
The web interface will be available at http://localhost:3001
The run.sh
script provides several options to manage the application:
./run.sh [options]
Options:
--clear Clear the database and downloads
--build Rebuild the containers and regenerate TypeScript types
--debug Enable debug logging in backend
--help|-h Show help message
Common use cases:
- Fresh start:
./run.sh --clear --build
- Development:
./run.sh --build --debug
- Production:
./run.sh
/services/backend
: Go backend service- Handles video downloads
- Manages download queue
- Provides WebSocket updates
/web
: Next.js frontend application- Modern UI built with shadcn/ui
- Real-time progress tracking
- Download management interface
After a certain number of downloads, YouTube may block requests that are not made through the official site or app. This is a known issue: yt-dlp/yt-dlp#11868 Temporary solutions:
- Use a VPN and switch servers when the limit is reached
- Wait a few hours before attempting downloads again
- Use a different IP address if possible
The project uses:
- Backend: Go 1.23 with Chi router
- Frontend: Next.js 15 with TypeScript
- UI: shadcn/ui components
- State Management: Zustand
- Real-time Updates: WebSocket
- Database: SQLite
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature
) - Commit your changes (
git commit -m 'feat(scope): Add some AmazingFeature'
) - Push to the branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.