mkv-episode-matcher 0.1.11__tar.gz → 0.1.12__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.

Files changed (135) hide show
  1. mkv_episode_matcher-0.1.12/.python-version +1 -0
  2. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/PKG-INFO +10 -13
  3. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/mkv_episode_matcher/episode_matcher.py +36 -12
  4. mkv_episode_matcher-0.1.12/mkv_episode_matcher/notebooks/whisper.ipynb +122 -0
  5. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/mkv_episode_matcher.egg-info/PKG-INFO +10 -13
  6. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/mkv_episode_matcher.egg-info/SOURCES.txt +6 -1
  7. mkv_episode_matcher-0.1.12/mkv_episode_matcher.egg-info/requires.txt +8 -0
  8. mkv_episode_matcher-0.1.12/old_pyproject.toml +68 -0
  9. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/pyproject.toml +10 -16
  10. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/setup.cfg +1 -1
  11. mkv_episode_matcher-0.1.12/tests/__init__.py +0 -0
  12. mkv_episode_matcher-0.1.12/uv.lock +395 -0
  13. mkv_episode_matcher-0.1.11/mkv_episode_matcher.egg-info/requires.txt +0 -7
  14. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/.gitattributes +0 -0
  15. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/.github/funding.yml +0 -0
  16. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/.github/workflows/python-publish.yml +0 -0
  17. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/.gitignore +0 -0
  18. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/.gitmodules +0 -0
  19. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/.readthedocs.yml +0 -0
  20. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/.vscode/settings.json +0 -0
  21. /mkv_episode_matcher-0.1.11/docs/_build/html/_static/scripts/furo-extensions.js → /mkv_episode_matcher-0.1.12/README.md +0 -0
  22. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/README.rst +0 -0
  23. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/dist/mkv_episode_matcher-0.1.1-py3-none-any.whl +0 -0
  24. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/dist/mkv_episode_matcher-0.1.1.tar.gz +0 -0
  25. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/dist/mkv_episode_matcher-0.1.2-py3-none-any.whl +0 -0
  26. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/dist/mkv_episode_matcher-0.1.2.tar.gz +0 -0
  27. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/dist/mkv_episode_matcher-0.1.3-py3-none-any.whl +0 -0
  28. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/dist/mkv_episode_matcher-0.1.3.tar.gz +0 -0
  29. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/dist/mkv_episode_matcher-0.1.4-py3-none-any.whl +0 -0
  30. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/dist/mkv_episode_matcher-0.1.4.tar.gz +0 -0
  31. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/dist/mkv_episode_matcher-0.1.5-py3-none-any.whl +0 -0
  32. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/dist/mkv_episode_matcher-0.1.5.tar.gz +0 -0
  33. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/Makefile +0 -0
  34. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/doctrees/environment.pickle +0 -0
  35. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/doctrees/index.doctree +0 -0
  36. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/.buildinfo +0 -0
  37. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/.doctrees/api.doctree +0 -0
  38. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/.doctrees/environment.pickle +0 -0
  39. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/.doctrees/generated/mkv_episode_matcher.doctree +0 -0
  40. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/.doctrees/index.doctree +0 -0
  41. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/.doctrees/mkv_episode_matcher.doctree +0 -0
  42. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/.doctrees/readme.doctree +0 -0
  43. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_sources/api.rst.txt +0 -0
  44. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_sources/generated/mkv_episode_matcher.rst.txt +0 -0
  45. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_sources/index.rst.txt +0 -0
  46. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_sources/mkv_episode_matcher.rst.txt +0 -0
  47. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_sources/readme.rst.txt +0 -0
  48. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/_sphinx_javascript_frameworks_compat.js +0 -0
  49. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/alabaster.css +0 -0
  50. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/basic.css +0 -0
  51. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/css/badge_only.css +0 -0
  52. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  53. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  54. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  55. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  56. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
  57. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/css/fonts/fontawesome-webfont.svg +0 -0
  58. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  59. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
  60. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  61. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/css/fonts/lato-bold-italic.woff +0 -0
  62. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  63. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/css/fonts/lato-bold.woff +0 -0
  64. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/css/fonts/lato-bold.woff2 +0 -0
  65. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/css/fonts/lato-normal-italic.woff +0 -0
  66. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  67. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/css/fonts/lato-normal.woff +0 -0
  68. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/css/fonts/lato-normal.woff2 +0 -0
  69. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/css/theme.css +0 -0
  70. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/custom.css +0 -0
  71. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/debug.css +0 -0
  72. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/doctools.js +0 -0
  73. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/documentation_options.js +0 -0
  74. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/file.png +0 -0
  75. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/jquery.js +0 -0
  76. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/js/badge_only.js +0 -0
  77. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/js/html5shiv-printshiv.min.js +0 -0
  78. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/js/html5shiv.min.js +0 -0
  79. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/js/theme.js +0 -0
  80. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/language_data.js +0 -0
  81. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/minus.png +0 -0
  82. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/plus.png +0 -0
  83. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/pygments.css +0 -0
  84. /mkv_episode_matcher-0.1.11/mkv_episode_matcher/libraries/pgs2srt/__init__.py → /mkv_episode_matcher-0.1.12/docs/_build/html/_static/scripts/furo-extensions.js +0 -0
  85. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/scripts/furo.js +0 -0
  86. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/scripts/furo.js.LICENSE.txt +0 -0
  87. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/scripts/furo.js.map +0 -0
  88. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/searchtools.js +0 -0
  89. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/skeleton.css +0 -0
  90. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/sphinx_highlight.js +0 -0
  91. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/styles/furo-extensions.css +0 -0
  92. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/styles/furo-extensions.css.map +0 -0
  93. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/styles/furo.css +0 -0
  94. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/_static/styles/furo.css.map +0 -0
  95. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/api.html +0 -0
  96. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/generated/mkv_episode_matcher.html +0 -0
  97. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/genindex.html +0 -0
  98. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/index.html +0 -0
  99. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/mkv_episode_matcher.html +0 -0
  100. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/objects.inv +0 -0
  101. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/py-modindex.html +0 -0
  102. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/readme.html +0 -0
  103. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/search.html +0 -0
  104. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/_build/html/searchindex.js +0 -0
  105. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/api.rst +0 -0
  106. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/conf.py +0 -0
  107. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/generated/mkv_episode_matcher.rst +0 -0
  108. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/index.rst +0 -0
  109. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/make.bat +0 -0
  110. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/mkv_episode_matcher.rst +0 -0
  111. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/readme.rst +0 -0
  112. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/docs/requirements.txt +0 -0
  113. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/mkv_episode_matcher/.gitattributes +0 -0
  114. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/mkv_episode_matcher/__init__.py +0 -0
  115. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/mkv_episode_matcher/__main__.py +0 -0
  116. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/mkv_episode_matcher/config.py +0 -0
  117. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/mkv_episode_matcher/libraries/pgs2srt/.gitignore +0 -0
  118. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/mkv_episode_matcher/libraries/pgs2srt/Libraries/SubZero/SubZero.py +0 -0
  119. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/mkv_episode_matcher/libraries/pgs2srt/Libraries/SubZero/dictionaries/data.py +0 -0
  120. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/mkv_episode_matcher/libraries/pgs2srt/Libraries/SubZero/post_processing.py +0 -0
  121. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/mkv_episode_matcher/libraries/pgs2srt/README.md +0 -0
  122. {mkv_episode_matcher-0.1.11/tests → mkv_episode_matcher-0.1.12/mkv_episode_matcher/libraries/pgs2srt}/__init__.py +0 -0
  123. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/mkv_episode_matcher/libraries/pgs2srt/imagemaker.py +0 -0
  124. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/mkv_episode_matcher/libraries/pgs2srt/pgs2srt.py +0 -0
  125. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/mkv_episode_matcher/libraries/pgs2srt/pgsreader.py +0 -0
  126. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/mkv_episode_matcher/libraries/pgs2srt/requirements.txt +0 -0
  127. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/mkv_episode_matcher/mkv_to_srt.py +0 -0
  128. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/mkv_episode_matcher/notebooks/get_subtitles_test.ipynb +0 -0
  129. /mkv_episode_matcher-0.1.11/mkv_episode_matcher/requirements.txt → /mkv_episode_matcher-0.1.12/mkv_episode_matcher/old_requirements.txt +0 -0
  130. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/mkv_episode_matcher/tmdb_client.py +0 -0
  131. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/mkv_episode_matcher/utils.py +0 -0
  132. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/mkv_episode_matcher.egg-info/dependency_links.txt +0 -0
  133. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/mkv_episode_matcher.egg-info/entry_points.txt +0 -0
  134. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/mkv_episode_matcher.egg-info/top_level.txt +0 -0
  135. {mkv_episode_matcher-0.1.11 → mkv_episode_matcher-0.1.12}/setup.py +0 -0
