goblin-malin 0.1.1 → 0.1.2
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/.env.example +6 -0
- package/README.md +51 -43
- package/dist/assets/sounds/init.wav +0 -0
- package/dist/assets/themes/dark.json +74 -0
- package/dist/assets/themes/light.json +74 -0
- package/dist/chunk-Y4ZGX5NZ.js +13048 -0
- package/dist/{chunk-ECLAXOR2.js → chunk-ZZ35YTR2.js} +64 -14
- package/dist/cli.js +2 -2
- package/dist/index.js +2 -2
- package/dist/{metadata-Y5IDFTMA.js → metadata-AGDUAOW7.js} +1 -1
- package/package.json +123 -88
- package/dist/chunk-IVBZEO3V.js +0 -9157
- package/docs/screenshots/2026-05-08-download-view.png +0 -0
package/.env.example
ADDED
package/README.md
CHANGED
|
@@ -1,43 +1,51 @@
|
|
|
1
|
-
# goblin-malin 😉
|
|
2
|
-
|
|
3
|
-
> [!CAUTION]
|
|
4
|
-
> **This project is in early, early, early development.**<br>
|
|
5
|
-
> Be aware that the data model can change drastically, making previous versions incompatible with the current one. Use at your own risk 😉
|
|
6
|
-
|
|
7
|
-
A keyboard-driven terminal UI for downloading and tagging music tracks with metadata. Import links from Spotify, YouTube, the app cross-references metadata across providers, finds the best download source (only yt-dlp for now), and saves it to disk with clean tags.
|
|
8
|
-
|
|
9
|
-
## Installation
|
|
10
|
-
|
|
11
|
-
### Running the project as a developer
|
|
12
|
-
|
|
13
|
-
You can run the project as a developer:
|
|
14
|
-
|
|
15
|
-
1. Clone the repository and open a terminal in the project directory
|
|
16
|
-
2. Install [Node.js](https://nodejs.org/en/download) and [yarn](https://classic.yarnpkg.com/lang/en/docs/install)
|
|
17
|
-
3. Install dependencies in the project directory: `yarn install`
|
|
18
|
-
4. Run the application: `yarn run dev`
|
|
19
|
-
|
|
20
|
-
### Launching the app in js code
|
|
21
|
-
|
|
22
|
-
> Not customizable yet
|
|
23
|
-
|
|
24
|
-
```js
|
|
25
|
-
import GoblinMalin from "goblin-malin";
|
|
26
|
-
|
|
27
|
-
GoblinMalin.start();
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
## Steps
|
|
31
|
-
|
|
32
|
-
- Import
|
|
33
|
-
- `Spotify`
|
|
34
|
-
- `YouTube`
|
|
35
|
-
- System fetches primary metadata from the corresponding URL platform
|
|
36
|
-
- System discovers the same track on other platforms (cross-referencing via ISRC or track/artist name)
|
|
37
|
-
- Filters/orders metadata sources by relevance or leaves the default ranking chosen by the system (use `TAB` key to switch the focused window).
|
|
38
|
-
- System downloads matching tracks from available download providers:
|
|
39
|
-
- `yt-dlp`
|
|
40
|
-
- User selects the best download source and previews the audio
|
|
41
|
-
- User saves the file to the desired folder with embedded tags
|
|
42
|
-
|
|
43
|
-
|
|
1
|
+
# goblin-malin 😉
|
|
2
|
+
|
|
3
|
+
> [!CAUTION]
|
|
4
|
+
> **This project is in early, early, early development.**<br>
|
|
5
|
+
> Be aware that the data model can change drastically, making previous versions incompatible with the current one. Use at your own risk 😉
|
|
6
|
+
|
|
7
|
+
A keyboard-driven terminal UI for downloading and tagging music tracks with metadata. Import links from Spotify, YouTube, the app cross-references metadata across providers, finds the best download source (only yt-dlp for now), and saves it to disk with clean tags.
|
|
8
|
+
|
|
9
|
+
## Installation
|
|
10
|
+
|
|
11
|
+
### Running the project as a developer
|
|
12
|
+
|
|
13
|
+
You can run the project as a developer:
|
|
14
|
+
|
|
15
|
+
1. Clone the repository and open a terminal in the project directory
|
|
16
|
+
2. Install [Node.js](https://nodejs.org/en/download) and [yarn](https://classic.yarnpkg.com/lang/en/docs/install)
|
|
17
|
+
3. Install dependencies in the project directory: `yarn install`
|
|
18
|
+
4. Run the application: `yarn run dev`
|
|
19
|
+
|
|
20
|
+
### Launching the app in js code
|
|
21
|
+
|
|
22
|
+
> Not customizable yet
|
|
23
|
+
|
|
24
|
+
```js
|
|
25
|
+
import GoblinMalin from "goblin-malin";
|
|
26
|
+
|
|
27
|
+
GoblinMalin.start();
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Steps
|
|
31
|
+
|
|
32
|
+
- Import with `Ctrl+V` URLs from compatible streaming platforms :
|
|
33
|
+
- `Spotify` (requires Spotify Premium Account)
|
|
34
|
+
- `YouTube`
|
|
35
|
+
- System fetches primary metadata from the corresponding URL platform
|
|
36
|
+
- System discovers the same track on other platforms (cross-referencing via ISRC or track/artist name)
|
|
37
|
+
- Filters/orders metadata sources by relevance or leaves the default ranking chosen by the system (use `TAB` key to switch the focused window).
|
|
38
|
+
- System downloads matching tracks from available download providers:
|
|
39
|
+
- `yt-dlp`
|
|
40
|
+
- User selects the best download source and previews the audio
|
|
41
|
+
- User saves the file to the desired folder with embedded tags
|
|
42
|
+
|
|
43
|
+
## Screenshots
|
|
44
|
+
|
|
45
|
+
### Metadata view
|
|
46
|
+
|
|
47
|
+
<img src="https://raw.githubusercontent.com/Tetraxel/goblin-malin/main/docs/screenshots/2026-05-14-metadata-view.png" width="100%"/>
|
|
48
|
+
|
|
49
|
+
### Download view
|
|
50
|
+
|
|
51
|
+
<img src="https://raw.githubusercontent.com/Tetraxel/goblin-malin/main/docs/screenshots/2026-05-08-download-view.png" width="100%"/>
|
|
Binary file
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{
|
|
2
|
+
"palette": {
|
|
3
|
+
"blue": "#58a6ff",
|
|
4
|
+
"cyan": "#39c5cf",
|
|
5
|
+
"red": "#ff7b72",
|
|
6
|
+
"green": "#56d364",
|
|
7
|
+
"yellow": "#e3b341",
|
|
8
|
+
"orange": "#f0883e",
|
|
9
|
+
"purple": "#d2a8ff",
|
|
10
|
+
"pink": "#f778ba",
|
|
11
|
+
"white": "#e6edf3",
|
|
12
|
+
"gray": "#8b949e",
|
|
13
|
+
"grayDark": "#484f58"
|
|
14
|
+
},
|
|
15
|
+
"ui": {
|
|
16
|
+
"background": "#000000",
|
|
17
|
+
"rowBackground": "#111111",
|
|
18
|
+
"rowActiveDimmedBackground": "#1d1d1d",
|
|
19
|
+
"rowActiveBackground": "#2f2f2f",
|
|
20
|
+
"border": "#39c5cf",
|
|
21
|
+
"separator": "#39c5cf",
|
|
22
|
+
"selection": "#58a6ff",
|
|
23
|
+
"tabActive": "#58a6ff",
|
|
24
|
+
"tabInactive": "#8b949e",
|
|
25
|
+
"panelTitle": "#e6edf3",
|
|
26
|
+
"progressFill": "#56d364",
|
|
27
|
+
"progressEmpty": "#484f58",
|
|
28
|
+
"modalBorder": "#39c5cf",
|
|
29
|
+
"focusIndicator": "#58a6ff",
|
|
30
|
+
"dimText": "#484f58"
|
|
31
|
+
},
|
|
32
|
+
"text": {
|
|
33
|
+
"primary": "#e6edf3",
|
|
34
|
+
"secondary": "#8b949e",
|
|
35
|
+
"muted": "#484f58",
|
|
36
|
+
"hint": "#8b949e",
|
|
37
|
+
"active": "#e6edf3",
|
|
38
|
+
"heading": "#e6edf3"
|
|
39
|
+
},
|
|
40
|
+
"status": {
|
|
41
|
+
"processing": "#388bfd",
|
|
42
|
+
"pending": "#e6edf3",
|
|
43
|
+
"success": "#56d364",
|
|
44
|
+
"warning": "#e3b341",
|
|
45
|
+
"error": "#ff7b72",
|
|
46
|
+
"skipped": "#8b949e",
|
|
47
|
+
"locked": "#e6edf3",
|
|
48
|
+
"downloading": "#e3b341"
|
|
49
|
+
},
|
|
50
|
+
"field": {
|
|
51
|
+
"normal": "#e6edf3",
|
|
52
|
+
"overridden": "#e3b341",
|
|
53
|
+
"missing": "#8b949e",
|
|
54
|
+
"selected": "#56d364",
|
|
55
|
+
"error": "#ff7b72"
|
|
56
|
+
},
|
|
57
|
+
"confidence": {
|
|
58
|
+
"primary": "#00fbff",
|
|
59
|
+
"high": "#56d364",
|
|
60
|
+
"medium": "#e3b341",
|
|
61
|
+
"low": "#8b949e",
|
|
62
|
+
"veryLow": "#ff7b72"
|
|
63
|
+
},
|
|
64
|
+
"diff": {
|
|
65
|
+
"base": "#8b949e",
|
|
66
|
+
"changed": "#39c5cf",
|
|
67
|
+
"modified": "#e3b341"
|
|
68
|
+
},
|
|
69
|
+
"action": {
|
|
70
|
+
"primary": "#e3b341",
|
|
71
|
+
"destructive": "#ff7b72",
|
|
72
|
+
"neutral": "#8b949e"
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{
|
|
2
|
+
"palette": {
|
|
3
|
+
"blue": "#0969da",
|
|
4
|
+
"cyan": "#1b7c83",
|
|
5
|
+
"red": "#cf222e",
|
|
6
|
+
"green": "#1a7f37",
|
|
7
|
+
"yellow": "#9a6700",
|
|
8
|
+
"orange": "#bc4c00",
|
|
9
|
+
"purple": "#8250df",
|
|
10
|
+
"pink": "#bf3989",
|
|
11
|
+
"white": "#ffffff",
|
|
12
|
+
"gray": "#57606a",
|
|
13
|
+
"grayDark": "#24292f"
|
|
14
|
+
},
|
|
15
|
+
"ui": {
|
|
16
|
+
"background": "#ffffff",
|
|
17
|
+
"rowBackground": "#f6f8fa",
|
|
18
|
+
"rowActiveDimmedBackground": "#d0d7de",
|
|
19
|
+
"rowActiveBackground": "#b0b0b0",
|
|
20
|
+
"border": "#1b7c83",
|
|
21
|
+
"separator": "#1b7c83",
|
|
22
|
+
"selection": "#0969da",
|
|
23
|
+
"tabActive": "#0969da",
|
|
24
|
+
"tabInactive": "#57606a",
|
|
25
|
+
"panelTitle": "#24292f",
|
|
26
|
+
"progressFill": "#1a7f37",
|
|
27
|
+
"progressEmpty": "#d0d7de",
|
|
28
|
+
"modalBorder": "#1b7c83",
|
|
29
|
+
"focusIndicator": "#0969da",
|
|
30
|
+
"dimText": "#d0d7de"
|
|
31
|
+
},
|
|
32
|
+
"text": {
|
|
33
|
+
"primary": "#24292f",
|
|
34
|
+
"secondary": "#57606a",
|
|
35
|
+
"muted": "#d0d7de",
|
|
36
|
+
"hint": "#57606a",
|
|
37
|
+
"active": "#24292f",
|
|
38
|
+
"heading": "#24292f"
|
|
39
|
+
},
|
|
40
|
+
"status": {
|
|
41
|
+
"processing": "#0550ae",
|
|
42
|
+
"pending": "#24292f",
|
|
43
|
+
"success": "#1a7f37",
|
|
44
|
+
"warning": "#9a6700",
|
|
45
|
+
"error": "#cf222e",
|
|
46
|
+
"skipped": "#57606a",
|
|
47
|
+
"locked": "#24292f",
|
|
48
|
+
"downloading": "#9a6700"
|
|
49
|
+
},
|
|
50
|
+
"field": {
|
|
51
|
+
"normal": "#24292f",
|
|
52
|
+
"overridden": "#9a6700",
|
|
53
|
+
"missing": "#57606a",
|
|
54
|
+
"selected": "#1a7f37",
|
|
55
|
+
"error": "#cf222e"
|
|
56
|
+
},
|
|
57
|
+
"confidence": {
|
|
58
|
+
"primary": "#007f81",
|
|
59
|
+
"high": "#1a7f37",
|
|
60
|
+
"medium": "#9a6700",
|
|
61
|
+
"low": "#57606a",
|
|
62
|
+
"veryLow": "#cf222e"
|
|
63
|
+
},
|
|
64
|
+
"diff": {
|
|
65
|
+
"base": "#57606a",
|
|
66
|
+
"changed": "#1b7c83",
|
|
67
|
+
"modified": "#9a6700"
|
|
68
|
+
},
|
|
69
|
+
"action": {
|
|
70
|
+
"primary": "#9a6700",
|
|
71
|
+
"destructive": "#cf222e",
|
|
72
|
+
"neutral": "#57606a"
|
|
73
|
+
}
|
|
74
|
+
}
|