RustyPipe is a fully featured Rust client for the public YouTube / YouTube Music API (Innertube), inspired by NewPipe.
Features
YouTube
- Player (video/audio streams, subtitles)
- VideoDetails (metadata, comments, recommended videos)
- Playlist
- Channel (videos, shorts, livestreams, playlists, info, search)
- ChannelRSS
- Search (with filters)
- Search suggestions
- Trending
- URL resolver
YouTube Music
- Playlist
- Album
- Artist
- Search
- Search suggestions
- Radio
- Track details (lyrics, recommendations)
- Moods/Genres
- Charts
- New (albums, music videos)
Getting started
Cargo.toml
[]
= "0.1.3"
= { = "1.20.0", = ["macros", "rt-multi-thread"] }
Watch a video
use Command;
use ;
async
Get a playlist
use RustyPipe
async
Output:
Name: Homelab
Author: Jeff Geerling
Last update: 2023-05-04
[cVWF3u-y-Zg] I put a computer in my computer (720s)
[ecdm3oA-QdQ] 6-in-1: Build a 6-node Ceph cluster on this Mini ITX Motherboard (783s)
[xvE4HNJZeIg] Scrapyard Server: Fastest all-SSD NAS! (733s)
[RvnG-ywF6_s] Nanosecond clock sync with a Raspberry Pi (836s)
[R2S2RMNv7OU] I made the Petabyte Raspberry Pi even faster! (572s)
[FG--PtrDmw4] Hiding Macs in my Rack! (515s)
...
Get a channel
use RustyPipe
async
Output:
Name: Louis Rossmann
Description: I discuss random things of interest to me. (...)
Subscribers: 1780000
[qBHgJx_rb8E] Introducing Rossmann senior, a genuine fossil 😃 (122s)
[TmV8eAtXc3s] Am I wrong about CompTIA? (592s)
[CjOJJc1qzdY] How FUTO projects loosen Google's grip on your life! (588s)
[0A10JtkkL9A] a private moment between a man and his kitten (522s)
[zbHq5_1Cd5U] Is Texas mandating auto repair shops use OEM parts? SB1083 analysis & breakdown; tldr, no. (645s)
[6Fv8bd9ICb4] Who owns this? (199s)
...
Development
Requirements:
- Current version of stable Rust
just
task runnernextest
test runnerpre-commit
- yq (YAML processor)
Tasks
Testing
just test
Run unit+integration testsjust unittest
Run unit testsjust testyt
Run YouTube integration testsjust testintl
Run YouTube integration tests for all supported languages (this takes a long time and is therefore not run in CI)YT_LANG=de just testyt
Run YouTube integration tests for a specific language
Tools
just testfiles
Download missing testfiles for unit testsjust report2yaml
Convert RustyPipe reports into a more readable yaml format (requiresyq
)