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.18.tar.gz (12.7 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.18-py3-none-any.whl (14.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: youtubemusic-2026.3.18.tar.gz
  • Upload date:
  • Size: 12.7 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.18.tar.gz
Algorithm Hash digest
SHA256 05e225edd36eed3b5ca6be4eb4136e5e392de756b92b230d307b418622ca5f61
MD5 6cf160e0f0aa5e3fc8cf7f76c446e781
BLAKE2b-256 7d5f2dd45da10f8c04461d2449c9e225125210ee1aea3e0b509c9fb0f4ff8331

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for youtubemusic-2026.3.18-py3-none-any.whl
Algorithm Hash digest
SHA256 b198c12b6547454f9efc256518225f9ab0421bf66a74f2d7c9eb4a0e3e6cb423
MD5 5761cdb0a38342478d1ce33d76a81737
BLAKE2b-256 528ac462a0e8900daa2dfcb5398a5a078bc7e055011f06c0380689c9c418b11e

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