PyQt6 desktop GUI for EasyStitch (Tkinter migration). Standalone — not part of the easystitch service.
Find a file
2026-09-11 19:57:24 -07:00
.gsd/gates chore(infra): add kilo-gsd pre-dispatch gate for runner 2026-08-13 17:02:05 -07:00
easystitch_qt fix: surface save failures instead of claiming success (#1) 2026-08-13 17:43:57 -07:00
tests fix: persist session to JSON on save, refuse export in demo mode (#1) 2026-08-13 17:24:15 -07:00
.gitignore fix: persist session to JSON on save, refuse export in demo mode (#1) 2026-08-13 17:24:15 -07:00
.pre-commit-config.yaml chore: add pre-commit hooks to catch lint/type drift before push 2026-09-11 19:57:24 -07:00
pyproject.toml feat: extract PyQt6 GUI from easystitch into standalone package 2026-06-22 09:49:13 -07:00
README.md fix: resolve 5 bugs found in bug hunt 2026-08-11 11:18:21 -07:00
requirements.txt feat: extract PyQt6 GUI from easystitch into standalone package 2026-06-22 09:49:13 -07:00

EasyStitch-Qt

PyQt6 desktop GUI for EasyStitch.

This package was extracted from the main easystitch repository on 2026-06-22 to keep the service-deployment repo lean. The GUI is not on the critical path for the easyStitch HTTP service (issue easystitch#31) and is published separately for anyone who wants to revive the desktop client.

Status

Alpha / demo-mode only. The GUI loads and renders but is missing the backend integration_engine.py module (referenced in main_window.py:81). When that import fails the app falls back to "demo mode" and runs without real embroidery integration. See "Revival" below for what it would take to make this work end-to-end.

Installation

pip install -e .

Or with dev extras:

pip install -e ".[dev]"

Running

easystitch-qt

or

python -m easystitch_qt

What's here

easystitch_qt/
├── __init__.py       # Package exports
├── __main__.py       # Enables `python -m easystitch_qt`
├── canvas.py         # Interactive canvas widget (zoom, pan, hit testing)
├── dialogs.py        # File/color/settings/machine dialogs
└── main_window.py    # QMainWindow with menus, toolbar, status bar
tests/
├── conftest.py       # Forces offscreen Qt platform for headless runs
├── test_import.py    # Smoke test — asserts the package imports cleanly
└── test_regressions.py  # Regression tests for fixed bugs (pan, zoom, docks)

What's not here (and why)

  • No backend integration. main_window.py does from .integration_engine import IntegrationEngine inside a try/except ImportError, and no such module exists in either this repo or upstream easystitch. The app runs in demo mode.
  • Thin test coverage. tests/test_import.py asserts the package is installable/importable; tests/test_regressions.py covers the bugs fixed in the 2026-08-11 bug hunt (module entry point, canvas pan/zoom edge cases, layout parenting). Widget behavior beyond that is untested.
  • No intent_resolver.stitch_intent import. The original GUI code in upstream didn't import it either; it was a sibling-package reference that other parts of the pipeline use but the GUI didn't.

Revival (out of scope here)

To make this a working GUI again, the next step is to:

  1. Implement easystitch_qt/integration_engine.py — a wrapper around easystitch.src.embroidery_converter that exposes the EmbroideryPipeline to the GUI.
  2. Add a real pip install easystitch dependency (this package currently has zero easystitch dependency; it's a pure-PyQt6 stub).
  3. Add a proper test suite under tests/ using pytest-qt to drive the widgets.
  4. Decide whether the data classes in easystitch.src.intent_resolver.stitch_intent should be vendored here as a re-export, or imported from the upstream package.

None of this is required for the easyStitch service deployment.

Provenance

Extracted from easystitch commit 08f7ed9 (HEAD as of 2026-06-22), originally at src/intent_resolver/gui_qt6/. Migration tracked in easystitch#44.