GameSentenceMiner 2.12.0.dev3__tar.gz → 2.12.0.dev5__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.
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/ai/ai_prompting.py +3 -3
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/util/configuration.py +14 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/util/window_transparency.py +28 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/web/texthooking_page.py +1 -1
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner.egg-info/PKG-INFO +1 -1
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/PKG-INFO +1 -1
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/pyproject.toml +1 -1
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/__init__.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/ai/__init__.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/anki.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/assets/__init__.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/assets/icon.png +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/assets/icon128.png +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/assets/icon256.png +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/assets/icon32.png +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/assets/icon512.png +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/assets/icon64.png +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/assets/pickaxe.png +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/config_gui.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/gametext.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/gsm.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/obs.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/ocr/__init__.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/ocr/gsm_ocr_config.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/ocr/ocrconfig.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/ocr/owocr_area_selector.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/ocr/owocr_helper.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/ocr/ss_picker.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/owocr/owocr/__init__.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/owocr/owocr/__main__.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/owocr/owocr/config.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/owocr/owocr/lens_betterproto.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/owocr/owocr/ocr.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/owocr/owocr/run.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/owocr/owocr/screen_coordinate_picker.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/util/__init__.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/util/audio_offset_selector.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/util/communication/__init__.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/util/communication/send.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/util/communication/websocket.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/util/downloader/Untitled_json.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/util/downloader/__init__.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/util/downloader/download_tools.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/util/downloader/oneocr_dl.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/util/electron_config.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/util/ffmpeg.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/util/gsm_utils.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/util/model.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/util/notification.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/util/package.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/util/ss_selector.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/util/text_log.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/vad.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/web/__init__.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/web/service.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/web/static/__init__.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/web/static/apple-touch-icon.png +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/web/static/favicon-96x96.png +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/web/static/favicon.ico +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/web/static/favicon.svg +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/web/static/site.webmanifest +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/web/static/style.css +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/web/static/web-app-manifest-192x192.png +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/web/static/web-app-manifest-512x512.png +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/web/templates/__init__.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/web/templates/index.html +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/web/templates/text_replacements.html +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/web/templates/utility.html +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/wip/get_overlay_coords.py +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner.egg-info/SOURCES.txt +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner.egg-info/dependency_links.txt +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner.egg-info/entry_points.txt +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner.egg-info/requires.txt +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner.egg-info/top_level.txt +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/LICENSE +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/README.md +0 -0
- {gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/setup.cfg +0 -0
{gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/ai/ai_prompting.py
RENAMED
@@ -33,10 +33,10 @@ TRANSLATION_PROMPT = f"""
|
|
33
33
|
**Professional Game Localization Task**
|
34
34
|
|
35
35
|
**Task Directive:**
|
36
|
-
Translate ONLY the single line of game dialogue specified below into natural-sounding, context-aware
|
36
|
+
Translate ONLY the single line of game dialogue specified below into natural-sounding, context-aware {get_config().general.get_native_language_name()}. The translation must preserve the original tone and intent of the character.
|
37
37
|
|
38
38
|
**Output Requirements:**
|
39
|
-
- Provide only the single, best
|
39
|
+
- Provide only the single, best {get_config().general.get_native_language_name()} translation.
|
40
40
|
- Use expletives if they are natural for the context and enhance the translation's impact, but do not over-exaggerate.
|
41
41
|
- Preserve or add HTML tags (e.g., `<i>`, `<b>`) if appropriate for emphasis.
|
42
42
|
- Do not include notes, alternatives, explanations, or any other surrounding text. Absolutely nothing but the translated line.
|
@@ -47,7 +47,7 @@ Translate ONLY the single line of game dialogue specified below into natural-sou
|
|
47
47
|
CONTEXT_PROMPT = textwrap.dedent(f"""
|
48
48
|
|
49
49
|
**Task Directive:**
|
50
|
-
Provide a very brief summary of the scene in
|
50
|
+
Provide a very brief summary of the scene in {get_config().general.get_native_language_name()} based on the provided Japanese dialogue and context. Focus on the characters' actions and the immediate situation being described.
|
51
51
|
|
52
52
|
Current Sentence:
|
53
53
|
""")
|
@@ -297,6 +297,14 @@ class CommonLanguages(str, Enum):
|
|
297
297
|
if lang.value == code:
|
298
298
|
return lang
|
299
299
|
raise ValueError(f"Language code '{code}' not found in CommonLanguages")
|
300
|
+
|
301
|
+
@classmethod
|
302
|
+
def name_from_code(cls, code: str) -> str:
|
303
|
+
"""
|
304
|
+
Returns the name of the language given its code (e.g., 'en' -> 'ENGLISH').
|
305
|
+
Raises ValueError if not found.
|
306
|
+
"""
|
307
|
+
return cls.from_code(code).name
|
300
308
|
|
301
309
|
@dataclass_json
|
302
310
|
@dataclass
|
@@ -311,6 +319,12 @@ class General:
|
|
311
319
|
texthooker_port: int = 55000
|
312
320
|
native_language: str = CommonLanguages.ENGLISH.value
|
313
321
|
|
322
|
+
def get_native_language_name(self) -> str:
|
323
|
+
try:
|
324
|
+
return CommonLanguages.name_from_code(self.native_language)
|
325
|
+
except ValueError:
|
326
|
+
return "Unknown"
|
327
|
+
|
314
328
|
|
315
329
|
@dataclass_json
|
316
330
|
@dataclass
|
@@ -1,9 +1,11 @@
|
|
1
|
+
import sys
|
1
2
|
import win32gui
|
2
3
|
import win32con
|
3
4
|
import win32api
|
4
5
|
import keyboard
|
5
6
|
import time
|
6
7
|
import threading
|
8
|
+
import signal
|
7
9
|
|
8
10
|
from GameSentenceMiner.util.configuration import logger
|
9
11
|
|
@@ -137,6 +139,22 @@ def mouse_monitor_loop():
|
|
137
139
|
# A small delay to reduce CPU usage
|
138
140
|
time.sleep(0.1)
|
139
141
|
|
142
|
+
class HandleSTDINThread(threading.Thread):
|
143
|
+
def run(self):
|
144
|
+
while True:
|
145
|
+
try:
|
146
|
+
line = input()
|
147
|
+
if "exit" in line.strip().lower():
|
148
|
+
handle_quit()
|
149
|
+
break
|
150
|
+
except EOFError:
|
151
|
+
break
|
152
|
+
|
153
|
+
def handle_quit():
|
154
|
+
if is_toggled and target_hwnd:
|
155
|
+
reset_window_state(target_hwnd)
|
156
|
+
logger.info("Exiting Window Transparency Tool.")
|
157
|
+
|
140
158
|
# --- Main Execution Block ---
|
141
159
|
|
142
160
|
if __name__ == "__main__":
|
@@ -155,8 +173,18 @@ if __name__ == "__main__":
|
|
155
173
|
# Register the global hotkey
|
156
174
|
keyboard.add_hotkey(hotkey, toggle_functionality)
|
157
175
|
|
176
|
+
# Handle SigINT/SigTERM gracefully
|
177
|
+
def signal_handler(sig, frame):
|
178
|
+
handle_quit()
|
179
|
+
sys.exit(0)
|
180
|
+
|
181
|
+
signal.signal(signal.SIGINT, signal_handler)
|
182
|
+
signal.signal(signal.SIGTERM, signal_handler)
|
183
|
+
|
158
184
|
logger.info(f"Script running. Press '{hotkey}' on a window to toggle transparency.")
|
159
185
|
logger.info("Press Ctrl+C in this console to exit.")
|
186
|
+
|
187
|
+
HandleSTDINThread().start()
|
160
188
|
|
161
189
|
# Keep the script running to listen for the hotkey.
|
162
190
|
# keyboard.wait() is a blocking call that waits indefinitely.
|
@@ -489,7 +489,7 @@ async def texthooker_page_coro():
|
|
489
489
|
plaintext_websocket_server_thread = WebsocketServerThread(read=False, ws_port=get_config().advanced.plaintext_websocket_port)
|
490
490
|
plaintext_websocket_server_thread.start()
|
491
491
|
|
492
|
-
overlay_server_thread = WebsocketServerThread(read=False, ws_port=
|
492
|
+
overlay_server_thread = WebsocketServerThread(read=False, ws_port=get_config().wip.overlay_websocket_port)
|
493
493
|
overlay_server_thread.start()
|
494
494
|
|
495
495
|
# Keep the main asyncio event loop running (for the WebSocket server)
|
@@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta"
|
|
7
7
|
|
8
8
|
[project]
|
9
9
|
name = "GameSentenceMiner"
|
10
|
-
version = "2.12.0-
|
10
|
+
version = "2.12.0-dev5"
|
11
11
|
description = "A tool for mining sentences from games. Update: Overlay?"
|
12
12
|
readme = "README.md"
|
13
13
|
requires-python = ">=3.10"
|
{gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/__init__.py
RENAMED
File without changes
|
{gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/ai/__init__.py
RENAMED
File without changes
|
File without changes
|
{gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/assets/__init__.py
RENAMED
File without changes
|
{gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/assets/icon.png
RENAMED
File without changes
|
{gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/assets/icon128.png
RENAMED
File without changes
|
{gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/assets/icon256.png
RENAMED
File without changes
|
{gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/assets/icon32.png
RENAMED
File without changes
|
{gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/assets/icon512.png
RENAMED
File without changes
|
{gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/assets/icon64.png
RENAMED
File without changes
|
{gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/assets/pickaxe.png
RENAMED
File without changes
|
{gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/config_gui.py
RENAMED
File without changes
|
{gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/gametext.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/ocr/__init__.py
RENAMED
File without changes
|
File without changes
|
{gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/ocr/ocrconfig.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/ocr/ss_picker.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/owocr/owocr/ocr.py
RENAMED
File without changes
|
{gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/owocr/owocr/run.py
RENAMED
File without changes
|
File without changes
|
{gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/util/__init__.py
RENAMED
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
|
{gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/util/ffmpeg.py
RENAMED
File without changes
|
{gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/util/gsm_utils.py
RENAMED
File without changes
|
{gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/util/model.py
RENAMED
File without changes
|
File without changes
|
{gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/util/package.py
RENAMED
File without changes
|
File without changes
|
{gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/util/text_log.py
RENAMED
File without changes
|
File without changes
|
{gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/web/__init__.py
RENAMED
File without changes
|
{gamesentenceminer-2.12.0.dev3 → gamesentenceminer-2.12.0.dev5}/GameSentenceMiner/web/service.py
RENAMED
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
|