# Ytmusic Librarian

> Manage YouTube Music library, playlists, and discovery via ytmusicapi.

- Skill: `danstrem2/ytmusic-librarian` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds add danstrem2/ytmusic-librarian`
- Raw SKILL.md: https://api.skillmd.com/api/skills/danstrem2/ytmusic-librarian/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Product & Planning
- Author: danstrem2 (https://skillmd.com/u/danstrem2)
- Updated: 2026-08-19
- Page: https://skillmd.com/skills/danstrem2/ytmusic-librarian

---


# YTMusic Librarian

This skill uses the `ytmusicapi` Python library to interact with YouTube Music.

## Prerequisites

- Python 3.x
- `ytmusicapi` package: `pip install ytmusicapi`
- Authentication file (`oauth.json` or `browser.json`) in the skill folder.

## Setup Instructions

1. **Install the library:**
   ```bash
   pip install ytmusicapi
   ```

2. **Generate Authentication (The "cURL Handshake"):**
   - Open **Microsoft Edge** and visit [music.youtube.com](https://music.youtube.com) (ensure you are logged in).
   - Press `F12` to open DevTools, go to the **Network** tab.
   - Click your **Profile Icon -> Library** on the page.
   - Look for a request named `browse` in the network list.
   - **Right-click** the `browse` request -> **Copy -> Copy as cURL (bash)**.
   - Paste that cURL command into a file named `headers.txt` in the skill folder.
   - Run the following Python snippet to generate `browser.json`:
     ```python
     from ytmusicapi.auth.browser import setup_browser
     with open('headers.txt', 'r') as f:
         setup_browser('browser.json', f.read())
     ```
   - Ensure `browser.json` is located in the skill folder.

3. **Verify:**
   ```bash
   python -c "from ytmusicapi import YTMusic; yt = YTMusic('browser.json'); print(yt.get_library_songs(limit=1))"
   ```

## Workflows

### Library Management
- List songs/albums: `yt.get_library_songs()`, `yt.get_library_albums()`
- Add/Remove: `yt.rate_song(videoId, 'LIKE')`, `yt.edit_song_library_status(feedbackToken)`

### Playlist Management
- Create: `yt.create_playlist(title, description)`
- Add Tracks: `yt.add_playlist_items(playlistId, [videoIds])`
- Remove Tracks: `yt.remove_playlist_items(playlistId, [videoIds])`

### Metadata & Discovery
- Get Lyrics: `yt.get_lyrics(browseId)`
- Get Related: `yt.get_watch_playlist(videoId)` -> `related`

