riplex 0.7.1__tar.gz → 0.7.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.7.1 → riplex-0.7.2}/.github/agents/riplex.agent.md +10 -2
- riplex-0.7.2/PKG-INFO +96 -0
- riplex-0.7.2/README.md +77 -0
- {riplex-0.7.1 → riplex-0.7.2}/docs/changelog.md +19 -2
- {riplex-0.7.1/docs/guide → riplex-0.7.2/docs/cli-guide}/workflow.md +5 -2
- {riplex-0.7.1 → riplex-0.7.2}/docs/getting-started/installation.md +12 -3
- riplex-0.7.2/docs/gui-guide/gui-walkthrough.md +90 -0
- {riplex-0.7.1 → riplex-0.7.2}/docs/index.md +6 -3
- {riplex-0.7.1 → riplex-0.7.2}/mkdocs.yml +7 -5
- riplex-0.7.2/screenshots/0_Rip_Flow_BTTF.gif +0 -0
- riplex-0.7.2/screenshots/1_Welcome_Screen.png +0 -0
- riplex-0.7.2/screenshots/2_Disc_Detection_BTTF.png +0 -0
- riplex-0.7.2/screenshots/3_Metadata_Lookup_BTTF.png +0 -0
- riplex-0.7.2/screenshots/4_Disc_Release_BTTF.png +0 -0
- riplex-0.7.2/screenshots/5_Multi_Disc_Overview_BTTF.png +0 -0
- riplex-0.7.2/screenshots/5_Select_Title_to_RIP_BTTF.png +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex/title.py +7 -2
- riplex-0.7.2/src/riplex.egg-info/PKG-INFO +96 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex.egg-info/SOURCES.txt +12 -4
- {riplex-0.7.1 → riplex-0.7.2}/tests/test_cli_utils.py +6 -0
- riplex-0.7.1/PKG-INFO +0 -128
- riplex-0.7.1/README.md +0 -109
- riplex-0.7.1/src/riplex.egg-info/PKG-INFO +0 -128
- {riplex-0.7.1 → riplex-0.7.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/.github/ISSUE_TEMPLATE/crash_report.yml +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/.github/copilot-instructions.md +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/.github/workflows/publish.yml +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/.github/workflows/release.yml +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/.gitignore +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/.vscode/settings.json +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/CONTRIBUTORS.md +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/LICENSE +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/docs/architecture.md +0 -0
- {riplex-0.7.1/docs/guide → riplex-0.7.2/docs/cli-guide}/lookup.md +0 -0
- {riplex-0.7.1/docs/guide → riplex-0.7.2/docs/cli-guide}/orchestrate.md +0 -0
- {riplex-0.7.1/docs/guide → riplex-0.7.2/docs/cli-guide}/organize.md +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/docs/getting-started/configuration.md +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/docs/naming-rules.md +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/docs/reference/cli.md +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/docs/troubleshooting.md +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/issues/debug-artifacts-consolidation.md +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/issues/orchestrate-dvdcompare-fallback.md +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/issues/planned-features.md +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/pyproject.toml +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/setup.cfg +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex/__init__.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex/cache.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex/config.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex/dedup.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex/detect.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex/disc/__init__.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex/disc/analysis.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex/disc/makemkv.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex/disc/provider.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex/formatter.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex/lookup.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex/manifest.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex/matcher.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex/metadata/__init__.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex/metadata/planner.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex/metadata/provider.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex/metadata/sources/__init__.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex/metadata/sources/tmdb.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex/models.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex/normalize.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex/organizer.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex/scanner.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex/snapshot.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex/splitter.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex/tagger.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex/ui.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex/updater.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex.egg-info/dependency_links.txt +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex.egg-info/entry_points.txt +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex.egg-info/requires.txt +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex.egg-info/top_level.txt +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex_app/__init__.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex_app/bug_report.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex_app/crash_dump.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex_app/keep_awake.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex_app/main.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex_app/screens/__init__.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex_app/screens/disc_detection.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex_app/screens/disc_overview.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex_app/screens/disc_swap.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex_app/screens/done.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex_app/screens/folder_picker.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex_app/screens/metadata.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex_app/screens/orchestrate_done.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex_app/screens/organize_done.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex_app/screens/organize_preview.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex_app/screens/progress.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex_app/screens/release.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex_app/screens/selection.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex_app/screens/update.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex_app/screens/welcome.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex_cli/__init__.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex_cli/commands/__init__.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex_cli/commands/lookup.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex_cli/commands/orchestrate.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex_cli/commands/organize.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex_cli/commands/rip.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex_cli/commands/setup.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex_cli/formatting.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/src/riplex_cli/main.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/tests/__init__.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/tests/fixtures/chernobyl_disc1.json +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/tests/fixtures/makemkvcon_frozen_planet_ii_d2.txt +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/tests/fixtures/makemkvcon_list.txt +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/tests/snapshots/Batman Begins.snapshot.json +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/tests/snapshots/Blade Runner (Blu-ray 4k).snapshot.json +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/tests/snapshots/Blade Runner The Final Cut.snapshot.json +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/tests/snapshots/Seven Worlds One Planet.snapshot.json +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/tests/snapshots/The Dark Knight Rises.snapshot.json +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/tests/snapshots/The Dark Knight.snapshot.json +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/tests/snapshots/Waterworld.snapshot.json +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/tests/test_cache.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/tests/test_config.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/tests/test_dedup.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/tests/test_detect.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/tests/test_disc_analysis.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/tests/test_disc_detection_screen.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/tests/test_disc_fixtures.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/tests/test_disc_provider.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/tests/test_formatter.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/tests/test_makemkv.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/tests/test_matcher.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/tests/test_normalize.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/tests/test_organizer.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/tests/test_planner.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/tests/test_rip_guide.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/tests/test_scanner.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/tests/test_snapshot.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/tests/test_splitter.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/tests/test_tagger.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/tests/test_ui.py +0 -0
- {riplex-0.7.1 → riplex-0.7.2}/tests/test_updater.py +0 -0
|
@@ -65,7 +65,8 @@ docs/
|
|
|
65
65
|
naming-rules.md # Plex naming conventions
|
|
66
66
|
changelog.md # Documentation changelog (Keep a Changelog format)
|
|
67
67
|
getting-started/ # Installation, configuration
|
|
68
|
-
guide/
|
|
68
|
+
gui-guide/ # Desktop app walkthroughs
|
|
69
|
+
cli-guide/ # Command-by-command workflow guides
|
|
69
70
|
reference/ # CLI reference
|
|
70
71
|
```
|
|
71
72
|
|
|
@@ -162,9 +163,16 @@ Docs live in `docs/` and are referenced from README.md.
|
|
|
162
163
|
- `docs/naming-rules.md`: Plex naming conventions and folder layout rules
|
|
163
164
|
- `docs/changelog.md`: Documentation changelog (update when docs change)
|
|
164
165
|
- `docs/getting-started/`: Installation and configuration guides
|
|
165
|
-
- `docs/guide/`:
|
|
166
|
+
- `docs/gui-guide/`: Desktop app walkthroughs
|
|
167
|
+
- `docs/cli-guide/`: Command-by-command workflow walkthroughs
|
|
166
168
|
- `docs/reference/cli.md`: Complete CLI option reference
|
|
167
169
|
|
|
170
|
+
*** Delete File: c:\Users\asher\Projects\anycredit5518\riplex\docs\guide\gui-walkthrough.md
|
|
171
|
+
*** Delete File: c:\Users\asher\Projects\anycredit5518\riplex\docs\guide\workflow.md
|
|
172
|
+
*** Delete File: c:\Users\asher\Projects\anycredit5518\riplex\docs\guide\orchestrate.md
|
|
173
|
+
*** Delete File: c:\Users\asher\Projects\anycredit5518\riplex\docs\guide\lookup.md
|
|
174
|
+
*** Delete File: c:\Users\asher\Projects\anycredit5518\riplex\docs\guide\organize.md
|
|
175
|
+
|
|
168
176
|
### Documentation rules
|
|
169
177
|
|
|
170
178
|
- When making significant changes (new features, renamed modules, changed behavior), update the relevant docs
|
riplex-0.7.2/PKG-INFO
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: riplex
|
|
3
|
+
Version: 0.7.2
|
|
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
|
+
License: MIT
|
|
6
|
+
Requires-Python: >=3.11
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
License-File: LICENSE
|
|
9
|
+
Requires-Dist: httpx>=0.27
|
|
10
|
+
Requires-Dist: dvdcompare-scraper>=0.1.15
|
|
11
|
+
Requires-Dist: platformdirs>=4.0
|
|
12
|
+
Provides-Extra: dev
|
|
13
|
+
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
14
|
+
Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
|
|
15
|
+
Requires-Dist: respx>=0.21; extra == "dev"
|
|
16
|
+
Provides-Extra: gui
|
|
17
|
+
Requires-Dist: flet<0.86,>=0.84; extra == "gui"
|
|
18
|
+
Dynamic: license-file
|
|
19
|
+
|
|
20
|
+
# riplex
|
|
21
|
+
|
|
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
|
+
|
|
24
|
+
riplex includes both a desktop app for guided ripping and a full CLI for terminal-first and automated workflows.
|
|
25
|
+
|
|
26
|
+
<p align="center">
|
|
27
|
+
<img src="screenshots/0_Rip_Flow_BTTF.gif" alt="Rip flow demo" width="800">
|
|
28
|
+
</p>
|
|
29
|
+
|
|
30
|
+
## Why?
|
|
31
|
+
|
|
32
|
+
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.
|
|
33
|
+
|
|
34
|
+
riplex solves this by pulling metadata from TMDb (canonical titles, years, episode info) and [dvdcompare.net](https://www.dvdcompare.net) (per-disc content breakdowns including featurettes, deleted scenes, runtimes), then automatically classifying, deduplicating, matching, renaming, and organizing everything into the correct Plex structure.
|
|
35
|
+
|
|
36
|
+
## Get started
|
|
37
|
+
|
|
38
|
+
Start with the [Getting Started guide](docs/getting-started/installation.md). It covers all three install paths:
|
|
39
|
+
|
|
40
|
+
- **Pre-built app**: fastest way to try riplex. Download links and platform-specific notes are in the [installation guide](docs/getting-started/installation.md#option-a-pre-built-executables).
|
|
41
|
+
- **pipx**: recommended if you have Python or do not mind installing it. See [Option B](docs/getting-started/installation.md#option-b-install-with-pipx-recommended).
|
|
42
|
+
- **From source**: for developers and unsupported binary platforms. See [Option C](docs/getting-started/installation.md#option-c-install-from-source).
|
|
43
|
+
|
|
44
|
+
If you just want the desktop app right now, the latest binaries are on the [Releases page](https://github.com/AnyCredit5518/riplex/releases/latest). For the guided desktop flow after install, see the [GUI Walkthrough](docs/gui-guide/gui-walkthrough.md).
|
|
45
|
+
|
|
46
|
+
If you prefer the command line, riplex also ships a full CLI with `lookup`, `rip`, `organize`, and `orchestrate` workflows. For the end-to-end terminal flow, see the [CLI Workflow guide](docs/cli-guide/workflow.md).
|
|
47
|
+
|
|
48
|
+
After installing:
|
|
49
|
+
|
|
50
|
+
1. Run setup. The GUI walks you through it on first launch, or you can use [`riplex setup`](docs/getting-started/installation.md#setup).
|
|
51
|
+
2. If you want to see the GUI step by step, read the [GUI Walkthrough](docs/gui-guide/gui-walkthrough.md).
|
|
52
|
+
3. Follow the [CLI Workflow guide](docs/cli-guide/workflow.md) for the end-to-end flow.
|
|
53
|
+
4. If you prefer the terminal, use the [CLI reference](docs/reference/cli.md) for command details.
|
|
54
|
+
|
|
55
|
+
## What it looks like
|
|
56
|
+
|
|
57
|
+
Instead of leaving you to sort through a wall of raw MakeMKV titles, riplex helps you understand what is actually on the disc and choose the titles worth ripping. It surfaces likely matches, highlights junk and duplicates, and helps you avoid play-all traps.
|
|
58
|
+
|
|
59
|
+

|
|
60
|
+
|
|
61
|
+
More screenshots:
|
|
62
|
+
[welcome](screenshots/1_Welcome_Screen.png),
|
|
63
|
+
[disc detection](screenshots/2_Disc_Detection_BTTF.png),
|
|
64
|
+
[metadata lookup](screenshots/3_Metadata_Lookup_BTTF.png),
|
|
65
|
+
[release picker](screenshots/4_Disc_Release_BTTF.png),
|
|
66
|
+
[disc overview](screenshots/5_Multi_Disc_Overview_BTTF.png).
|
|
67
|
+
|
|
68
|
+
> [!NOTE]
|
|
69
|
+
> riplex currently handles one film (or one TV show) per session. Multi-film box sets that bundle separate films onto separate discs (e.g. a trilogy in one box) need to be ripped one film at a time.
|
|
70
|
+
|
|
71
|
+
## Requirements
|
|
72
|
+
|
|
73
|
+
riplex uses MakeMKV, ffmpeg, and MKVToolNix under the hood. The setup wizard installs them for you on Windows (winget), macOS (Homebrew), and Debian/Ubuntu Linux (apt). On other platforms see [the installation guide](docs/getting-started/installation.md).
|
|
74
|
+
|
|
75
|
+
You'll also need a free [TMDb API key](https://www.themoviedb.org/settings/api). The wizard prompts you for it.
|
|
76
|
+
|
|
77
|
+
## Data sources
|
|
78
|
+
|
|
79
|
+
- **[TMDb](https://www.themoviedb.org/)**: canonical movie and TV metadata (titles, years, episodes, runtimes)
|
|
80
|
+
- **[dvdcompare.net](https://www.dvdcompare.net)**: per-disc content breakdowns (featurettes, deleted scenes, play-all groupings, runtimes). An invaluable community resource.
|
|
81
|
+
|
|
82
|
+
## Related projects
|
|
83
|
+
|
|
84
|
+
- **[dvdcompare-scraper](https://github.com/AnyCredit5518/dvdcompare-scraper)**: Python client for dvdcompare.net. Powers riplex's disc lookup. Contributions welcome.
|
|
85
|
+
|
|
86
|
+
## Documentation
|
|
87
|
+
|
|
88
|
+
- [Getting started](docs/getting-started/installation.md): installation, configuration
|
|
89
|
+
- [GUI walkthrough](docs/gui-guide/gui-walkthrough.md): the main desktop flow, screen by screen
|
|
90
|
+
- [CLI workflow](docs/cli-guide/workflow.md): end-to-end terminal workflows
|
|
91
|
+
- [CLI reference](docs/reference/cli.md): every command and flag
|
|
92
|
+
- [Architecture](docs/architecture.md): design, data flow, project structure
|
|
93
|
+
|
|
94
|
+
## License
|
|
95
|
+
|
|
96
|
+
MIT
|
riplex-0.7.2/README.md
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# riplex
|
|
2
|
+
|
|
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
|
+
|
|
5
|
+
riplex includes both a desktop app for guided ripping and a full CLI for terminal-first and automated workflows.
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<img src="screenshots/0_Rip_Flow_BTTF.gif" alt="Rip flow demo" width="800">
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
## Why?
|
|
12
|
+
|
|
13
|
+
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.
|
|
14
|
+
|
|
15
|
+
riplex solves this by pulling metadata from TMDb (canonical titles, years, episode info) and [dvdcompare.net](https://www.dvdcompare.net) (per-disc content breakdowns including featurettes, deleted scenes, runtimes), then automatically classifying, deduplicating, matching, renaming, and organizing everything into the correct Plex structure.
|
|
16
|
+
|
|
17
|
+
## Get started
|
|
18
|
+
|
|
19
|
+
Start with the [Getting Started guide](docs/getting-started/installation.md). It covers all three install paths:
|
|
20
|
+
|
|
21
|
+
- **Pre-built app**: fastest way to try riplex. Download links and platform-specific notes are in the [installation guide](docs/getting-started/installation.md#option-a-pre-built-executables).
|
|
22
|
+
- **pipx**: recommended if you have Python or do not mind installing it. See [Option B](docs/getting-started/installation.md#option-b-install-with-pipx-recommended).
|
|
23
|
+
- **From source**: for developers and unsupported binary platforms. See [Option C](docs/getting-started/installation.md#option-c-install-from-source).
|
|
24
|
+
|
|
25
|
+
If you just want the desktop app right now, the latest binaries are on the [Releases page](https://github.com/AnyCredit5518/riplex/releases/latest). For the guided desktop flow after install, see the [GUI Walkthrough](docs/gui-guide/gui-walkthrough.md).
|
|
26
|
+
|
|
27
|
+
If you prefer the command line, riplex also ships a full CLI with `lookup`, `rip`, `organize`, and `orchestrate` workflows. For the end-to-end terminal flow, see the [CLI Workflow guide](docs/cli-guide/workflow.md).
|
|
28
|
+
|
|
29
|
+
After installing:
|
|
30
|
+
|
|
31
|
+
1. Run setup. The GUI walks you through it on first launch, or you can use [`riplex setup`](docs/getting-started/installation.md#setup).
|
|
32
|
+
2. If you want to see the GUI step by step, read the [GUI Walkthrough](docs/gui-guide/gui-walkthrough.md).
|
|
33
|
+
3. Follow the [CLI Workflow guide](docs/cli-guide/workflow.md) for the end-to-end flow.
|
|
34
|
+
4. If you prefer the terminal, use the [CLI reference](docs/reference/cli.md) for command details.
|
|
35
|
+
|
|
36
|
+
## What it looks like
|
|
37
|
+
|
|
38
|
+
Instead of leaving you to sort through a wall of raw MakeMKV titles, riplex helps you understand what is actually on the disc and choose the titles worth ripping. It surfaces likely matches, highlights junk and duplicates, and helps you avoid play-all traps.
|
|
39
|
+
|
|
40
|
+

|
|
41
|
+
|
|
42
|
+
More screenshots:
|
|
43
|
+
[welcome](screenshots/1_Welcome_Screen.png),
|
|
44
|
+
[disc detection](screenshots/2_Disc_Detection_BTTF.png),
|
|
45
|
+
[metadata lookup](screenshots/3_Metadata_Lookup_BTTF.png),
|
|
46
|
+
[release picker](screenshots/4_Disc_Release_BTTF.png),
|
|
47
|
+
[disc overview](screenshots/5_Multi_Disc_Overview_BTTF.png).
|
|
48
|
+
|
|
49
|
+
> [!NOTE]
|
|
50
|
+
> riplex currently handles one film (or one TV show) per session. Multi-film box sets that bundle separate films onto separate discs (e.g. a trilogy in one box) need to be ripped one film at a time.
|
|
51
|
+
|
|
52
|
+
## Requirements
|
|
53
|
+
|
|
54
|
+
riplex uses MakeMKV, ffmpeg, and MKVToolNix under the hood. The setup wizard installs them for you on Windows (winget), macOS (Homebrew), and Debian/Ubuntu Linux (apt). On other platforms see [the installation guide](docs/getting-started/installation.md).
|
|
55
|
+
|
|
56
|
+
You'll also need a free [TMDb API key](https://www.themoviedb.org/settings/api). The wizard prompts you for it.
|
|
57
|
+
|
|
58
|
+
## Data sources
|
|
59
|
+
|
|
60
|
+
- **[TMDb](https://www.themoviedb.org/)**: canonical movie and TV metadata (titles, years, episodes, runtimes)
|
|
61
|
+
- **[dvdcompare.net](https://www.dvdcompare.net)**: per-disc content breakdowns (featurettes, deleted scenes, play-all groupings, runtimes). An invaluable community resource.
|
|
62
|
+
|
|
63
|
+
## Related projects
|
|
64
|
+
|
|
65
|
+
- **[dvdcompare-scraper](https://github.com/AnyCredit5518/dvdcompare-scraper)**: Python client for dvdcompare.net. Powers riplex's disc lookup. Contributions welcome.
|
|
66
|
+
|
|
67
|
+
## Documentation
|
|
68
|
+
|
|
69
|
+
- [Getting started](docs/getting-started/installation.md): installation, configuration
|
|
70
|
+
- [GUI walkthrough](docs/gui-guide/gui-walkthrough.md): the main desktop flow, screen by screen
|
|
71
|
+
- [CLI workflow](docs/cli-guide/workflow.md): end-to-end terminal workflows
|
|
72
|
+
- [CLI reference](docs/reference/cli.md): every command and flag
|
|
73
|
+
- [Architecture](docs/architecture.md): design, data flow, project structure
|
|
74
|
+
|
|
75
|
+
## License
|
|
76
|
+
|
|
77
|
+
MIT
|
|
@@ -4,6 +4,23 @@ 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
|
+
## v0.7.2 — 2026-05-17
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- **Auto-detected disc labels with compact season/disc suffixes.** Volume labels such as `Hannibal St01bd1` and `HANNIBAL_S1_BD1` now strip the trailing season/disc marker before TMDb and dvdcompare lookup, so both the GUI and CLI start from the correct base title instead of searching for the raw disc label.
|
|
12
|
+
|
|
13
|
+
## 2026-05-16
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- New GUI walkthrough guide with screenshots for the main desktop flow: welcome, disc detection, metadata lookup, release picker, title selection, and multi-disc overview.
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- Split the user guides into `docs/gui-guide/` and `docs/cli-guide/` so the desktop flow and terminal flow are documented separately.
|
|
22
|
+
- Linked the new GUI walkthrough from the README, installation guide, CLI workflow guide, and docs index so beginners can discover the desktop flow more easily.
|
|
23
|
+
|
|
7
24
|
## v0.7.1 — 2026-05-16
|
|
8
25
|
|
|
9
26
|
### Fixed
|
|
@@ -141,7 +158,7 @@ Summary: organize-time match quality fixes, faster post-rip organize, and a rele
|
|
|
141
158
|
|
|
142
159
|
### Added
|
|
143
160
|
|
|
144
|
-
- Orchestrate guide (`docs/guide/orchestrate.md`): full documentation for the new primary workflow command
|
|
161
|
+
- Orchestrate guide (`docs/cli-guide/orchestrate.md`): full documentation for the new primary workflow command
|
|
145
162
|
- `orchestrate` subcommand in CLI Reference with complete options table
|
|
146
163
|
- `rip` subcommand added to README (features block, usage examples, CLI reference table)
|
|
147
164
|
- `orchestrate` subcommand added to README (features block, usage examples, CLI reference table)
|
|
@@ -159,7 +176,7 @@ Summary: organize-time match quality fixes, faster post-rip organize, and a rele
|
|
|
159
176
|
- Rip-guide output examples updated to use configurable rip output path instead of hardcoded `_MakeMKV`
|
|
160
177
|
- Architecture section updated from 4 modes to 6 modes (added orchestrate, rip)
|
|
161
178
|
- Project structure listings updated to include all current source and test files
|
|
162
|
-
- `docs/guide/workflow.md` updated to recommend orchestrate as the primary workflow
|
|
179
|
+
- `docs/cli-guide/workflow.md` updated to recommend orchestrate as the primary workflow
|
|
163
180
|
- `docs/architecture.md` updated with orchestrate and rip modes and data flows
|
|
164
181
|
- `PLANNED_FEATURES.md` orchestrate section moved to "Recently Implemented"
|
|
165
182
|
- CLI reference tables for organize (added `--snapshot`, `--auto`) and rip-guide (added `--drive`) updated
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
#
|
|
1
|
+
# CLI Workflow
|
|
2
2
|
|
|
3
|
-
This page walks through the recommended end-to-end workflow for ripping a disc set and organizing it into Plex.
|
|
3
|
+
This page walks through the recommended end-to-end command-line workflow for ripping a disc set and organizing it into Plex.
|
|
4
|
+
|
|
5
|
+
If you want to see the desktop app screen by screen first, start with the
|
|
6
|
+
[GUI Walkthrough](../gui-guide/gui-walkthrough.md).
|
|
4
7
|
|
|
5
8
|
## Recommended: Use `orchestrate`
|
|
6
9
|
|
|
@@ -4,9 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
There are three ways to install riplex:
|
|
6
6
|
|
|
7
|
-
- **[Pre-built executables](#option-a-pre-built-executables)**
|
|
8
|
-
|
|
9
|
-
- **[
|
|
7
|
+
- **[Pre-built executables](#option-a-pre-built-executables)** — fastest
|
|
8
|
+
way to try riplex. No Python required, but upgrades mean re-downloading.
|
|
9
|
+
- **[pipx](#option-b-install-with-pipx-recommended)** — recommended.
|
|
10
|
+
Requires Python, but `pipx upgrade riplex` makes staying current effortless.
|
|
11
|
+
- **[From source](#option-c-install-from-source)** — for developers and
|
|
12
|
+
platforms without a pre-built binary (Intel Mac, Linux).
|
|
10
13
|
|
|
11
14
|
### Option A: Pre-built executables
|
|
12
15
|
|
|
@@ -225,6 +228,12 @@ riplex setup
|
|
|
225
228
|
Or just launch the GUI -- it checks for missing tools on startup and walks you
|
|
226
229
|
through setup automatically.
|
|
227
230
|
|
|
231
|
+
If you want to preview the desktop flow before ripping a disc, see the
|
|
232
|
+
[GUI Walkthrough](../gui-guide/gui-walkthrough.md).
|
|
233
|
+
|
|
234
|
+
If you prefer the terminal workflow after setup, see the
|
|
235
|
+
[CLI Workflow guide](../cli-guide/workflow.md).
|
|
236
|
+
|
|
228
237
|
The setup wizard will:
|
|
229
238
|
|
|
230
239
|
1. Ask for your TMDb API key (free at https://www.themoviedb.org/settings/api)
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# GUI Walkthrough
|
|
2
|
+
|
|
3
|
+
This page walks through the main riplex GUI flow using the screenshots in this repo. It is not a screen-by-screen reference manual. The goal is to show what each step is for, what decision you make there, and what happens next.
|
|
4
|
+
|
|
5
|
+
## 1. Welcome
|
|
6
|
+
|
|
7
|
+

|
|
8
|
+
|
|
9
|
+
The Welcome screen checks your setup before you start. If riplex is missing a required tool or configuration value, this is where it tells you.
|
|
10
|
+
|
|
11
|
+
What you do here:
|
|
12
|
+
- confirm that your TMDb key and output paths are configured
|
|
13
|
+
- let riplex install or point to missing tools if needed
|
|
14
|
+
- continue once the environment is ready
|
|
15
|
+
|
|
16
|
+
## 2. Disc detection
|
|
17
|
+
|
|
18
|
+

|
|
19
|
+
|
|
20
|
+
Once a disc is in the drive, riplex detects it and reads the volume label.
|
|
21
|
+
|
|
22
|
+
What you do here:
|
|
23
|
+
- verify that the detected disc is the one you intended to rip
|
|
24
|
+
- if multiple drives are present, choose the correct drive
|
|
25
|
+
- continue once the disc has been read successfully
|
|
26
|
+
|
|
27
|
+
Troubleshooting:
|
|
28
|
+
- if no drive appears, verify that MakeMKV can see the drive and that `makemkvcon` is installed correctly
|
|
29
|
+
- if the detected title is wrong, you can correct it on the next step
|
|
30
|
+
|
|
31
|
+
## 3. Metadata lookup
|
|
32
|
+
|
|
33
|
+

|
|
34
|
+
|
|
35
|
+
riplex uses the disc label as a starting point, then looks up the title on TMDb.
|
|
36
|
+
|
|
37
|
+
What you do here:
|
|
38
|
+
- confirm the detected title if it is already correct
|
|
39
|
+
- edit the search text if the disc label is abbreviated or noisy
|
|
40
|
+
- choose the correct TMDb match if there is more than one possible result
|
|
41
|
+
|
|
42
|
+
## 4. Release picker
|
|
43
|
+
|
|
44
|
+

|
|
45
|
+
|
|
46
|
+
After the TMDb title is confirmed, riplex looks up the corresponding physical-media release on dvdcompare.net.
|
|
47
|
+
|
|
48
|
+
What you do here:
|
|
49
|
+
- pick the release that matches the disc in your drive
|
|
50
|
+
- pay attention to format and region when several similar releases exist
|
|
51
|
+
- use the dvdcompare link to verify the page if needed
|
|
52
|
+
|
|
53
|
+
Troubleshooting:
|
|
54
|
+
- if riplex picks the wrong dvdcompare page, use the manual override on this screen to paste a dvdcompare film id or URL
|
|
55
|
+
|
|
56
|
+
## 5. Title selection
|
|
57
|
+
|
|
58
|
+

|
|
59
|
+
|
|
60
|
+
This is the most important decision point in the GUI. riplex analyzes the disc, classifies the titles, and shows you what is likely worth ripping.
|
|
61
|
+
|
|
62
|
+
What you do here:
|
|
63
|
+
- review the recommended titles before starting the rip
|
|
64
|
+
- keep the main feature, episodes, or useful extras selected
|
|
65
|
+
- deselect obvious junk, duplicates, or play-all titles if needed
|
|
66
|
+
|
|
67
|
+
Why this screen matters:
|
|
68
|
+
- MakeMKV exposes raw titles and durations, but not what those titles actually are
|
|
69
|
+
- riplex uses metadata, disc context, and runtime matching to turn that pile of titles into something understandable
|
|
70
|
+
|
|
71
|
+
## 6. Disc overview for multi-disc releases
|
|
72
|
+
|
|
73
|
+

|
|
74
|
+
|
|
75
|
+
When a single film release spans multiple discs, riplex keeps them together as one project and shows you where the current disc fits into the full release.
|
|
76
|
+
|
|
77
|
+
What you do here:
|
|
78
|
+
- confirm that you are ripping the expected disc in the set
|
|
79
|
+
- move through the discs in order as riplex prompts you
|
|
80
|
+
- let riplex merge the results into one organized output when the project is complete
|
|
81
|
+
|
|
82
|
+
Important note:
|
|
83
|
+
- riplex currently handles one film or one TV show per session
|
|
84
|
+
- multi-film box sets still need to be ripped one film at a time
|
|
85
|
+
|
|
86
|
+
## What comes next
|
|
87
|
+
|
|
88
|
+
After title selection, riplex starts the rip, shows progress, and then summarizes the results when it finishes.
|
|
89
|
+
|
|
90
|
+
If you want the full end-to-end terminal flow after setup, see the [CLI Workflow](../cli-guide/workflow.md).
|
|
@@ -10,10 +10,10 @@ riplex has four commands, each targeting a different stage of the disc ripping w
|
|
|
10
10
|
|
|
11
11
|
| Command | Stage | What it does |
|
|
12
12
|
|---|---|---|
|
|
13
|
-
| [`orchestrate`](guide/orchestrate.md) | Full pipeline | Multi-disc rip-then-organize in one session |
|
|
13
|
+
| [`orchestrate`](cli-guide/orchestrate.md) | Full pipeline | Multi-disc rip-then-organize in one session |
|
|
14
14
|
| [`rip`](reference/cli.md#rip) | Ripping | Single-disc rip via makemkvcon with auto title selection |
|
|
15
|
-
| [`organize`](guide/organize.md) | After ripping | Scans MKV files, deduplicates, matches by runtime, moves into Plex layout |
|
|
16
|
-
| [`lookup`](guide/lookup.md) | Before ripping | Shows disc contents from dvdcompare, recommends which titles to rip, creates folder structure |
|
|
15
|
+
| [`organize`](cli-guide/organize.md) | After ripping | Scans MKV files, deduplicates, matches by runtime, moves into Plex layout |
|
|
16
|
+
| [`lookup`](cli-guide/lookup.md) | Before ripping | Shows disc contents from dvdcompare, recommends which titles to rip, creates folder structure |
|
|
17
17
|
|
|
18
18
|
## Quick start
|
|
19
19
|
|
|
@@ -33,6 +33,9 @@ riplex organize path/to/rips/Oppenheimer --execute
|
|
|
33
33
|
|
|
34
34
|
See [Installation](getting-started/installation.md) for full setup instructions.
|
|
35
35
|
|
|
36
|
+
If you prefer the desktop app, see the [GUI Walkthrough](gui-guide/gui-walkthrough.md)
|
|
37
|
+
for the main flow with screenshots.
|
|
38
|
+
|
|
36
39
|
## Features
|
|
37
40
|
|
|
38
41
|
- **TMDb integration**: Identifies movies vs TV shows, gets canonical titles, episode lists, and runtimes
|
|
@@ -48,11 +48,13 @@ nav:
|
|
|
48
48
|
- Getting Started:
|
|
49
49
|
- Installation: getting-started/installation.md
|
|
50
50
|
- Configuration: getting-started/configuration.md
|
|
51
|
-
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
51
|
+
- GUI Guide:
|
|
52
|
+
- Walkthrough: gui-guide/gui-walkthrough.md
|
|
53
|
+
- CLI Guide:
|
|
54
|
+
- Workflow: cli-guide/workflow.md
|
|
55
|
+
- Orchestrate: cli-guide/orchestrate.md
|
|
56
|
+
- Lookup: cli-guide/lookup.md
|
|
57
|
+
- Organizing Files: cli-guide/organize.md
|
|
56
58
|
- CLI Reference: reference/cli.md
|
|
57
59
|
- Architecture: architecture.md
|
|
58
60
|
- Plex Naming Rules: naming-rules.md
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -11,6 +11,10 @@ _TRAILING_YEAR_RE = re.compile(r"\s*\(\d{4}\)\s*$")
|
|
|
11
11
|
_TRAILING_DISC_RE = re.compile(
|
|
12
12
|
r"\s*[-_]?\s*(?:D(?:isc)?\s*\d+)\s*$", re.IGNORECASE,
|
|
13
13
|
)
|
|
14
|
+
_TRAILING_SEASON_DISC_RE = re.compile(
|
|
15
|
+
r"\s*[-_]?\s*S(?:eason|t)?\s*\d+[\s_-]*(?:BD|B(?:lu[-_ ]*ray)|D(?:isc)?)[\s_-]*\d+\s*$",
|
|
16
|
+
re.IGNORECASE,
|
|
17
|
+
)
|
|
14
18
|
|
|
15
19
|
|
|
16
20
|
def strip_year_from_title(name: str) -> tuple[str, int | None]:
|
|
@@ -58,8 +62,9 @@ def parse_volume_label(label: str) -> str | None:
|
|
|
58
62
|
if not label or len(label) < 2:
|
|
59
63
|
return None
|
|
60
64
|
|
|
61
|
-
# Strip
|
|
62
|
-
cleaned =
|
|
65
|
+
# Strip common trailing physical-disc markers.
|
|
66
|
+
cleaned = _TRAILING_SEASON_DISC_RE.sub("", label)
|
|
67
|
+
cleaned = re.sub(r"[\s_-]+D(?:isc[\s_]*)?\d+\s*$", "", cleaned, flags=re.IGNORECASE)
|
|
63
68
|
|
|
64
69
|
# Replace underscores with spaces
|
|
65
70
|
cleaned = cleaned.replace("_", " ").strip()
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: riplex
|
|
3
|
+
Version: 0.7.2
|
|
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
|
+
License: MIT
|
|
6
|
+
Requires-Python: >=3.11
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
License-File: LICENSE
|
|
9
|
+
Requires-Dist: httpx>=0.27
|
|
10
|
+
Requires-Dist: dvdcompare-scraper>=0.1.15
|
|
11
|
+
Requires-Dist: platformdirs>=4.0
|
|
12
|
+
Provides-Extra: dev
|
|
13
|
+
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
14
|
+
Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
|
|
15
|
+
Requires-Dist: respx>=0.21; extra == "dev"
|
|
16
|
+
Provides-Extra: gui
|
|
17
|
+
Requires-Dist: flet<0.86,>=0.84; extra == "gui"
|
|
18
|
+
Dynamic: license-file
|
|
19
|
+
|
|
20
|
+
# riplex
|
|
21
|
+
|
|
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
|
+
|
|
24
|
+
riplex includes both a desktop app for guided ripping and a full CLI for terminal-first and automated workflows.
|
|
25
|
+
|
|
26
|
+
<p align="center">
|
|
27
|
+
<img src="screenshots/0_Rip_Flow_BTTF.gif" alt="Rip flow demo" width="800">
|
|
28
|
+
</p>
|
|
29
|
+
|
|
30
|
+
## Why?
|
|
31
|
+
|
|
32
|
+
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.
|
|
33
|
+
|
|
34
|
+
riplex solves this by pulling metadata from TMDb (canonical titles, years, episode info) and [dvdcompare.net](https://www.dvdcompare.net) (per-disc content breakdowns including featurettes, deleted scenes, runtimes), then automatically classifying, deduplicating, matching, renaming, and organizing everything into the correct Plex structure.
|
|
35
|
+
|
|
36
|
+
## Get started
|
|
37
|
+
|
|
38
|
+
Start with the [Getting Started guide](docs/getting-started/installation.md). It covers all three install paths:
|
|
39
|
+
|
|
40
|
+
- **Pre-built app**: fastest way to try riplex. Download links and platform-specific notes are in the [installation guide](docs/getting-started/installation.md#option-a-pre-built-executables).
|
|
41
|
+
- **pipx**: recommended if you have Python or do not mind installing it. See [Option B](docs/getting-started/installation.md#option-b-install-with-pipx-recommended).
|
|
42
|
+
- **From source**: for developers and unsupported binary platforms. See [Option C](docs/getting-started/installation.md#option-c-install-from-source).
|
|
43
|
+
|
|
44
|
+
If you just want the desktop app right now, the latest binaries are on the [Releases page](https://github.com/AnyCredit5518/riplex/releases/latest). For the guided desktop flow after install, see the [GUI Walkthrough](docs/gui-guide/gui-walkthrough.md).
|
|
45
|
+
|
|
46
|
+
If you prefer the command line, riplex also ships a full CLI with `lookup`, `rip`, `organize`, and `orchestrate` workflows. For the end-to-end terminal flow, see the [CLI Workflow guide](docs/cli-guide/workflow.md).
|
|
47
|
+
|
|
48
|
+
After installing:
|
|
49
|
+
|
|
50
|
+
1. Run setup. The GUI walks you through it on first launch, or you can use [`riplex setup`](docs/getting-started/installation.md#setup).
|
|
51
|
+
2. If you want to see the GUI step by step, read the [GUI Walkthrough](docs/gui-guide/gui-walkthrough.md).
|
|
52
|
+
3. Follow the [CLI Workflow guide](docs/cli-guide/workflow.md) for the end-to-end flow.
|
|
53
|
+
4. If you prefer the terminal, use the [CLI reference](docs/reference/cli.md) for command details.
|
|
54
|
+
|
|
55
|
+
## What it looks like
|
|
56
|
+
|
|
57
|
+
Instead of leaving you to sort through a wall of raw MakeMKV titles, riplex helps you understand what is actually on the disc and choose the titles worth ripping. It surfaces likely matches, highlights junk and duplicates, and helps you avoid play-all traps.
|
|
58
|
+
|
|
59
|
+

|
|
60
|
+
|
|
61
|
+
More screenshots:
|
|
62
|
+
[welcome](screenshots/1_Welcome_Screen.png),
|
|
63
|
+
[disc detection](screenshots/2_Disc_Detection_BTTF.png),
|
|
64
|
+
[metadata lookup](screenshots/3_Metadata_Lookup_BTTF.png),
|
|
65
|
+
[release picker](screenshots/4_Disc_Release_BTTF.png),
|
|
66
|
+
[disc overview](screenshots/5_Multi_Disc_Overview_BTTF.png).
|
|
67
|
+
|
|
68
|
+
> [!NOTE]
|
|
69
|
+
> riplex currently handles one film (or one TV show) per session. Multi-film box sets that bundle separate films onto separate discs (e.g. a trilogy in one box) need to be ripped one film at a time.
|
|
70
|
+
|
|
71
|
+
## Requirements
|
|
72
|
+
|
|
73
|
+
riplex uses MakeMKV, ffmpeg, and MKVToolNix under the hood. The setup wizard installs them for you on Windows (winget), macOS (Homebrew), and Debian/Ubuntu Linux (apt). On other platforms see [the installation guide](docs/getting-started/installation.md).
|
|
74
|
+
|
|
75
|
+
You'll also need a free [TMDb API key](https://www.themoviedb.org/settings/api). The wizard prompts you for it.
|
|
76
|
+
|
|
77
|
+
## Data sources
|
|
78
|
+
|
|
79
|
+
- **[TMDb](https://www.themoviedb.org/)**: canonical movie and TV metadata (titles, years, episodes, runtimes)
|
|
80
|
+
- **[dvdcompare.net](https://www.dvdcompare.net)**: per-disc content breakdowns (featurettes, deleted scenes, play-all groupings, runtimes). An invaluable community resource.
|
|
81
|
+
|
|
82
|
+
## Related projects
|
|
83
|
+
|
|
84
|
+
- **[dvdcompare-scraper](https://github.com/AnyCredit5518/dvdcompare-scraper)**: Python client for dvdcompare.net. Powers riplex's disc lookup. Contributions welcome.
|
|
85
|
+
|
|
86
|
+
## Documentation
|
|
87
|
+
|
|
88
|
+
- [Getting started](docs/getting-started/installation.md): installation, configuration
|
|
89
|
+
- [GUI walkthrough](docs/gui-guide/gui-walkthrough.md): the main desktop flow, screen by screen
|
|
90
|
+
- [CLI workflow](docs/cli-guide/workflow.md): end-to-end terminal workflows
|
|
91
|
+
- [CLI reference](docs/reference/cli.md): every command and flag
|
|
92
|
+
- [Architecture](docs/architecture.md): design, data flow, project structure
|
|
93
|
+
|
|
94
|
+
## License
|
|
95
|
+
|
|
96
|
+
MIT
|
|
@@ -16,16 +16,24 @@ docs/changelog.md
|
|
|
16
16
|
docs/index.md
|
|
17
17
|
docs/naming-rules.md
|
|
18
18
|
docs/troubleshooting.md
|
|
19
|
+
docs/cli-guide/lookup.md
|
|
20
|
+
docs/cli-guide/orchestrate.md
|
|
21
|
+
docs/cli-guide/organize.md
|
|
22
|
+
docs/cli-guide/workflow.md
|
|
19
23
|
docs/getting-started/configuration.md
|
|
20
24
|
docs/getting-started/installation.md
|
|
21
|
-
docs/guide/
|
|
22
|
-
docs/guide/orchestrate.md
|
|
23
|
-
docs/guide/organize.md
|
|
24
|
-
docs/guide/workflow.md
|
|
25
|
+
docs/gui-guide/gui-walkthrough.md
|
|
25
26
|
docs/reference/cli.md
|
|
26
27
|
issues/debug-artifacts-consolidation.md
|
|
27
28
|
issues/orchestrate-dvdcompare-fallback.md
|
|
28
29
|
issues/planned-features.md
|
|
30
|
+
screenshots/0_Rip_Flow_BTTF.gif
|
|
31
|
+
screenshots/1_Welcome_Screen.png
|
|
32
|
+
screenshots/2_Disc_Detection_BTTF.png
|
|
33
|
+
screenshots/3_Metadata_Lookup_BTTF.png
|
|
34
|
+
screenshots/4_Disc_Release_BTTF.png
|
|
35
|
+
screenshots/5_Multi_Disc_Overview_BTTF.png
|
|
36
|
+
screenshots/5_Select_Title_to_RIP_BTTF.png
|
|
29
37
|
src/riplex/__init__.py
|
|
30
38
|
src/riplex/cache.py
|
|
31
39
|
src/riplex/config.py
|
|
@@ -151,6 +151,12 @@ class TestParseVolumeLabel:
|
|
|
151
151
|
def test_preserves_mid_title_dash(self):
|
|
152
152
|
assert parse_volume_label("ANT-MAN_AND_THE_WASP_Disc_1") == "Ant-man And The Wasp"
|
|
153
153
|
|
|
154
|
+
def test_strips_compact_season_disc_suffix(self):
|
|
155
|
+
assert parse_volume_label("Hannibal St01bd1") == "Hannibal"
|
|
156
|
+
|
|
157
|
+
def test_strips_season_disc_suffix_with_separators(self):
|
|
158
|
+
assert parse_volume_label("HANNIBAL_S1_BD1") == "Hannibal"
|
|
159
|
+
|
|
154
160
|
|
|
155
161
|
# ---------------------------------------------------------------------------
|
|
156
162
|
# _detect_disc_format
|