Skip to main content

YouTube Music CLI tool with interactive terminal interface

Project description

YTM - YouTube Music CLI

🎵 A simple, interactive command-line tool for YouTube Music

Stream music directly from YouTube Music in your terminal with intuitive controls, playlist management, and smart filtering.

YTM CLI Player

YTM CLI Lyrics

✨ Features

  • 🔍 Smart Search: Search and play any song from YouTube Music
  • 🎮 Interactive Controls: Play/pause, skip, go back with simple key presses
  • 📱 Vim-like Navigation: Use j/k keys or arrow keys to navigate
  • 📋 Local Playlists: Create and manage personal playlists
  • 👎 Smart Filtering: Dislike songs to filter them from future results
  • 📜 Lyrics Display: View lyrics while listening (press l)
  • 🎯 Radio Mode: Automatic playlist generation based on your selection
  • 🤖 AI-Powered: Natural language music requests and AI-generated playlists

🚀 Quick Start

Requirements

Installation

One command with uv (recommended):

# Install from PyPI
uvx ytm-cli "song name"

# Or from source (no clone needed)
uvx --from git+https://github.com/thieuluan1618/ytm.git ytm "song name"
Alternative: clone and run locally
git clone https://github.com/thieuluan1618/ytm.git
cd ytm
uv run ytm-cli "song name"
Alternative: one-shot setup scripts
git clone https://github.com/thieuluan1618/ytm.git
cd ytm

These create the virtual environment, install dependencies, and configure the ytm command globally.

Linux/macOS:

./setup.sh
source ~/.zshrc  # or ~/.bashrc for bash

Windows PowerShell:

.\setup.ps1
. $PROFILE

Windows Command Prompt:

setup.bat

After setup, use ytm (alias for ytm-cli) from anywhere.

Alternative: manual install
git clone https://github.com/thieuluan1618/ytm.git
cd ytm
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate
pip install -r requirements.txt
./setup_alias.sh          # or setup_alias.ps1 / setup_alias.bat

Basic Usage

Interactive search:

ytm
# Enter search query when prompted

Direct search:

ytm "your favorite song"

Non-interactive mode (automation/scripting):

ytm search "song name" --select 1           # Auto-select first result
ytm search "song" -s 1 -v                   # With verbose output
ytm search "song" -s 1 -v --log-file debug.log  # Save debug logs

Note: If you haven't set up the alias, use ytm-cli or python -m ytm_cli instead of ytm

🎮 Controls

During Song Selection

  • ↑/↓ or j/k - Navigate through results
  • Enter - Select and play song
  • q - Quit

During Playback

  • Space - Play/pause
  • n - Next song
  • b - Previous song
  • l - Show lyrics
  • a - Add to playlist
  • d - Dislike song (skip and filter from future results)
  • q - Quit

📋 Playlist Management

Create and manage playlists:

ytm playlist list              # List all playlists
ytm playlist create            # Create new playlist
ytm playlist show "My Songs"   # View playlist contents
ytm playlist play "My Songs"   # Play entire playlist
ytm playlist delete "My Songs" # Delete playlist

Add songs to playlists:

  • Press a during song selection or playback
  • Choose existing playlist or create new one
  • Song added without interrupting playback

🤖 AI Music Assistant

Use natural language to search and create playlists powered by AI (supports Google Gemini, OpenAI, Anthropic):

ytm llm ask "play something chill for studying"       # AI picks and auto-plays
ytm llm ask "upbeat pop songs for a workout"           # Natural language search
ytm llm playlist "lo-fi beats for rainy days" --play   # AI-generated playlist
ytm llm playlist "90s rock classics" -n 20             # 20-song playlist

Configure your provider in config.ini:

[llm]
provider = google       # google, openai, or anthropic
model = gemini-2.5-pro

🛠️ Configuration

The app uses config.ini for customization:

[general]
songs_to_display = 10
show_thumbnails = true

[mpv]
# Add custom mpv flags
flags = --no-video

[playlists]
directory = playlists

🎯 Philosophy

Keep it simple for the listener to enjoy music. Features are designed to be:

  • Intuitive: Single-key shortcuts during playback
  • Non-disruptive: Actions don't interrupt your listening experience
  • Consistent: Same navigation patterns across all screens
  • Quick: Important features accessible with simple key presses

🐛 Troubleshooting

Having issues? Check out the Troubleshooting Guide for solutions to common problems:

Quick diagnosis:

# Enable verbose logging to see what's happening
ytm search "test" -s 1 -v --log-file debug.log

# Check versions
mpv --version
yt-dlp --version

📄 License

This project is open source. Please check the license file for details.


Enjoy your music! 🎵

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

ytm_cli-0.5.1.tar.gz (81.7 kB view details)

Uploaded Source

Built Distribution

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

ytm_cli-0.5.1-py3-none-any.whl (64.0 kB view details)

Uploaded Python 3

File details

Details for the file ytm_cli-0.5.1.tar.gz.

File metadata

  • Download URL: ytm_cli-0.5.1.tar.gz
  • Upload date:
  • Size: 81.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ytm_cli-0.5.1.tar.gz
Algorithm Hash digest
SHA256 e52b9491f7c3d14aee212570d4a25eb0b9e6e18d78cf28cf74d84b006cc1566c
MD5 5c445bd021731295f00967d93d7ec756
BLAKE2b-256 6a183ef0b28708057962b2cf6fb298d5cd8e5fa637f532739ce78592ca45e88b

See more details on using hashes here.

Provenance

The following attestation bundles were made for ytm_cli-0.5.1.tar.gz:

Publisher: publish.yml on thieuluan1618/ytm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ytm_cli-0.5.1-py3-none-any.whl.

File metadata

  • Download URL: ytm_cli-0.5.1-py3-none-any.whl
  • Upload date:
  • Size: 64.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ytm_cli-0.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 caa1e9a5b807558551b560d2d5d5f141f59c3431d7b7f068d468c7de0aaa300d
MD5 35fada191cfde1b308e479d15a3d69d0
BLAKE2b-256 cb1416cea1d17878bec828dd48652154a88d6b347d8df5dd7500e3ed2d5c4b23

See more details on using hashes here.

Provenance

The following attestation bundles were made for ytm_cli-0.5.1-py3-none-any.whl:

Publisher: publish.yml on thieuluan1618/ytm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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