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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file youtubemusic-2026.3.5.tar.gz.
File metadata
- Download URL: youtubemusic-2026.3.5.tar.gz
- Upload date:
- Size: 12.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ac84e30de3ed8005ca3576d6fc394c124e249064992778bf622cf1ebac8d015d
|
|
| MD5 |
78ca172cc13d5fd6c84e448614c3dee9
|
|
| BLAKE2b-256 |
a08bda1a2df1b47e433eca13abec55da89f30135857c63cd96c01bdabb4b136b
|
File details
Details for the file youtubemusic-2026.3.5-py3-none-any.whl.
File metadata
- Download URL: youtubemusic-2026.3.5-py3-none-any.whl
- Upload date:
- Size: 14.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b4020546ff656bac9b2e677fda24f4489c29134a6f2af70ae6a3a2333a639821
|
|
| MD5 |
0c54c5cac328bf635f078da43281abaa
|
|
| BLAKE2b-256 |
2ac8c06e660f9c7c335cb3ae321a5f20f06f005874587ce2aace158c6a85b988
|