npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

ytdlp-nodejs

v2.3.5

Published

A TypeScript wrapper for the yt-dlp executable

Readme

Important Note: Version 2 is finally here! 🎉 This is still in beta, so please feel free to submit feature requests. Found any bug? Please open an issue on our GitHub repository.

ytdlp-nodejs

This Node.js module is a wrapper for yt-dlp, a powerful video downloader, that allows you to download, stream, and fetch metadata for videos from various websites. The wrapper automatically downloads the yt-dlp binary and provides a simple interface for using its features directly within a Node.js environment.

Installation

To install the yt-dlp Node.js wrapper, run:

npm i ytdlp-nodejs

This package recommends installing FFmpeg. You can manually download it from here, or you can use the downloadFFmpeg() function to automate the process. Also you can use cli to download.

Usage

Importing the Package

import { YtDlp } from 'ytdlp-nodejs';

const ytdlp = new YtDlp();

Downloading a Video

async function downloadVideo() {
  try {
    const output = await ytdlp.downloadAsync(
      'https://www.youtube.com/watch?v=_AL4IwHuHlY',
      {
        onProgress: (progress) => {
          console.log(progress);
        },
        // others args
      }
    );
    console.log('Download completed:', output);
  } catch (error) {
    console.error('Error:', error);
  }
}

downloadVideo();

Streaming a Video

import { createWriteStream } from 'fs';

async function streamVideo() {
  try {
    const st = createWriteStream('video.mp4');

    const ytdlpStream = ytdlp.stream(
      'https://www.youtube.com/watch?v=_AL4IwHuHlY',
      {
        onProgress: (progress) => {
          console.log(progress);
        },
        // others args
      }
    );

    await ytdlpStream.pipeAsync(st);

    console.log('Download completed');
  } catch (error) {
    console.error('Error:', error);
  }
}

streamVideo();

Class: YtDlp

constructor(opt?)

The constructor initializes the YtDlp object.

Parameters:

  • opt (optional): Options to configure the paths for yt-dlp and ffmpeg.
    • binaryPath: Path to the yt-dlp binary (optional).
    • ffmpegPath: Path to the ffmpeg binary (optional).

Example:

const ytDlp = new YtDlp({
  binaryPath: 'path-to-yt-dlp',
  ffmpegPath: 'path-to-ffmpeg',
});

checkInstallationAsync(options?): Promise<boolean>

Asynchronously checks if both yt-dlp and optionally ffmpeg binaries are installed and available.

Parameters:

  • options (optional): An object to specify if ffmpeg should also be checked.
    • ffmpeg: If set to true, it checks if ffmpeg is installed.

Returns:

  • Promise<boolean>: Resolves to true if both yt-dlp and ffmpeg are installed (if required), otherwise false.

Example:

const isInstalled = await ytDlp.checkInstallationAsync({ ffmpeg: true });

checkInstallation(options?): boolean

Synchronously checks if both yt-dlp and optionally ffmpeg binaries are installed and available.

Parameters:

  • options (optional): An object to specify if ffmpeg should also be checked.
    • ffmpeg: If set to true, it checks if ffmpeg is installed.

Returns:

  • boolean: true if both yt-dlp and ffmpeg are installed (if required), otherwise false.

Example:

const isInstalled = ytDlp.checkInstallation({ ffmpeg: true });

execAsync(url, options?): Promise<string>

Asynchronously executes yt-dlp with the provided URL and options.

Parameters:

  • url: The URL of the video to download or stream.
  • options (optional): Additional options to pass to yt-dlp:
    • onData: A callback that is triggered when data is received from yt-dlp.
    • onProgress: An callback function to track progess of downloading.

Returns:

  • Promise<string>: Resolves to the output of the yt-dlp command.

Example:

const result = await ytDlp.execAsync(
  'https://www.youtube.com/watch?v=exampleVideoID'
);

exec(url, options?): ChildProcess

Synchronously executes yt-dlp with the provided URL and options.

Parameters:

  • url: The URL of the video to download or stream.
  • options (optional): Additional options to pass to yt-dlp.

Returns:

  • ChildProcess: The spawned child process running yt-dlp.
    • on('progress'): An event to track progess of downloading.

Example:

const ytDlpProcess = ytDlp.exec(
  'https://www.youtube.com/watch?v=exampleVideoID'
);

download(url, options?): ChildProcess

Downloads a video from the given URL.

Parameters:

  • url: The URL of the video to download.
  • options (optional): Additional options for downloading, such as video format.

Returns:

  • ChildProcess: The spawned child process running yt-dlp.
    • on('progress'): An event to track progess of downloading.

Example:

ytDlp.download('https://www.youtube.com/watch?v=exampleVideoID', {
  format: 'bestvideo+bestaudio',
});

downloadAsync(url, options?): Promise<string>

Asynchronously downloads a video from the given URL.

Parameters:

  • url: The URL of the video to download.
  • options (optional): Additional options for downloading, such as video format and a progress callback.
    • format: String | Format Options.
    • onProgress: An callback function to track progess of downloading.
    • output: String | Custom output path and filename template. Uses yt-dlp output template syntax. For example: "./downloads/%(title)s.%(ext)s".

