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.
- package/README.md +49 -11
- 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
|
|
21
|
-
plx --url "https://open.spotify.com/playlist/ID"
|
|
22
|
-
plx --url "https://www.deezer.com/playlist/ID"
|
|
23
|
-
plx --url "https://music.youtube.com/playlist?list=ID" --to
|
|
24
|
-
plx --url "<LINK>" --to deezer --dry-run
|
|
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
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
|
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
|
-
|
|
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.
|
|
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": {
|