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 🙏

© 2024 – Pkg Stats / Ryan Hefner

@ybd-project/ytdl-core

v6.0.8

Published

YBD Project fork of ytdl-core.

Downloads

4,094

Readme

@ybd-project/ytdl-core - v6

npm version jsDelivr License: MIT

YBD Project fork of ytdl-core. This fork is dedicated to developing a YouTube downloader that is fast, stable, and takes into account various use cases, with reference to LuanRT/YouTube.js and yt-dlp.

[!NOTE] If you are looking for v5 documentation for @ybd-project/ytdl-core, please click here.

Table of Contents

ℹ️Announcements at this timeℹ️

There are no announcements at this time.

Prerequisite

To use @ybd-project/ytdl-core without problems, use Node.js 16 or higher. (Recommended is Node.js 18 or higher.)

[!IMPORTANT] Use with Node.js 16 is not recommended, but will be supported as much as possible.

Operating Environment

[!IMPORTANT] @ybd-project/ytdl-core has not been tested in non-Node.js environments such as Deno. If you need ytdl-core optimized for these environments, please create an issue.

Default (Node.js)

As usual, when using Node.js, as noted in the prerequisites, v16 or higher will work fine. If you have an example that does not work with 16 or higher versions, please create an issue.

Browser

When using a browser, the latest version is preferred due to the API used. However, when operating a website or other site, it is unknown which version and browser the client will use, so the following are the main browsers (Chrome, Edge, Firefox, Brave, Opera, Safari) that are currently confirmed to work.

List

Live demo used for testing: ytdlcore.static.jp

| Browser Name | Supported Versions | | :-----------------: | :----------------: | | Google Chrome | v76 - latest | | Microsoft Edge | v80 - latest | | Mozilla FireFox | v78 - latest | | Apple Safari | v14 - latest | | Brave | v1 - latest | | Opera | v63 - latest |

(Tested with BrowserStack)

Serverless

We have confirmed that ytdl-core for serverless functions works properly in the following environment.

[!TIP] We recommend deploying to Cloudflare Workers because of its simplicity and lower cost compared to other platforms.

| Service Name | Remarks | | :--------------------: | :-------------------------------------: | | Cloudflare Workers | With nodejs_compat compatibility flag | | Vercel Functions | Streaming doesn't work. |

Installation

npm install @ybd-project/ytdl-core@latest

Make sure you're installing the latest version of @ybd-project/ytdl-core to keep up with the latest fixes.

API Documentation

For details API documentation, see the Wiki.

Basic Usage

Only a simple example is given in the README. For a list of options and other advanced usage, please refer to the API Documentation.

import fs from 'fs';
import { YtdlCore, toPipeableStream } from '@ybd-project/ytdl-core';
// For browser: import { YtdlCore } from '@ybd-project/ytdl-core/browser';
// For serverless functions: import { YtdlCore } from '@ybd-project/ytdl-core/serverless';

// JavaScript: const { YtdlCore } = require('@ybd-project/ytdl-core');

const ytdl = new YtdlCore({
    // The options specified here will be the default values when functions such as getFullInfo are executed.
});

// Download a video
ytdl.download('https://www.youtube.com/watch?v=dQw4w9WgXcQ').then((stream) => toPipeableStream(stream).pipe(fs.createWriteStream('video.mp4')));

// Get video info
ytdl.getBasicInfo('https://www.youtube.com/watch?v=dQw4w9WgXcQ').then((info) => {
    console.log(info.videoDetails.title);
});

Examples

See the Examples folder for examples of using @ybd-project/ytdl-core.

Precautions

Limitations

@ybd-project/ytdl-core is unable to retrieve or download information from the following videos.

  • Regionally restricted (requires a proxy)
  • Private (if you have access, requires OAuth2)
  • Rentals (if you have access, requires OAuth2)
  • YouTube Premium content (if you have access, requires OAuth2)
  • Only HLS Livestreams are currently supported. Other formats will get filtered out in ytdl.chooseFormats

The URL to view the retrieved video is valid for 6 hours. (In some cases, downloading may only be possible from the same IP.)

Rate Limiting

When doing too many requests YouTube might block. This will result in your requests getting denied with HTTP-StatusCode 429. The following steps might help you:

  • Update @ybd-project/ytdl-core to the latest version
  • Use OAuth2 (you can find an example here)
  • Use proxies (you can find an example here)
  • Extend the Proxy Idea by rotating (IPv6-)Addresses
    • read this for more information about this
  • Wait it out (it usually goes away within a few days)

License

Distributed under the MIT License.