Skip to main content

Async YouTube Music search and stream extraction library.

Project description

YouTubeMusic

Async YouTube Music search and stream extraction library for Python.

Designed for developers who need fast YouTube search, metadata extraction, playlist parsing, and direct stream URLs — without mandatory API keys.


Features

  • Fully async architecture
  • YouTube search (scraping-based)
  • Optional YouTube Data API search
  • Audio stream extraction (powered by yt-dlp)
  • Video + audio stream support
  • Playlist & Mix support
  • Built-in CLI
  • No forced external services
  • Production-ready design
  • No console output on import

Installation

pip install YouTubeMusic

Quick Start

Basic Search

import asyncio
from YouTubeMusic.Search import Search

async def main():
    results = await Search("Kesariya", limit=1)

    if results and results.get("main_results"):
        item = results["main_results"][0]
        print(item)

asyncio.run(main())

Get Audio Stream URL

import asyncio
from YouTubeMusic.Stream import get_stream
cookies_path = ""

async def main():
    url = "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
    stream_url = await get_stream(url, cookies_path)
    print(stream_url)

asyncio.run(main())

Search Using YouTube Data API (Optional)

If you want to use official YouTube API:

Set environment variable:

export YOUTUBE_API_KEYS="key1,key2,key3"

Then:

import asyncio
from YouTubeMusic.YtSearch import Search as YtSearch

async def main():
    results = await YtSearch("Kesariya", limit=1)
    print(results)

asyncio.run(main())

If no API key is configured, it safely returns an empty list.


Get Playlist Songs

import asyncio
from YouTubeMusic.Playlist import get_playlist_songs

async def main():
    songs = await get_playlist_songs(
        "https://www.youtube.com/playlist?list=PLxxxxxxxx"
    )
    print(len(songs))

asyncio.run(main())

Extract Video + Audio URLs

import asyncio
from YouTubeMusic.Video_Stream import get_video_audio_urls
cookies_path = ""
async def main():
    video_url, audio_url = await get_video_audio_urls(
        "https://www.youtube.com/watch?v=dQw4w9WgXcQ", cookies_path
    )
    print(video_url)
    print(audio_url)

asyncio.run(main())

CLI Usage

After installation:

Basic Search

ytmusic "Kesariya"

Extract Audio Stream (requires cookies file)

ytmusic "Kesariya" --stream --cookies cookies.txt

Show Package Info

ytmusic --info

Special Thanks

Special thanks to the yt-dlp project for providing reliable and powerful media extraction capabilities used internally for stream URL handling.

yt-dlp is an open-source project maintained by its contributors. Learn more at: https://github.com/yt-dlp/yt-dlp

p

Why Use YouTubeMusic?

  • No mandatory YouTube API usage
  • Fully async and scalable
  • Lightweight and modular
  • Suitable for Telegram bots, web apps, and automation
  • Clean public API
  • No forced logging
  • Production-safe design

Requirements

  • Python 3.8+
  • httpx (with http2)
  • orjson
  • yt-dlp

Project Structure

YouTubeMusic/
    Search.py
    YtSearch.py
    Stream.py
    Video_Stream.py
    Playlist.py
    Models.py
    Utils.py
    cli.py

License

MIT License


Repository

https://github.com/YouTubeMusicAPI/YouTubeMusic


Author

Abhishek Thakur

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

youtubemusic-2026.3.19.tar.gz (12.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

youtubemusic-2026.3.19-py3-none-any.whl (15.2 kB view details)

Uploaded Python 3

File details

Details for the file youtubemusic-2026.3.19.tar.gz.

File metadata

  • Download URL: youtubemusic-2026.3.19.tar.gz
  • Upload date:
  • Size: 12.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for youtubemusic-2026.3.19.tar.gz
Algorithm Hash digest
SHA256 3bac999609260a9cd658f0161105c4aead2fa823b950e3cfae71d133c7d83568
MD5 710d8d58ec0bd5a848939a1d3c1e0acb
BLAKE2b-256 d1b01555ac1080f47d4a48ca3ef5916a455ad43ae106f700dcd2d12247dc191e

See more details on using hashes here.

File details

Details for the file youtubemusic-2026.3.19-py3-none-any.whl.

File metadata

File hashes

Hashes for youtubemusic-2026.3.19-py3-none-any.whl
Algorithm Hash digest
SHA256 13c9eb923b7f31ca7693b7c037fce92a8f0b18039141c868290a20d18195e487
MD5 29394617b90b33be45ddc631668d2121
BLAKE2b-256 ceb44b7fe711779ae2041cbbc9f6e1a9dc20b4c7205fe8594d187558c65d97b0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page