@@ -0,0 +1 @@
1
+ 3.12
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mkv-episode-matcher
3
- Version: 0.1.11
3
+ Version: 0.1.12
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
@@ -11,22 +11,19 @@ Project-URL: Issues, https://github.com/Jsakkos/mkv-episode-matcher/issues
11
11
  Project-URL: Source, https://github.com/Jsakkos/mkv-episode-matcher
12
12
  Classifier: Development Status :: 4 - Beta
13
13
  Classifier: Programming Language :: Python
14
- Classifier: Programming Language :: Python :: 3.8
15
- Classifier: Programming Language :: Python :: 3.9
16
- Classifier: Programming Language :: Python :: 3.10
17
- Classifier: Programming Language :: Python :: 3.11
18
14
  Classifier: Programming Language :: Python :: 3.12
19
15
  Classifier: Programming Language :: Python :: Implementation :: CPython
20
16
  Classifier: Programming Language :: Python :: Implementation :: PyPy
21
- Requires-Python: >=3.8
17
+ Requires-Python: >=3.12
22
18
  Description-Content-Type: text/x-rst
23
- Requires-Dist: requests
24
- Requires-Dist: loguru
25
- Requires-Dist: pillow
26
- Requires-Dist: configparser
27
- Requires-Dist: tmdb_client
28
- Requires-Dist: pytesseract
29
- Requires-Dist: opensubtitlescom
19
+ Requires-Dist: configparser>=7.1.0
20
+ Requires-Dist: ffmpeg>=1.4
21
+ Requires-Dist: loguru>=0.7.2
22
+ Requires-Dist: numpy>=2.1.3
23
+ Requires-Dist: opensubtitlescom>=0.1.5
24
+ Requires-Dist: pytesseract>=0.3.13
25
+ Requires-Dist: requests>=2.32.3
26
+ Requires-Dist: tmdb-client>=0.0.1
30
27
 
