plx-converter 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +49 -11
  2. package/package.json +7 -2
package/README.md CHANGED
@@ -6,6 +6,8 @@ Converts a playlist from any of the three services into any other — six direct
6
6
 
7
7
  > ⚠️ **Personal, non-commercial use.** Uses unofficial web endpoints that can change or break without notice. Not affiliated with Spotify, Deezer, or YouTube.
8
8
 
9
+ <img src="https://raw.githubusercontent.com/samlehoy/plx/master/screenshots/cli-interactive-menu.png" width="640" alt="plx interactive menu: Convert a playlist, Credentials 3/3 saved, Auto-fetch credentials from browser, Report, Quit" />
10
+
9
11
  ## Install
10
12
 
11
13
  ```bash
@@ -16,12 +18,18 @@ Requires Node.js ≥ 22.
16
18
 
17
19
  ## Usage
18
20
 
21
+ Run `plx` with no arguments for the interactive menu, which walks you through source, target, and credentials:
22
+
23
+ <img src="https://raw.githubusercontent.com/samlehoy/plx/master/screenshots/cli-provider-selection.png" width="640" alt="Interactive prompt picking a source provider between Spotify, Deezer, and YouTube Music" />
24
+
25
+ Or name everything up front:
26
+
19
27
  ```bash
20
- plx # interactive menu
21
- plx --url "https://open.spotify.com/playlist/ID" --to deezer
22
- plx --url "https://www.deezer.com/playlist/ID" --to spotify
23
- plx --url "https://music.youtube.com/playlist?list=ID" --to deezer
24
- plx --url "<LINK>" --to deezer --dry-run # preview matches without writing
28
+ plx # interactive menu
29
+ plx --url "https://open.spotify.com/playlist/ID" --to deezer
30
+ plx --url "https://www.deezer.com/playlist/ID" --to ytmusic
31
+ plx --url "https://music.youtube.com/playlist?list=ID" --to spotify
32
+ plx --url "<LINK>" --to deezer --dry-run # preview matches without writing
25
33
  ```
26
34
 
27
35
  You name the **target**; the source is inferred from the link, since the link already says which
@@ -30,20 +38,50 @@ service it belongs to. plx never guesses a destination — omitting `--to` is an
30
38
  ```text
31
39
  Options:
32
40
  -u, --url <LINK> playlist URL/URI/ID (repeatable)
33
- -t, --to <PROVIDER> target provider (required)
41
+ -t, --to <PROVIDER> target provider: spotify | deezer | ytmusic (required)
34
42
  -o, --output <file> CSV report path (default: conversion_report.csv)
35
43
  -d, --dry-run match only, don't write
36
44
  -h, --help show help
37
45
  ```
38
46
 
47
+ Every run writes a CSV report — one row per track, with the match method and target id, so you can
48
+ see exactly what moved and what didn't.
49
+
39
50
  ## Credentials
40
51
 
41
- | Cookie | Env var | Needed for |
42
- |---|---|---|
43
- | Deezer `arl` | `DEEZER_ARL` | writing to Deezer |
44
- | Spotify `sp_dc` | `SPOTIFY_DC` | writing to a Spotify target |
52
+ One browser session credential per provider. All are optional — you only need the ones your chosen
53
+ direction actually touches.
54
+
55
+ | Provider | Credential | Env var | Needed for |
56
+ |---|---|---|---|
57
+ | Spotify | `sp_dc` cookie | `SPOTIFY_DC` | writing to Spotify, or reading your *private* playlists |
58
+ | Deezer | `arl` cookie | `DEEZER_ARL` | reading **or** writing a Deezer playlist |
59
+ | YouTube Music | whole `cookie:` header | `YTMUSIC_COOKIE` | reading **or** writing a YouTube Music playlist |
60
+
61
+ Reading a **public Spotify** playlist needs no credentials at all — which is what makes a
62
+ credential-free `--dry-run` possible.
63
+
64
+ **YouTube Music takes a whole cookie header, not a single cookie.** Google splits a session across a
65
+ dozen-odd cookies, so copy the entire `cookie:` value: on [music.youtube.com](https://music.youtube.com),
66
+ DevTools → **Network** → any request → **Request Headers** → `cookie:`. Google sessions also expire
67
+ faster than the other two, so expect to redo this occasionally.
68
+
69
+ ### Auto-fetch from your browser (macOS)
70
+
71
+ Rather than copying cookies by hand, plx can read them straight from a logged-in browser — you only
72
+ accept the macOS Keychain prompt. Pick **"Auto-fetch credentials (from browser)"** from the menu, or
73
+ let it run automatically when a credential is missing. Works with the Chromium family (Brave, Chrome,
74
+ Edge, Chromium, Vivaldi, Opera) and Safari (needs Full Disk Access). Manual paste stays the fallback
75
+ everywhere else.
76
+
77
+ Set credentials in `.env`, export them in your shell, or paste when prompted. Full setup:
78
+ [`docs/CONFIG.md`](docs/CONFIG.md).
79
+
80
+ ## Website
81
+
82
+ [plx.sh](https://plx.sh) — overview, matching rules, and install steps.
45
83
 
46
- Set in `.env`, or paste when prompted. Reading a Spotify playlist needs **no credentials**. Full setup: [`docs/CONFIG.md`](docs/CONFIG.md).
84
+ <img src="https://raw.githubusercontent.com/samlehoy/plx/master/screenshots/website-landing.png" width="640" alt="plx landing page: Move your playlist. No dev account." />
47
85
 
48
86
  ## Development
49
87
 
package/package.json CHANGED
@@ -1,8 +1,13 @@
1
1
  {
2
2
  "name": "plx-converter",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Convert playlists between Spotify, Deezer, and YouTube Music using your own browser session",
5
5
  "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/samlehoy/plx.git"
9
+ },
10
+ "homepage": "https://plx.sh",
6
11
  "type": "module",
7
12
  "bin": {
8
13
  "plx": "dist/cli.js"
@@ -18,6 +23,7 @@
18
23
  "scripts": {
19
24
  "dev": "tsx src/cli.ts",
20
25
  "build": "tsc",
26
+ "prepublishOnly": "npm run build",
21
27
  "typecheck": "tsc --noEmit",
22
28
  "test": "vitest run",
23
29
  "lint": "eslint .",
@@ -26,7 +32,6 @@
26
32
  "dependencies": {
27
33
  "@clack/prompts": "^0.10.1",
28
34
  "dotenv": "^16.4.7",
29
- "plx-converter": "^0.1.1",
30
35
  "zod": "^3.24.2"
31
36
  },
32
37
  "devDependencies": {