v0.3.3 wrapper only logged once it reached _main(). User reports CMD
window flashes shut and no log file created — meaning Python likely
never reached our code. Two fixes:
1. Move first log write to module top (before any project import) and
write to BOTH the exe directory AND %LOCALAPPDATA%/sephiria_inv/.
Either log existing proves Python booted; neither existing means
PyInstaller bootloader itself failed.
2. Add run-debug.bat that runs the exe with stdout/stderr captured to
sephiria_inv_console.log and pauses, so the window does not close
before the user can read it.
--noconsole exes silently exit on import-time errors, so when v0.3.2
crashed during startup the user just saw nothing happen. This wrapper:
- Catches BaseException at module-import and main() level
- Writes traceback to %LOCALAPPDATA%/sephiria_inv/startup.log
- Pops a Tk messagebox-equivalent window with the traceback
- Falls back gracefully if Tk itself is unavailable
Also build with --console (no --noconsole) so prints/tracebacks are
visible in real time. Once we know what is failing we can re-enable
windowed mode.
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