Returns:

  • Promise<string>: Resolves to the output of the yt-dlp command.

Example:

const result = await ytDlp.downloadAsync(
  'https://www.youtube.com/watch?v=exampleVideoID',
  {
    format: 'bestvideo+bestaudio',
  }
);

stream(url, options?): PipeResponse

Streams a video from the given URL.

Parameters:

  • url: The URL of the video to stream.
  • options (optional): Additional options for streaming, such as video format and a progress callback.
    • format: String | Format Options.
    • onProgress: An callback function to track progess of downloading.

Returns:

  • pipe: A function that pipes the stream to a writable stream.
  • pipeAsync: A function that pipes the stream asynchronously to a writable stream.

Example:

const ytdlpStream = ytDlp.stream(
  'https://www.youtube.com/watch?v=exampleVideoID'
);
ytdlpStream.pipe(destinationStream);

getInfoAsync(url, options?): Promise<VideoInfo | PlaylistInfo>

Fetches detailed information about a video asynchronously.

Parameters:

  • url: The URL of the video.

  • options (optional): InfoOptions Additional options to control the fetching behavior:

    • flatPlaylist?: boolean (default: true) | If true, returns a flat list with limited information for playlist items. If false, fetches full information for each video in the playlist.

    • cookies?: string | A raw cookie header string to be used for authenticated requests.

    • cookiesFromBrowser?: string | Uses cookies retrieved from the specified browser profile.

    • noCookiesFromBrowser?: boolean | If true, disables automatically retrieving cookies from the browser.

    • noCookies?: boolean | If true, disables the use of all cookies entirely (overrides other cookie options).

Returns:

  • Promise<VideoInfo | PlaylistInfo>: Resolves to a VideoInfo or PlaylistInfo object containing metadata about the video.

Example:

const info = await ytDlp.getInfoAsync('url');
if (info._type == 'video') {
  console.log(info); // VideoInfo
}
if (info._type == 'playlist') {
  console.log(info); // PlaylistInfo
}

getThumbnailsAsync(url): Promise<VideoThumbnail[]>

Fetches all available thumbnails for a video asynchronously.

Parameters:

  • url: The URL of the video.

Returns:

  • Promise<VideoThumbnail[]>: Resolves to an array of VideoThumbnail objects.

Example:

const thumbnails = await ytDlp.getThumbnailsAsync(
  'https://www.youtube.com/watch?v=exampleVideoID'
);

getTitleAsync(url): Promise<string>

Fetche title for a video asynchronously.

Parameters:

  • url: The URL of the video.

Returns:

  • Promise<string>: Resolves to a string.

Example:

const title = await ytDlp.getTitleAsync(
  'https://www.youtube.com/watch?v=exampleVideoID'
);

getFileAsync(url, options?): Promise<File>

Returns a File object containing the video/audio data without saving it to disk.

Parameters:

  • url: The URL of the video.
  • options (optional): Additional options for getting the file:
    • format: String | Format Options
    • filename: Custom filename for the resulting file
    • metadata: Custom metadata for the file:
      • name: File name
      • type: MIME type
      • size: File size in bytes
    • onProgress: A callback function to track progress of downloading

Returns:

  • Promise<File>: Resolves to a File object containing the video/audio data.

Example:

const file = await ytdlp.getFileAsync(
  'https://www.youtube.com/watch?v=exampleVideoID',
  {
    format: {
      filter: 'audioandvideo',
      type: 'mp4',
      quality: 'highest',
    },
    filename: 'custom-video.mp4',
    onProgress: (progress) => {
      console.log(progress);
    },
  }
);

downloadFFmpeg(): Promise<void>

Downloads ffmpeg using a predefined method.

Returns:

  • Promise<void>: Resolves once the download is complete.

Example:

await ytDlp.downloadFFmpeg();

Format Options

filter: "videoonly" | "audioonly" | "audioandvideo" | "mergevideo"

  • filter: "videoonly"

    • quality: "2160p" | "1440p" | "1080p" | "720p" | "480p" | "360p" | "240p" | "144p" | "highest" | "lowest" (default: 'highest')
    • type: "mp4" | "webm" (default:'mp4')
  • filter: "audioonly"

    • quality: "highest" | "lowest" (default:'highest')
  • filter: "audioandvideo"

    • quality: "highest" | "lowest" (default:'highest')
    • type: "mp4" | "webm" (default:'mp4')
  • filter: "audioonly"

    • quality: 0 to 10 (default:5)
    • type: "aac" | "flac" | "mp3" | "m4a" | "opus" | "vorbis" | "wav" | "alac" (default:'mp3')
  • filter: "mergevideo"

    • quality: "2160p" | "1440p" | "1080p" | "720p" | "480p" | "360p" | "240p" | "144p" | "highest" | "lowest" (default: 'highest')
    • format: "mkv" | "mp4" | "ogg" | "webm" | "flv" (default:'mp4')

Contributing

Contributions are welcome! Feel free to submit a pull request or open an issue on GitHub.