discord-player-ytdlp
v1.0.4
Published
Discord Player extractor that utilizing yt-dlp
Maintainers
Readme
discord-player-ytdlp
A discord-player extractor that utilizing yt-dlp for streaming audio from various sites.
Features
- YouTube Search: Uses youtubei.js for fast and reliable YouTube search
- Multi-site Support: Stream audio from any site yt-dlp can handle
- Playlist Support: Handles YouTube playlists including Mix playlists
- Autoplay: Provides related tracks for autoplay functionality
- Cookie Support: Supports Youtube cookies for video with restrictions
Installation
npm install discord-player-ytdlpRequirements
- Node.js 16 or higher
- discord-player v7.0.0 or higher
- yt-dlp binary (you need to provide the path to the binary)
Usage
const { Player } = require('discord-player');
const { YtDlpExtractor } = require('discord-player-ytdlp');
const player = new Player(client);
// Register the extractor
await player.extractors.register(YtDlpExtractor, {
ytdlpPath: './bin/yt-dlp.exe', // Path to your yt-dlp binary
priority: 100,
enableYouTubeSearch: true,
enableDirectUrls: true,
preferYtdlpMetadata: true, // Use yt-dlp for YouTube metadata (default: true)
streamQuality: 'bestaudio[ext=m4a]/bestaudio[ext=webm]/bestaudio',
youtubeiOptions: {
cookies: process.env.YOUTUBE_COOKIES, // Optional: YouTube cookies
client: 'WEB' // Optional: YouTube client
}
});Configuration Options
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| ytdlpPath | string | Required | Path to the yt-dlp binary |
| priority | number | 100 | Priority of this extractor |
| enableYouTubeSearch | boolean | true | Enable YouTube search functionality |
| enableDirectUrls | boolean | true | Enable direct URL extraction |
| preferYtdlpMetadata | boolean | true | Prefer yt-dlp for YouTube metadata over youtubei.js |
| streamQuality | string | 'bestaudio[ext=m4a]/bestaudio[ext=webm]/bestaudio' | Stream quality format for yt-dlp |
| youtubeiOptions.cookies | string\|object | null | YouTube cookies for authentication |
| youtubeiOptions.client | string | null | YouTube client configuration |
Supported Sites
Check here for a list of supported sites
Metadata Strategy
The extractor supports two metadata sources for YouTube videos:
- yt-dlp (default): More consistent with streaming, better for reliability
- youtubei.js: Faster, better for duration parsing, uses YouTube's internal API
You can control this with the preferYtdlpMetadata option:
// Use yt-dlp for metadata (default - more consistent)
preferYtdlpMetadata: true
// Use youtubei.js for metadata (faster, better duration handling)
preferYtdlpMetadata: falseBoth options include automatic fallback to the other method if the preferred one fails.
YouTube Cookies
To access private YouTube content or improve reliability, you can provide YouTube cookies:
- Export cookies from your browser in Netscape format
- Set the cookies in the configuration:
youtubeiOptions: {
cookies: 'your_cookies_string_here'
}Examples
Basic Usage
// Search for a song
const searchResult = await player.search('Never Gonna Give You Up', {
requestedBy: interaction.user
});
// Play a YouTube URL
await player.play(voiceChannel, 'https://www.youtube.com/watch?v=dQw4w9WgXcQ', {
requestedBy: interaction.user
});
// Play a YouTube playlist
await player.play(voiceChannel, 'https://www.youtube.com/playlist?list=PLrAXtmRdnEQy6nuLMt9xaJGA6H_VjBf9L', {
requestedBy: interaction.user
});With Custom Options
await player.extractors.register(YtDlpExtractor, {
ytdlpPath: './bin/yt-dlp.exe',
priority: 150, // Higher priority
preferYtdlpMetadata: false, // Prefer youtubei.js for metadata
streamQuality: 'bestaudio[ext=webm]/bestaudio', // Prefer WebM
youtubeiOptions: {
cookies: process.env.YOUTUBE_COOKIES,
client: 'ANDROID' // Use Android client
}
});Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Supporting
Star and pull request to the repo!
