GameSentenceMiner 2.16.4__tar.gz → 2.16.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.
Files changed (103) hide show
  1. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/config_gui.py +4 -0
  2. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/util/ffmpeg.py +3 -3
  3. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/database_api.py +18 -2
  4. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner.egg-info/PKG-INFO +1 -1
  5. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/PKG-INFO +1 -1
  6. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/pyproject.toml +1 -1
  7. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/__init__.py +0 -0
  8. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/ai/__init__.py +0 -0
  9. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/ai/ai_prompting.py +0 -0
  10. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/anki.py +0 -0
  11. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/assets/__init__.py +0 -0
  12. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/assets/icon.png +0 -0
  13. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/assets/icon128.png +0 -0
  14. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/assets/icon256.png +0 -0
  15. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/assets/icon32.png +0 -0
  16. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/assets/icon512.png +0 -0
  17. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/assets/icon64.png +0 -0
  18. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/assets/pickaxe.png +0 -0
  19. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/gametext.py +0 -0
  20. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/gsm.py +0 -0
  21. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/locales/en_us.json +0 -0
  22. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/locales/ja_jp.json +0 -0
  23. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/locales/zh_cn.json +0 -0
  24. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/obs.py +0 -0
  25. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/ocr/__init__.py +0 -0
  26. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/ocr/gsm_ocr_config.py +0 -0
  27. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/ocr/ocrconfig.py +0 -0
  28. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/ocr/owocr_area_selector.py +0 -0
  29. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/ocr/owocr_helper.py +0 -0
  30. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/ocr/ss_picker.py +0 -0
  31. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/owocr/owocr/__init__.py +0 -0
  32. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/owocr/owocr/__main__.py +0 -0
  33. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/owocr/owocr/config.py +0 -0
  34. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/owocr/owocr/lens_betterproto.py +0 -0
  35. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/owocr/owocr/ocr.py +0 -0
  36. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/owocr/owocr/run.py +0 -0
  37. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/owocr/owocr/screen_coordinate_picker.py +0 -0
  38. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/tools/__init__.py +0 -0
  39. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/tools/audio_offset_selector.py +0 -0
  40. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/tools/furigana_filter_preview.py +0 -0
  41. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/tools/ss_selector.py +0 -0
  42. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/tools/window_transparency.py +0 -0
  43. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/util/__init__.py +0 -0
  44. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/util/communication/__init__.py +0 -0
  45. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/util/communication/send.py +0 -0
  46. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/util/communication/websocket.py +0 -0
  47. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/util/configuration.py +0 -0
  48. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/util/db.py +0 -0
  49. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/util/downloader/Untitled_json.py +0 -0
  50. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/util/downloader/__init__.py +0 -0
  51. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/util/downloader/download_tools.py +0 -0
  52. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/util/downloader/oneocr_dl.py +0 -0
  53. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/util/electron_config.py +0 -0
  54. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/util/get_overlay_coords.py +0 -0
  55. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/util/gsm_utils.py +0 -0
  56. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/util/model.py +0 -0
  57. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/util/notification.py +0 -0
  58. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/util/text_log.py +0 -0
  59. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/util/win10toast/__init__.py +0 -0
  60. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/util/win10toast/__main__.py +0 -0
  61. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/vad.py +0 -0
  62. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/__init__.py +0 -0
  63. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/events.py +0 -0
  64. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/service.py +0 -0
  65. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/static/__init__.py +0 -0
  66. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/static/apple-touch-icon.png +0 -0
  67. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/static/css/kanji-grid.css +0 -0
  68. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/static/css/search.css +0 -0
  69. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/static/css/shared.css +0 -0
  70. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/static/css/stats.css +0 -0
  71. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/static/favicon-96x96.png +0 -0
  72. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/static/favicon.ico +0 -0
  73. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/static/favicon.svg +0 -0
  74. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/static/js/anki_stats.js +0 -0
  75. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/static/js/database.js +0 -0
  76. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/static/js/kanji-grid.js +0 -0
  77. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/static/js/search.js +0 -0
  78. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/static/js/shared.js +0 -0
  79. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/static/js/stats.js +0 -0
  80. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/static/site.webmanifest +0 -0
  81. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/static/style.css +0 -0
  82. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/static/web-app-manifest-192x192.png +0 -0
  83. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/static/web-app-manifest-512x512.png +0 -0
  84. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/stats.py +0 -0
  85. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/templates/anki_stats.html +0 -0
  86. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/templates/components/navigation.html +0 -0
  87. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/templates/components/theme-styles.html +0 -0
  88. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/templates/database.html +0 -0
  89. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/templates/index.html +0 -0
  90. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/templates/search.html +0 -0
  91. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/templates/stats.html +0 -0
  92. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/templates/utility.html +0 -0
  93. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/texthooking_page.py +0 -0
  94. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/web/websockets.py +0 -0
  95. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner/wip/__init___.py +0 -0
  96. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner.egg-info/SOURCES.txt +0 -0
  97. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner.egg-info/dependency_links.txt +0 -0
  98. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner.egg-info/entry_points.txt +0 -0
  99. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner.egg-info/requires.txt +0 -0
  100. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/GameSentenceMiner.egg-info/top_level.txt +0 -0
  101. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/LICENSE +0 -0
  102. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/README.md +0 -0
  103. {gamesentenceminer-2.16.4 → gamesentenceminer-2.16.5}/setup.cfg +0 -0
