metube/CLAUDE.md
n g 8c956f0b19 Add CLAUDE.md development guide
Provides comprehensive development guidance for Claude Code including:
- Frontend/backend development commands
- Architecture overview and key integration points
- Code structure and component responsibilities
- VS Code debug configuration

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-25 21:43:09 -07:00

98 lines
No EOL
3.7 KiB
Markdown

# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
MeTube is a web GUI for yt-dlp (YouTube downloader) with playlist support. It consists of:
- **Backend**: Python 3.13 Flask/aiohttp server (`app/` directory) that handles yt-dlp operations
- **Frontend**: Angular application (`ui/` directory) providing the web interface
- **Architecture**: Real-time WebSocket communication using Socket.IO for download status updates
## Development Commands
### Frontend (Angular)
```bash
cd ui
npm install # Install dependencies
npm run start # Development server (ng serve)
npm run build # Production build (ng build)
npm run test # Run tests (ng test)
npm run lint # TSLint (ng lint)
npm run e2e # End-to-end tests (ng e2e)
```
### Backend (Python)
```bash
# Install Python dependencies
pip3 install pipenv
pipenv install
# Run development server
pipenv run python3 app/main.py
# Run with pylint (for development)
pipenv install --dev # Installs pylint
pipenv run pylint app/
```
### Full Local Development
```bash
# 1. Build the UI first
cd ui
npm install
node_modules/.bin/ng build
# 2. Install and run Python backend
cd ..
pip3 install pipenv
pipenv install
pipenv run python3 app/main.py
```
## Code Architecture
### Backend Structure (`app/`)
- **`main.py`**: Main aiohttp server with Socket.IO, handles HTTP routes and WebSocket events
- **`ytdl.py`**: Core download queue management and yt-dlp integration
- `DownloadQueue`: Manages download lifecycle, supports sequential/concurrent/limited modes
- `Download`: Individual download process management with multiprocessing
- `PersistentQueue`: Shelve-based persistence for queue state
- **`dl_formats.py`**: Format and quality selection logic for different video/audio formats
### Frontend Structure (`ui/src/app/`)
- **`app.component.ts`**: Main application component handling UI interactions and download management
- **`downloads.service.ts`**: Service managing WebSocket communication and download state
- **`metube-socket.ts`**: Socket.IO client wrapper
- **`formats.ts`**: Frontend format/quality definitions matching backend
### Key Integration Points
- **WebSocket Events**: `added`, `updated`, `completed`, `canceled`, `cleared` for real-time updates
- **HTTP Endpoints**: `/add`, `/delete`, `/start`, `/history` for download operations
- **State Persistence**: Queue, completed, and pending downloads persisted using Python shelve
- **Download Modes**: Sequential, concurrent, or limited concurrent downloads configurable via `DOWNLOAD_MODE`
### Configuration
The application uses environment variables extensively (see README.md). Key configs:
- `DOWNLOAD_DIR`, `AUDIO_DOWNLOAD_DIR`: Download destinations
- `YTDL_OPTIONS`: Custom yt-dlp options (JSON format)
- `DOWNLOAD_MODE`: Sequential/concurrent/limited download execution
- `MAX_CONCURRENT_DOWNLOADS`: Concurrency limit for limited mode
### VS Code Configuration
The `.vscode/launch.json` provides a "Python: MeTube" debug configuration that:
- Sets appropriate download directories for Windows/macOS
- Uses integrated terminal for better debugging experience
### Code Style
- **Frontend**: Uses TSLint with Angular-specific rules, prefers single quotes, 140 character line limit
- **Backend**: Uses standard Python conventions, pylint available for development
## Testing
- Frontend tests use Angular's Karma/Jasmine setup
- End-to-end tests use Protractor
- No specific backend test framework configured
## Docker Support
The project includes full Docker support with multi-stage builds that handle both frontend build and backend setup automatically.