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.4.6.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.4.6-py3-none-any.whl (15.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: youtubemusic-2026.4.6.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.4.6.tar.gz
Algorithm Hash digest
SHA256 83f015059ba4d3e9cb06107551a0bbbee2d123c4cb37f3311d57d46f009f6607
MD5 50d57282a600afda88d459b8c5cd18f0
BLAKE2b-256 5da006088987924172931a0a9b48fba4d521f9d45aa924dc1c9c664573c06f65

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for youtubemusic-2026.4.6-py3-none-any.whl
Algorithm Hash digest
SHA256 ae94d6bc504ca6c3b38180f5396450a7d14d46495f0c29673a6ec9c0d0eb278a
MD5 6c87265fc1524cd2f15f046c3c4ecaf6
BLAKE2b-256 bde317743e2e9dd91796ccf1eb1a24ce8b13ae931bede682e5db811e1e95f725

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