@@ -440,6 +440,7 @@ class ConfigApp:
440
440
  default_category_config = getattr(self.default_settings, category)
441
441
 
442
442
  setattr(self.settings, category, default_category_config)
443
+ self.create_vars() # Recreate variables to reflect default values
443
444
  recreate_tab()
444
445
  self.save_settings(profile_change=False)
445
446
  self.reload_settings()
@@ -1146,6 +1147,9 @@ class ConfigApp:
1146
1147
  HoverInfoLabelWidget(vad_frame, text=use_cpu_i18n.get('label', 'Force CPU'), tooltip=use_cpu_i18n.get('tooltip', 'Even if CUDA is installed, use CPU for Whisper'), row=self.current_row, column=0)
1147
1148
  ttk.Checkbutton(vad_frame, variable=self.use_cpu_for_inference_value, bootstyle="round-toggle").grid(row=self.current_row, column=1, sticky='W', pady=2)
1148
1149
  self.current_row += 1
1150
+
1151
+ # Add Reset Button
1152
+ self.add_reset_button(vad_frame, "vad", self.current_row, column=0, recreate_tab=self.create_vad_tab)
1149
1153
 
1150
1154
  @new_tab
1151
1155
  def create_paths_tab(self):
@@ -453,7 +453,7 @@ def trim_audio_based_on_last_line(untrimmed_audio, video_path, game_line, next_l
453
453
  ffmpeg_command = ffmpeg_base_command_list + [
454
454
  "-i", untrimmed_audio,
455
455
  "-ss", str(start_trim_time)]
456
- if next_line and next_line > game_line.time:
456
+ if next_line and next_line > game_line.time and total_seconds:
457
457
  end_trim_seconds = total_seconds + (next_line - game_line.time).total_seconds() + get_config().audio.pre_vad_end_offset
458
458
  end_trim_time = f"{end_trim_seconds:.3f}"
459
459
  ffmpeg_command.extend(['-to', end_trim_time])
@@ -495,9 +495,9 @@ def get_video_timings(video_path, game_line, anki_card_creation_time=None):
495
495
  total_seconds = file_length - time_delta.total_seconds()
496
496
  total_seconds_after_offset = total_seconds + get_config().audio.beginning_offset
497
497
  if total_seconds < 0 or total_seconds >= file_length:
498
- logger.error("Line mined is outside of the replay buffer! Defaulting to the beginning of the replay buffer. ")
498
+ logger.error("Line mined is outside of the replay buffer! Defaulting to the last 30 seconds of the replay buffer.")
499
499
  logger.info("Recommend either increasing replay buffer length in OBS Settings or mining faster.")
500
- return 0, 0, 0, file_length
500
+ return max(file_length - 30, 0), 0, max(file_length - 30, 0), file_length
501
501
 
502
502
  return total_seconds_after_offset, total_seconds, total_seconds_after_offset, file_length
503
503
 
@@ -1,11 +1,14 @@
1
+ import copy
1
2
  import datetime
2
3
  import re
3
4
  import csv
4
5
  import io
5
6
  from collections import defaultdict
7
+ import time
6
8
 
7
9
  import flask
8
10
  from flask import request, jsonify
11
+ import regex
9
12
 
10
13
  from GameSentenceMiner.util.db import GameLinesTable
11
14
  from GameSentenceMiner.util.configuration import logger, get_config, save_current_config
@@ -685,6 +688,7 @@ def register_database_api_routes(app):
685
688
  Provides aggregated, cumulative stats for charting.
686
689
  Accepts optional 'year' parameter to filter heatmap data.
687
690
  """
691
+ punctionation_regex = regex.compile(r'[\p{P}\p{S}]')
688
692
  # Get optional year filter parameter
689
693
  filter_year = request.args.get('year', None)
690
694
 
@@ -697,13 +701,25 @@ def register_database_api_routes(app):
697
701
  # 2. Process data into daily totals for each game
698
702
  # Structure: daily_data[date_str][game_name] = {'lines': N, 'chars': N}
699
703
  daily_data = defaultdict(lambda: defaultdict(lambda: {'lines': 0, 'chars': 0}))
704
+
705
+
706
+ # start_time = time.perf_counter()
707
+ # for line in all_lines:
708
+ # day_str = datetime.date.fromtimestamp(float(line.timestamp)).strftime('%Y-%m-%d')
709
+ # game = line.game_name or "Unknown Game"
710
+ # daily_data[day_str][game]['lines'] += 1
711
+ # daily_data[day_str][game]['chars'] += len(line.line_text) if line.line_text else 0
712
+ # end_time = time.perf_counter()
713
+ # logger.info(f"Without Punctuation removal and daily aggregation took {end_time - start_time:.4f} seconds for {len(all_lines)} lines")
700
714
 
701
715
  for line in all_lines:
702
716
  day_str = datetime.date.fromtimestamp(float(line.timestamp)).strftime('%Y-%m-%d')
703
717
  game = line.game_name or "Unknown Game"
704
-
718
+ # Remove punctuation and symbols from line text before counting characters
719
+ clean_text = punctionation_regex.sub('', line.line_text) if line.line_text else ''
720
+ line.line_text = clean_text # Update line text to cleaned version for future use
705
721
  daily_data[day_str][game]['lines'] += 1
706
- daily_data[day_str][game]['chars'] += len(line.line_text) if line.line_text else 0
722
+ daily_data[day_str][game]['chars'] += len(clean_text)
707
723
 
708
724
  # 3. Create cumulative datasets for Chart.js
709
725
  sorted_days = sorted(daily_data.keys())
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: GameSentenceMiner
3
- Version: 2.16.4
3
+ Version: 2.16.5
4
4
  Summary: A tool for mining sentences from games. Update: Overlay?
5
5
  Author-email: Beangate <bpwhelan95@gmail.com>
6
6
  License: MIT License
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: GameSentenceMiner
3
- Version: 2.16.4
3
+ Version: 2.16.5
4
4
  Summary: A tool for mining sentences from games. Update: Overlay?
5
5
  Author-email: Beangate <bpwhelan95@gmail.com>
6
6
  License: MIT License
@@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta"
7
7
 
8
8
  [project]
9
9
  name = "GameSentenceMiner"
10
- version = "2.16.4"
10
+ version = "2.16.5"
11
11
  description = "A tool for mining sentences from games. Update: Overlay?"
12
12
  readme = "README.md"
13
13
  requires-python = ">=3.10"