31
28
  ===================
32
29
  MKV Episode Matcher
@@ -16,46 +16,70 @@ from mkv_episode_matcher.utils import check_filename, cleanup_ocr_files, get_sub
16
16
  def process_show(season=None, dry_run=False, get_subs=False):
17
17
  """
18
18
  Process the show by downloading episode images and finding matching episodes.
19
-
20
19
  Args:
21
20
  season (int, optional): The season number to process. If provided, only that season will be processed. Defaults to None.
22
- force (bool, optional): Whether to force re-processing of episodes even if they already exist. Defaults to False.
23
21
  dry_run (bool, optional): Whether to perform a dry run without actually processing the episodes. Defaults to False.
24
- threshold (float, optional): The threshold value for matching episodes. Defaults to None.
22
+ get_subs (bool, optional): Whether to download subtitles for the episodes. Defaults to False.
25
23
  """
26
24
  config = get_config(CONFIG_FILE)
27
25
  show_dir = config.get("show_dir")
28
26
  show_name = os.path.basename(show_dir)
29
27
  logger.info(f"Processing show '{show_name}'...")
28
+
30
29
  show_id = fetch_show_id(show_name)
31
-
32
30
  if show_id is None:
33
31
  logger.error(f"Could not find show '{os.path.basename(show_dir)}' on TMDb.")
34
32
  return
33
+
34
+ # Get all season directories
35
35
  season_paths = [
36
36
  os.path.join(show_dir, d)
37
37
  for d in os.listdir(show_dir)
38
38
  if os.path.isdir(os.path.join(show_dir, d))
39
39
  ]
40
+
41
+ # Filter seasons to only include those with .mkv files
42
+ valid_season_paths = []
43
+ for season_path in season_paths:
44
+ mkv_files = [
45
+ f for f in os.listdir(season_path)
46
+ if f.endswith(".mkv")
47
+ ]
48
+ if mkv_files:
49
+ valid_season_paths.append(season_path)
50
+
51
+ if not valid_season_paths:
52
+ logger.warning(f"No seasons with .mkv files found in show '{show_name}'")
53
+ return
54
+
40
55
  logger.info(
41
- f"Found {len(season_paths)} seasons for show '{os.path.basename(show_dir)}'"
56
+ f"Found {len(valid_season_paths)} seasons with .mkv files for show '{show_name}'"
42
57
  )
