riplex 0.3.6__tar.gz → 0.5.0__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.5.0/.github/copilot-instructions.md +69 -0
- {riplex-0.3.6 → riplex-0.5.0}/.github/workflows/release.yml +3 -3
- riplex-0.5.0/.gitignore +0 -0
- riplex-0.5.0/.vscode/settings.json +4 -0
- {riplex-0.3.6/src/riplex.egg-info → riplex-0.5.0}/PKG-INFO +3 -2
- {riplex-0.3.6 → riplex-0.5.0}/README.md +2 -1
- {riplex-0.3.6 → riplex-0.5.0}/docs/changelog.md +35 -0
- riplex-0.5.0/docs/getting-started/installation.md +217 -0
- {riplex-0.3.6 → riplex-0.5.0}/docs/troubleshooting.md +76 -0
- {riplex-0.3.6 → riplex-0.5.0}/issues/planned-features.md +16 -0
- {riplex-0.3.6 → riplex-0.5.0}/pyproject.toml +6 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex/disc/analysis.py +192 -23
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex/disc/makemkv.py +6 -3
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex/disc/provider.py +94 -20
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex/scanner.py +30 -9
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex/snapshot.py +8 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex/splitter.py +8 -1
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex/tagger.py +2 -0
- {riplex-0.3.6 → riplex-0.5.0/src/riplex.egg-info}/PKG-INFO +3 -2
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex.egg-info/SOURCES.txt +7 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex_app/main.py +20 -1
- riplex-0.5.0/src/riplex_app/screens/disc_overview.py +224 -0
- riplex-0.5.0/src/riplex_app/screens/disc_swap.py +215 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex_app/screens/done.py +50 -1
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex_app/screens/folder_picker.py +8 -2
- riplex-0.5.0/src/riplex_app/screens/orchestrate_done.py +212 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex_app/screens/organize_done.py +2 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex_app/screens/progress.py +117 -2
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex_app/screens/release.py +25 -4
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex_app/screens/selection.py +94 -19
- riplex-0.5.0/src/riplex_app/screens/update.py +115 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex_app/screens/welcome.py +224 -16
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex_app/updater.py +1 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex_cli/commands/lookup.py +1 -1
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex_cli/commands/orchestrate.py +13 -11
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex_cli/commands/rip.py +22 -14
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex_cli/commands/setup.py +12 -6
- riplex-0.5.0/tests/fixtures/chernobyl_disc1.json +76 -0
- {riplex-0.3.6 → riplex-0.5.0}/tests/test_disc_analysis.py +180 -4
- riplex-0.5.0/tests/test_disc_fixtures.py +235 -0
- {riplex-0.3.6 → riplex-0.5.0}/tests/test_disc_provider.py +11 -6
- {riplex-0.3.6 → riplex-0.5.0}/tests/test_scanner.py +8 -4
- {riplex-0.3.6 → riplex-0.5.0}/tests/test_splitter.py +6 -3
- {riplex-0.3.6 → riplex-0.5.0}/tests/test_tagger.py +4 -2
- riplex-0.3.6/.github/copilot-instructions.md +0 -38
- riplex-0.3.6/.gitignore +0 -11
- riplex-0.3.6/docs/getting-started/installation.md +0 -144
- {riplex-0.3.6 → riplex-0.5.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/.github/agents/riplex.agent.md +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/.github/workflows/publish.yml +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/LICENSE +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/REFACTOR_PLAN.md +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/docs/architecture.md +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/docs/getting-started/configuration.md +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/docs/guide/lookup.md +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/docs/guide/orchestrate.md +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/docs/guide/organize.md +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/docs/guide/workflow.md +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/docs/index.md +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/docs/naming-rules.md +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/docs/reference/cli.md +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/issues/cross-disc-dvdcompare-matching.md +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/issues/orchestrate-dvdcompare-fallback.md +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/mkdocs.yml +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/setup.cfg +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex/__init__.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex/cache.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex/config.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex/dedup.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex/detect.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex/disc/__init__.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex/formatter.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex/lookup.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex/manifest.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex/matcher.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex/metadata/__init__.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex/metadata/planner.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex/metadata/provider.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex/metadata/sources/__init__.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex/metadata/sources/tmdb.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex/models.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex/normalize.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex/organizer.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex/title.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex/ui.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex.egg-info/dependency_links.txt +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex.egg-info/entry_points.txt +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex.egg-info/requires.txt +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex.egg-info/top_level.txt +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex_app/__init__.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex_app/screens/__init__.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex_app/screens/disc_detection.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex_app/screens/metadata.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex_app/screens/organize_preview.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex_cli/__init__.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex_cli/commands/__init__.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex_cli/commands/organize.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex_cli/formatting.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/src/riplex_cli/main.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/tests/__init__.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/tests/fixtures/makemkvcon_frozen_planet_ii_d2.txt +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/tests/fixtures/makemkvcon_list.txt +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/tests/snapshots/Batman Begins.snapshot.json +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/tests/snapshots/Blade Runner (Blu-ray 4k).snapshot.json +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/tests/snapshots/Blade Runner The Final Cut.snapshot.json +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/tests/snapshots/Seven Worlds One Planet.snapshot.json +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/tests/snapshots/The Dark Knight Rises.snapshot.json +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/tests/snapshots/The Dark Knight.snapshot.json +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/tests/snapshots/Waterworld.snapshot.json +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/tests/test_cache.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/tests/test_cli_utils.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/tests/test_config.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/tests/test_dedup.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/tests/test_detect.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/tests/test_formatter.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/tests/test_makemkv.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/tests/test_matcher.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/tests/test_normalize.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/tests/test_organizer.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/tests/test_planner.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/tests/test_rip_guide.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/tests/test_snapshot.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/tests/test_ui.py +0 -0
- {riplex-0.3.6 → riplex-0.5.0}/tests/test_updater.py +0 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Copilot Instructions for riplex
|
|
2
|
+
|
|
3
|
+
## Documentation changelog
|
|
4
|
+
|
|
5
|
+
When any file under `docs/` is added, modified, or removed, update `docs/changelog.md` with a dated entry describing the change. Follow the [Keep a Changelog](https://keepachangelog.com/) format with sections like Added, Changed, Removed, or Fixed under a date heading.
|
|
6
|
+
|
|
7
|
+
## Installing from source
|
|
8
|
+
|
|
9
|
+
First-time setup — create a virtualenv and install in editable mode:
|
|
10
|
+
```
|
|
11
|
+
python3.12 -m venv .venv
|
|
12
|
+
source .venv/bin/activate # macOS/Linux
|
|
13
|
+
.venv\Scripts\activate # Windows
|
|
14
|
+
pip install -e ".[dev,gui]"
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
The `.vscode/settings.json` in this repo points VS Code at `.venv` automatically,
|
|
18
|
+
so the integrated terminal activates it on open. In any external terminal, run
|
|
19
|
+
`source .venv/bin/activate` first.
|
|
20
|
+
|
|
21
|
+
If you already have a venv active, just install:
|
|
22
|
+
```
|
|
23
|
+
pip install -e ".[dev]"
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
For the GUI, also include the gui extra:
|
|
27
|
+
```
|
|
28
|
+
pip install -e ".[dev,gui]"
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### macOS extras (Homebrew Python only)
|
|
32
|
+
|
|
33
|
+
If you installed Python via Homebrew, two additional one-time steps are needed:
|
|
34
|
+
|
|
35
|
+
**1. SSL certificates** — Flet downloads its desktop runtime on first launch and will
|
|
36
|
+
fail with an SSL error without this fix:
|
|
37
|
+
```
|
|
38
|
+
CERT=$(python3.12 -c "import certifi; print(certifi.where())")
|
|
39
|
+
echo "export SSL_CERT_FILE=\"$CERT\"" >> .venv/bin/activate
|
|
40
|
+
echo "export REQUESTS_CA_BUNDLE=\"$CERT\"" >> .venv/bin/activate
|
|
41
|
+
source .venv/bin/activate
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**2. Folder picker (tkinter)** — the browse buttons in the GUI require tkinter,
|
|
45
|
+
which Homebrew ships as a separate package:
|
|
46
|
+
```
|
|
47
|
+
brew install python-tk@3.12
|
|
48
|
+
```
|
|
49
|
+
Without this, the browse buttons show a hint telling the user to type the path
|
|
50
|
+
manually instead of crashing silently.
|
|
51
|
+
|
|
52
|
+
## Running
|
|
53
|
+
|
|
54
|
+
After installing from source, use the installed entry points:
|
|
55
|
+
```
|
|
56
|
+
riplex rip # CLI dry-run
|
|
57
|
+
riplex rip --execute # CLI actual rip
|
|
58
|
+
riplex-ui # Launch the Flet GUI
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Do NOT use `python -m riplex` (that errors — riplex is a library package, not runnable). Do NOT use `python -m riplex_cli.main` when the entry point works.
|
|
62
|
+
|
|
63
|
+
## Dry-run default
|
|
64
|
+
|
|
65
|
+
All destructive commands (`rip`, `organize`, `orchestrate`) are dry-run by default. There is no `--dry-run` flag. Use `--execute` to actually perform the operation.
|
|
66
|
+
|
|
67
|
+
## Testing
|
|
68
|
+
|
|
69
|
+
Run tests with `pytest` (or `python -m pytest`) from the project root with the venv active. All tests must pass before committing.
|
|
@@ -69,7 +69,7 @@ jobs:
|
|
|
69
69
|
path: release/
|
|
70
70
|
|
|
71
71
|
build-macos:
|
|
72
|
-
runs-on: macos-
|
|
72
|
+
runs-on: macos-14
|
|
73
73
|
steps:
|
|
74
74
|
- uses: actions/checkout@v4
|
|
75
75
|
with:
|
|
@@ -116,7 +116,7 @@ jobs:
|
|
|
116
116
|
- name: Package macOS artifacts
|
|
117
117
|
run: |
|
|
118
118
|
mkdir -p release
|
|
119
|
-
cp dist/riplex release/
|
|
119
|
+
cp dist/riplex release/riplex-macos
|
|
120
120
|
cd dist && zip -r ../release/riplex-ui-macos.zip riplex-ui.app
|
|
121
121
|
|
|
122
122
|
- uses: actions/upload-artifact@v4
|
|
@@ -138,7 +138,7 @@ jobs:
|
|
|
138
138
|
mkdir release
|
|
139
139
|
cp artifacts/riplex-windows/riplex.exe release/riplex-windows.exe
|
|
140
140
|
cp artifacts/riplex-windows/riplex-ui.exe release/riplex-ui-windows.exe
|
|
141
|
-
cp artifacts/riplex-macos/riplex release/
|
|
141
|
+
cp artifacts/riplex-macos/riplex-macos release/
|
|
142
142
|
cp artifacts/riplex-macos/riplex-ui-macos.zip release/
|
|
143
143
|
|
|
144
144
|
- name: Create GitHub Release
|
riplex-0.5.0/.gitignore
ADDED
|
Binary file
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: riplex
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.0
|
|
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
|
|
@@ -26,7 +26,8 @@ Automates the tedious manual work around MakeMKV: figuring out what to rip, whic
|
|
|
26
26
|
If you'd rather use a simple graphical interface instead of the command line, download the pre-built app from the [Releases page](https://github.com/AnyCredit5518/riplex/releases/latest):
|
|
27
27
|
|
|
28
28
|
- **Windows**: Download `riplex-ui-windows.exe` and double-click to run
|
|
29
|
-
- **macOS
|
|
29
|
+
- **macOS** (Apple Silicon): Download `riplex-ui-macos.zip`, unzip, and open `riplex-ui.app`
|
|
30
|
+
- **macOS** (Intel): [Install with pipx](docs/getting-started/installation.md#option-b-install-with-pipx-recommended) — GitHub [deprecated their Intel macOS build runners](https://github.blog/changelog/2024-09-16-github-actions-macos-13-larger-runner-image-brownout-dates/), so pre-built Intel binaries are no longer possible
|
|
30
31
|
|
|
31
32
|
No Python install required. The app walks you through setup and provides buttons for all workflows.
|
|
32
33
|
|
|
@@ -7,7 +7,8 @@ Automates the tedious manual work around MakeMKV: figuring out what to rip, whic
|
|
|
7
7
|
If you'd rather use a simple graphical interface instead of the command line, download the pre-built app from the [Releases page](https://github.com/AnyCredit5518/riplex/releases/latest):
|
|
8
8
|
|
|
9
9
|
- **Windows**: Download `riplex-ui-windows.exe` and double-click to run
|
|
10
|
-
- **macOS
|
|
10
|
+
- **macOS** (Apple Silicon): Download `riplex-ui-macos.zip`, unzip, and open `riplex-ui.app`
|
|
11
|
+
- **macOS** (Intel): [Install with pipx](docs/getting-started/installation.md#option-b-install-with-pipx-recommended) — GitHub [deprecated their Intel macOS build runners](https://github.blog/changelog/2024-09-16-github-actions-macos-13-larger-runner-image-brownout-dates/), so pre-built Intel binaries are no longer possible
|
|
11
12
|
|
|
12
13
|
No Python install required. The app walks you through setup and provides buttons for all workflows.
|
|
13
14
|
|
|
@@ -4,11 +4,46 @@ 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-08
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- Disc fixture testing pattern for end-to-end classification tests using captured disc data.
|
|
12
|
+
- `tests/test_disc_fixtures.py`: new test file for classification testing against real disc layouts.
|
|
13
|
+
|
|
14
|
+
## 2026-05-04
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
|
|
18
|
+
- Troubleshooting guide: macOS-specific sections for tkinter/browse button, SSL certificate errors, Gatekeeper blocking, and tools not found despite being installed.
|
|
19
|
+
- Installation guide: new "Install with pipx" section as the recommended install method for end users — provides globally available `riplex` and `riplex-ui` commands without venv activation.
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
|
|
23
|
+
- Installation guide: dropped pre-built Intel macOS binary; macOS downloads are now Apple Silicon only. Intel Mac users directed to install with pipx.
|
|
24
|
+
- Installation guide: "Installing from source" section now clearly scoped to developers, with a note pointing users to pipx for global installs.
|
|
25
|
+
- Installation guide: clearer Gatekeeper instructions as a dedicated step with right-click method.
|
|
26
|
+
- Installation guide: added tip for macOS users recommending install from source.
|
|
27
|
+
|
|
7
28
|
## 2026-05-03
|
|
8
29
|
|
|
30
|
+
### Changed
|
|
31
|
+
|
|
32
|
+
- Installation guide: macOS pre-built executables now ship as `arm64` (Apple Silicon) only; added instructions to remove the Gatekeeper quarantine flag.
|
|
33
|
+
- Installation guide: "Installing from source" section now includes venv setup steps and a macOS SSL fix for Homebrew Python users (`SSL_CERT_FILE` via certifi).
|
|
34
|
+
- Installation guide: added macOS tkinter section for folder picker support.
|
|
35
|
+
|
|
9
36
|
### Added
|
|
10
37
|
|
|
11
38
|
- New troubleshooting guide (`docs/troubleshooting.md`) covering: makemkvcon not on PATH (Flatpak issue), drive not detected, invalid config file, TMDb API key signup, and dvdcompare lookup failures
|
|
39
|
+
- `find_ffprobe()` helper: all ffprobe consumers now check `~/.riplex/bin/`, `/usr/local/bin/`, and `/opt/homebrew/bin/` in addition to PATH.
|
|
40
|
+
- macOS auto-download: "Install Missing Tools" on macOS < 14 auto-downloads ffprobe from evermeet.cx to `~/.riplex/bin/`; opens download pages for MakeMKV and MKVToolNix.
|
|
41
|
+
- macOS .app bundle detection: `find_makemkvcon()` checks `/Applications/MakeMKV.app/`; `find_mkvmerge()` and `find_mkvpropedit()` check `/Applications/MKVToolNix.app/`.
|
|
42
|
+
- Dual-arch macOS CI builds (`macos-13`/x86_64 and `macos-14`/arm64) in release workflow.
|
|
43
|
+
- Arch-aware macOS update checker in GUI updater.
|
|
44
|
+
- Install progress bar and streaming output for Homebrew installs on macOS 14+.
|
|
45
|
+
- Graceful tkinter fallback in folder picker and welcome screen browse buttons.
|
|
46
|
+
- Linux apt support in GUI tool installer.
|
|
12
47
|
|
|
13
48
|
## 2026-05-02
|
|
14
49
|
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
# Installation
|
|
2
|
+
|
|
3
|
+
There are two ways to install riplex:
|
|
4
|
+
|
|
5
|
+
- **Download a pre-built executable** (easiest, no Python needed)
|
|
6
|
+
- **Install via pip** (for Python users who want automatic updates)
|
|
7
|
+
|
|
8
|
+
Both methods require the same external tools (MakeMKV, ffprobe, mkvmerge).
|
|
9
|
+
|
|
10
|
+
## Option A: Pre-built executables
|
|
11
|
+
|
|
12
|
+
Download the latest release for your platform from the [GitHub Releases page](https://github.com/AnyCredit5518/riplex/releases):
|
|
13
|
+
|
|
14
|
+
| Platform | CLI | GUI |
|
|
15
|
+
|---|---|---|
|
|
16
|
+
| Windows | `riplex-windows.exe` | `riplex-ui-windows.exe` |
|
|
17
|
+
| macOS (Apple Silicon) | `riplex-macos` | `riplex-ui-macos.zip` |
|
|
18
|
+
| macOS (Intel) | — | — |
|
|
19
|
+
|
|
20
|
+
> **Intel Mac users:** GitHub [deprecated their Intel macOS (macos-13) build
|
|
21
|
+
> runners](https://github.blog/changelog/2024-09-16-github-actions-macos-13-larger-runner-image-brownout-dates/),
|
|
22
|
+
> which were the only way to produce Intel-compatible binaries. Please
|
|
23
|
+
> [install with pipx](#option-b-install-with-pipx-recommended) instead — it's
|
|
24
|
+
> straightforward and works on any Mac.
|
|
25
|
+
|
|
26
|
+
### Windows
|
|
27
|
+
|
|
28
|
+
1. Download `riplex-windows.exe` (and optionally `riplex-ui-windows.exe`)
|
|
29
|
+
2. Place them in a folder on your PATH (e.g. `C:\Tools\`)
|
|
30
|
+
3. Open a terminal and run `riplex setup`
|
|
31
|
+
|
|
32
|
+
### macOS
|
|
33
|
+
|
|
34
|
+
1. Download `riplex-macos` and `riplex-ui-macos.zip` (Apple Silicon only).
|
|
35
|
+
|
|
36
|
+
**Intel Mac?** GitHub deprecated the build runners needed to produce Intel
|
|
37
|
+
binaries, so these won't work on your machine.
|
|
38
|
+
Skip to [Option B: Install with pipx](#option-b-install-with-pipx-recommended) instead.
|
|
39
|
+
|
|
40
|
+
2. For the GUI, unzip the `.zip` and move `riplex-ui.app` to `/Applications/`.
|
|
41
|
+
|
|
42
|
+
3. **Allow the app to open.** macOS blocks apps from unidentified developers by
|
|
43
|
+
default. The first time you try to open it, you'll see a warning — do **not**
|
|
44
|
+
click "Move to Trash." Instead:
|
|
45
|
+
|
|
46
|
+
- **Right-click** (or Control-click) on `riplex-ui.app` → choose **Open** →
|
|
47
|
+
click **Open** in the dialog. macOS remembers this and won't ask again.
|
|
48
|
+
|
|
49
|
+
- If that doesn't work, open Terminal and run:
|
|
50
|
+
```
|
|
51
|
+
xattr -dr com.apple.quarantine /Applications/riplex-ui.app
|
|
52
|
+
```
|
|
53
|
+
Then open the app normally.
|
|
54
|
+
|
|
55
|
+
4. For the CLI, make it executable and remove the quarantine flag:
|
|
56
|
+
```
|
|
57
|
+
chmod +x riplex-macos
|
|
58
|
+
xattr -dr com.apple.quarantine riplex-macos
|
|
59
|
+
```
|
|
60
|
+
Then run `./riplex-macos setup` to configure.
|
|
61
|
+
|
|
62
|
+
## Option B: Install with pipx (recommended)
|
|
63
|
+
|
|
64
|
+
[pipx](https://pipx.pypa.io/) installs Python apps in isolated environments but makes their commands available globally — no venv activation needed. `riplex` and `riplex-ui` just work from any terminal.
|
|
65
|
+
|
|
66
|
+
### 1. Install Python and pipx
|
|
67
|
+
|
|
68
|
+
- **Windows**: Download Python from https://www.python.org/downloads/ (**check "Add Python to PATH"**), then:
|
|
69
|
+
```
|
|
70
|
+
pip install pipx
|
|
71
|
+
pipx ensurepath
|
|
72
|
+
```
|
|
73
|
+
- **macOS**:
|
|
74
|
+
```
|
|
75
|
+
brew install python pipx
|
|
76
|
+
pipx ensurepath
|
|
77
|
+
```
|
|
78
|
+
- **Linux**:
|
|
79
|
+
```
|
|
80
|
+
sudo apt install python3 pipx
|
|
81
|
+
pipx ensurepath
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Restart your terminal after `ensurepath` so the new PATH takes effect.
|
|
85
|
+
|
|
86
|
+
### 2. Install and register MakeMKV
|
|
87
|
+
|
|
88
|
+
Download MakeMKV from https://www.makemkv.com/ and install it.
|
|
89
|
+
|
|
90
|
+
Then register it with the free beta key:
|
|
91
|
+
|
|
92
|
+
1. Get the current beta key from https://forum.makemkv.com/forum/viewtopic.php?f=5&t=1053
|
|
93
|
+
2. Open MakeMKV, go to Help > Register, and paste the key
|
|
94
|
+
|
|
95
|
+
The beta key is updated periodically. Without it, `makemkvcon` (the command-line tool riplex uses) won't function.
|
|
96
|
+
|
|
97
|
+
### 3. Install riplex
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
pipx install "riplex[gui]"
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
This installs both `riplex` (CLI) and `riplex-ui` (GUI) as globally available commands.
|
|
104
|
+
|
|
105
|
+
> [!TIP]
|
|
106
|
+
> To install the CLI only (no GUI), run `pipx install riplex` instead.
|
|
107
|
+
|
|
108
|
+
### 4. Run setup
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
riplex setup
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
The setup wizard will:
|
|
115
|
+
|
|
116
|
+
1. Ask for your TMDb API key (free at https://www.themoviedb.org/settings/api)
|
|
117
|
+
|
|
118
|
+
> [!TIP]
|
|
119
|
+
> TMDb asks for an app name and URL when you request a key. You can just
|
|
120
|
+
> enter "riplex" as the app name and `https://github.com/AnyCredit5518/riplex`
|
|
121
|
+
> as the URL. The rest of the form can be filled with basic info - it doesn't
|
|
122
|
+
> need to be a real business. The key is approved instantly.
|
|
123
|
+
|
|
124
|
+
2. Ask where your Plex library and MakeMKV rip folders are
|
|
125
|
+
3. Check for required tools (MakeMKV, ffprobe, mkvmerge, mkvpropedit)
|
|
126
|
+
4. Offer to install any missing tools for you (via winget on Windows, Homebrew on macOS, or apt on Linux)
|
|
127
|
+
|
|
128
|
+
If you skip setup, it runs automatically the first time you use any command.
|
|
129
|
+
|
|
130
|
+
### 5. Verify
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
riplex --help
|
|
134
|
+
riplex-ui
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Both commands should work from any terminal without activating anything.
|
|
138
|
+
|
|
139
|
+
### Updating
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
pipx upgrade riplex
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## Installing from source (for developers)
|
|
146
|
+
|
|
147
|
+
If you want to contribute or run the latest unreleased code, use a venv:
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
git clone https://github.com/AnyCredit5518/riplex.git
|
|
151
|
+
cd riplex
|
|
152
|
+
python3.12 -m venv .venv
|
|
153
|
+
source .venv/bin/activate # macOS/Linux
|
|
154
|
+
pip install -e ".[dev,gui]"
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
> [!NOTE]
|
|
158
|
+
> With a venv, `riplex` and `riplex-ui` only work while the venv is activated.
|
|
159
|
+
> For a global install that works from any terminal, use
|
|
160
|
+
> [pipx](#option-b-install-with-pipx-recommended) instead.
|
|
161
|
+
|
|
162
|
+
The repo's `.vscode/settings.json` points VS Code at `.venv` automatically, so
|
|
163
|
+
the integrated terminal activates it on open. In any external terminal, run
|
|
164
|
+
`source .venv/bin/activate` first.
|
|
165
|
+
|
|
166
|
+
Then launch the GUI with:
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
riplex-ui
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### macOS SSL fix (Homebrew Python only)
|
|
173
|
+
|
|
174
|
+
If you installed Python via Homebrew and `riplex-ui` crashes on first launch with
|
|
175
|
+
an SSL certificate error, run this one-time fix:
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
CERT=$(python3.12 -c "import certifi; print(certifi.where())")
|
|
179
|
+
echo "export SSL_CERT_FILE=\"$CERT\"" >> .venv/bin/activate
|
|
180
|
+
echo "export REQUESTS_CA_BUNDLE=\"$CERT\"" >> .venv/bin/activate
|
|
181
|
+
source .venv/bin/activate
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### macOS folder picker (Homebrew Python only)
|
|
185
|
+
|
|
186
|
+
The browse buttons in the GUI use tkinter, which Homebrew ships separately:
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
brew install python-tk@3.12
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Without this, clicking a browse button shows a hint to type the path manually instead.
|
|
193
|
+
|
|
194
|
+
## External tools
|
|
195
|
+
|
|
196
|
+
riplex uses these tools under the hood. The setup wizard handles installation, but if you prefer to install manually:
|
|
197
|
+
|
|
198
|
+
### MakeMKV
|
|
199
|
+
|
|
200
|
+
Download from https://www.makemkv.com/. Ensure `makemkvcon` is on your PATH.
|
|
201
|
+
|
|
202
|
+
- Windows default location: `C:\Program Files (x86)\MakeMKV\`
|
|
203
|
+
- macOS: The app bundle includes makemkvcon
|
|
204
|
+
|
|
205
|
+
MakeMKV requires a registration key. A free beta key is available at https://forum.makemkv.com/forum/viewtopic.php?f=5&t=1053 and must be entered in MakeMKV (Help > Register) before `makemkvcon` will work. The beta key is updated periodically.
|
|
206
|
+
|
|
207
|
+
### ffprobe (from ffmpeg)
|
|
208
|
+
|
|
209
|
+
- **Windows**: `winget install Gyan.FFmpeg`
|
|
210
|
+
- **macOS**: `brew install ffmpeg`
|
|
211
|
+
- **Linux**: `sudo apt install ffmpeg`
|
|
212
|
+
|
|
213
|
+
### MKVToolNix (mkvmerge, mkvpropedit)
|
|
214
|
+
|
|
215
|
+
- **Windows**: `winget install MoritzBunkus.MKVToolNix` (or download from https://mkvtoolnix.download/)
|
|
216
|
+
- **macOS**: `brew install mkvtoolnix`
|
|
217
|
+
- **Linux**: `sudo apt install mkvtoolnix`
|
|
@@ -76,3 +76,79 @@ You'll still get duplicate filtering, 4K preference, play-all detection, and TMD
|
|
|
76
76
|
|
|
77
77
|
> [!NOTE]
|
|
78
78
|
> A fix to make `orchestrate` and `organize` handle missing dvdcompare data gracefully is planned.
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## macOS: "Browse" button does nothing (tkinter not installed)
|
|
83
|
+
|
|
84
|
+
**Symptom:** In the GUI, clicking the folder browse button does nothing or shows a hint to type the path manually.
|
|
85
|
+
|
|
86
|
+
**Cause:** The browse dialog requires `tkinter`, which Homebrew Python does not include by default.
|
|
87
|
+
|
|
88
|
+
**Solution:** Install the tkinter package for your Python version:
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
brew install python-tk@3.12
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Then relaunch `riplex-ui`.
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## macOS: SSL error when launching the GUI for the first time
|
|
99
|
+
|
|
100
|
+
**Symptom:** The app crashes or shows an SSL certificate error on first launch. This typically happens with Homebrew-installed Python.
|
|
101
|
+
|
|
102
|
+
**Cause:** Flet downloads its desktop runtime on first launch. Homebrew Python doesn't include system SSL certificates, so the download fails.
|
|
103
|
+
|
|
104
|
+
**Solution:** Set the SSL certificate path in your venv activate script (one-time fix):
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
CERT=$(python3.12 -c "import certifi; print(certifi.where())")
|
|
108
|
+
echo "export SSL_CERT_FILE=\"$CERT\"" >> .venv/bin/activate
|
|
109
|
+
echo "export REQUESTS_CA_BUNDLE=\"$CERT\"" >> .venv/bin/activate
|
|
110
|
+
source .venv/bin/activate
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Then relaunch `riplex-ui`.
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## macOS: "app is damaged" / Gatekeeper blocks the app
|
|
118
|
+
|
|
119
|
+
**Symptom:** macOS says the app "is damaged and can't be opened" or "cannot be opened because the developer cannot be verified."
|
|
120
|
+
|
|
121
|
+
**Cause:** macOS quarantines apps downloaded from the internet that aren't signed with an Apple Developer certificate.
|
|
122
|
+
|
|
123
|
+
**Solution:** Right-click (or Control-click) on `riplex-ui.app`, choose **Open**, then click **Open** in the dialog. macOS remembers this choice and won't ask again.
|
|
124
|
+
|
|
125
|
+
If that doesn't work, remove the quarantine flag manually:
|
|
126
|
+
|
|
127
|
+
```
|
|
128
|
+
xattr -dr com.apple.quarantine /Applications/riplex-ui.app
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## macOS: tools not found despite being installed
|
|
134
|
+
|
|
135
|
+
**Symptom:** `riplex setup` reports that `ffprobe`, `mkvmerge`, or `makemkvcon` are missing, even though MakeMKV or MKVToolNix is installed.
|
|
136
|
+
|
|
137
|
+
**Cause:** macOS `.app` bundles install their binaries inside the app package, not on your PATH. Homebrew installs to `/opt/homebrew/bin/` (Apple Silicon) or `/usr/local/bin/` (Intel), which may not be on your PATH in all contexts.
|
|
138
|
+
|
|
139
|
+
**Solution:** riplex automatically checks these locations, so this should resolve itself as of v0.4.0. If tools are still not found, verify they exist:
|
|
140
|
+
|
|
141
|
+
```
|
|
142
|
+
# MakeMKV
|
|
143
|
+
ls /Applications/MakeMKV.app/Contents/MacOS/makemkvcon
|
|
144
|
+
|
|
145
|
+
# MKVToolNix
|
|
146
|
+
ls /Applications/MKVToolNix.app/Contents/MacOS/mkvmerge
|
|
147
|
+
|
|
148
|
+
# ffprobe (Homebrew)
|
|
149
|
+
ls /opt/homebrew/bin/ffprobe # Apple Silicon
|
|
150
|
+
ls /usr/local/bin/ffprobe # Intel
|
|
151
|
+
ls ~/.riplex/bin/ffprobe # auto-downloaded
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
If the tool exists but riplex can't find it, you can add it to your PATH manually in your shell profile (`~/.zshrc`).
|
|
@@ -75,3 +75,19 @@ tracks when ripping, not just the default/English track.
|
|
|
75
75
|
- GUI: add language selection to setup/config screen
|
|
76
76
|
- Default behavior: keep all tracks (current MakeMKV default) — only filter
|
|
77
77
|
if the user explicitly configures preferred languages
|
|
78
|
+
|
|
79
|
+
|
|
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
|
+
|
|
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
|
|
@@ -23,6 +23,12 @@ dev = [
|
|
|
23
23
|
]
|
|
24
24
|
gui = [
|
|
25
25
|
"flet>=0.84",
|
|
26
|
+
# tkinter is also required for the folder picker buttons but cannot be
|
|
27
|
+
# installed via pip — it is part of Python's standard library and must be
|
|
28
|
+
# installed at the OS level:
|
|
29
|
+
# macOS (Homebrew Python): brew install python-tk@3.12
|
|
30
|
+
# Linux (Debian/Ubuntu): sudo apt install python3-tk
|
|
31
|
+
# Windows: included in the standard python.org installer
|
|
26
32
|
]
|
|
27
33
|
|
|
28
34
|
[project.scripts]
|