movizone 1.0.1 → 1.0.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 +125 -49
- package/index.ts +6 -6
- package/package.json +14 -4
package/README.md
CHANGED
|
@@ -1,47 +1,72 @@
|
|
|
1
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="https://img.shields.io/npm/v/movizone?color=magenta&style=flat-square" alt="npm version" />
|
|
3
|
+
<img src="https://img.shields.io/npm/l/movizone?style=flat-square" alt="license" />
|
|
4
|
+
<img src="https://img.shields.io/github/actions/workflow/status/alilibx/movizone/ci.yml?style=flat-square&label=CI" alt="CI" />
|
|
5
|
+
<img src="https://img.shields.io/badge/runtime-Bun-f472b6?style=flat-square" alt="Bun" />
|
|
6
|
+
<img src="https://img.shields.io/badge/73k%2B-movies-cyan?style=flat-square" alt="Movies" />
|
|
7
|
+
</p>
|
|
2
8
|
|
|
3
|
-
|
|
9
|
+
# Movizone
|
|
4
10
|
|
|
5
|
-
|
|
11
|
+
A beautiful terminal UI for browsing, searching, and downloading movies. Fuzzy search handles your typos, and WebTorrent downloads run right in the terminal — no external torrent client needed.
|
|
6
12
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
+
```
|
|
14
|
+
╔═══════════════════════════════════════════════════════════════════════════╗
|
|
15
|
+
║ ║
|
|
16
|
+
║ ███╗ ███╗ ██████╗ ██╗ ██╗██╗███████╗ ██████╗ ███╗ ██╗███████╗ ║
|
|
17
|
+
║ ████╗ ████║██╔═══██╗██║ ██║██║╚══███╔╝██╔═══██╗████╗ ██║██╔════╝ ║
|
|
18
|
+
║ ██╔████╔██║██║ ██║██║ ██║██║ ███╔╝ ██║ ██║██╔██╗ ██║█████╗ ║
|
|
19
|
+
║ ██║╚██╔╝██║██║ ██║╚██╗ ██╔╝██║ ███╔╝ ██║ ██║██║╚██╗██║██╔══╝ ║
|
|
20
|
+
║ ██║ ╚═╝ ██║╚██████╔╝ ╚████╔╝ ██║███████╗╚██████╔╝██║ ╚████║███████╗ ║
|
|
21
|
+
║ ╚═╝ ╚═╝ ╚═════╝ ╚═══╝ ╚═╝╚══════╝ ╚═════╝ ╚═╝ ╚═══╝╚══════╝ ║
|
|
22
|
+
║ Movie Explorer ║
|
|
23
|
+
║ ║
|
|
24
|
+
╚═══════════════════════════════════════════════════════════════════════════╝
|
|
25
|
+
```
|
|
13
26
|
|
|
14
|
-
##
|
|
27
|
+
## Features
|
|
15
28
|
|
|
16
|
-
-
|
|
29
|
+
- **Fuzzy search** — handles typos like `zootobia` → Zootopia, `incpetion` → Inception
|
|
30
|
+
- **In-terminal downloads** — WebTorrent with live progress bar, speed, ETA, and peer count
|
|
31
|
+
- **Rich TUI** — gradient ASCII header, boxed panels, color-coded tables, rating bars
|
|
32
|
+
- **Browse** — sort by trending, rating, seeds, year, or date added with genre filters
|
|
33
|
+
- **Paginated results** — navigate pages of 20 movies at a time
|
|
34
|
+
- **Movie details** — rating bar, runtime, genres, synopsis, trailer link, full torrent table
|
|
35
|
+
- **Copy magnet links** — to clipboard for use in external clients
|
|
36
|
+
- **Similar movies** — discover related films from any movie detail view
|
|
17
37
|
|
|
18
38
|
## Install
|
|
19
39
|
|
|
20
40
|
```bash
|
|
21
|
-
#
|
|
22
|
-
|
|
23
|
-
cd movizon
|
|
24
|
-
bun install
|
|
41
|
+
# Run instantly (no install)
|
|
42
|
+
npx movizone
|
|
25
43
|
|
|
26
|
-
#
|
|
27
|
-
bun
|
|
44
|
+
# Or with Bun
|
|
45
|
+
bun x movizone
|
|
28
46
|
```
|
|
29
47
|
|
|
30
|
-
|
|
48
|
+
Install globally:
|
|
31
49
|
|
|
32
50
|
```bash
|
|
33
|
-
|
|
51
|
+
npm install -g movizone
|
|
52
|
+
# or
|
|
53
|
+
bun install -g movizone
|
|
34
54
|
```
|
|
35
55
|
|
|
36
|
-
|
|
56
|
+
### From source
|
|
37
57
|
|
|
58
|
+
```bash
|
|
59
|
+
git clone https://github.com/alilibx/movizone.git
|
|
60
|
+
cd movizone
|
|
61
|
+
bun install
|
|
62
|
+
bun run index.ts
|
|
38
63
|
```
|
|
39
|
-
$ movizon
|
|
40
64
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
65
|
+
## Usage
|
|
66
|
+
|
|
67
|
+
### Main menu
|
|
44
68
|
|
|
69
|
+
```
|
|
45
70
|
? What do you want to do?
|
|
46
71
|
> Search movies
|
|
47
72
|
Browse movies
|
|
@@ -52,53 +77,104 @@ $ movizon
|
|
|
52
77
|
|
|
53
78
|
### Search
|
|
54
79
|
|
|
55
|
-
|
|
80
|
+
Fuzzy search corrects typos automatically — it tries transpositions, similar-character substitutions, and per-word corrections in parallel:
|
|
56
81
|
|
|
57
82
|
```
|
|
58
|
-
? Search movies:
|
|
83
|
+
? Search movies: incpetion
|
|
84
|
+
|
|
85
|
+
┌──────────────────────────────────────────────────────────────────────────┐
|
|
86
|
+
│ MOVIZONE Search: "incpetion" · 8 found │
|
|
87
|
+
└──────────────────────────────────────────────────────────────────────────┘
|
|
88
|
+
┌─────┬────────────────────────────────┬───────┬─────────┬─────────┬────────┬──────────────────────┐
|
|
89
|
+
│ # │ Title │ Year │ Rating │ Quality │ Seeds │ Genre │
|
|
90
|
+
├─────┼────────────────────────────────┼───────┼─────────┼─────────┼────────┼──────────────────────┤
|
|
91
|
+
│ 1 │ Inception │ 2010 │ ★ 8.8 │ 2160p │ ↑120 │ Action, Sci-Fi │
|
|
92
|
+
│ 2 │ Interception │ 2009 │ ★ 5.3 │ 1080p │ ↑12 │ Drama, Thriller │
|
|
93
|
+
│ ... │
|
|
94
|
+
└─────┴────────────────────────────────┴───────┴─────────┴─────────┴────────┴──────────────────────┘
|
|
95
|
+
```
|
|
59
96
|
|
|
60
|
-
|
|
97
|
+
### Movie details
|
|
61
98
|
|
|
62
|
-
|
|
63
|
-
|
|
99
|
+
```
|
|
100
|
+
╔══════════════════════════════════════════════════════╗
|
|
101
|
+
║ Inception (2010) tt1375666 ║
|
|
102
|
+
╚══════════════════════════════════════════════════════╝
|
|
103
|
+
┌──────────────────────┬────────────┬──────────┬──────────────────────────────┐
|
|
104
|
+
│ ★ 8.8 ████████░░ │ 2h 28m │ EN │ Action, Adventure, Sci-Fi │
|
|
105
|
+
└──────────────────────┴────────────┴──────────┴──────────────────────────────┘
|
|
106
|
+
Trailer: https://youtube.com/watch?v=...
|
|
107
|
+
|
|
108
|
+
╭─ Synopsis ────────────────────────────────────────────╮
|
|
109
|
+
│ A thief who steals corporate secrets through the use │
|
|
110
|
+
│ of dream-sharing technology is given the inverse task │
|
|
111
|
+
│ of planting an idea into the mind of a C.E.O... │
|
|
112
|
+
╰───────────────────────────────────────────────────────╯
|
|
113
|
+
|
|
114
|
+
╭─ Torrents ────────────────────────────────────────────╮
|
|
115
|
+
│ Quality │ Type │ Size │ Seeds │ Peers │ Codec │
|
|
116
|
+
│ 720p │ web │ 1.1 GB │ ↑85 │ ↓12 │ x264 │
|
|
117
|
+
│ 1080p │ blu │ 1.9 GB │ ↑120 │ ↓25 │ x264 │
|
|
118
|
+
│ 2160p │ web │ 4.2 GB │ ↑42 │ ↓8 │ x265 │
|
|
119
|
+
╰───────────────────────────────────────────────────────╯
|
|
120
|
+
|
|
121
|
+
? Action:
|
|
122
|
+
> Download 1080p (1.9 GB, ↑120)
|
|
123
|
+
Download 2160p (4.2 GB, ↑42)
|
|
124
|
+
Copy magnet link
|
|
125
|
+
Similar movies
|
|
126
|
+
Back
|
|
64
127
|
```
|
|
65
128
|
|
|
66
129
|
### Download
|
|
67
130
|
|
|
68
|
-
|
|
131
|
+
Downloads run in-terminal via WebTorrent with a live-updating progress panel:
|
|
69
132
|
|
|
70
133
|
```
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
134
|
+
╭─ Download ────────────────────────────────────────────╮
|
|
135
|
+
│ Title: Inception │
|
|
136
|
+
│ Quality: 1080p blu │
|
|
137
|
+
│ Size: 1.9 GB │
|
|
138
|
+
│ Codec: x264 2.0ch │
|
|
139
|
+
│ Save to: ~/Downloads/Movizone │
|
|
140
|
+
╰───────────────────────────────────────────────────────╯
|
|
141
|
+
|
|
142
|
+
╭─ Progress ────────────────────────────────────────────╮
|
|
143
|
+
│ ████████████████████░░░░░░░░░░░░░░░░░░░░ 40.2% │
|
|
144
|
+
│ Downloaded 756MB/1.9GB Speed 2.3MB/s ETA 8m 15 │
|
|
145
|
+
╰───────────────────────────────────────────────────────╯
|
|
78
146
|
```
|
|
79
147
|
|
|
80
148
|
### Browse
|
|
81
149
|
|
|
82
|
-
Filter by genre and sort order:
|
|
150
|
+
Filter by genre and sort order, with pagination:
|
|
83
151
|
|
|
84
152
|
```
|
|
85
153
|
? Sort by: Rating
|
|
86
154
|
? Genre: Sci-Fi
|
|
87
155
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
156
|
+
┌──────────────────────────────────────────────────────────────────────────┐
|
|
157
|
+
│ MOVIZONE Browse · Page 1 · 4,521 total │
|
|
158
|
+
└──────────────────────────────────────────────────────────────────────────┘
|
|
159
|
+
┌─────┬────────────────────────────────┬───────┬─────────┬─────────┬────────┬──────────────────────┐
|
|
160
|
+
│ 1 │ Inception │ 2010 │ ★ 8.8 │ 2160p │ ↑120 │ Action, Sci-Fi │
|
|
161
|
+
│ 2 │ Interstellar │ 2014 │ ★ 8.7 │ 2160p │ ↑100 │ Adventure, Sci-Fi │
|
|
162
|
+
│ 3 │ The Matrix │ 1999 │ ★ 8.7 │ 1080p │ ↑100 │ Action, Sci-Fi │
|
|
163
|
+
│ ... │
|
|
164
|
+
└─────┴────────────────────────────────┴───────┴─────────┴─────────┴────────┴──────────────────────┘
|
|
94
165
|
```
|
|
95
166
|
|
|
96
|
-
## How
|
|
167
|
+
## How it works
|
|
168
|
+
|
|
169
|
+
- **Movie data** — YTS API with 73,000+ movies and torrent metadata
|
|
170
|
+
- **Fuzzy search** — edit-distance-1 corrections (transposes, similar-char substitutions) tried in parallel batches, with Levenshtein scoring to rank results
|
|
171
|
+
- **Downloads** — [WebTorrent](https://github.com/webtorrent/webtorrent) for peer-to-peer downloading, runs in a Node.js subprocess with JSON IPC back to the TUI
|
|
172
|
+
- **TUI** — [chalk](https://github.com/chalk/chalk), [boxen](https://github.com/sindresorhus/boxen), [cli-table3](https://github.com/cli-table/cli-table3), [figlet](https://github.com/patorjk/figlet.js), [gradient-string](https://github.com/bokub/gradient-string), [inquirer](https://github.com/SBoudrias/Inquirer.js)
|
|
173
|
+
- Movies saved to `~/Downloads/Movizone/`
|
|
174
|
+
|
|
175
|
+
## Requirements
|
|
97
176
|
|
|
98
|
-
-
|
|
99
|
-
- **Fuzzy search** uses edit-distance-1 corrections (transposes, similar-char substitutions) tried in parallel, with Levenshtein scoring to rank results
|
|
100
|
-
- **Downloads** use [WebTorrent](https://github.com/webtorrent/webtorrent) for peer-to-peer downloading directly in Node/Bun
|
|
101
|
-
- Movies are saved to `~/Downloads/Movizon/`
|
|
177
|
+
- [Bun](https://bun.sh) v1.0+ (or Node.js 18+ via npx)
|
|
102
178
|
|
|
103
179
|
## License
|
|
104
180
|
|
package/index.ts
CHANGED
|
@@ -16,8 +16,8 @@ import { fileURLToPath } from "url";
|
|
|
16
16
|
const movizonGradient = gradient(["#ff00ff", "#00ffff"]);
|
|
17
17
|
|
|
18
18
|
function renderHeader(): string {
|
|
19
|
-
const ascii = figlet.textSync("
|
|
20
|
-
return boxen(movizonGradient.multiline(ascii) + "\n" + chalk.dim(" Movie
|
|
19
|
+
const ascii = figlet.textSync("MOVIZONE", { font: "ANSI Shadow", horizontalLayout: "fitted" });
|
|
20
|
+
return boxen(movizonGradient.multiline(ascii) + "\n" + chalk.dim(" Movie Explorer"), {
|
|
21
21
|
padding: { top: 0, bottom: 0, left: 2, right: 2 },
|
|
22
22
|
borderStyle: "double",
|
|
23
23
|
borderColor: "magenta",
|
|
@@ -63,7 +63,7 @@ function navFooter(): string {
|
|
|
63
63
|
// --- API Layer ---
|
|
64
64
|
|
|
65
65
|
const API_BASE = "https://yts.torrentbay.st/api/v2";
|
|
66
|
-
const DOWNLOAD_DIR = join(homedir(), "Downloads", "
|
|
66
|
+
const DOWNLOAD_DIR = join(homedir(), "Downloads", "Movizone");
|
|
67
67
|
|
|
68
68
|
const TRACKERS = [
|
|
69
69
|
"udp://open.demonii.com:1337/announce",
|
|
@@ -685,7 +685,7 @@ async function searchAction(): Promise<void> {
|
|
|
685
685
|
}
|
|
686
686
|
|
|
687
687
|
console.log();
|
|
688
|
-
console.log(contextBar(chalk.bold.magenta("
|
|
688
|
+
console.log(contextBar(chalk.bold.magenta("MOVIZONE"), chalk.dim(`Search: "${query}" · ${movies.length} found`)));
|
|
689
689
|
displayMovieTable(movies);
|
|
690
690
|
console.log(navFooter());
|
|
691
691
|
|
|
@@ -789,7 +789,7 @@ async function showSimilar(movie: Movie): Promise<void> {
|
|
|
789
789
|
}
|
|
790
790
|
|
|
791
791
|
console.log();
|
|
792
|
-
console.log(contextBar(chalk.bold.magenta("
|
|
792
|
+
console.log(contextBar(chalk.bold.magenta("MOVIZONE"), chalk.dim(`Similar to "${movie.title}"`)));
|
|
793
793
|
displayMovieTable(res.data.movies);
|
|
794
794
|
console.log(navFooter());
|
|
795
795
|
|
|
@@ -835,7 +835,7 @@ async function paginatedList(
|
|
|
835
835
|
}
|
|
836
836
|
|
|
837
837
|
console.log();
|
|
838
|
-
console.log(contextBar(chalk.bold.magenta("
|
|
838
|
+
console.log(contextBar(chalk.bold.magenta("MOVIZONE"), chalk.dim(`${label} · Page ${page} · ${res.data.movie_count.toLocaleString()} total`)));
|
|
839
839
|
displayMovieTable(res.data.movies);
|
|
840
840
|
console.log(navFooter());
|
|
841
841
|
|
package/package.json
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "movizone",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "Movie torrent explorer CLI with fuzzy search and in-terminal downloads",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
|
-
"
|
|
7
|
+
"movizone": "./index.ts"
|
|
8
8
|
},
|
|
9
|
-
"files": [
|
|
9
|
+
"files": [
|
|
10
|
+
"index.ts",
|
|
11
|
+
"download.mjs",
|
|
12
|
+
"README.md"
|
|
13
|
+
],
|
|
10
14
|
"scripts": {
|
|
11
15
|
"start": "bun run index.ts",
|
|
12
16
|
"typecheck": "bun x tsc --noEmit"
|
|
@@ -17,7 +21,13 @@
|
|
|
17
21
|
"cli",
|
|
18
22
|
"download",
|
|
19
23
|
"search",
|
|
20
|
-
"webtorrent"
|
|
24
|
+
"webtorrent",
|
|
25
|
+
"tui",
|
|
26
|
+
"terminal",
|
|
27
|
+
"streaming",
|
|
28
|
+
"magnet",
|
|
29
|
+
"yts",
|
|
30
|
+
"bun"
|
|
21
31
|
],
|
|
22
32
|
"license": "MIT",
|
|
23
33
|
"dependencies": {
|