58
+
59
+ # Extract season numbers from valid paths
43
60
  seasons_to_process = [
44
- int(os.path.basename(season_path).split()[-1]) for season_path in season_paths
61
+ int(os.path.basename(season_path).split()[-1])
62
+ for season_path in valid_season_paths
45
63
  ]
64
+
46
65
  if get_subs:
47
66
  get_subtitles(show_id, seasons=set(seasons_to_process))
67
+
48
68
  if season is not None:
69
+ # If specific season requested, check if it has .mkv files
70
+ season_path = os.path.join(show_dir, f"Season {season}")
71
+ if season_path not in valid_season_paths:
72
+ logger.warning(f"Season {season} has no .mkv files to process")
73
+ return
74
+
49
75
  mkv_files = [
50
- os.path.join(show_dir, season)
51
- for f in os.listdir(show_dir)
76
+ os.path.join(season_path, f)
77
+ for f in os.listdir(season_path)
52
78
  if f.endswith(".mkv")
53
79
  ]
54
-
55
- season_path = os.path.join(show_dir, f"Season {season}")
56
80
  else:
57
- for season_path in os.listdir(show_dir):
58
- season_path = os.path.join(show_dir, season_path)
81
+ # Process all valid seasons
82
+ for season_path in valid_season_paths:
59
83
  mkv_files = [
60
84
  os.path.join(season_path, f)
61
85
  for f in os.listdir(season_path)
@@ -0,0 +1,122 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 1,
6
+ "metadata": {},
7
+ "outputs": [
8
+ {
9
+ "ename": "OSError",
10
+ "evalue": "[WinError 126] The specified module could not be found. Error loading \"c:\\Users\\Jonathan\\anaconda3\\envs\\whisper\\Lib\\site-packages\\torch\\lib\\fbgemm.dll\" or one of its dependencies.",
11
+ "output_type": "error",
12
+ "traceback": [
13
+ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
14
+ "\u001b[1;31mOSError\u001b[0m Traceback (most recent call last)",
15
+ "Cell \u001b[1;32mIn[1], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mwhisper\u001b[39;00m\n\u001b[0;32m 2\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mos\u001b[39;00m\n",
16
+ "File \u001b[1;32mc:\\Users\\Jonathan\\anaconda3\\envs\\whisper\\Lib\\site-packages\\whisper\\__init__.py:8\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mwarnings\u001b[39;00m\n\u001b[0;32m 6\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mtyping\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m List, Optional, Union\n\u001b[1;32m----> 8\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mtorch\u001b[39;00m\n\u001b[0;32m 9\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mtqdm\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m tqdm\n\u001b[0;32m 11\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01maudio\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m load_audio, log_mel_spectrogram, pad_or_trim\n",
17
+ "File \u001b[1;32mc:\\Users\\Jonathan\\anaconda3\\envs\\whisper\\Lib\\site-packages\\torch\\__init__.py:148\u001b[0m\n\u001b[0;32m 146\u001b[0m err \u001b[38;5;241m=\u001b[39m ctypes\u001b[38;5;241m.\u001b[39mWinError(ctypes\u001b[38;5;241m.\u001b[39mget_last_error())\n\u001b[0;32m 147\u001b[0m err\u001b[38;5;241m.\u001b[39mstrerror \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m Error loading \u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mdll\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m or one of its dependencies.\u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m--> 148\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m err\n\u001b[0;32m 150\u001b[0m kernel32\u001b[38;5;241m.\u001b[39mSetErrorMode(prev_error_mode)\n\u001b[0;32m 153\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_preload_cuda_deps\u001b[39m(lib_folder, lib_name):\n",
18
+ "\u001b[1;31mOSError\u001b[0m: [WinError 126] The specified module could not be found. Error loading \"c:\\Users\\Jonathan\\anaconda3\\envs\\whisper\\Lib\\site-packages\\torch\\lib\\fbgemm.dll\" or one of its dependencies."
19
+ ]
20
+ }
21
+ ],
22
+ "source": [
23
+ "import whisper\n",
24
+ "import os\n",
25
+ "\n"
26
+ ]
27
+ },
28
+ {
29
+ "cell_type": "code",
30
+ "execution_count": null,
31
+ "metadata": {},
32
+ "outputs": [
33
+ {
34
+ "ename": "",
35
+ "evalue": "",
36
+ "output_type": "error",
37
+ "traceback": [
38
+ "\u001b[1;31mRunning cells with 'MKV-GPU (Python 3.8.10)' requires the ipykernel package.\n",
39
+ "\u001b[1;31mRun the following command to install 'ipykernel' into the Python environment. \n",
40
+ "\u001b[1;31mCommand: 'conda install -n MKV-GPU ipykernel --update-deps --force-reinstall'"
41
+ ]
42
+ }
43
+ ],
44
+ "source": [
45
+ "import torch\n",
46
+ "\n",
47
+ "if torch.cuda.is_available():\n",
48
+ " print(f\"CUDA is available. Using GPU: {torch.cuda.get_device_name(0)}\")\n",
49
+ "else:\n",
50
+ " print(\"CUDA is not available. Using CPU.\")\n",
51
+ "\n",
52
+ "# It will print out the GPU that you are using."
53
+ ]
54
+ },
55
+ {
56
+ "cell_type": "code",
57
+ "execution_count": null,
58
+ "metadata": {},
59
+ "outputs": [
60
+ {
61
+ "ename": "",
62
+ "evalue": "",
63
+ "output_type": "error",
64
+ "traceback": [
65
+ "\u001b[1;31mRunning cells with 'MKV-GPU (Python 3.8.10)' requires the ipykernel package.\n",
66
+ "\u001b[1;31mRun the following command to install 'ipykernel' into the Python environment. \n",
67
+ "\u001b[1;31mCommand: 'conda install -n MKV-GPU ipykernel --update-deps --force-reinstall'"
68
+ ]
69
+ }
70
+ ],
71
+ "source": [
72
+ "model = whisper.load_model(\"base\") # Replace \"base\" with the desired model size\n",
73
+ "result = model.transcribe(r\"C:\\Users\\Jonathan\\output_audio.wav\")\n",
74
+ "\n",
75
+ "# Print or save the transcription\n",
76
+ "print(result[\"text\"])"
77
+ ]
78
+ },
79
+ {
80
+ "cell_type": "code",
81
+ "execution_count": null,
82
+ "metadata": {},
83
+ "outputs": [
84
+ {
85
+ "ename": "",
86
+ "evalue": "",
87
+ "output_type": "error",
88
+ "traceback": [
89
+ "\u001b[1;31mRunning cells with 'MKV-GPU (Python 3.8.10)' requires the ipykernel package.\n",
90
+ "\u001b[1;31mRun the following command to install 'ipykernel' into the Python environment. \n",
91
+ "\u001b[1;31mCommand: 'conda install -n MKV-GPU ipykernel --update-deps --force-reinstall'"
92
+ ]
93
+ }
94
+ ],
95
+ "source": [
96
+ "# ffmpeg -i \"E:\\Video\\Seinfeld\\Season 5\\Seinfeld - Season 5 (Disc 1)-A1_t02.mkv\" -t 300 -map 0:a:0 -acodec pcm_s16le -ac 1 output_audio.wav\n",
97
+ "# works for make a .wav file of the first 5 mins"
98
+ ]
99
+ }
100
+ ],
101
+ "metadata": {
102
+ "kernelspec": {
103
+ "display_name": "mkv",
104
+ "language": "python",
105
+ "name": "python3"
106
+ },
107
+ "language_info": {
108
+ "codemirror_mode": {
109
+ "name": "ipython",
110
+ "version": 3
111
+ },
112
+ "file_extension": ".py",
113
+ "mimetype": "text/x-python",
114
+ "name": "python",
115
+ "nbconvert_exporter": "python",
116
+ "pygments_lexer": "ipython3",
117
+ "version": "3.11.9"
118
+ }
119
+ },
120
+ "nbformat": 4,
121
+ "nbformat_minor": 2
122
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mkv-episode-matcher
3
- Version: 0.1.11
3
+ Version: 0.1.12
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
@@ -11,22 +11,19 @@ Project-URL: Issues, https://github.com/Jsakkos/mkv-episode-matcher/issues
11
11
  Project-URL: Source, https://github.com/Jsakkos/mkv-episode-matcher
