riplex 0.6.0__tar.gz → 0.6.2__tar.gz
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.
- riplex-0.6.2/.gitignore +12 -0
- {riplex-0.6.0/src/riplex.egg-info → riplex-0.6.2}/PKG-INFO +20 -18
- {riplex-0.6.0 → riplex-0.6.2}/README.md +18 -16
- {riplex-0.6.0 → riplex-0.6.2}/docs/changelog.md +15 -0
- riplex-0.6.2/docs/getting-started/installation.md +330 -0
- {riplex-0.6.0 → riplex-0.6.2}/issues/planned-features.md +0 -45
- {riplex-0.6.0 → riplex-0.6.2}/pyproject.toml +1 -1
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex/disc/provider.py +62 -5
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex/matcher.py +110 -11
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex/organizer.py +9 -1
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex/scanner.py +7 -0
- {riplex-0.6.0 → riplex-0.6.2/src/riplex.egg-info}/PKG-INFO +20 -18
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex.egg-info/SOURCES.txt +0 -2
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex.egg-info/requires.txt +1 -1
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex_app/screens/disc_detection.py +3 -3
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex_app/screens/folder_picker.py +13 -2
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex_app/screens/release.py +3 -3
- {riplex-0.6.0 → riplex-0.6.2}/tests/test_matcher.py +227 -0
- {riplex-0.6.0 → riplex-0.6.2}/tests/test_organizer.py +36 -0
- riplex-0.6.0/.gitignore +0 -0
- riplex-0.6.0/REFACTOR_PLAN.md +0 -65
- riplex-0.6.0/docs/getting-started/installation.md +0 -217
- riplex-0.6.0/issues/cross-disc-dvdcompare-matching.md +0 -35
- {riplex-0.6.0 → riplex-0.6.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/.github/agents/riplex.agent.md +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/.github/copilot-instructions.md +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/.github/workflows/publish.yml +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/.github/workflows/release.yml +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/.vscode/settings.json +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/CONTRIBUTORS.md +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/LICENSE +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/docs/architecture.md +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/docs/getting-started/configuration.md +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/docs/guide/lookup.md +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/docs/guide/orchestrate.md +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/docs/guide/organize.md +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/docs/guide/workflow.md +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/docs/index.md +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/docs/naming-rules.md +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/docs/reference/cli.md +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/docs/troubleshooting.md +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/issues/orchestrate-dvdcompare-fallback.md +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/mkdocs.yml +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/setup.cfg +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex/__init__.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex/cache.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex/config.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex/dedup.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex/detect.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex/disc/__init__.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex/disc/analysis.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex/disc/makemkv.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex/formatter.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex/lookup.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex/manifest.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex/metadata/__init__.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex/metadata/planner.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex/metadata/provider.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex/metadata/sources/__init__.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex/metadata/sources/tmdb.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex/models.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex/normalize.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex/snapshot.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex/splitter.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex/tagger.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex/title.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex/ui.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex.egg-info/dependency_links.txt +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex.egg-info/entry_points.txt +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex.egg-info/top_level.txt +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex_app/__init__.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex_app/bug_report.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex_app/main.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex_app/screens/__init__.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex_app/screens/disc_overview.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex_app/screens/disc_swap.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex_app/screens/done.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex_app/screens/metadata.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex_app/screens/orchestrate_done.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex_app/screens/organize_done.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex_app/screens/organize_preview.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex_app/screens/progress.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex_app/screens/selection.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex_app/screens/update.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex_app/screens/welcome.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex_app/updater.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex_cli/__init__.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex_cli/commands/__init__.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex_cli/commands/lookup.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex_cli/commands/orchestrate.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex_cli/commands/organize.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex_cli/commands/rip.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex_cli/commands/setup.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex_cli/formatting.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/src/riplex_cli/main.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/tests/__init__.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/tests/fixtures/chernobyl_disc1.json +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/tests/fixtures/makemkvcon_frozen_planet_ii_d2.txt +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/tests/fixtures/makemkvcon_list.txt +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/tests/snapshots/Batman Begins.snapshot.json +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/tests/snapshots/Blade Runner (Blu-ray 4k).snapshot.json +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/tests/snapshots/Blade Runner The Final Cut.snapshot.json +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/tests/snapshots/Seven Worlds One Planet.snapshot.json +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/tests/snapshots/The Dark Knight Rises.snapshot.json +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/tests/snapshots/The Dark Knight.snapshot.json +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/tests/snapshots/Waterworld.snapshot.json +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/tests/test_cache.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/tests/test_cli_utils.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/tests/test_config.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/tests/test_dedup.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/tests/test_detect.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/tests/test_disc_analysis.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/tests/test_disc_fixtures.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/tests/test_disc_provider.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/tests/test_formatter.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/tests/test_makemkv.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/tests/test_normalize.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/tests/test_planner.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/tests/test_rip_guide.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/tests/test_scanner.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/tests/test_snapshot.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/tests/test_splitter.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/tests/test_tagger.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/tests/test_ui.py +0 -0
- {riplex-0.6.0 → riplex-0.6.2}/tests/test_updater.py +0 -0
riplex-0.6.2/.gitignore
ADDED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: riplex
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.2
|
|
4
4
|
Summary: Automates the tedious manual work around MakeMKV: figuring out what to rip, which MKV files are actually what, and organizing everything into Plex-compatible folder structures.
|
|
5
5
|
License: MIT
|
|
6
6
|
Requires-Python: >=3.11
|
|
7
7
|
Description-Content-Type: text/markdown
|
|
8
8
|
License-File: LICENSE
|
|
9
9
|
Requires-Dist: httpx>=0.27
|
|
10
|
-
Requires-Dist: dvdcompare-scraper>=0.1.
|
|
10
|
+
Requires-Dist: dvdcompare-scraper>=0.1.12
|
|
11
11
|
Requires-Dist: platformdirs>=4.0
|
|
12
12
|
Provides-Extra: dev
|
|
13
13
|
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
@@ -19,7 +19,7 @@ Dynamic: license-file
|
|
|
19
19
|
|
|
20
20
|
# riplex
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
Automatically organizes MKV files from physical disc collections into Plex-compatible folder structures with the right names, the right folders, and no manual work.
|
|
23
23
|
|
|
24
24
|
## Desktop App
|
|
25
25
|
|
|
@@ -35,20 +35,17 @@ No Python install required. The app walks you through setup and provides buttons
|
|
|
35
35
|
|
|
36
36
|
## Why?
|
|
37
37
|
|
|
38
|
-
MakeMKV
|
|
38
|
+
After using MakeMKV to back up a disc, you're left with a pile of generically-named files (`title_t00.mkv`, `title_t01.mkv`, ...) and no idea which is the main film, which are featurettes, which are duplicates, and which is the play-all compilation you didn't need. For a multi-disc TV series, you're looking at hours of manual effort: reading disc cases, Googling runtimes, renaming files one by one, and building the exact folder hierarchy Plex demands.
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
We identified the best sources of disc metadata (TMDb for canonical titles and episode info, dvdcompare.net for per-disc content breakdowns) and automated the entire pipeline. riplex pulls that data, figures out what's on every disc in a release, tells you exactly which MakeMKV titles to rip (and which to skip), then matches, renames, deduplicates, splits, and organizes everything into the correct Plex structure automatically.
|
|
40
|
+
riplex solves this by pulling metadata from TMDb (canonical titles, years, episode info) and [dvdcompare.net](https://www.dvdcompare.net) (per-disc content breakdowns — featurettes, deleted scenes, runtimes), then automatically classifying, deduplicating, matching, renaming, and organizing everything into the correct Plex structure.
|
|
43
41
|
|
|
44
42
|
## What it does
|
|
45
43
|
|
|
46
44
|
| Command | What it does |
|
|
47
45
|
|---|---|
|
|
48
|
-
| `orchestrate` | Full pipeline:
|
|
49
|
-
| `
|
|
50
|
-
| `
|
|
51
|
-
| `lookup` | Preview disc contents and recommended rip strategy before touching MakeMKV. |
|
|
46
|
+
| `orchestrate` | Full pipeline: detect a disc, look up metadata, select titles, hand off to MakeMKV for disc backup, and organize into Plex folders. Multi-disc with swap prompts. |
|
|
47
|
+
| `organize` | Scan existing MKV files, deduplicate, match to metadata by runtime, move into Plex layout. |
|
|
48
|
+
| `lookup` | Preview disc contents and see what's on each disc before doing anything. |
|
|
52
49
|
|
|
53
50
|
## Quick Start
|
|
54
51
|
|
|
@@ -68,7 +65,7 @@ This walks you through creating your config file (TMDb API key, output paths) an
|
|
|
68
65
|
|
|
69
66
|
For detailed installation instructions (including how to install Python if you don't have it), see the [Getting Started guide](docs/getting-started/installation.md).
|
|
70
67
|
|
|
71
|
-
###
|
|
68
|
+
### Orchestrate (full pipeline)
|
|
72
69
|
|
|
73
70
|
Insert a disc and run:
|
|
74
71
|
|
|
@@ -76,9 +73,9 @@ Insert a disc and run:
|
|
|
76
73
|
riplex orchestrate --execute
|
|
77
74
|
```
|
|
78
75
|
|
|
79
|
-
riplex auto-detects the title from the volume label, looks up
|
|
76
|
+
riplex auto-detects the title from the volume label, looks up metadata, shows you what's on each disc, hands off to MakeMKV for disc backup, and organizes everything into Plex folders.
|
|
80
77
|
|
|
81
|
-
###
|
|
78
|
+
### Unattended mode
|
|
82
79
|
|
|
83
80
|
```bash
|
|
84
81
|
riplex orchestrate --execute --auto
|
|
@@ -86,12 +83,12 @@ riplex orchestrate --execute --auto
|
|
|
86
83
|
|
|
87
84
|
Skips all prompts, uses best-guess defaults. Good for scripted or scheduled runs.
|
|
88
85
|
|
|
89
|
-
### Organize existing
|
|
86
|
+
### Organize existing files
|
|
90
87
|
|
|
91
|
-
Already
|
|
88
|
+
Already have MKV files from MakeMKV? Point `organize` at the folder:
|
|
92
89
|
|
|
93
90
|
```bash
|
|
94
|
-
riplex organize path/to/
|
|
91
|
+
riplex organize path/to/MyMovie --execute
|
|
95
92
|
```
|
|
96
93
|
|
|
97
94
|
## Requirements
|
|
@@ -108,9 +105,14 @@ riplex organize path/to/rips/Oppenheimer --execute
|
|
|
108
105
|
|
|
109
106
|
riplex works on Windows, macOS, and Linux. All path handling, caching, and config locations follow OS conventions automatically.
|
|
110
107
|
|
|
108
|
+
## Data Sources
|
|
109
|
+
|
|
110
|
+
- **[TMDb](https://www.themoviedb.org/)**: Canonical movie and TV show metadata (titles, years, episodes, runtimes). Requires a free API key.
|
|
111
|
+
- **[dvdcompare.net](https://www.dvdcompare.net)**: Per-disc content breakdowns for physical media releases (featurettes, deleted scenes, interviews, runtimes, play-all groupings). An invaluable resource for the disc collecting community.
|
|
112
|
+
|
|
111
113
|
## Related Projects
|
|
112
114
|
|
|
113
|
-
- **[dvdcompare-scraper](https://github.com/AnyCredit5518/dvdcompare-scraper)**:
|
|
115
|
+
- **[dvdcompare-scraper](https://github.com/AnyCredit5518/dvdcompare-scraper)**: Python client for looking up disc content metadata from [dvdcompare.net](https://www.dvdcompare.net). Powers riplex's disc content lookup. Contributions welcome.
|
|
114
116
|
|
|
115
117
|
## Documentation
|
|
116
118
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# riplex
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Automatically organizes MKV files from physical disc collections into Plex-compatible folder structures with the right names, the right folders, and no manual work.
|
|
4
4
|
|
|
5
5
|
## Desktop App
|
|
6
6
|
|
|
@@ -16,20 +16,17 @@ No Python install required. The app walks you through setup and provides buttons
|
|
|
16
16
|
|
|
17
17
|
## Why?
|
|
18
18
|
|
|
19
|
-
MakeMKV
|
|
19
|
+
After using MakeMKV to back up a disc, you're left with a pile of generically-named files (`title_t00.mkv`, `title_t01.mkv`, ...) and no idea which is the main film, which are featurettes, which are duplicates, and which is the play-all compilation you didn't need. For a multi-disc TV series, you're looking at hours of manual effort: reading disc cases, Googling runtimes, renaming files one by one, and building the exact folder hierarchy Plex demands.
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
We identified the best sources of disc metadata (TMDb for canonical titles and episode info, dvdcompare.net for per-disc content breakdowns) and automated the entire pipeline. riplex pulls that data, figures out what's on every disc in a release, tells you exactly which MakeMKV titles to rip (and which to skip), then matches, renames, deduplicates, splits, and organizes everything into the correct Plex structure automatically.
|
|
21
|
+
riplex solves this by pulling metadata from TMDb (canonical titles, years, episode info) and [dvdcompare.net](https://www.dvdcompare.net) (per-disc content breakdowns — featurettes, deleted scenes, runtimes), then automatically classifying, deduplicating, matching, renaming, and organizing everything into the correct Plex structure.
|
|
24
22
|
|
|
25
23
|
## What it does
|
|
26
24
|
|
|
27
25
|
| Command | What it does |
|
|
28
26
|
|---|---|
|
|
29
|
-
| `orchestrate` | Full pipeline:
|
|
30
|
-
| `
|
|
31
|
-
| `
|
|
32
|
-
| `lookup` | Preview disc contents and recommended rip strategy before touching MakeMKV. |
|
|
27
|
+
| `orchestrate` | Full pipeline: detect a disc, look up metadata, select titles, hand off to MakeMKV for disc backup, and organize into Plex folders. Multi-disc with swap prompts. |
|
|
28
|
+
| `organize` | Scan existing MKV files, deduplicate, match to metadata by runtime, move into Plex layout. |
|
|
29
|
+
| `lookup` | Preview disc contents and see what's on each disc before doing anything. |
|
|
33
30
|
|
|
34
31
|
## Quick Start
|
|
35
32
|
|
|
@@ -49,7 +46,7 @@ This walks you through creating your config file (TMDb API key, output paths) an
|
|
|
49
46
|
|
|
50
47
|
For detailed installation instructions (including how to install Python if you don't have it), see the [Getting Started guide](docs/getting-started/installation.md).
|
|
51
48
|
|
|
52
|
-
###
|
|
49
|
+
### Orchestrate (full pipeline)
|
|
53
50
|
|
|
54
51
|
Insert a disc and run:
|
|
55
52
|
|
|
@@ -57,9 +54,9 @@ Insert a disc and run:
|
|
|
57
54
|
riplex orchestrate --execute
|
|
58
55
|
```
|
|
59
56
|
|
|
60
|
-
riplex auto-detects the title from the volume label, looks up
|
|
57
|
+
riplex auto-detects the title from the volume label, looks up metadata, shows you what's on each disc, hands off to MakeMKV for disc backup, and organizes everything into Plex folders.
|
|
61
58
|
|
|
62
|
-
###
|
|
59
|
+
### Unattended mode
|
|
63
60
|
|
|
64
61
|
```bash
|
|
65
62
|
riplex orchestrate --execute --auto
|
|
@@ -67,12 +64,12 @@ riplex orchestrate --execute --auto
|
|
|
67
64
|
|
|
68
65
|
Skips all prompts, uses best-guess defaults. Good for scripted or scheduled runs.
|
|
69
66
|
|
|
70
|
-
### Organize existing
|
|
67
|
+
### Organize existing files
|
|
71
68
|
|
|
72
|
-
Already
|
|
69
|
+
Already have MKV files from MakeMKV? Point `organize` at the folder:
|
|
73
70
|
|
|
74
71
|
```bash
|
|
75
|
-
riplex organize path/to/
|
|
72
|
+
riplex organize path/to/MyMovie --execute
|
|
76
73
|
```
|
|
77
74
|
|
|
78
75
|
## Requirements
|
|
@@ -89,9 +86,14 @@ riplex organize path/to/rips/Oppenheimer --execute
|
|
|
89
86
|
|
|
90
87
|
riplex works on Windows, macOS, and Linux. All path handling, caching, and config locations follow OS conventions automatically.
|
|
91
88
|
|
|
89
|
+
## Data Sources
|
|
90
|
+
|
|
91
|
+
- **[TMDb](https://www.themoviedb.org/)**: Canonical movie and TV show metadata (titles, years, episodes, runtimes). Requires a free API key.
|
|
92
|
+
- **[dvdcompare.net](https://www.dvdcompare.net)**: Per-disc content breakdowns for physical media releases (featurettes, deleted scenes, interviews, runtimes, play-all groupings). An invaluable resource for the disc collecting community.
|
|
93
|
+
|
|
92
94
|
## Related Projects
|
|
93
95
|
|
|
94
|
-
- **[dvdcompare-scraper](https://github.com/AnyCredit5518/dvdcompare-scraper)**:
|
|
96
|
+
- **[dvdcompare-scraper](https://github.com/AnyCredit5518/dvdcompare-scraper)**: Python client for looking up disc content metadata from [dvdcompare.net](https://www.dvdcompare.net). Powers riplex's disc content lookup. Contributions welcome.
|
|
95
97
|
|
|
96
98
|
## Documentation
|
|
97
99
|
|
|
@@ -4,6 +4,21 @@ All notable changes to the riplex documentation are recorded here.
|
|
|
4
4
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/).
|
|
6
6
|
|
|
7
|
+
## 2026-05-09
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
|
|
11
|
+
- Installation guide: complete restructure for clarity. Install riplex first, then setup, then manual tool installation as a fallback. Each install option now covers all platforms (Windows, macOS, Linux, immutable Linux distros).
|
|
12
|
+
- Installation guide: Windows executable instructions rewritten with step-by-step PATH setup, SmartScreen guidance, and separate GUI vs CLI paths.
|
|
13
|
+
- Installation guide: macOS CLI now installs to `/usr/local/bin/riplex` with proper rename.
|
|
14
|
+
- Installation guide: Option C (from source) split into numbered steps with separate Windows and macOS/Linux commands.
|
|
15
|
+
- Installation guide: tkinter/folder picker note now covers both macOS and Linux.
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
- Installation guide: Linux (Bazzite, Fedora Silverblue, immutable distros) sections for pipx install and manual tool installation, including Flatpak wrapper script for MKVToolNix.
|
|
20
|
+
- Installation guide: MakeMKV registration pulled into its own subsection.
|
|
21
|
+
|
|
7
22
|
## 2026-05-08
|
|
8
23
|
|
|
9
24
|
### Added
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
# Installation
|
|
2
|
+
|
|
3
|
+
## Installing riplex
|
|
4
|
+
|
|
5
|
+
There are three ways to install riplex:
|
|
6
|
+
|
|
7
|
+
- **[Pre-built executables](#option-a-pre-built-executables)** - easiest, no Python needed
|
|
8
|
+
- **[pipx](#option-b-install-with-pipx-recommended)** - recommended for Python users
|
|
9
|
+
- **[From source](#option-c-install-from-source)** - for developers
|
|
10
|
+
|
|
11
|
+
### Option A: Pre-built executables
|
|
12
|
+
|
|
13
|
+
Download the latest release for your platform from the
|
|
14
|
+
[GitHub Releases page](https://github.com/AnyCredit5518/riplex/releases).
|
|
15
|
+
|
|
16
|
+
#### Windows
|
|
17
|
+
|
|
18
|
+
**GUI only (easiest):**
|
|
19
|
+
|
|
20
|
+
1. Download `riplex-ui-windows.exe`
|
|
21
|
+
2. Move it wherever you keep apps (e.g. `C:\Program Files\riplex\`)
|
|
22
|
+
3. Double-click to run. Windows SmartScreen may warn you because the app
|
|
23
|
+
isn't code-signed -- click **More info** then **Run anyway**.
|
|
24
|
+
4. Optionally, right-click the `.exe` and select **Create shortcut** to add
|
|
25
|
+
it to your desktop or Start menu.
|
|
26
|
+
|
|
27
|
+
**CLI (for terminal users):**
|
|
28
|
+
|
|
29
|
+
1. Download `riplex-windows.exe`
|
|
30
|
+
2. Rename it to `riplex.exe`
|
|
31
|
+
3. Move it to a folder of your choice (e.g. `C:\Program Files\riplex\`)
|
|
32
|
+
4. Add that folder to your system PATH:
|
|
33
|
+
- Open **Settings** > **System** > **About** > **Advanced system settings**
|
|
34
|
+
- Click **Environment Variables**
|
|
35
|
+
- Under **User variables**, select **Path** and click **Edit**
|
|
36
|
+
- Click **New** and paste the folder path (e.g. `C:\Program Files\riplex\`)
|
|
37
|
+
- Click **OK** on all dialogs
|
|
38
|
+
5. Open a **new** terminal and run `riplex setup`
|
|
39
|
+
|
|
40
|
+
> [!TIP]
|
|
41
|
+
> You can install both. The GUI includes built-in setup, so you don't need
|
|
42
|
+
> the CLI unless you prefer working in a terminal.
|
|
43
|
+
|
|
44
|
+
#### macOS (Apple Silicon only)
|
|
45
|
+
|
|
46
|
+
> **Intel Mac?** Pre-built binaries aren't available for Intel Macs. GitHub
|
|
47
|
+
> [deprecated their Intel macOS build runners](https://github.blog/changelog/2024-09-16-github-actions-macos-13-larger-runner-image-brownout-dates/).
|
|
48
|
+
> Use [Option B: Install with pipx](#option-b-install-with-pipx-recommended)
|
|
49
|
+
> instead, which works on any Mac.
|
|
50
|
+
|
|
51
|
+
**GUI:**
|
|
52
|
+
|
|
53
|
+
1. Download `riplex-ui-macos.zip`
|
|
54
|
+
2. Unzip it and move `riplex-ui.app` to `/Applications/`
|
|
55
|
+
3. **Allow the app to open.** macOS blocks apps from unidentified developers.
|
|
56
|
+
The first time you open it, you'll see a warning -- do **not** click
|
|
57
|
+
"Move to Trash." Instead:
|
|
58
|
+
|
|
59
|
+
- **Right-click** (or Control-click) `riplex-ui.app`, choose **Open**,
|
|
60
|
+
then click **Open** in the dialog. macOS remembers this and won't ask
|
|
61
|
+
again.
|
|
62
|
+
|
|
63
|
+
- If that doesn't work, open Terminal and run:
|
|
64
|
+
```
|
|
65
|
+
xattr -dr com.apple.quarantine /Applications/riplex-ui.app
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**CLI:**
|
|
69
|
+
|
|
70
|
+
1. Download `riplex-macos`
|
|
71
|
+
2. Open Terminal and run:
|
|
72
|
+
```
|
|
73
|
+
mv ~/Downloads/riplex-macos /usr/local/bin/riplex
|
|
74
|
+
chmod +x /usr/local/bin/riplex
|
|
75
|
+
xattr -dr com.apple.quarantine /usr/local/bin/riplex
|
|
76
|
+
```
|
|
77
|
+
3. Run `riplex setup`
|
|
78
|
+
|
|
79
|
+
#### Linux
|
|
80
|
+
|
|
81
|
+
Pre-built executables are not currently available for Linux. Use
|
|
82
|
+
[Option B: Install with pipx](#option-b-install-with-pipx-recommended)
|
|
83
|
+
instead.
|
|
84
|
+
|
|
85
|
+
### Option B: Install with pipx (recommended)
|
|
86
|
+
|
|
87
|
+
[pipx](https://pipx.pypa.io/) installs Python apps in isolated environments
|
|
88
|
+
but makes their commands available globally. No venv activation needed --
|
|
89
|
+
`riplex` and `riplex-ui` just work from any terminal.
|
|
90
|
+
|
|
91
|
+
#### 1. Install Python and pipx
|
|
92
|
+
|
|
93
|
+
**Windows:**
|
|
94
|
+
|
|
95
|
+
Download Python from https://www.python.org/downloads/ and run the installer.
|
|
96
|
+
**Check "Add Python to PATH"** at the bottom of the first screen. Then open
|
|
97
|
+
a terminal and run:
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
pip install pipx
|
|
101
|
+
pipx ensurepath
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
**macOS:**
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
brew install python pipx
|
|
108
|
+
pipx ensurepath
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
**Linux (Debian, Ubuntu, Mint, Pop!_OS, etc.):**
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
sudo apt install python3 pipx
|
|
115
|
+
pipx ensurepath
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
**Linux (Bazzite, Fedora Silverblue, and other immutable distros):**
|
|
119
|
+
|
|
120
|
+
Python and pipx aren't available via `apt` on immutable distros. Layer them
|
|
121
|
+
with `rpm-ostree`:
|
|
122
|
+
|
|
123
|
+
```
|
|
124
|
+
rpm-ostree install python3 python3-pip
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Then reboot and run:
|
|
128
|
+
|
|
129
|
+
```
|
|
130
|
+
pip install --user pipx
|
|
131
|
+
pipx ensurepath
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Restart your terminal after `ensurepath` so the new PATH takes effect.
|
|
135
|
+
|
|
136
|
+
#### 2. Install riplex
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
pipx install "riplex[gui]"
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
This installs both `riplex` (CLI) and `riplex-ui` (GUI) as globally available
|
|
143
|
+
commands.
|
|
144
|
+
|
|
145
|
+
> [!TIP]
|
|
146
|
+
> To install the CLI only (no GUI), run `pipx install riplex` instead.
|
|
147
|
+
|
|
148
|
+
#### Updating
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
pipx upgrade riplex
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### Option C: Install from source
|
|
155
|
+
|
|
156
|
+
For developers who want to contribute or run the latest unreleased code.
|
|
157
|
+
|
|
158
|
+
#### 1. Clone the repository
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
git clone https://github.com/AnyCredit5518/riplex.git
|
|
162
|
+
cd riplex
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
#### 2. Create and activate a virtual environment
|
|
166
|
+
|
|
167
|
+
**Windows:**
|
|
168
|
+
|
|
169
|
+
```
|
|
170
|
+
py -m venv .venv
|
|
171
|
+
.venv\Scripts\activate
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
**macOS / Linux:**
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
python3.12 -m venv .venv
|
|
178
|
+
source .venv/bin/activate
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
#### 3. Install in development mode
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
pip install -e ".[dev,gui]"
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
> [!NOTE]
|
|
188
|
+
> With a venv, `riplex` and `riplex-ui` only work while the venv is
|
|
189
|
+
> activated. For a global install that works from any terminal, use
|
|
190
|
+
> [pipx](#option-b-install-with-pipx-recommended) instead.
|
|
191
|
+
|
|
192
|
+
> [!TIP]
|
|
193
|
+
> The repo's `.vscode/settings.json` points VS Code at `.venv`
|
|
194
|
+
> automatically, so the integrated terminal activates it on open.
|
|
195
|
+
|
|
196
|
+
#### macOS SSL fix (Homebrew Python only)
|
|
197
|
+
|
|
198
|
+
If you installed Python via Homebrew and `riplex-ui` crashes on first launch
|
|
199
|
+
with an SSL certificate error, run this one-time fix:
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
CERT=$(python3.12 -c "import certifi; print(certifi.where())")
|
|
203
|
+
echo "export SSL_CERT_FILE=\"$CERT\"" >> .venv/bin/activate
|
|
204
|
+
echo "export REQUESTS_CA_BUNDLE=\"$CERT\"" >> .venv/bin/activate
|
|
205
|
+
source .venv/bin/activate
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
#### GUI folder picker (tkinter)
|
|
209
|
+
|
|
210
|
+
The browse buttons in the GUI use tkinter, which some platforms don't include
|
|
211
|
+
by default. Without it, the browse buttons show a hint to type the path
|
|
212
|
+
manually instead.
|
|
213
|
+
|
|
214
|
+
- **macOS (Homebrew):** `brew install python-tk@3.12`
|
|
215
|
+
- **Linux (Debian/Ubuntu):** `sudo apt install python3-tk`
|
|
216
|
+
|
|
217
|
+
## Setup
|
|
218
|
+
|
|
219
|
+
After installing, run the setup wizard. You can do this from the CLI:
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
riplex setup
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
Or just launch the GUI -- it checks for missing tools on startup and walks you
|
|
226
|
+
through setup automatically.
|
|
227
|
+
|
|
228
|
+
The setup wizard will:
|
|
229
|
+
|
|
230
|
+
1. Ask for your TMDb API key (free at https://www.themoviedb.org/settings/api)
|
|
231
|
+
|
|
232
|
+
> [!TIP]
|
|
233
|
+
> TMDb asks for an app name and URL when you request a key. You can just
|
|
234
|
+
> enter "riplex" as the app name and `https://github.com/AnyCredit5518/riplex`
|
|
235
|
+
> as the URL. The rest of the form can be filled with basic info -- it
|
|
236
|
+
> doesn't need to be a real business. The key is approved instantly.
|
|
237
|
+
|
|
238
|
+
2. Ask where your Plex library and MakeMKV rip folders are
|
|
239
|
+
3. Check for required tools (MakeMKV, ffprobe, mkvmerge, mkvpropedit)
|
|
240
|
+
4. Offer to install any missing tools automatically (via winget on Windows,
|
|
241
|
+
Homebrew on macOS, or apt on Debian/Ubuntu-based Linux)
|
|
242
|
+
|
|
243
|
+
If you skip setup, it runs automatically the first time you use any command.
|
|
244
|
+
|
|
245
|
+
### Verify
|
|
246
|
+
|
|
247
|
+
```bash
|
|
248
|
+
riplex --help
|
|
249
|
+
riplex-ui
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
Both commands should work from any terminal.
|
|
253
|
+
|
|
254
|
+
## Manual tool installation
|
|
255
|
+
|
|
256
|
+
Most users don't need this section -- the setup wizard installs tools
|
|
257
|
+
automatically on Windows, macOS (with Homebrew), and Debian/Ubuntu-based
|
|
258
|
+
Linux. If the wizard couldn't install a tool for your platform, or you prefer
|
|
259
|
+
to install manually, follow the instructions below.
|
|
260
|
+
|
|
261
|
+
riplex requires these three tools:
|
|
262
|
+
|
|
263
|
+
| Tool | Purpose |
|
|
264
|
+
|---|---|
|
|
265
|
+
| [MakeMKV](https://www.makemkv.com/) | Disc reading and ripping (`makemkvcon`) |
|
|
266
|
+
| [FFmpeg](https://ffmpeg.org/) | MKV metadata probing (`ffprobe`) |
|
|
267
|
+
| [MKVToolNix](https://mkvtoolnix.download/) | MKV splitting and tagging (`mkvmerge`, `mkvpropedit`) |
|
|
268
|
+
|
|
269
|
+
### Windows
|
|
270
|
+
|
|
271
|
+
```
|
|
272
|
+
winget install GuinpinSoft.MakeMKV
|
|
273
|
+
winget install Gyan.FFmpeg
|
|
274
|
+
winget install MoritzBunkus.MKVToolNix
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
Or download installers from the links above. These installers add the tools to
|
|
278
|
+
your PATH automatically.
|
|
279
|
+
|
|
280
|
+
### macOS
|
|
281
|
+
|
|
282
|
+
```
|
|
283
|
+
brew install ffmpeg mkvtoolnix
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
MakeMKV must be downloaded from https://www.makemkv.com/ since it isn't in
|
|
287
|
+
Homebrew. The app bundle includes `makemkvcon` automatically.
|
|
288
|
+
|
|
289
|
+
### Linux (Debian, Ubuntu, Pop!_OS, Mint, etc.)
|
|
290
|
+
|
|
291
|
+
```
|
|
292
|
+
sudo apt install ffmpeg mkvtoolnix
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
MakeMKV must be downloaded from https://www.makemkv.com/ or built from
|
|
296
|
+
source. See the [MakeMKV forum](https://forum.makemkv.com/forum/viewtopic.php?t=224)
|
|
297
|
+
for instructions.
|
|
298
|
+
|
|
299
|
+
### Linux (Bazzite, Fedora Silverblue, and other immutable distros)
|
|
300
|
+
|
|
301
|
+
On immutable distros, `apt` isn't available. Use `rpm-ostree` to install
|
|
302
|
+
packages:
|
|
303
|
+
|
|
304
|
+
```
|
|
305
|
+
rpm-ostree install ffmpeg mkvtoolnix
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
Then reboot for the changes to take effect.
|
|
309
|
+
|
|
310
|
+
MakeMKV must be downloaded from https://www.makemkv.com/.
|
|
311
|
+
|
|
312
|
+
> [!WARNING]
|
|
313
|
+
> If you installed MKVToolNix as a Flatpak, `mkvmerge` won't be on your
|
|
314
|
+
> system PATH even though the GUI works fine. Either layer it with
|
|
315
|
+
> `rpm-ostree install mkvtoolnix` (recommended) or create a wrapper script:
|
|
316
|
+
>
|
|
317
|
+
> ```
|
|
318
|
+
> sudo tee /usr/local/bin/mkvmerge << 'EOF'
|
|
319
|
+
> #!/bin/sh
|
|
320
|
+
> exec flatpak run --command=mkvmerge org.bunkus.mkvtoolnix-gui "$@"
|
|
321
|
+
> EOF
|
|
322
|
+
> sudo chmod +x /usr/local/bin/mkvmerge
|
|
323
|
+
> ```
|
|
324
|
+
|
|
325
|
+
### MakeMKV registration
|
|
326
|
+
|
|
327
|
+
MakeMKV requires a registration key. A free beta key is available at
|
|
328
|
+
https://forum.makemkv.com/forum/viewtopic.php?f=5&t=1053 and must be entered
|
|
329
|
+
in MakeMKV (Help > Register) before `makemkvcon` will work. The beta key is
|
|
330
|
+
updated periodically.
|
|
@@ -21,38 +21,6 @@ episode collapsing.
|
|
|
21
21
|
override for users with separate libraries.
|
|
22
22
|
|
|
23
23
|
|
|
24
|
-
## Orchestrate Flow (GUI)
|
|
25
|
-
|
|
26
|
-
The GUI has rip and organize flows. The orchestrate flow (multi-disc pipeline
|
|
27
|
-
with disc-swap prompts) is not yet implemented.
|
|
28
|
-
|
|
29
|
-
### Key pieces needed
|
|
30
|
-
|
|
31
|
-
- Disc swap prompt screen
|
|
32
|
-
- Session state tracking across disc swaps (accumulated rip results, metadata)
|
|
33
|
-
- Disc number auto-detection after each swap
|
|
34
|
-
- Error recovery (retry/skip failed disc)
|
|
35
|
-
- Cancel mid-flow and organize what's been ripped so far
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
## Bug Report Submission
|
|
39
|
-
|
|
40
|
-
### Problem
|
|
41
|
-
|
|
42
|
-
Snapshot files for debugging are mixed in with media files and have
|
|
43
|
-
inconsistent formats. Users must hunt for debug artifacts across multiple
|
|
44
|
-
locations when filing bug reports.
|
|
45
|
-
|
|
46
|
-
### Plan
|
|
47
|
-
|
|
48
|
-
1. Move all debug artifacts into a `_riplex/` subfolder (Plex-ignored).
|
|
49
|
-
2. Consistent v2 snapshot envelope format with type discriminator.
|
|
50
|
-
3. GUI writes same snapshots as CLI.
|
|
51
|
-
4. "Report a Bug" button in GUI: opens pre-filled GitHub issue, copies
|
|
52
|
-
debug folder path to clipboard.
|
|
53
|
-
5. `.github/ISSUE_TEMPLATE/bug_report.yml` for structured reports.
|
|
54
|
-
|
|
55
|
-
|
|
56
24
|
## Interactive Lookup Command
|
|
57
25
|
|
|
58
26
|
`riplex lookup` currently auto-picks the first TMDb match and default
|
|
@@ -77,17 +45,4 @@ tracks when ripping, not just the default/English track.
|
|
|
77
45
|
if the user explicitly configures preferred languages
|
|
78
46
|
|
|
79
47
|
|
|
80
|
-
## Drop Pre-built Intel macOS Binary
|
|
81
|
-
|
|
82
|
-
The `macos-13` (Intel) CI runner is slow to queue and GitHub is phasing out
|
|
83
|
-
Intel Mac hardware. Intel Macs are a shrinking minority of users.
|
|
84
|
-
|
|
85
|
-
### Plan
|
|
86
48
|
|
|
87
|
-
- Remove the `macos-13` / `x86_64` matrix entry from `release.yml`
|
|
88
|
-
- Remove `riplex-macos-x86_64` and `riplex-ui-macos-x86_64.zip` from the
|
|
89
|
-
release step
|
|
90
|
-
- Update `updater.py` to stop looking for arch-specific assets (only arm64)
|
|
91
|
-
- Update installation docs: macOS section offers only the ARM build; Intel
|
|
92
|
-
Mac users are directed to install from source (venv + `pip install -e`)
|
|
93
|
-
- Update README download table accordingly
|