Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
cc81d70
Fix stray stitches after trims and several UI state bugs
lb2002 Oct 28, 2026
a424cc0
Join underlay and satin end caps with hidden travel instead of trims
lb2002 Oct 28, 2026
f4d7f22
Build stitch plans in a background thread
lb2002 Oct 28, 2026
2153d87
Cancelable auto-digitize, unsaved-changes prompt, faster simulator an…
lb2002 Oct 28, 2026
8d22d74
Density guard: keep row-turn points instead of dropping them as micro…
lb2002 Oct 28, 2026
605da91
Satin underlay styles: centre walk, edge walk, zigzag, edge+zigzag
lb2002 Oct 28, 2026
4ec9381
CI: test the oldest supported (3.10) and a current Python (3.12)
lb2002 Oct 28, 2026
50680f7
JEF export: write trims (pyembroidery drops them by default)
lb2002 Oct 28, 2026
f67512e
SVG importer fidelity and robust FAT12 floppy images
lb2002 Oct 28, 2026
08d9d29
Merge branch 'worktree-agent-af5fa3cb9c458db5c' into fix/engine-audit
lb2002 Oct 28, 2026
2cc13a6
SVG import: cap element expansion against nested <use> bombs
lb2002 Oct 28, 2026
849d867
Translate remaining UI strings (dialogs, main window, inspector, PDF…
lb2002 Oct 28, 2026
a6f7ca9
Merge branch 'worktree-agent-a119e2d3405d48a96' into fix/engine-audit
lb2002 Oct 28, 2026
317343f
Overlap-aware colour sort; confirm before overwriting floppy files
lb2002 Oct 28, 2026
9a05c0d
Translate Quality Doctor; measure real radius for round-hoop checks
lb2002 Oct 28, 2026
508e99b
Add OpenStitch Micro single-stroke small-lettering font and satin col…
lb2002 Oct 28, 2026
566625f
Merge branch 'worktree-agent-adeea152b23c8c66e' into fix/engine-audit
lb2002 Oct 28, 2026
e40ac50
Satin column tool on the column engine; micro-font fixes; changelog
lb2002 Oct 28, 2026
227b9e9
README: satin columns, OpenStitch Micro with comparison image
lb2002 Oct 28, 2026
6e9a0c4
Tests: compare flat coordinate lists (pytest < 9 rejects nested approx)
lb2002 Oct 28, 2026
fba92db
Release v0.3.0; README downloads always point at the latest release
lb2002 Oct 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
python-version: ["3.11"]
python-version: ["3.10", "3.12"]

steps:
- name: Checkout repository
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,6 @@ test_out*
build_*/
*.spec
dist/

# Claude Code worktrees / local settings
.claude/
48 changes: 48 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Changelog

## v0.3.0 (2026-10-28)

### New
- **OpenStitch Micro: an embroidery font for small lettering from 2.5 mm.** Single-stroke glyphs are stitched as a triple run below 5.5 mm and as narrow satin columns above, the way commercial small-text fonts work. Outline fonts converted from TrueType fill in below about 4.5 mm. It covers A–Z, a–z, 0–9, punctuation and German/French/Spanish accents. Pick it in the text dialog; it is listed first.
- **Real satin columns.** The satin tool (`S`) now stitches exactly perpendicular to the line you draw, with adjustable width, density, pull compensation and underlay. Short stitches on tight curves and corner handling are built in. Previously the line was thickened to a fixed 3.2 mm polygon and its centre line re-guessed from pixels.

### Stitch quality fixes
- **No more stray stitches across the design.** After a trim inside one colour, the next run was split from the *old* needle position, which sewed stitches of up to 50 mm straight across finished areas. This affected every export with more than one run per colour.
- **Far fewer trims.** Underlay, the travel to the top-fill entry point, and satin end caps are now joined with running stitches hidden under the later stitching. A single fill or satin object needs 1 trim instead of 3.
- **Clean fill edges.** The density guard removed tatami row-turn points as "micro-stitches", which made fill outlines ragged. Turn points are now always kept.
- **JEF (Janome) export now cuts threads.** pyembroidery drops trims in JEF files by default; they are now written as three zero-length jumps (the Janome convention).
- **Satin underlay types**, chosen automatically by column width like commercial software: centre walk (≤ 2 mm), edge walk (≤ 4.5 mm), edge walk + zigzag (wider). Each style can be picked per object.

### Editor
- Stitch plans are built in a **background thread**, so editing stays responsive on large designs.
- The simulator draws only new stitches each frame (about 7× faster), and the heatmap is cached.
- Undo/redo keeps object identity and selection, so undo no longer regenerates the whole design. Dragging a spin box counts as one undo step, and show/hide can be undone.
- The inspector no longer loses your input while you type.
- Node editing no longer jumps between nodes, drops parts of multi-part shapes, or moves text to the origin.
- Fit-to-hoop and Scale keep text rotation and size.
- Hoop and machine selection follow the loaded design. Auto-digitize uses the current hoop and can be cancelled.
- Unsaved-changes prompt on New/Open/Import/Drop/Close. Project saves are atomic, and save/export errors are reported.

- **Colour sort that respects stacking:** "Optimise colour order" only moves an object to an earlier block of the same colour when nothing it skips overlaps it.
- **Round-hoop checks use the real stitch radius.** Bounding-box corners overestimated round designs by up to 41 %.

### SVG import (rewritten)
- `transform` on elements and groups (matrix, translate, scale, rotate, skew).
- Full path syntax, including arcs (`A`), smooth curves (`S`/`T`) and compact number notation.
- Style inheritance, `fill="none"`, gradients (first stop colour), the full CSS colour-name list, `display:none`.
- `<use>`/`<symbol>`, ellipse, line, rounded rect and polyline. `<defs>`, `<clipPath>` and `<mask>` content is no longer stitched.
- evenodd and nonzero fill rules. Strokes become a bean run (< 1.2 mm) or a satin outline (wider).
- Optional real-world size from width/height/viewBox. Protection against `<use>` expansion bombs.

### Melco floppy images (FAT12)
- Adding a file is transactional: if it fails, the image is left unchanged.
- Long names get Windows-style `~1` short names with VFAT long-name entries.
- Zero-byte files work, and corrupt or cyclic FAT chains are detected.
- The floppy dialog asks before replacing a file with the same 8.3 name.

### Languages
- All dialogs, message boxes, inspector parameters, hoop and machine names, the Quality Doctor and the PDF production sheet are now translated (DE/EN/FR/ES).
- Numbers use each language's own thousands separator.

### Project
- CI tests on Python 3.10 and 3.12.
14 changes: 9 additions & 5 deletions README.de.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,11 @@
* **3D-Puff-Schaumstoff-Modus (für Caps):** Erzeugt hochdichte Satin-Säulen (0.24 mm) mit speziell perforierenden **Pinch-End-Caps** zum sauberen Durchtrennen von 2–3 mm 3D-Stick-Schaumstoff.
* **1-Klick Applikation (Appliqué):** Erzeugt automatisch Platzierungslinie (mit Maschinen-Stopp), Stoff-Fixiernaht (Tack-Down) und breite Satin-Deckkante.
* **PhotoStitch:** Verwandelt Porträt- und Landschaftsfotos in Monochrom-, Sepia- oder 4-Farb-CMYK-Wellenstickerei.
* **SVG-Vektor-Import & TTF/OTF-Schrift-Generator** (inkl. Bogentext & automatischer Satin/Tatami-Wahl).
* **Satinsäulen entlang der gezeichneten Mittellinie** (`S`): Stiche stehen senkrecht zur Linie, mit einstellbarer Breite, Kurzstich in engen Kurven, Eckenbehandlung und automatischer Unterlage (Mittellauf / Kantenlauf / Zickzack je nach Säulenbreite).
* **OpenStitch Micro – kleine Schrift ab 2.5 mm:** Eingebaute Einlinien-Stickschrift, gestickt wie die Kleinschriften kommerzieller Programme. TrueType-Umrisse laufen unter ~4.5 mm zu, Micro bleibt lesbar:

![OpenStitch Micro vs. TrueType bei 2.5 und 3 mm](./assets/micro_font_comparison.png)
* **SVG-Vektor-Import** (Transformationen, Bögen, Stile, `<use>`, Füllregeln) & **TTF/OTF-Schrift-Generator** (inkl. Bogentext & automatischer Satin/Tatami-Wahl).

### 3. 🩺 Stichdichte-Wächter, Heatmap & Qualitäts-Doktor (`F7`)
* **Automatischer Anti-Fadenbruch-Filter (`density_guard`):** Verhindert Nadelkollisionen, Fadennester („Birdnesting“) und Stofflöcher.
Expand All @@ -70,10 +74,10 @@
## 🚀 Quickstart & Installation

### Option A: 1-Klick Direkt-Download (ohne Python-Installation!)
Lade dir auf der **[GitHub Release-Seite (v0.2.0)](https://github.com/lb2002/openstitch/releases/tag/v0.2.0)** direkt die fertige Anwendung für dein System herunter:
* 🪟 **Windows (64-Bit Einzeldatei):** **[`OpenStitch-Studio-Windows-x64.exe`](https://github.com/lb2002/openstitch/releases/download/v0.2.0/OpenStitch-Studio-Windows-x64.exe)** *(einfach herunterladen & doppelklicken, kein Entpacken nötig!)*
* 🍏 **macOS (Apple Silicon M1 / M2 / M3 / M4):** **[`OpenStitch-Studio-macOS-AppleSilicon-M-Chip-arm64.zip`](https://github.com/lb2002/openstitch/releases/download/v0.2.0/OpenStitch-Studio-macOS-AppleSilicon-M-Chip-arm64.zip)** *(`OpenStitch Studio.app`)*
* 🍎 **macOS (Intel x64):** **[`OpenStitch-Studio-macOS-Intel-x64.zip`](https://github.com/lb2002/openstitch/releases/download/v0.2.0/OpenStitch-Studio-macOS-Intel-x64.zip)** *(`OpenStitch Studio.app`)*
Lade dir auf der **[GitHub Release-Seite (latest)](https://github.com/lb2002/openstitch/releases/latest)** direkt die fertige Anwendung für dein System herunter:
* 🪟 **Windows (64-Bit Einzeldatei):** **[`OpenStitch-Studio-Windows-x64.exe`](https://github.com/lb2002/openstitch/releases/latest/download/OpenStitch-Studio-Windows-x64.exe)** *(einfach herunterladen & doppelklicken, kein Entpacken nötig!)*
* 🍏 **macOS (Apple Silicon M1 / M2 / M3 / M4):** **[`OpenStitch-Studio-macOS-AppleSilicon-M-Chip-arm64.zip`](https://github.com/lb2002/openstitch/releases/latest/download/OpenStitch-Studio-macOS-AppleSilicon-M-Chip-arm64.zip)** *(`OpenStitch Studio.app`)*
* 🍎 **macOS (Intel x64):** **[`OpenStitch-Studio-macOS-Intel-x64.zip`](https://github.com/lb2002/openstitch/releases/latest/download/OpenStitch-Studio-macOS-Intel-x64.zip)** *(`OpenStitch Studio.app`)*

---

Expand Down
10 changes: 5 additions & 5 deletions README.es.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
## ✨ Características

* 🪄 **Auto-Digitalizador (imagen / logotipo → archivo de bordado):** reducción de color en CIE-Lab, correspondencia con catálogos reales (**Madeira Polyneon 40, Isacord 40, Gunold Poly 40, Brother**), eliminación automática del fondo, detección del tipo de puntada (pespunte triple, **satén automático**, **tatami** / relleno de contorno), compensación de tirantez, entretela y solape de 0,7 mm entre colores.
* 🎨 **Digitalización manual:** herramientas Tatami (`F`), Satén (`S`), Pespunte (`R`), editor de nodos (`N`), inspector paramétrico en vivo, texto TTF/OTF con arco, importación SVG y arrastrar y soltar.
* 🎨 **Digitalización manual:** herramientas Tatami (`F`), Satén (`S`), Pespunte (`R`), editor de nodos (`N`), inspector paramétrico en vivo, columnas de satén a lo largo de la línea central dibujada, fuente de bordado **OpenStitch Micro** legible desde 2,5 mm, texto TTF/OTF con arco, importación SVG y arrastrar y soltar.
* 🧵 **Herramientas pro:** modo espuma 3D (gorras), **aplique en 1 clic**, **PhotoStitch** (foto → bordado monocromo, sepia o CMYK).
* 🩺 **Control de calidad:** filtro anti-rotura de hilo, mapa de densidad en vivo, **doctor de calidad (`F7`)** y **verificación binaria** de cada archivo exportado.
* 🏭 **Neutral respecto a fabricantes:** DST, PES, EXP, JEF, VP3, U01; perfiles para Tajima, Brother, Barudan, Ricoma/ZSK, Janome/Bernina, Pfaff/Husqvarna y Melco (gestor de disquete FAT12 `.IMG` incluido).
Expand All @@ -32,10 +32,10 @@
## 🚀 Inicio rápido & instalación

### Opción A: descarga con 1 clic (sin Python)
Desde la **[página de releases (v0.2.0)](https://github.com/lb2002/openstitch/releases/tag/v0.2.0)**:
* 🪟 **Windows (64 bits, archivo único):** [`OpenStitch-Studio-Windows-x64.exe`](https://github.com/lb2002/openstitch/releases/download/v0.2.0/OpenStitch-Studio-Windows-x64.exe)
* 🍏 **macOS (Apple Silicon M1–M4):** [`OpenStitch-Studio-macOS-AppleSilicon-M-Chip-arm64.zip`](https://github.com/lb2002/openstitch/releases/download/v0.2.0/OpenStitch-Studio-macOS-AppleSilicon-M-Chip-arm64.zip)
* 🍎 **macOS (Intel x64):** [`OpenStitch-Studio-macOS-Intel-x64.zip`](https://github.com/lb2002/openstitch/releases/download/v0.2.0/OpenStitch-Studio-macOS-Intel-x64.zip)
Desde la **[página de releases (latest)](https://github.com/lb2002/openstitch/releases/latest)**:
* 🪟 **Windows (64 bits, archivo único):** [`OpenStitch-Studio-Windows-x64.exe`](https://github.com/lb2002/openstitch/releases/latest/download/OpenStitch-Studio-Windows-x64.exe)
* 🍏 **macOS (Apple Silicon M1–M4):** [`OpenStitch-Studio-macOS-AppleSilicon-M-Chip-arm64.zip`](https://github.com/lb2002/openstitch/releases/latest/download/OpenStitch-Studio-macOS-AppleSilicon-M-Chip-arm64.zip)
* 🍎 **macOS (Intel x64):** [`OpenStitch-Studio-macOS-Intel-x64.zip`](https://github.com/lb2002/openstitch/releases/latest/download/OpenStitch-Studio-macOS-Intel-x64.zip)

### Opción B: desde el código fuente
Requiere **Python 3.10+**.
Expand Down
10 changes: 5 additions & 5 deletions README.fr.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
## ✨ Fonctionnalités

* 🪄 **Auto-Numériseur (image / logo → fichier de broderie) :** réduction des couleurs en CIE-Lab, correspondance avec de vrais nuanciers (**Madeira Polyneon 40, Isacord 40, Gunold Poly 40, Brother**), suppression automatique du fond, détection du type de point (point droit triple, **satin automatique**, **tatami** / remplissage de contour), compensation de tirage, sous-couche et recouvrement de 0,7 mm entre couleurs.
* 🎨 **Numérisation manuelle :** outils Tatami (`F`), Satin (`S`), Point droit (`R`), éditeur de nœuds (`N`), inspecteur paramétrique en direct, lettrage TTF/OTF avec texte en arc, import SVG, glisser-déposer.
* 🎨 **Numérisation manuelle :** outils Tatami (`F`), Satin (`S`), Point droit (`R`), éditeur de nœuds (`N`), inspecteur paramétrique en direct, colonnes satin le long de la ligne centrale dessinée, police de broderie **OpenStitch Micro** lisible dès 2,5 mm, lettrage TTF/OTF avec texte en arc, import SVG, glisser-déposer.
* 🧵 **Outils pro :** mode mousse 3D (casquettes), **appliqué en 1 clic**, **PhotoStitch** (photo → broderie monochrome, sépia ou CMJN).
* 🩺 **Contrôle qualité :** filtre anti-casse de fil, carte de densité en direct, **docteur qualité (`F7`)** et **vérification binaire** de chaque fichier exporté.
* 🏭 **Neutre vis-à-vis des fabricants :** DST, PES, EXP, JEF, VP3, U01 ; profils pour Tajima, Brother, Barudan, Ricoma/ZSK, Janome/Bernina, Pfaff/Husqvarna et Melco (gestionnaire de disquette FAT12 `.IMG` inclus).
Expand All @@ -32,10 +32,10 @@
## 🚀 Démarrage rapide & installation

### Option A : téléchargement en 1 clic (sans Python)
Depuis la **[page des releases (v0.2.0)](https://github.com/lb2002/openstitch/releases/tag/v0.2.0)** :
* 🪟 **Windows (64 bits, fichier unique) :** [`OpenStitch-Studio-Windows-x64.exe`](https://github.com/lb2002/openstitch/releases/download/v0.2.0/OpenStitch-Studio-Windows-x64.exe)
* 🍏 **macOS (Apple Silicon M1–M4) :** [`OpenStitch-Studio-macOS-AppleSilicon-M-Chip-arm64.zip`](https://github.com/lb2002/openstitch/releases/download/v0.2.0/OpenStitch-Studio-macOS-AppleSilicon-M-Chip-arm64.zip)
* 🍎 **macOS (Intel x64) :** [`OpenStitch-Studio-macOS-Intel-x64.zip`](https://github.com/lb2002/openstitch/releases/download/v0.2.0/OpenStitch-Studio-macOS-Intel-x64.zip)
Depuis la **[page des releases (latest)](https://github.com/lb2002/openstitch/releases/latest)** :
* 🪟 **Windows (64 bits, fichier unique) :** [`OpenStitch-Studio-Windows-x64.exe`](https://github.com/lb2002/openstitch/releases/latest/download/OpenStitch-Studio-Windows-x64.exe)
* 🍏 **macOS (Apple Silicon M1–M4) :** [`OpenStitch-Studio-macOS-AppleSilicon-M-Chip-arm64.zip`](https://github.com/lb2002/openstitch/releases/latest/download/OpenStitch-Studio-macOS-AppleSilicon-M-Chip-arm64.zip)
* 🍎 **macOS (Intel x64) :** [`OpenStitch-Studio-macOS-Intel-x64.zip`](https://github.com/lb2002/openstitch/releases/latest/download/OpenStitch-Studio-macOS-Intel-x64.zip)

### Option B : depuis les sources
Nécessite **Python 3.10+**.
Expand Down
14 changes: 9 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,11 @@
* **3D puff foam mode (caps):** dense satin (0.24 mm) with perforating pinch end-caps for 2–3 mm foam.
* **1-click appliqué:** placement line (with stop), tack-down and satin cover border.
* **PhotoStitch:** portrait/landscape photos → monochrome, sepia or 4-colour CMYK wave embroidery.
* **SVG import & TTF/OTF lettering** (arc text, automatic satin/tatami choice).
* **Satin columns along your drawn centre line** (`S`): stitches stay perpendicular to the line, with adjustable width, short stitches on tight curves, corner handling and automatic underlay (centre walk / edge walk / zigzag, chosen by column width).
* **OpenStitch Micro: small lettering from 2.5 mm.** A built-in single-stroke embroidery font, stitched like commercial small-text fonts. TrueType outlines fill in below ~4.5 mm; Micro stays readable:

![OpenStitch Micro vs. TrueType at 2.5 and 3 mm](./assets/micro_font_comparison.png)
* **SVG import** (transforms, arcs, styles, `<use>`, fill rules) & **TTF/OTF lettering** (arc text, automatic satin/tatami choice).

### 3. 🩺 Density guard, heatmap & quality doctor (`F7`)
* **Anti-thread-break filter** prevents needle collisions, bird-nesting and fabric holes.
Expand All @@ -67,10 +71,10 @@
## 🚀 Quickstart & Installation

### Option A: 1-click download (no Python required)
Get the ready-made app from the **[GitHub release page (v0.2.0)](https://github.com/lb2002/openstitch/releases/tag/v0.2.0)**:
* 🪟 **Windows (64-bit, single file):** [`OpenStitch-Studio-Windows-x64.exe`](https://github.com/lb2002/openstitch/releases/download/v0.2.0/OpenStitch-Studio-Windows-x64.exe) *(download & double-click, nothing to unpack)*
* 🍏 **macOS (Apple Silicon M1 / M2 / M3 / M4):** [`OpenStitch-Studio-macOS-AppleSilicon-M-Chip-arm64.zip`](https://github.com/lb2002/openstitch/releases/download/v0.2.0/OpenStitch-Studio-macOS-AppleSilicon-M-Chip-arm64.zip)
* 🍎 **macOS (Intel x64):** [`OpenStitch-Studio-macOS-Intel-x64.zip`](https://github.com/lb2002/openstitch/releases/download/v0.2.0/OpenStitch-Studio-macOS-Intel-x64.zip)
Get the ready-made app from the **[GitHub release page (latest)](https://github.com/lb2002/openstitch/releases/latest)**:
* 🪟 **Windows (64-bit, single file):** [`OpenStitch-Studio-Windows-x64.exe`](https://github.com/lb2002/openstitch/releases/latest/download/OpenStitch-Studio-Windows-x64.exe) *(download & double-click, nothing to unpack)*
* 🍏 **macOS (Apple Silicon M1 / M2 / M3 / M4):** [`OpenStitch-Studio-macOS-AppleSilicon-M-Chip-arm64.zip`](https://github.com/lb2002/openstitch/releases/latest/download/OpenStitch-Studio-macOS-AppleSilicon-M-Chip-arm64.zip)
* 🍎 **macOS (Intel x64):** [`OpenStitch-Studio-macOS-Intel-x64.zip`](https://github.com/lb2002/openstitch/releases/latest/download/OpenStitch-Studio-macOS-Intel-x64.zip)

### Option B: run from source (Windows, macOS & Linux)
Requires **Python 3.10+**.
Expand Down
Binary file added assets/micro_font_comparison.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion openstitch/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"""OpenStitch Studio – Universal Open-Source Embroidery & Digitizing Suite."""

__version__ = "0.2.0"
__version__ = "0.3.0"
__author__ = "Linus Baumberger (@lb2002)"
__license__ = "AGPL-3.0-or-later"
APP_NAME = "OpenStitch"
Loading
Loading