12
12
  Classifier: Development Status :: 4 - Beta
13
13
  Classifier: Programming Language :: Python
14
- Classifier: Programming Language :: Python :: 3.8
15
- Classifier: Programming Language :: Python :: 3.9
16
- Classifier: Programming Language :: Python :: 3.10
17
- Classifier: Programming Language :: Python :: 3.11
18
14
  Classifier: Programming Language :: Python :: 3.12
19
15
  Classifier: Programming Language :: Python :: Implementation :: CPython
20
16
  Classifier: Programming Language :: Python :: Implementation :: PyPy
21
- Requires-Python: >=3.8
17
+ Requires-Python: >=3.12
22
18
  Description-Content-Type: text/x-rst
23
- Requires-Dist: requests
24
- Requires-Dist: loguru
25
- Requires-Dist: pillow
26
- Requires-Dist: configparser
27
- Requires-Dist: tmdb_client
28
- Requires-Dist: pytesseract
29
- Requires-Dist: opensubtitlescom
19
+ Requires-Dist: configparser>=7.1.0
20
+ Requires-Dist: ffmpeg>=1.4
21
+ Requires-Dist: loguru>=0.7.2
22
+ Requires-Dist: numpy>=2.1.3
23
+ Requires-Dist: opensubtitlescom>=0.1.5
24
+ Requires-Dist: pytesseract>=0.3.13
25
+ Requires-Dist: requests>=2.32.3
26
+ Requires-Dist: tmdb-client>=0.0.1
30
27
 
