A simple, video download service built with Go that uses yt-dlp to download videos from various platforms.
- Download videos from YouTube, Vimeo, TikTok, and many other platforms
- Responsive web interface with real-time feedback
- Video metadata extraction and display
-
Clone the repository:
git clone <your-repo-url> cd ute
-
Run with Docker Compose:
docker-compose up -d
-
Access the service: Open http://localhost:8591 in your browser
# Build the image
docker build -t ute-video-downloader .
# Run the container
docker run -d \
--name ute \
-p 8591:8591 \
-v $(pwd)/videos:/app/videos \
ute-video-downloader-
Prerequisites:
- Go 1.23+
- Python 3.x
- yt-dlp (
pip install yt-dlp) - ffmpeg (optional, for better format support)
-
Build and run:
go build -o main ./cmd/web ./main
PORT: Server port (default: 8591)
# Custom port
PORT=3000 docker-compose up -d
# Or set in .env file
echo "PORT=3000" > .env
docker-compose up -d- Open the web interface at http://localhost:8591
- Paste a video URL in the input field
- Click Download and wait for the process to complete
- View downloaded videos in the list below
- Click Download next to any video to save it locally
- YouTube (youtube.com, youtu.be)
- Vimeo (vimeo.com)
- TikTok (tiktok.com)
- Instagram (instagram.com)
- Twitter/X (twitter.com, x.com)
- Twitch (twitch.tv)
- Dailymotion (dailymotion.com)
- And many more supported by yt-dlp
GET /- Web interfacePOST /- Submit video URL for downloadGET /api/videos- List downloaded videosGET /videos/{filename}- Download video file
The service provides detailed error messages for common issues:
- Invalid URLs: Format validation and helpful suggestions
- Network Issues: Timeout handling and retry mechanisms
- Video Unavailable: Clear messages for private/deleted content
- Permission Errors: Access and authentication issues
- System Issues: Missing dependencies, disk space, etc.
# Install air for hot reloading (optional)
go install github.com/cosmtrek/air@latest
# Run with hot reloading
air
# Or run normally
go run cmd/web/main.goute/
├── cmd/web/main.go # Main application
├── static/ # Web assets
│ ├── index.html
│ ├── script.js
│ └── styles.css
├── videos/ # Downloaded videos (mounted in Docker)
├── Dockerfile # Docker build configuration
├── docker-compose.yml # Docker Compose configuration
└── README.md
This service is designed for internal use only. While it includes basic security measures:
- Input validation and sanitization
- Directory traversal protection
- Non-root user in Docker container
- Resource limits in Docker
Do not expose this service directly to the internet without additional security measures.
-
"yt-dlp binary not found"
- Install yt-dlp:
pip install yt-dlp - Ensure it's in your PATH
- Install yt-dlp:
-
Permission denied on videos directory
- Check directory permissions:
chmod 755 videos/ - In Docker: volumes are automatically configured
- Check directory permissions:
-
Port already in use
- Change port:
PORT=3000 docker-compose up -d - Or kill existing process:
lsof -ti:8591 | xargs kill
- Change port:
-
Video download fails
- Check the error message in the web interface
- Some videos may require authentication or be geo-blocked
- Try updating yt-dlp:
pip install --upgrade yt-dlp
# Docker logs
docker logs ute-video-downloader
# Follow logs
docker logs -f ute-video-downloaderThis project is for personal/internal use. Please respect the terms of service of video platforms and applicable copyright laws.