Python 3.7's bundled Tcl/Tk on Windows is UCS-2 only and refuses
characters above U+FFFF. The button labels contained game-controller,
desktop, folder and refresh emojis (U+1F3AE, U+1F5A5, U+1F4C2, U+1F501),
so App.__init__ raised TclError and gui.main caught it, exited 1, and
the user saw 'nothing happened'.
Replace with plain Korean text. Per CLAUDE.md these emojis should not
have been added in the first place.
ScreenshotFrame previously read master.master.slot_var, but
master is the Notebook and master.master is the inner padding Frame
inside App._build, not App. Use winfo_toplevel() so we always reach
the App where slot_var lives.
Reported as: AttributeError: 'Frame' object has no attribute 'slot_var'
at gui.py:401 during run.py startup.
- window_capture.py: enumerate top-level windows (pygetwindow) and
capture a specific one via PrintWindow PW_RENDERFULLCONTENT (works
on non-focused windows). Linux falls back to mss region grab.
- recognizer.py: replace MAE matcher with NCC over numpy vectors.
Each rotatable slab generates 4 templates (0/90/180/270). Adds 248
artifact templates and an empty-cell heuristic (low mean/std-dev).
Cells below confidence floor are tagged "unknown" — likely merged
"?" boxes.
- gui.py: new ScreenshotFrame with [게임 창 선택] button → window
picker dialog → bbox crop → recognize → editable preview grid with
per-cell CellEditor that handles slab / artifact / merged(?) / empty.
Merged cells let user pick which two slabs got combined + a level.
- artifacts.py + bundled _artifacts.json (248 entries from
WhiteDog1004/sephiria) for matching and rendering.
- renderer.py: factored CDN fetch into _fetch_image; added
fetch_artifact_image().
- requirements.txt: + numpy, pygetwindow (Win), pywin32 (Win).
- docker-build-cmd.sh: upgrade PyInstaller to 5.x inside cdrx
container so numpy DLL manifest reads work.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- New ScreenshotFrame: capture screen / load PNG, two-click bbox,
threaded template matching, editable preview grid for corrections
- ManualFrame kept as second tab for users who prefer typing counts
- capture.py: screen grab via mss (cross-platform)
- requirements: add mss>=6.0 for screen capture support
Closes the gap from v0.1.0 where users had to manually count
every slab — now they aim, click two corners, and edit any
mis-recognized cell.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Slab catalog and effect handlers ported from WhiteDog1004/sephiria
- Hill-climbing solver maximizes effect sum on slab-occupied cells
- PIL renderer outputs PNG with effects overlay; downloads + caches slab
images from img.sephiria.wiki on demand
- Tkinter GUI for picking slabs by tier; CLI also available
- Screenshot recognizer (template matching, beta)
- build.bat / build.sh for portable single-file builds via PyInstaller