initial commit

This commit is contained in:
2025-12-21 11:43:22 -06:00
parent 1f7eb01afb
commit d28de69bcb
28 changed files with 4067 additions and 108 deletions

174
docs/features.md Normal file
View File

@@ -0,0 +1,174 @@
# Features Documentation
## Current Features
### 1. YouTube Video Information Retrieval
- Fetch video metadata without downloading
- Display video title, thumbnail, and duration
- View available formats
**Implementation**: `app/api/info` endpoint
### 2. Video Download
- Download videos in multiple formats:
- MP4 (most compatible)
- WebM (web-optimized)
- MKV (high quality)
- AVI (legacy support)
**Implementation**: `app/api/download` endpoint with `formatType: "video"`
### 3. Audio Extraction
- Extract audio from videos in multiple formats:
- MP3 (most compatible, compressed)
- WAV (uncompressed, high quality)
- M4A (Apple format)
- Opus (modern, efficient)
**Implementation**: `app/api/download` endpoint with `formatType: "audio"`
### 4. Format Transcoding
- Automatic format conversion using yt-dlp and ffmpeg
- Best quality selection for requested format
- Audio extraction and conversion for audio formats
**Implementation**: Server-side processing in `lib/youtube.ts`
### 5. Modern UI
- Responsive design with Tailwind CSS
- shadcn/ui components for consistent styling
- Loading states and error handling
- Video thumbnail preview
- Format selection dropdowns
**Implementation**: `app/page.tsx` with shadcn/ui components
### 6. URL Validation
- Client-side and server-side URL validation
- Support for various YouTube URL formats:
- `https://www.youtube.com/watch?v=...`
- `https://youtu.be/...`
- `youtube.com/watch?v=...`
**Implementation**: `lib/utils.ts` - `isValidYouTubeUrl()`
### 7. Safe File Handling
- Filename sanitization to prevent directory traversal
- Unique file IDs to prevent conflicts
- Proper file extension handling
**Implementation**: `lib/youtube.ts` - `sanitizeFilename()`
## Feature Roadmap
### Planned Features
#### Short Term
- [ ] Download progress tracking
- [ ] File size display before download
- [ ] Video quality selection (720p, 1080p, etc.)
- [ ] Download history
- [ ] Error recovery and retry mechanism
#### Medium Term
- [ ] Playlist support
- [ ] Batch downloads
- [ ] Custom ffmpeg parameters
- [ ] Download queue management
- [ ] File cleanup automation
#### Long Term
- [ ] User authentication
- [ ] Download quotas and limits
- [ ] Cloud storage integration (S3, etc.)
- [ ] API rate limiting
- [ ] Webhook notifications
- [ ] Mobile app support
## Feature Usage Examples
### Download MP4 Video
```typescript
const response = await fetch('/api/download', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
url: 'https://www.youtube.com/watch?v=...',
format: 'mp4',
formatType: 'video'
})
});
```
### Extract MP3 Audio
```typescript
const response = await fetch('/api/download', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
url: 'https://www.youtube.com/watch?v=...',
format: 'mp3',
formatType: 'audio'
})
});
```
### Get Video Info
```typescript
const response = await fetch('/api/info', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
url: 'https://www.youtube.com/watch?v=...'
})
});
```
## Feature Limitations
### Current Limitations
1. **No Progress Tracking**: Users cannot see download progress
2. **No File Size Limits**: Large files may cause issues
3. **No Cleanup**: Files accumulate in storage
4. **Single Format**: One format per download request
5. **No Playlist Support**: Only single videos
6. **No Quality Selection**: Downloads best available quality
7. **No Authentication**: No user accounts or history
### Known Issues
- Large files may timeout on slow connections
- Some videos may not be available in requested format
- Audio conversion (MP3/WAV) requires ffmpeg
- No validation of available formats before download
## Feature Dependencies
### Required System Tools
- **yt-dlp**: For video downloading and format selection
- **ffmpeg**: For audio format conversion (MP3, WAV)
### Required npm Packages
- Next.js 16+
- React 19+
- shadcn/ui components
- Tailwind CSS
- Lucide React (icons)
## Feature Testing
### Manual Testing Checklist
- [ ] Enter valid YouTube URL and get info
- [ ] Download video in MP4 format
- [ ] Download video in WebM format
- [ ] Extract audio as MP3
- [ ] Extract audio as WAV
- [ ] Test with invalid URL (should show error)
- [ ] Test with missing format (should show error)
- [ ] Verify file downloads correctly
- [ ] Check filename sanitization
### Automated Testing (Future)
- Unit tests for utility functions
- Integration tests for API endpoints
- E2E tests for user flows
- Format validation tests