31
28
  ===================
32
29
  MKV Episode Matcher
@@ -1,11 +1,15 @@
1
1
  .gitattributes
2
2
  .gitignore
3
3
  .gitmodules
4
+ .python-version
4
5
  .readthedocs.yml
6
+ README.md
5
7
  README.rst
8
+ old_pyproject.toml
6
9
  pyproject.toml
7
10
  setup.cfg
8
11
  setup.py
12
+ uv.lock
9
13
  .github/funding.yml
10
14
  .github/workflows/python-publish.yml
11
15
  .vscode/settings.json
@@ -105,7 +109,7 @@ mkv_episode_matcher/__main__.py
105
109
  mkv_episode_matcher/config.py
106
110
  mkv_episode_matcher/episode_matcher.py
107
111
  mkv_episode_matcher/mkv_to_srt.py
108
- mkv_episode_matcher/requirements.txt
112
+ mkv_episode_matcher/old_requirements.txt
109
113
  mkv_episode_matcher/tmdb_client.py
110
114
  mkv_episode_matcher/utils.py
111
115
  mkv_episode_matcher.egg-info/PKG-INFO
@@ -125,4 +129,5 @@ mkv_episode_matcher/libraries/pgs2srt/Libraries/SubZero/SubZero.py
125
129
  mkv_episode_matcher/libraries/pgs2srt/Libraries/SubZero/post_processing.py
126
130
  mkv_episode_matcher/libraries/pgs2srt/Libraries/SubZero/dictionaries/data.py
127
131
  mkv_episode_matcher/notebooks/get_subtitles_test.ipynb
132
+ mkv_episode_matcher/notebooks/whisper.ipynb
128
133
  tests/__init__.py
