mkv-episode-matcher 0.4.0__tar.gz → 0.4.5__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.
Potentially problematic release.
This version of mkv-episode-matcher might be problematic. Click here for more details.
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/.coverage +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/.github/workflows/python-publish.yml +2 -2
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/PKG-INFO +5 -6
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/README.md +4 -5
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/docs/installation.md +8 -5
- mkv_episode_matcher-0.4.5/mkv_episode_matcher/__init__.py +9 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher/__main__.py +30 -45
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher/episode_matcher.py +3 -3
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher/utils.py +4 -3
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher.egg-info/PKG-INFO +5 -6
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/setup.cfg +1 -1
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/uv.lock +30 -1
- mkv_episode_matcher-0.4.0/mkv_episode_matcher/__init__.py +0 -1
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/.gitattributes +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/.github/funding.yml +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/.github/workflows/documentation.yml +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/.github/workflows/tests.yml +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/.gitignore +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/.gitmodules +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/.python-version +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/.vscode/settings.json +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/docs/api/index.md +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/docs/cli.md +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/docs/configuration.md +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/docs/quickstart.md +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/docs/tips.md +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkdocs.yml +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher/.gitattributes +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher/config.py +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher/episode_identification.py +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher/libraries/pgs2srt/.gitignore +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher/libraries/pgs2srt/Libraries/SubZero/SubZero.py +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher/libraries/pgs2srt/Libraries/SubZero/dictionaries/data.py +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher/libraries/pgs2srt/Libraries/SubZero/post_processing.py +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher/libraries/pgs2srt/README.md +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher/libraries/pgs2srt/__init__.py +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher/libraries/pgs2srt/imagemaker.py +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher/libraries/pgs2srt/pgs2srt.py +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher/libraries/pgs2srt/pgsreader.py +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher/libraries/pgs2srt/requirements.txt +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher/mkv_to_srt.py +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher/speech_to_text.py +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher/subtitle_utils.py +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher/tmdb_client.py +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher.egg-info/SOURCES.txt +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher.egg-info/dependency_links.txt +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher.egg-info/entry_points.txt +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher.egg-info/requires.txt +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher.egg-info/top_level.txt +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/pyproject.toml +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/setup.py +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/tests/__init__.py +0 -0
- {mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/tests/test_main.py +0 -0
|
Binary file
|
{mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/.github/workflows/python-publish.yml
RENAMED
|
@@ -22,7 +22,7 @@ jobs:
|
|
|
22
22
|
- name: Build a binary wheel and a source tarball
|
|
23
23
|
run: python3 -m build
|
|
24
24
|
- name: Store the distribution packages
|
|
25
|
-
uses: actions/upload-artifact@
|
|
25
|
+
uses: actions/upload-artifact@v4
|
|
26
26
|
with:
|
|
27
27
|
name: python-package-distributions
|
|
28
28
|
path: dist/
|
|
@@ -42,7 +42,7 @@ jobs:
|
|
|
42
42
|
|
|
43
43
|
steps:
|
|
44
44
|
- name: Download all the dists
|
|
45
|
-
uses: actions/download-artifact@
|
|
45
|
+
uses: actions/download-artifact@v4
|
|
46
46
|
with:
|
|
47
47
|
name: python-package-distributions
|
|
48
48
|
path: dist/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: mkv-episode-matcher
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.5
|
|
4
4
|
Summary: The MKV Episode Matcher is a tool for identifying TV series episodes from MKV files and renaming the files accordingly.
|
|
5
5
|
Home-page: https://github.com/Jsakkos/mkv-episode-matcher
|
|
6
6
|
Author: Jonathan Sakkos
|
|
@@ -67,7 +67,7 @@ Automatically match and rename your MKV TV episodes using The Movie Database (TM
|
|
|
67
67
|
- Python 3.9 or higher
|
|
68
68
|
- [FFmpeg](https://ffmpeg.org/download.html) installed and available in system PATH
|
|
69
69
|
- [Tesseract OCR](https://github.com/UB-Mannheim/tesseract/wiki) installed (required for image-based subtitle processing)
|
|
70
|
-
- TMDb API key
|
|
70
|
+
- TMDb API key (optional, for subtitle downloads)
|
|
71
71
|
- OpenSubtitles account (optional, for subtitle downloads)
|
|
72
72
|
|
|
73
73
|
## Quick Start
|
|
@@ -83,10 +83,6 @@ pip install mkv-episode-matcher
|
|
|
83
83
|
mkv-match --show-dir "path/to/your/show"
|
|
84
84
|
```
|
|
85
85
|
|
|
86
|
-
## Documentation
|
|
87
|
-
|
|
88
|
-
Full documentation is available at [https://jsakkos.github.io/mkv-episode-matcher/](https://jsakkos.github.io/mkv-episode-matcher/)
|
|
89
|
-
|
|
90
86
|
## Directory Structure
|
|
91
87
|
|
|
92
88
|
MKV Episode Matcher expects your TV shows to be organized as follows:
|
|
@@ -136,3 +132,6 @@ Distributed under the MIT License. See `LICENSE` for more information.
|
|
|
136
132
|
- [OpenSubtitles](https://www.opensubtitles.com/) for subtitle integration
|
|
137
133
|
- All contributors who have helped improve this project
|
|
138
134
|
|
|
135
|
+
## Documentation
|
|
136
|
+
|
|
137
|
+
Full documentation is available at [https://jsakkos.github.io/mkv-episode-matcher/](https://jsakkos.github.io/mkv-episode-matcher/)
|
|
@@ -27,7 +27,7 @@ Automatically match and rename your MKV TV episodes using The Movie Database (TM
|
|
|
27
27
|
- Python 3.9 or higher
|
|
28
28
|
- [FFmpeg](https://ffmpeg.org/download.html) installed and available in system PATH
|
|
29
29
|
- [Tesseract OCR](https://github.com/UB-Mannheim/tesseract/wiki) installed (required for image-based subtitle processing)
|
|
30
|
-
- TMDb API key
|
|
30
|
+
- TMDb API key (optional, for subtitle downloads)
|
|
31
31
|
- OpenSubtitles account (optional, for subtitle downloads)
|
|
32
32
|
|
|
33
33
|
## Quick Start
|
|
@@ -43,10 +43,6 @@ pip install mkv-episode-matcher
|
|
|
43
43
|
mkv-match --show-dir "path/to/your/show"
|
|
44
44
|
```
|
|
45
45
|
|
|
46
|
-
## Documentation
|
|
47
|
-
|
|
48
|
-
Full documentation is available at [https://jsakkos.github.io/mkv-episode-matcher/](https://jsakkos.github.io/mkv-episode-matcher/)
|
|
49
|
-
|
|
50
46
|
## Directory Structure
|
|
51
47
|
|
|
52
48
|
MKV Episode Matcher expects your TV shows to be organized as follows:
|
|
@@ -96,3 +92,6 @@ Distributed under the MIT License. See `LICENSE` for more information.
|
|
|
96
92
|
- [OpenSubtitles](https://www.opensubtitles.com/) for subtitle integration
|
|
97
93
|
- All contributors who have helped improve this project
|
|
98
94
|
|
|
95
|
+
## Documentation
|
|
96
|
+
|
|
97
|
+
Full documentation is available at [https://jsakkos.github.io/mkv-episode-matcher/](https://jsakkos.github.io/mkv-episode-matcher/)
|
|
@@ -35,9 +35,12 @@ For GPU acceleration (recommended if you have a CUDA-capable GPU):
|
|
|
35
35
|
```bash
|
|
36
36
|
pip install "mkv-episode-matcher"
|
|
37
37
|
```
|
|
38
|
-
Find the appropriate CUDA version and upgrade Torch (e.g., for CUDA 12.4):
|
|
38
|
+
Find the appropriate CUDA version and upgrade Torch (e.g., for CUDA 12.4) from the [compatibility matrix](https://pytorch.org/get-started/locally/):
|
|
39
39
|
```bash
|
|
40
40
|
pip install -U torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
|
|
41
|
+
|
|
42
|
+
# Verify GPU availability
|
|
43
|
+
mkv-match --check-gpu true
|
|
41
44
|
```
|
|
42
45
|
|
|
43
46
|
|
|
@@ -54,13 +57,12 @@ cd mkv-episode-matcher
|
|
|
54
57
|
pip install uv
|
|
55
58
|
|
|
56
59
|
# Install with development dependencies
|
|
57
|
-
uv
|
|
58
|
-
uv pip install -e ".[dev]"
|
|
60
|
+
uv sync --dev
|
|
59
61
|
```
|
|
60
62
|
|
|
61
63
|
## API Keys Setup
|
|
62
64
|
|
|
63
|
-
1. **TMDb API Key**
|
|
65
|
+
1. **TMDb API Key (Optional)**
|
|
64
66
|
- Create an account at [TMDb](https://www.themoviedb.org/)
|
|
65
67
|
- Go to your account settings
|
|
66
68
|
- Request an API key
|
|
@@ -87,12 +89,13 @@ Verify your installation:
|
|
|
87
89
|
mkv-match --version
|
|
88
90
|
|
|
89
91
|
# Check GPU availability (if installed with GPU support)
|
|
90
|
-
|
|
92
|
+
mkv-match --check-gpu true
|
|
91
93
|
```
|
|
92
94
|
|
|
93
95
|
## Troubleshooting
|
|
94
96
|
|
|
95
97
|
If you encounter any issues:
|
|
98
|
+
|
|
96
99
|
1. Ensure you have the latest pip: `pip install --upgrade pip`
|
|
97
100
|
2. For GPU installations, verify CUDA is properly installed
|
|
98
101
|
3. Check the [compatibility matrix](https://pytorch.org/get-started/locally/) for PyTorch and CUDA versions
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
# __main__.py
|
|
2
2
|
import argparse
|
|
3
3
|
import os
|
|
4
|
+
import sys
|
|
4
5
|
|
|
5
6
|
from loguru import logger
|
|
6
|
-
|
|
7
|
+
from mkv_episode_matcher import __version__
|
|
7
8
|
from mkv_episode_matcher.config import get_config, set_config
|
|
8
9
|
|
|
9
10
|
# Log the start of the application
|
|
@@ -62,6 +63,12 @@ def main():
|
|
|
62
63
|
|
|
63
64
|
# Parse command-line arguments
|
|
64
65
|
parser = argparse.ArgumentParser(description="Process shows with TMDb API")
|
|
66
|
+
parser.add_argument(
|
|
67
|
+
"--version",
|
|
68
|
+
action="version",
|
|
69
|
+
version=f"%(prog)s {__version__}",
|
|
70
|
+
help="Show the version number and exit"
|
|
71
|
+
)
|
|
65
72
|
parser.add_argument("--tmdb-api-key", help="TMDb API key")
|
|
66
73
|
parser.add_argument("--show-dir", help="Main directory of the show")
|
|
67
74
|
parser.add_argument(
|
|
@@ -105,71 +112,49 @@ def main():
|
|
|
105
112
|
check_gpu_support()
|
|
106
113
|
return
|
|
107
114
|
logger.debug(f"Command-line arguments: {args}")
|
|
108
|
-
open_subtitles_api_key = ""
|
|
109
|
-
open_subtitles_user_agent = ""
|
|
110
|
-
open_subtitles_username = ""
|
|
111
|
-
open_subtitles_password = ""
|
|
112
|
-
# Check if API key is provided via command-line argument
|
|
113
|
-
tmdb_api_key = args.tmdb_api_key
|
|
114
|
-
|
|
115
|
-
# If API key is not provided, try to get it from the cache
|
|
116
|
-
if not tmdb_api_key:
|
|
117
|
-
cached_config = get_config(CONFIG_FILE)
|
|
118
|
-
if cached_config:
|
|
119
|
-
tmdb_api_key = cached_config.get("tmdb_api_key")
|
|
120
115
|
|
|
121
|
-
#
|
|
116
|
+
# Load configuration once
|
|
117
|
+
config = get_config(CONFIG_FILE)
|
|
118
|
+
|
|
119
|
+
# Get TMDb API key
|
|
120
|
+
tmdb_api_key = args.tmdb_api_key or config.get("tmdb_api_key")
|
|
122
121
|
if not tmdb_api_key:
|
|
123
122
|
tmdb_api_key = input("Enter your TMDb API key: ")
|
|
124
|
-
# Cache the API key
|
|
125
|
-
|
|
126
123
|
logger.debug(f"TMDb API Key: {tmdb_api_key}")
|
|
124
|
+
|
|
127
125
|
logger.debug("Getting OpenSubtitles API key")
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
open_subtitles_password = cached_config.get("open_subtitles_password")
|
|
134
|
-
except:
|
|
135
|
-
pass
|
|
126
|
+
open_subtitles_api_key = config.get("open_subtitles_api_key")
|
|
127
|
+
open_subtitles_user_agent = config.get("open_subtitles_user_agent")
|
|
128
|
+
open_subtitles_username = config.get("open_subtitles_username")
|
|
129
|
+
open_subtitles_password = config.get("open_subtitles_password")
|
|
130
|
+
|
|
136
131
|
if args.get_subs:
|
|
137
132
|
if not open_subtitles_api_key:
|
|
138
133
|
open_subtitles_api_key = input("Enter your OpenSubtitles API key: ")
|
|
139
|
-
|
|
140
134
|
if not open_subtitles_user_agent:
|
|
141
135
|
open_subtitles_user_agent = input("Enter your OpenSubtitles User Agent: ")
|
|
142
|
-
|
|
143
136
|
if not open_subtitles_username:
|
|
144
137
|
open_subtitles_username = input("Enter your OpenSubtitles Username: ")
|
|
145
|
-
|
|
146
138
|
if not open_subtitles_password:
|
|
147
139
|
open_subtitles_password = input("Enter your OpenSubtitles Password: ")
|
|
148
|
-
|
|
149
|
-
#
|
|
150
|
-
show_dir = args.show_dir
|
|
140
|
+
|
|
141
|
+
# Use config for show directory and tesseract path
|
|
142
|
+
show_dir = args.show_dir or config.get("show_dir")
|
|
143
|
+
if not show_dir:
|
|
144
|
+
show_dir = input("Enter the main directory of the show:")
|
|
145
|
+
logger.info(f"Show Directory: {show_dir}")
|
|
151
146
|
if not show_dir:
|
|
152
|
-
show_dir =
|
|
153
|
-
|
|
154
|
-
# If show directory is not provided, prompt the user to input it
|
|
155
|
-
show_dir = input("Enter the main directory of the show:")
|
|
156
|
-
logger.info(f"Show Directory: {show_dir}")
|
|
157
|
-
# if the user does not provide a show directory, make the default show directory the current working directory
|
|
158
|
-
if not show_dir:
|
|
159
|
-
show_dir = os.getcwd()
|
|
147
|
+
show_dir = os.getcwd()
|
|
148
|
+
|
|
160
149
|
if not args.tesseract_path:
|
|
161
|
-
tesseract_path =
|
|
162
|
-
|
|
150
|
+
tesseract_path = config.get("tesseract_path")
|
|
163
151
|
if not tesseract_path:
|
|
164
|
-
tesseract_path = input(
|
|
165
|
-
r"Enter the path to the tesseract executable: ['C:\Program Files\Tesseract-OCR\tesseract.exe']"
|
|
166
|
-
)
|
|
167
|
-
|
|
152
|
+
tesseract_path = input(r"Enter the path to the tesseract executable: ['C:\Program Files\Tesseract-OCR\tesseract.exe']")
|
|
168
153
|
else:
|
|
169
154
|
tesseract_path = args.tesseract_path
|
|
170
155
|
logger.debug(f"Teesseract Path: {tesseract_path}")
|
|
171
156
|
logger.debug(f"Show Directory: {show_dir}")
|
|
172
|
-
|
|
157
|
+
|
|
173
158
|
# Set the configuration
|
|
174
159
|
set_config(
|
|
175
160
|
tmdb_api_key,
|
{mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher/episode_matcher.py
RENAMED
|
@@ -32,7 +32,7 @@ def process_show(season=None, dry_run=False, get_subs=False):
|
|
|
32
32
|
# Early check for reference files
|
|
33
33
|
reference_dir = Path(CACHE_DIR) / "data" / show_name
|
|
34
34
|
reference_files = list(reference_dir.glob("*.srt"))
|
|
35
|
-
if not reference_files:
|
|
35
|
+
if (not get_subs) and (not reference_files):
|
|
36
36
|
logger.error(f"No reference subtitle files found in {reference_dir}")
|
|
37
37
|
logger.info("Please download reference subtitles first")
|
|
38
38
|
return
|
|
@@ -67,7 +67,7 @@ def process_show(season=None, dry_run=False, get_subs=False):
|
|
|
67
67
|
if get_subs:
|
|
68
68
|
show_id = fetch_show_id(matcher.show_name)
|
|
69
69
|
if show_id:
|
|
70
|
-
get_subtitles(show_id, seasons={season_num})
|
|
70
|
+
get_subtitles(show_id, seasons={season_num}, config=config)
|
|
71
71
|
|
|
72
72
|
unmatched_files = []
|
|
73
73
|
for mkv_file in mkv_files:
|
|
@@ -105,4 +105,4 @@ def process_show(season=None, dry_run=False, get_subs=False):
|
|
|
105
105
|
finally:
|
|
106
106
|
if not dry_run:
|
|
107
107
|
shutil.rmtree(temp_dir)
|
|
108
|
-
cleanup_ocr_files(show_dir)
|
|
108
|
+
cleanup_ocr_files(show_dir)
|
|
@@ -121,16 +121,17 @@ def rename_episode_file(original_file_path, new_filename):
|
|
|
121
121
|
logger.error(f"Failed to rename file: {e}")
|
|
122
122
|
return None
|
|
123
123
|
|
|
124
|
-
def get_subtitles(show_id, seasons: set[int]):
|
|
124
|
+
def get_subtitles(show_id, seasons: set[int], config=None):
|
|
125
125
|
"""
|
|
126
126
|
Retrieves and saves subtitles for a given TV show and seasons.
|
|
127
127
|
|
|
128
128
|
Args:
|
|
129
129
|
show_id (int): The ID of the TV show.
|
|
130
130
|
seasons (Set[int]): A set of season numbers for which subtitles should be retrieved.
|
|
131
|
+
config (Config object, optional): Preloaded configuration.
|
|
131
132
|
"""
|
|
132
|
-
|
|
133
|
-
|
|
133
|
+
if config is None:
|
|
134
|
+
config = get_config(CONFIG_FILE)
|
|
134
135
|
show_dir = config.get("show_dir")
|
|
135
136
|
series_name = sanitize_filename(os.path.basename(show_dir))
|
|
136
137
|
tmdb_api_key = config.get("tmdb_api_key")
|
{mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher.egg-info/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: mkv-episode-matcher
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.5
|
|
4
4
|
Summary: The MKV Episode Matcher is a tool for identifying TV series episodes from MKV files and renaming the files accordingly.
|
|
5
5
|
Home-page: https://github.com/Jsakkos/mkv-episode-matcher
|
|
6
6
|
Author: Jonathan Sakkos
|
|
@@ -67,7 +67,7 @@ Automatically match and rename your MKV TV episodes using The Movie Database (TM
|
|
|
67
67
|
- Python 3.9 or higher
|
|
68
68
|
- [FFmpeg](https://ffmpeg.org/download.html) installed and available in system PATH
|
|
69
69
|
- [Tesseract OCR](https://github.com/UB-Mannheim/tesseract/wiki) installed (required for image-based subtitle processing)
|
|
70
|
-
- TMDb API key
|
|
70
|
+
- TMDb API key (optional, for subtitle downloads)
|
|
71
71
|
- OpenSubtitles account (optional, for subtitle downloads)
|
|
72
72
|
|
|
73
73
|
## Quick Start
|
|
@@ -83,10 +83,6 @@ pip install mkv-episode-matcher
|
|
|
83
83
|
mkv-match --show-dir "path/to/your/show"
|
|
84
84
|
```
|
|
85
85
|
|
|
86
|
-
## Documentation
|
|
87
|
-
|
|
88
|
-
Full documentation is available at [https://jsakkos.github.io/mkv-episode-matcher/](https://jsakkos.github.io/mkv-episode-matcher/)
|
|
89
|
-
|
|
90
86
|
## Directory Structure
|
|
91
87
|
|
|
92
88
|
MKV Episode Matcher expects your TV shows to be organized as follows:
|
|
@@ -136,3 +132,6 @@ Distributed under the MIT License. See `LICENSE` for more information.
|
|
|
136
132
|
- [OpenSubtitles](https://www.opensubtitles.com/) for subtitle integration
|
|
137
133
|
- All contributors who have helped improve this project
|
|
138
134
|
|
|
135
|
+
## Documentation
|
|
136
|
+
|
|
137
|
+
Full documentation is available at [https://jsakkos.github.io/mkv-episode-matcher/](https://jsakkos.github.io/mkv-episode-matcher/)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[metadata]
|
|
2
2
|
name = mkv_episode_matcher
|
|
3
|
-
version = 0.4.
|
|
3
|
+
version = 0.4.5
|
|
4
4
|
author = Jonathan Sakkos
|
|
5
5
|
author_email = jonathansakkos@gmail.com
|
|
6
6
|
description = The MKV Episode Matcher is a tool for identifying TV series episodes from MKV files and renaming the files accordingly.
|
|
@@ -2,19 +2,49 @@ version = 1
|
|
|
2
2
|
requires-python = ">=3.9"
|
|
3
3
|
resolution-markers = [
|
|
4
4
|
"(python_full_version >= '3.12' and platform_machine != 'aarch64' and extra != 'extra-19-mkv-episode-matcher-cpu' and extra == 'extra-19-mkv-episode-matcher-cu124') or (python_full_version >= '3.12' and sys_platform != 'linux' and extra != 'extra-19-mkv-episode-matcher-cpu' and extra == 'extra-19-mkv-episode-matcher-cu124')",
|
|
5
|
+
"python_version < '0'",
|
|
6
|
+
"python_version < '0'",
|
|
5
7
|
"(python_full_version >= '3.10' and python_full_version < '3.12' and platform_machine != 'aarch64' and extra != 'extra-19-mkv-episode-matcher-cpu' and extra == 'extra-19-mkv-episode-matcher-cu124') or (python_full_version >= '3.10' and python_full_version < '3.12' and sys_platform != 'linux' and extra != 'extra-19-mkv-episode-matcher-cpu' and extra == 'extra-19-mkv-episode-matcher-cu124')",
|
|
8
|
+
"python_version < '0'",
|
|
9
|
+
"python_version < '0'",
|
|
6
10
|
"(python_full_version < '3.10' and platform_machine != 'aarch64' and extra != 'extra-19-mkv-episode-matcher-cpu' and extra == 'extra-19-mkv-episode-matcher-cu124') or (python_full_version < '3.10' and sys_platform != 'linux' and extra != 'extra-19-mkv-episode-matcher-cpu' and extra == 'extra-19-mkv-episode-matcher-cu124')",
|
|
11
|
+
"python_version < '0'",
|
|
12
|
+
"python_version < '0'",
|
|
7
13
|
"python_full_version >= '3.12' and platform_machine == 'aarch64' and sys_platform == 'linux' and extra != 'extra-19-mkv-episode-matcher-cpu' and extra == 'extra-19-mkv-episode-matcher-cu124'",
|
|
14
|
+
"python_version < '0'",
|
|
15
|
+
"python_version < '0'",
|
|
8
16
|
"python_full_version >= '3.10' and python_full_version < '3.12' and platform_machine == 'aarch64' and sys_platform == 'linux' and extra != 'extra-19-mkv-episode-matcher-cpu' and extra == 'extra-19-mkv-episode-matcher-cu124'",
|
|
17
|
+
"python_version < '0'",
|
|
18
|
+
"python_version < '0'",
|
|
9
19
|
"python_full_version < '3.10' and platform_machine == 'aarch64' and sys_platform == 'linux' and extra != 'extra-19-mkv-episode-matcher-cpu' and extra == 'extra-19-mkv-episode-matcher-cu124'",
|
|
20
|
+
"python_version < '0'",
|
|
21
|
+
"python_version < '0'",
|
|
22
|
+
"python_version < '0'",
|
|
10
23
|
"(python_full_version >= '3.12' and platform_machine != 'aarch64' and sys_platform == 'linux' and extra == 'extra-19-mkv-episode-matcher-cpu' and extra != 'extra-19-mkv-episode-matcher-cu124') or (python_full_version >= '3.12' and sys_platform != 'darwin' and sys_platform != 'linux' and extra == 'extra-19-mkv-episode-matcher-cpu' and extra != 'extra-19-mkv-episode-matcher-cu124')",
|
|
24
|
+
"python_version < '0'",
|
|
25
|
+
"python_version < '0'",
|
|
11
26
|
"(python_full_version >= '3.10' and python_full_version < '3.12' and platform_machine != 'aarch64' and sys_platform == 'linux' and extra == 'extra-19-mkv-episode-matcher-cpu' and extra != 'extra-19-mkv-episode-matcher-cu124') or (python_full_version >= '3.10' and python_full_version < '3.12' and sys_platform != 'darwin' and sys_platform != 'linux' and extra == 'extra-19-mkv-episode-matcher-cpu' and extra != 'extra-19-mkv-episode-matcher-cu124')",
|
|
27
|
+
"python_version < '0'",
|
|
28
|
+
"python_version < '0'",
|
|
12
29
|
"(python_full_version < '3.10' and platform_machine != 'aarch64' and sys_platform == 'linux' and extra == 'extra-19-mkv-episode-matcher-cpu' and extra != 'extra-19-mkv-episode-matcher-cu124') or (python_full_version < '3.10' and sys_platform != 'darwin' and sys_platform != 'linux' and extra == 'extra-19-mkv-episode-matcher-cpu' and extra != 'extra-19-mkv-episode-matcher-cu124')",
|
|
30
|
+
"python_version < '0'",
|
|
31
|
+
"python_version < '0'",
|
|
13
32
|
"(python_full_version >= '3.12' and platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-19-mkv-episode-matcher-cpu' and extra != 'extra-19-mkv-episode-matcher-cu124') or (python_full_version >= '3.12' and sys_platform == 'darwin' and extra == 'extra-19-mkv-episode-matcher-cpu' and extra != 'extra-19-mkv-episode-matcher-cu124')",
|
|
33
|
+
"python_version < '0'",
|
|
34
|
+
"python_version < '0'",
|
|
14
35
|
"(python_full_version >= '3.10' and python_full_version < '3.12' and platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-19-mkv-episode-matcher-cpu' and extra != 'extra-19-mkv-episode-matcher-cu124') or (python_full_version >= '3.10' and python_full_version < '3.12' and sys_platform == 'darwin' and extra == 'extra-19-mkv-episode-matcher-cpu' and extra != 'extra-19-mkv-episode-matcher-cu124')",
|
|
36
|
+
"python_version < '0'",
|
|
37
|
+
"python_version < '0'",
|
|
15
38
|
"(python_full_version < '3.10' and platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-19-mkv-episode-matcher-cpu' and extra != 'extra-19-mkv-episode-matcher-cu124') or (python_full_version < '3.10' and sys_platform == 'darwin' and extra == 'extra-19-mkv-episode-matcher-cpu' and extra != 'extra-19-mkv-episode-matcher-cu124')",
|
|
39
|
+
"python_version < '0'",
|
|
40
|
+
"python_version < '0'",
|
|
41
|
+
"python_version < '0'",
|
|
16
42
|
"python_full_version >= '3.12' and extra != 'extra-19-mkv-episode-matcher-cpu' and extra != 'extra-19-mkv-episode-matcher-cu124'",
|
|
43
|
+
"python_version < '0'",
|
|
44
|
+
"python_version < '0'",
|
|
17
45
|
"python_full_version >= '3.10' and python_full_version < '3.12' and extra != 'extra-19-mkv-episode-matcher-cpu' and extra != 'extra-19-mkv-episode-matcher-cu124'",
|
|
46
|
+
"python_version < '0'",
|
|
47
|
+
"python_version < '0'",
|
|
18
48
|
"python_full_version < '3.10' and extra != 'extra-19-mkv-episode-matcher-cpu' and extra != 'extra-19-mkv-episode-matcher-cu124'",
|
|
19
49
|
]
|
|
20
50
|
conflicts = [[
|
|
@@ -436,7 +466,6 @@ wheels = [
|
|
|
436
466
|
|
|
437
467
|
[[package]]
|
|
438
468
|
name = "mkv-episode-matcher"
|
|
439
|
-
version = "0.3.6.post1.dev2+ged28bc0.d20250122"
|
|
440
469
|
source = { editable = "." }
|
|
441
470
|
dependencies = [
|
|
442
471
|
{ name = "configparser" },
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher/speech_to_text.py
RENAMED
|
File without changes
|
{mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher/subtitle_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
{mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher.egg-info/requires.txt
RENAMED
|
File without changes
|
{mkv_episode_matcher-0.4.0 → mkv_episode_matcher-0.4.5}/mkv_episode_matcher.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|