Youtube-mp3-downloader Npm Guide

Always respect YouTube's Terms of Service. As of 2023, YouTube explicitly prohibits downloading content without explicit permission unless a download button is provided.

Create a file named download.js. Here is the most basic working example:

const YoutubeMp3Downloader = require("youtube-mp3-downloader");

// Configure the downloader const YD = new YoutubeMp3Downloader( outputPath: "./downloads", // Where to save the MP3s youtubeVideoQuality: "highest", // Audio quality from YouTube queueParallelism: 2, // Download 2 videos at once progressTimeout: 2000, // How often to emit 'progress' (ms) allowWebm: false // Prefer opus audio (requires ffmpeg) );

// Bind events YD.on("finished", function(err, data) if (err) return console.log(err); console.log(Download finished: $data.file ($data.stats.size bytes)); ); youtube-mp3-downloader npm

YD.on("error", function(error) console.log("Download error:", error); );

YD.on("progress", function(progress) console.log($progress.progress.percentage% downloaded); );

// Start download (YouTube video ID) // Example: https://www.youtube.com/watch?v=dQw4w9WgXcQ -> ID = dQw4w9WgXcQ const videoId = "dQw4w9WgXcQ"; YD.download(videoId); Always respect YouTube's Terms of Service

Run it:

node download.js

In a few moments, you’ll have a full MP3 of Rick Astley in your ./downloads folder. Run it: node download


This is crucial. Downloading copyrighted content without permission is illegal in many jurisdictions. The youtube-mp3-downloader npm package is a tool, and like any tool, its legality depends entirely on your use case.

Section 5.1 of YouTube’s ToS explicitly forbids downloading content unless a download button or link is provided by YouTube (e.g., YouTube Premium’s offline feature). Violating this could lead to IP bans or legal action.

In many jurisdictions, downloading for personal, non-commercial, transformative use (e.g., a private DJ mix, offline study) may fall under fair use. However, redistributing, selling, or publicly performing downloaded audio is clearly illegal.

async function downloadWithRetry(videoId, retries = 3) 
    for (let i = 0; i < retries; i++) 
        try 
            await new Promise((resolve, reject) => 
                YD.download(videoId);
                YD.once("finished", resolve);
                YD.once("error", reject);
            );
            console.log("Success!");
            return;
         catch (err) 
            console.log(`Attempt $i+1 failed: $err.message`);
            if (i === retries - 1) throw err;
            await new Promise(r => setTimeout(r, 2000)); // wait 2 sec

Subject: Technical Overview, Functionality, and Security Implications Date: October 26, 2023 Target Audience: Developers, System Architects, Security Auditors


YouTube frequently updates its internal algorithm for deciphering video streams to prevent scraping.