mkv-episode-matcher 0.3.5__tar.gz → 0.4.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.
Potentially problematic release.
This version of mkv-episode-matcher might be problematic. Click here for more details.
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/.coverage +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/PKG-INFO +15 -3
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/README.md +3 -2
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/docs/cli.md +9 -27
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/docs/configuration.md +5 -1
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/docs/installation.md +18 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/docs/quickstart.md +7 -4
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/mkv_episode_matcher/__main__.py +11 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/mkv_episode_matcher/episode_identification.py +18 -5
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/mkv_episode_matcher/episode_matcher.py +8 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/mkv_episode_matcher/speech_to_text.py +7 -1
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/mkv_episode_matcher/utils.py +14 -4
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/mkv_episode_matcher.egg-info/PKG-INFO +15 -3
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/mkv_episode_matcher.egg-info/requires.txt +13 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/pyproject.toml +46 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/setup.cfg +1 -1
- mkv_episode_matcher-0.4.0/uv.lock +1894 -0
- mkv_episode_matcher-0.3.5/uv.lock +0 -1386
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/.gitattributes +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/.github/funding.yml +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/.github/workflows/documentation.yml +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/.github/workflows/python-publish.yml +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/.github/workflows/tests.yml +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/.gitignore +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/.gitmodules +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/.python-version +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/.vscode/settings.json +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/docs/api/index.md +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/docs/tips.md +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/mkdocs.yml +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/mkv_episode_matcher/.gitattributes +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/mkv_episode_matcher/__init__.py +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/mkv_episode_matcher/config.py +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/mkv_episode_matcher/libraries/pgs2srt/.gitignore +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/mkv_episode_matcher/libraries/pgs2srt/Libraries/SubZero/SubZero.py +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/mkv_episode_matcher/libraries/pgs2srt/Libraries/SubZero/dictionaries/data.py +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/mkv_episode_matcher/libraries/pgs2srt/Libraries/SubZero/post_processing.py +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/mkv_episode_matcher/libraries/pgs2srt/README.md +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/mkv_episode_matcher/libraries/pgs2srt/__init__.py +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/mkv_episode_matcher/libraries/pgs2srt/imagemaker.py +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/mkv_episode_matcher/libraries/pgs2srt/pgs2srt.py +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/mkv_episode_matcher/libraries/pgs2srt/pgsreader.py +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/mkv_episode_matcher/libraries/pgs2srt/requirements.txt +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/mkv_episode_matcher/mkv_to_srt.py +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/mkv_episode_matcher/subtitle_utils.py +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/mkv_episode_matcher/tmdb_client.py +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/mkv_episode_matcher.egg-info/SOURCES.txt +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/mkv_episode_matcher.egg-info/dependency_links.txt +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/mkv_episode_matcher.egg-info/entry_points.txt +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/mkv_episode_matcher.egg-info/top_level.txt +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/setup.py +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/tests/__init__.py +0 -0
- {mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/tests/test_main.py +0 -0
|
Binary file
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: mkv-episode-matcher
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
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
|
|
@@ -25,7 +25,18 @@ Requires-Dist: pytesseract>=0.3.13
|
|
|
25
25
|
Requires-Dist: rapidfuzz>=3.10.1
|
|
26
26
|
Requires-Dist: requests>=2.32.3
|
|
27
27
|
Requires-Dist: tmdb-client>=0.0.1
|
|
28
|
+
Requires-Dist: torch>=2.5.1
|
|
29
|
+
Requires-Dist: torchaudio>=2.5.1
|
|
30
|
+
Requires-Dist: torchvision>=0.20.1
|
|
28
31
|
Requires-Dist: wave>=0.0.2
|
|
32
|
+
Provides-Extra: cpu
|
|
33
|
+
Requires-Dist: torch>=2.5.1; extra == "cpu"
|
|
34
|
+
Requires-Dist: torchvision>=0.20.1; extra == "cpu"
|
|
35
|
+
Requires-Dist: torchaudio>=2.5.1; extra == "cpu"
|
|
36
|
+
Provides-Extra: cu124
|
|
37
|
+
Requires-Dist: torch>=2.5.1; extra == "cu124"
|
|
38
|
+
Requires-Dist: torchvision>=0.20.1; extra == "cu124"
|
|
39
|
+
Requires-Dist: torchaudio>=2.5.1; extra == "cu124"
|
|
29
40
|
|
|
30
41
|
# MKV Episode Matcher
|
|
31
42
|
|
|
@@ -65,10 +76,11 @@ Automatically match and rename your MKV TV episodes using The Movie Database (TM
|
|
|
65
76
|
```bash
|
|
66
77
|
pip install mkv-episode-matcher
|
|
67
78
|
```
|
|
79
|
+
2. Download .srt subtitles files to ~/.mkv-episode-matcher/cache/data/Show Name/
|
|
68
80
|
|
|
69
|
-
|
|
81
|
+
3. Run on your show directory:
|
|
70
82
|
```bash
|
|
71
|
-
mkv-match --show-dir "path/to/your/show"
|
|
83
|
+
mkv-match --show-dir "path/to/your/show"
|
|
72
84
|
```
|
|
73
85
|
|
|
74
86
|
## Documentation
|
|
@@ -36,10 +36,11 @@ Automatically match and rename your MKV TV episodes using The Movie Database (TM
|
|
|
36
36
|
```bash
|
|
37
37
|
pip install mkv-episode-matcher
|
|
38
38
|
```
|
|
39
|
+
2. Download .srt subtitles files to ~/.mkv-episode-matcher/cache/data/Show Name/
|
|
39
40
|
|
|
40
|
-
|
|
41
|
+
3. Run on your show directory:
|
|
41
42
|
```bash
|
|
42
|
-
mkv-match --show-dir "path/to/your/show"
|
|
43
|
+
mkv-match --show-dir "path/to/your/show"
|
|
43
44
|
```
|
|
44
45
|
|
|
45
46
|
## Documentation
|
|
@@ -16,14 +16,14 @@ mkv-match --show-dir "/path/to/show" --season 1
|
|
|
16
16
|
|
|
17
17
|
## Command Options
|
|
18
18
|
|
|
19
|
-
| Option
|
|
20
|
-
|
|
21
|
-
| `--show-dir`
|
|
22
|
-
| `--season`
|
|
23
|
-
| `--dry-run`
|
|
24
|
-
| `--get-subs`
|
|
25
|
-
| `--tmdb-api-key`
|
|
26
|
-
| `--tesseract-path` | Path to Tesseract
|
|
19
|
+
| Option | Description | Default |
|
|
20
|
+
| ------------------ | --------------------------- | ---------- |
|
|
21
|
+
| `--show-dir` | Show directory path | None |
|
|
22
|
+
| `--season` | Season number to process | None (all) |
|
|
23
|
+
| `--dry-run` | Test without making changes | False |
|
|
24
|
+
| `--get-subs` | Download subtitles | False |
|
|
25
|
+
| `--tmdb-api-key` | TMDb API key | None |
|
|
26
|
+
| `--tesseract-path` | Path to Tesseract | None |
|
|
27
27
|
|
|
28
28
|
## Examples
|
|
29
29
|
|
|
@@ -55,25 +55,6 @@ mkv-match \
|
|
|
55
55
|
--dry-run true
|
|
56
56
|
```
|
|
57
57
|
|
|
58
|
-
## Environment Variables
|
|
59
|
-
|
|
60
|
-
Alternative to command line options:
|
|
61
|
-
|
|
62
|
-
```bash
|
|
63
|
-
export TMDB_API_KEY="your_key"
|
|
64
|
-
export SHOW_DIR="/path/to/shows"
|
|
65
|
-
mkv-match
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
## Exit Codes
|
|
69
|
-
|
|
70
|
-
| Code | Meaning |
|
|
71
|
-
|------|---------|
|
|
72
|
-
| 0 | Success |
|
|
73
|
-
| 1 | General error |
|
|
74
|
-
| 2 | Configuration error |
|
|
75
|
-
| 3 | API error |
|
|
76
|
-
|
|
77
58
|
## Logging
|
|
78
59
|
|
|
79
60
|
Logs are stored in:
|
|
@@ -89,3 +70,4 @@ Logs are stored in:
|
|
|
89
70
|
2. Use dry-run first to test
|
|
90
71
|
3. Check logs for details
|
|
91
72
|
4. Use full paths for reliability
|
|
73
|
+
5. Avoid using a trailing slash in paths
|
|
@@ -102,4 +102,8 @@ Adjust based on your system's capabilities:
|
|
|
102
102
|
tesseract_path = /path/to/tesseract
|
|
103
103
|
```
|
|
104
104
|
|
|
105
|
-
Required
|
|
105
|
+
Required for processing image-based subtitles. Common paths:
|
|
106
|
+
- Windows: `C:\Program Files\Tesseract-OCR\tesseract.exe`
|
|
107
|
+
- Linux/macOS: `/usr/bin/tesseract`
|
|
108
|
+
|
|
109
|
+
Make sure Tesseract OCR is properly installed before using this feature.
|
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# Installation Guide
|
|
2
2
|
|
|
3
|
+
## Prerequisites
|
|
4
|
+
|
|
5
|
+
### Required System Dependencies
|
|
6
|
+
|
|
7
|
+
1. **FFmpeg**
|
|
8
|
+
- Windows: Download from [FFmpeg website](https://ffmpeg.org/download.html)
|
|
9
|
+
- Linux: `sudo apt install ffmpeg` or equivalent
|
|
10
|
+
- macOS: `brew install ffmpeg`
|
|
11
|
+
- Verify installation: `ffmpeg -version`
|
|
12
|
+
|
|
13
|
+
2. **Tesseract OCR**
|
|
14
|
+
- Windows: Install from [UB-Mannheim](https://github.com/UB-Mannheim/tesseract/wiki)
|
|
15
|
+
- Linux: `sudo apt install tesseract-ocr` or equivalent
|
|
16
|
+
- macOS: `brew install tesseract`
|
|
17
|
+
- Verify installation: `tesseract --version`
|
|
18
|
+
|
|
19
|
+
Make sure both FFmpeg and Tesseract are added to your system PATH.
|
|
20
|
+
|
|
3
21
|
## Basic Installation
|
|
4
22
|
|
|
5
23
|
Install MKV Episode Matcher using pip:
|
|
@@ -41,7 +41,6 @@ Show Name/
|
|
|
41
41
|
│ ├── episode1.mkv
|
|
42
42
|
│ └── episode2.mkv
|
|
43
43
|
```
|
|
44
|
-
<!-- Add a note about the .srt reference files -->
|
|
45
44
|
|
|
46
45
|
## Reference Subtitle File Structure
|
|
47
46
|
|
|
@@ -60,10 +59,14 @@ The configuration file is automatically generated at `~/.mkv-episode-matcher/con
|
|
|
60
59
|
|
|
61
60
|
```ini
|
|
62
61
|
[Config]
|
|
63
|
-
tmdb_api_key =
|
|
64
|
-
|
|
65
|
-
show_dir = /path/to/shows
|
|
62
|
+
tmdb_api_key = your_tmdb_api_key
|
|
63
|
+
show_dir = /path/to/show
|
|
66
64
|
max_threads = 4
|
|
65
|
+
open_subtitles_api_key = your_opensubs_key
|
|
66
|
+
open_subtitles_user_agent = your_user_agent
|
|
67
|
+
open_subtitles_username = your_username
|
|
68
|
+
open_subtitles_password = your_password
|
|
69
|
+
tesseract_path = C:\Program Files\Tesseract-OCR\tesseract.exe
|
|
67
70
|
```
|
|
68
71
|
|
|
69
72
|
## Next Steps
|
|
@@ -92,7 +92,18 @@ def main():
|
|
|
92
92
|
nargs="?",
|
|
93
93
|
help="Path to the tesseract executable (default: None)",
|
|
94
94
|
)
|
|
95
|
+
parser.add_argument(
|
|
96
|
+
"--check-gpu",
|
|
97
|
+
type=bool,
|
|
98
|
+
default=False,
|
|
99
|
+
nargs="?",
|
|
100
|
+
help="Check if GPU is available (default: False)",
|
|
101
|
+
)
|
|
95
102
|
args = parser.parse_args()
|
|
103
|
+
if args.check_gpu:
|
|
104
|
+
from mkv_episode_matcher.speech_to_text import check_gpu_support
|
|
105
|
+
check_gpu_support()
|
|
106
|
+
return
|
|
96
107
|
logger.debug(f"Command-line arguments: {args}")
|
|
97
108
|
open_subtitles_api_key = ""
|
|
98
109
|
open_subtitles_user_agent = ""
|
|
@@ -96,14 +96,27 @@ class EpisodeMatcher:
|
|
|
96
96
|
# Load Whisper model
|
|
97
97
|
model = whisper.load_model("base", device=self.device)
|
|
98
98
|
|
|
99
|
-
# Get season-specific reference files
|
|
99
|
+
# Get season-specific reference files using multiple patterns
|
|
100
100
|
reference_dir = self.cache_dir / "data" / self.show_name
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
101
|
+
|
|
102
|
+
# Create season patterns for different formats
|
|
103
|
+
patterns = [
|
|
104
|
+
f"S{season_number:02d}E", # S01E01
|
|
105
|
+
f"S{season_number}E", # S1E01
|
|
106
|
+
f"{season_number:02d}x", # 01x01
|
|
107
|
+
f"{season_number}x", # 1x01
|
|
105
108
|
]
|
|
106
109
|
|
|
110
|
+
reference_files = []
|
|
111
|
+
for pattern in patterns:
|
|
112
|
+
files = [f for f in reference_dir.glob("*.srt")
|
|
113
|
+
if any(re.search(f"{p}\\d+", f.name, re.IGNORECASE)
|
|
114
|
+
for p in patterns)]
|
|
115
|
+
reference_files.extend(files)
|
|
116
|
+
|
|
117
|
+
# Remove duplicates while preserving order
|
|
118
|
+
reference_files = list(dict.fromkeys(reference_files))
|
|
119
|
+
|
|
107
120
|
if not reference_files:
|
|
108
121
|
logger.error(f"No reference files found for season {season_number}")
|
|
109
122
|
return None
|
{mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/mkv_episode_matcher/episode_matcher.py
RENAMED
|
@@ -29,6 +29,14 @@ def process_show(season=None, dry_run=False, get_subs=False):
|
|
|
29
29
|
show_name = clean_text(os.path.basename(show_dir))
|
|
30
30
|
matcher = EpisodeMatcher(CACHE_DIR, show_name)
|
|
31
31
|
|
|
32
|
+
# Early check for reference files
|
|
33
|
+
reference_dir = Path(CACHE_DIR) / "data" / show_name
|
|
34
|
+
reference_files = list(reference_dir.glob("*.srt"))
|
|
35
|
+
if not reference_files:
|
|
36
|
+
logger.error(f"No reference subtitle files found in {reference_dir}")
|
|
37
|
+
logger.info("Please download reference subtitles first")
|
|
38
|
+
return
|
|
39
|
+
|
|
32
40
|
season_paths = get_valid_seasons(show_dir)
|
|
33
41
|
if not season_paths:
|
|
34
42
|
logger.warning(f"No seasons with .mkv files found")
|
{mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/mkv_episode_matcher/speech_to_text.py
RENAMED
|
@@ -87,4 +87,10 @@ def extract_audio(mkv_file, output_dir):
|
|
|
87
87
|
else:
|
|
88
88
|
logger.info(f"Audio file {wav_file} already exists, skipping extraction")
|
|
89
89
|
|
|
90
|
-
return wav_file
|
|
90
|
+
return wav_file
|
|
91
|
+
def check_gpu_support():
|
|
92
|
+
logger.info('Checking GPU support...')
|
|
93
|
+
if torch.cuda.is_available():
|
|
94
|
+
logger.info(f"CUDA is available. Using GPU: {torch.cuda.get_device_name(0)}")
|
|
95
|
+
else:
|
|
96
|
+
logger.warning("CUDA not available. Using CPU. Refer to https://pytorch.org/get-started/locally/ for GPU support.")
|
|
@@ -300,7 +300,7 @@ def extract_srt_text(filepath):
|
|
|
300
300
|
|
|
301
301
|
def extract_season_episode(filename):
|
|
302
302
|
"""
|
|
303
|
-
Extract season and episode numbers from filename.
|
|
303
|
+
Extract season and episode numbers from filename with support for multiple formats.
|
|
304
304
|
|
|
305
305
|
Args:
|
|
306
306
|
filename (str): Filename to parse
|
|
@@ -308,10 +308,20 @@ def extract_season_episode(filename):
|
|
|
308
308
|
Returns:
|
|
309
309
|
tuple: (season_number, episode_number)
|
|
310
310
|
"""
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
311
|
+
# List of patterns to try
|
|
312
|
+
patterns = [
|
|
313
|
+
r'S(\d+)E(\d+)', # S01E01
|
|
314
|
+
r'(\d+)x(\d+)', # 1x01 or 01x01
|
|
315
|
+
r'Season\s*(\d+).*?(\d+)' # Season 1 - 01
|
|
316
|
+
]
|
|
317
|
+
|
|
318
|
+
for pattern in patterns:
|
|
319
|
+
match = re.search(pattern, filename, re.IGNORECASE)
|
|
320
|
+
if match:
|
|
321
|
+
return int(match.group(1)), int(match.group(2))
|
|
322
|
+
|
|
314
323
|
return None, None
|
|
324
|
+
|
|
315
325
|
def process_srt_files(show_dir):
|
|
316
326
|
"""
|
|
317
327
|
Process all SRT files in the given directory and its subdirectories.
|
{mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/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.
|
|
3
|
+
Version: 0.4.0
|
|
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
|
|
@@ -25,7 +25,18 @@ Requires-Dist: pytesseract>=0.3.13
|
|
|
25
25
|
Requires-Dist: rapidfuzz>=3.10.1
|
|
26
26
|
Requires-Dist: requests>=2.32.3
|
|
27
27
|
Requires-Dist: tmdb-client>=0.0.1
|
|
28
|
+
Requires-Dist: torch>=2.5.1
|
|
29
|
+
Requires-Dist: torchaudio>=2.5.1
|
|
30
|
+
Requires-Dist: torchvision>=0.20.1
|
|
28
31
|
Requires-Dist: wave>=0.0.2
|
|
32
|
+
Provides-Extra: cpu
|
|
33
|
+
Requires-Dist: torch>=2.5.1; extra == "cpu"
|
|
34
|
+
Requires-Dist: torchvision>=0.20.1; extra == "cpu"
|
|
35
|
+
Requires-Dist: torchaudio>=2.5.1; extra == "cpu"
|
|
36
|
+
Provides-Extra: cu124
|
|
37
|
+
Requires-Dist: torch>=2.5.1; extra == "cu124"
|
|
38
|
+
Requires-Dist: torchvision>=0.20.1; extra == "cu124"
|
|
39
|
+
Requires-Dist: torchaudio>=2.5.1; extra == "cu124"
|
|
29
40
|
|
|
30
41
|
# MKV Episode Matcher
|
|
31
42
|
|
|
@@ -65,10 +76,11 @@ Automatically match and rename your MKV TV episodes using The Movie Database (TM
|
|
|
65
76
|
```bash
|
|
66
77
|
pip install mkv-episode-matcher
|
|
67
78
|
```
|
|
79
|
+
2. Download .srt subtitles files to ~/.mkv-episode-matcher/cache/data/Show Name/
|
|
68
80
|
|
|
69
|
-
|
|
81
|
+
3. Run on your show directory:
|
|
70
82
|
```bash
|
|
71
|
-
mkv-match --show-dir "path/to/your/show"
|
|
83
|
+
mkv-match --show-dir "path/to/your/show"
|
|
72
84
|
```
|
|
73
85
|
|
|
74
86
|
## Documentation
|
{mkv_episode_matcher-0.3.5 → mkv_episode_matcher-0.4.0}/mkv_episode_matcher.egg-info/requires.txt
RENAMED
|
@@ -7,4 +7,17 @@ pytesseract>=0.3.13
|
|
|
7
7
|
rapidfuzz>=3.10.1
|
|
8
8
|
requests>=2.32.3
|
|
9
9
|
tmdb-client>=0.0.1
|
|
10
|
+
torch>=2.5.1
|
|
11
|
+
torchaudio>=2.5.1
|
|
12
|
+
torchvision>=0.20.1
|
|
10
13
|
wave>=0.0.2
|
|
14
|
+
|
|
15
|
+
[cpu]
|
|
16
|
+
torch>=2.5.1
|
|
17
|
+
torchvision>=0.20.1
|
|
18
|
+
torchaudio>=2.5.1
|
|
19
|
+
|
|
20
|
+
[cu124]
|
|
21
|
+
torch>=2.5.1
|
|
22
|
+
torchvision>=0.20.1
|
|
23
|
+
torchaudio>=2.5.1
|
|
@@ -32,6 +32,9 @@ dependencies = [
|
|
|
32
32
|
"rapidfuzz>=3.10.1",
|
|
33
33
|
"requests>=2.32.3",
|
|
34
34
|
"tmdb-client>=0.0.1",
|
|
35
|
+
"torch>=2.5.1",
|
|
36
|
+
"torchaudio>=2.5.1",
|
|
37
|
+
"torchvision>=0.20.1",
|
|
35
38
|
"wave>=0.0.2",
|
|
36
39
|
]
|
|
37
40
|
[project.urls]
|
|
@@ -50,6 +53,49 @@ dev = [
|
|
|
50
53
|
"chardet>=5.2.0",
|
|
51
54
|
]
|
|
52
55
|
|
|
56
|
+
[project.optional-dependencies]
|
|
57
|
+
cpu = [
|
|
58
|
+
"torch>=2.5.1",
|
|
59
|
+
"torchvision>=0.20.1",
|
|
60
|
+
"torchaudio>=2.5.1",
|
|
61
|
+
]
|
|
62
|
+
cu124 = [
|
|
63
|
+
"torch>=2.5.1",
|
|
64
|
+
"torchvision>=0.20.1",
|
|
65
|
+
"torchaudio>=2.5.1",
|
|
66
|
+
]
|
|
67
|
+
|
|
68
|
+
[tool.uv]
|
|
69
|
+
conflicts = [
|
|
70
|
+
[
|
|
71
|
+
{ extra = "cpu" },
|
|
72
|
+
{ extra = "cu124" },
|
|
73
|
+
],
|
|
74
|
+
]
|
|
75
|
+
|
|
76
|
+
[tool.uv.sources]
|
|
77
|
+
torch = [
|
|
78
|
+
{ index = "pytorch-cpu", extra = "cpu" },
|
|
79
|
+
{ index = "pytorch-cu124", extra = "cu124" },
|
|
80
|
+
]
|
|
81
|
+
torchvision = [
|
|
82
|
+
{ index = "pytorch-cpu", extra = "cpu" },
|
|
83
|
+
{ index = "pytorch-cu124", extra = "cu124" },
|
|
84
|
+
]
|
|
85
|
+
torchaudio = [
|
|
86
|
+
{ index = "pytorch-cpu", extra = "cpu" },
|
|
87
|
+
{ index = "pytorch-cu124", extra = "cu124" },
|
|
88
|
+
]
|
|
89
|
+
|
|
90
|
+
[[tool.uv.index]]
|
|
91
|
+
name = "pytorch-cpu"
|
|
92
|
+
url = "https://download.pytorch.org/whl/cpu"
|
|
93
|
+
explicit = true
|
|
94
|
+
|
|
95
|
+
[[tool.uv.index]]
|
|
96
|
+
name = "pytorch-cu124"
|
|
97
|
+
url = "https://download.pytorch.org/whl/cu124"
|
|
98
|
+
explicit = true
|
|
53
99
|
|
|
54
100
|
[tool.ruff.format]
|
|
55
101
|
preview = true
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[metadata]
|
|
2
2
|
name = mkv_episode_matcher
|
|
3
|
-
version = 0.
|
|
3
|
+
version = 0.4.0
|
|
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.
|