@@ -0,0 +1,8 @@
1
+ configparser>=7.1.0
2
+ ffmpeg>=1.4
3
+ loguru>=0.7.2
4
+ numpy>=2.1.3
5
+ opensubtitlescom>=0.1.5
6
+ pytesseract>=0.3.13
7
+ requests>=2.32.3
8
+ tmdb-client>=0.0.1
@@ -0,0 +1,68 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61.0", "wheel", "setuptools_scm[toml]>=6.2"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [tool.setuptools_scm]
6
+ # See configuration details in https://github.com/pypa/setuptools_scm
7
+
8
+ [project]
9
+ name = "mkv-episode-matcher"
10
+ description = "The MKV Episode Matcher is a tool for identifying TV series episodes from MKV files and renaming the files accordingly."
11
+ dynamic = ["version"]
12
+ readme = "README.rst"
13
+ requires-python = ">=3.8"
14
+ license = { text = "MIT" }
15
+ keywords = []
16
+ authors = [
17
+ { name = "Jsakkos", email = "jonathansakkos@protonmail.com" },
18
+ ]
19
+
20
+ dependencies = [
21
+ "requests",
22
+ "loguru",
23
+ "pillow",
24
+ "configparser",
25
+ "tmdb_client",
26
+ "pytesseract",
27
+ "opensubtitlescom",
28
+ ]
29
+
30
+ [project.urls]
31
+ Documentation = "https://github.com/Jsakkos/mkv-episode-matcher#readme"
32
+ Issues = "https://github.com/Jsakkos/mkv-episode-matcher/issues"
33
+ Source = "https://github.com/Jsakkos/mkv-episode-matcher"
34
+
35
+ [project.scripts]
36
+ mkv-match = "mkv_episode_matcher.__main__:main"
37
+
38
+ [tool.ruff.format]
39
+ preview = true
40
+ quote-style = "single"
41
+
42
+ [tool.ruff.lint]
43
+ preview = true
44
+ extend-select = ["C901"]
45
+
46
+ [tool.ruff.lint.extend-per-file-ignores]
47
+ "docs/.hooks/*" = ["INP001", "T201"]
48
+
49
+ [tool.ruff.lint.isort]
50
+ known-first-party = ["foo", "bar"]
51
+
52
+ [tool.coverage.run]
53
+ source_pkgs = ["mkv_episode_matcher", "tests"]
54
+ branch = true
55
+ parallel = true
56
+ omit = [
57
+ "mkv-episode-matcher/mkv_episode_matcher/__init__.py",
58
+ ]
59
+
60
+ [tool.coverage.paths]
61
+ tests = ["tests", "*/mkv_episode_matcher/tests"]
62
+
63
+ [tool.coverage.report]
64
+ exclude_lines = [
65
+ "no cov",
66
+ "if __name__ == .__main__.:",
67
+ "if TYPE_CHECKING:",
68
+ ]
@@ -10,32 +10,27 @@ name = "mkv-episode-matcher"
10
10
  description = "The MKV Episode Matcher is a tool for identifying TV series episodes from MKV files and renaming the files accordingly."
11
11
  dynamic = ["version"]
12
12
  readme = "README.rst"
13
- requires-python = ">=3.8"
14
- license = { text = "MIT" }
15
- keywords = []
16
13
  authors = [
17
14
  { name = "Jsakkos", email = "jonathansakkos@protonmail.com" },
18
15
  ]
16
+ requires-python = ">=3.12"
17
+ license = { text = "MIT" }
19
18
  classifiers = [
20
19
  "Development Status :: 4 - Beta",
21
20
  "Programming Language :: Python",
22
- "Programming Language :: Python :: 3.8",
23
- "Programming Language :: Python :: 3.9",
24
- "Programming Language :: Python :: 3.10",
25
- "Programming Language :: Python :: 3.11",
26
21
  "Programming Language :: Python :: 3.12",
27
22
  "Programming Language :: Python :: Implementation :: CPython",
28
23
  "Programming Language :: Python :: Implementation :: PyPy",
29
24
  ]
30
-
31
25
  dependencies = [
32
- "requests",
33
- "loguru",
34
- "pillow",
35
- "configparser",
36
- "tmdb_client",
37
- "pytesseract",
38
- "opensubtitlescom",
26
+ "configparser>=7.1.0",
27
+ "ffmpeg>=1.4",
28
+ "loguru>=0.7.2",
29
+ "numpy>=2.1.3",
30
+ "opensubtitlescom>=0.1.5",
31
+ "pytesseract>=0.3.13",
32
+ "requests>=2.32.3",
33
+ "tmdb-client>=0.0.1",
39
34
  ]
40
35
 
41
36
  [project.urls]
@@ -69,7 +64,6 @@ omit = [
69
64
  ]
70
65
 
71
66
  [tool.coverage.paths]
72
- calcy = ["mkv-episode-matcher/mkv_episode_matcher", "*/mkv-episode-matcher/mkv_episode_matcher"]
73
67
  tests = ["tests", "*/mkv_episode_matcher/tests"]
74
68
 
75
69
  [tool.coverage.report]
@@ -1,6 +1,6 @@
1
1
  [metadata]
2
2
  name = mkv_episode_matcher
3
- version = 0.1.11
3
+ version = 0.1.12
4
4
  author = Jonathan Sakkos
5
5
  author_email = jonathansakkos@protonmail.com
6
6
  description = The MKV Episode Matcher is a tool for identifying TV series episodes from MKV files and renaming the files accordingly.
File without changes