audiobookshelf/client
Claude aaf87821a3
Add YouTube download feature with yt-dlp integration
This commit implements a comprehensive YouTube download feature that allows
administrators to download audio from YouTube videos and playlists.

Backend Changes:
- Add yt-dlp-wrap npm dependency for YouTube downloading
- Create YouTubeDownloadManager to handle download queue and execution
- Create YouTubeDownloadController with API endpoints for download/queue/cancel
- Add YouTube utility functions for URL validation and metadata extraction
- Create YouTubeDownload object model for tracking download state
- Add API routes: POST /api/youtube/download, GET /api/youtube/queue, DELETE /api/youtube/download/:id
- Implement playlist support - automatically queue all videos from playlist URLs
- Download audio in MP3 format with best quality
- Organize files in subfolder structure: <Uploader>/<Video Title>/
- Extract metadata and create library items automatically
- Real-time progress updates via Socket.io

Frontend Changes:
- Create YouTubeDownloadModal component for user-friendly download interface
- Add download button to Appbar header (admin-only, visible with current library)
- Update Vuex store with modal state management
- Register modal globally in default layout
- Implement Socket.io listeners for download events (started, progress, completed, failed, queued)
- Show toast notifications for download status updates

Features:
- Admin-only access control
- Support for single videos and playlists
- Audio quality selection (best, 320kbps, 256kbps, 192kbps, 128kbps)
- Library and folder selection
- Download queue management
- Real-time progress tracking
- Automatic thumbnail download as cover image
- Automatic library item creation with metadata
- Error handling and user feedback

Technical Details:
- Uses yt-dlp for reliable YouTube downloading
- Integrates with existing task management system
- Respects library folder permissions
- Follows existing code patterns (similar to podcast downloads)
- Socket.io events for real-time updates
2025-12-31 01:32:37 +00:00
..
assets Add base style for button for cursor:pointer, update default btn bg and confirm yes btn color 2025-03-25 17:47:11 -05:00
components Add YouTube download feature with yt-dlp integration 2025-12-31 01:32:37 +00:00
cypress Fix LazySeriesCard component test 2025-07-07 16:49:20 -05:00
layouts Add YouTube download feature with yt-dlp integration 2025-12-31 01:32:37 +00:00
middleware Add:Series filters #712 2022-10-29 15:33:38 -05:00
mixins Fix item edit modal show next/prev arrows when opening from Files or Match context menu item #4718 2025-10-08 14:52:14 -05:00
pages Update tooltip with plaintext prop 2025-12-12 17:24:01 -06:00
players Update HLS stream endpoints to not include user token 2025-05-06 17:28:19 -05:00
plugins Add Korean language option 2025-11-29 16:32:57 -06:00
static Update material symbols icon font 2024-08-16 16:57:17 -05:00
store Add YouTube download feature with yt-dlp integration 2025-12-31 01:32:37 +00:00
strings Translated using Weblate (Polish) 2025-12-23 23:44:39 +01:00
cypress.config.js Move test files to a separate directory 2024-04-30 11:30:00 +03:00
nuxt.config.js Implement new JWT auth 2025-06-29 17:22:58 -05:00
package-lock.json Version bump v2.32.1 2025-12-23 16:51:54 -06:00
package.json Version bump v2.32.1 2025-12-23 16:51:54 -06:00
postcss.config.js Use separate postcss.config and remove from nuxt.config, uninstall autoprefixer 2025-03-21 09:25:29 -05:00