with one click
playlist-review
// Interactively review flagged tracks from the YouTube resolver. Edit review JSON files to accept or reject candidates, then run spoti-bye review to apply.
// Interactively review flagged tracks from the YouTube resolver. Edit review JSON files to accept or reject candidates, then run spoti-bye review to apply.
Resolve YouTube video IDs for unmatched tracks in a stored playlist. Uses yt-dlp (no API quota). Scores candidates on channel quality, duration match, and title similarity.
Import a Spotify playlist into the local SQLite database. Supports Spotify URLs (playlist/track/album), Exportify CSVs, and JSON track lists.
Bulk import or sync all Spotify playlists from an Exportify zip export. Detects new, updated, and unchanged playlists. YouTube IDs are preserved on updates.
| name | playlist-review |
| description | Interactively review flagged tracks from the YouTube resolver. Edit review JSON files to accept or reject candidates, then run spoti-bye review to apply. |
| triggers | ["review flagged tracks","review playlists","process review","review youtube matches"] |
Process tracks that the resolver couldn't auto-match.
spoti-bye resolve runs and flags low-confidence matchesAfter resolving, flagged tracks land in:
~/.spoti-bye/youtube-review-<playlist_id>.json
Each entry looks like:
{
"song_id": 1234,
"artist": "Artist Name",
"title": "Song Title",
"best_candidate_video_id": "dQw4w9WgXcQ",
"best_candidate_score": 3,
"scoring_notes": ["VEVO channel (+3)", "duration ±2s (+3)"],
"youtube_url": "https://youtube.com/watch?v=dQw4w9WgXcQ"
}
youtube_url to verify the videobest_candidate_video_id as-isbest_candidate_video_id with the correct IDbest_candidate_video_id to nullspoti-bye reviewThe review command applies all decisions and deletes processed files.