Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

123 lines (85 sloc) 3.709 kB

youtube-dl Build Status

Download videos from youtube in node.js using youtube-dl.


Downloading videos

var youtubedl = require('youtube-dl');
var dl ='',
  // optional arguments passed to youtube-dl

// will be called when the download starts
dl.on('download', function(data) {
  console.log('Download started');
  console.log('filename: ' + data.filename);
  console.log('size: ' + data.size);

// will be called during download progress of a video
dl.on('progress', function(data) {
  process.stdout.write(data.eta + ' ' + data.percent + '% at ' + data.speed + '\r');

// catches any errors
dl.on('error', function(err) {
  throw err;

// called when youtube-dl finishes
dl.on('end', function(data) {
  console.log('\nDownload finished!');
  console.log('Filename: ' + data.filename);
  console.log('Size: ' + data.size);
  console.log('Time Taken: ' + data.timeTaken);
  console.log('Time Taken in ms: ' + data.timeTakenms);
  console.log('Average Speed: ' + data.averageSpeed);
  console.log('Average Speed in Bytes: ' + data.averageSpeedBytes);

This example can be found in the example folder, and will produce an output that looks like the following when ran.

Download started
Video size: 918.31k
00:00 100.0% at 206.12k/s
Download finished!
Filename: 90AiXO1pAiA.mp4
Size: 918.31k
Time Taken: 7 seconds, 27 ms
Time Taken in ms: 7027
Average Speed: 333.74KB/s
Average Speed in Bytes: 341750.78

Getting video information

var youtubedl = require('youtube-dl');'',

  // called when video page is downloaded and info extracted
  function(err, info) {
    if (err)
      throw err;
    console.log('title: ' + info.title);
    console.log('url: ' + info.url);
    console.log('thumbnail: ' + info.thumbnail);
    console.log('description: ' + info.description);
    console.log('filename: ' + info.filename);

  // optional arguments passed to youtube-dl
  // ['--username=user', '--password=hunter2']

Running that will produce something like

title: Ace Rimmer to the Rescue
description: An old Red Dwarf eposide where Ace Rimmer saves the Princess Bonjella.
filename: WKsjaOqDXgg.webm

For more usage info on youtube-dl and the arguments you can pass to it, do youtube-dl -h or go to the youtube-dl documentation.


npm install youtube-dl

Use the -g option if you want npm to add a symlink to youtube-dl so it can be used in command line.


Tests are written with vows

npm test

Issues and the Future

I haven't tested this with playlists yet because I haven't needed to use them. But my guess is they probably work with the download function but not the info function.



Jump to Line
Something went wrong with that request. Please try again.