Présentation

ZigZag est un éditeur visuel d’embroidery développé en Rust, ce qui lui confère des temps de compilation rapides et une exécution à faible latence. Il intègre le Model Context Protocol (MCP), permettant à des agents d’IA de créer ou modifier des motifs en temps réel, et supporte l’export vers les formats PES, DST, EXP, JEF et VP3, ainsi que l’envoi direct vers une machine Brother Skitch (PP1) via Bluetooth.

Architecture et fonctionnalités

Le code source est organisé en modules clairement séparés. src/svg.rs utilise la crate usvg pour importer les fichiers SVG, en conservant remplissage, contour et transformations. Les algorithmes de pointillage résident dans src/stitch : fill.rs réalise le remplissage tatami par balayage de lignes, satin.rs gère les colonnes de satin et déclenche un auto‑split dès que la largeur dépasse 7 mm, avec un espacement adaptatif. Le planificateur (design.rs) applique plusieurs règles : suppression des chevauchements avec une marge de 0,5 mm, ordre de capitonnage centre‑vers‑extérieur, routage des points de déplacement à l’intérieur des formes, et insertion de points de coupe ou de couture selon la distance N spécifiée. Les contrôles de couture par objet permettent de définir un point d’entrée et de sortie, ainsi que des actions de coupe ou d’arrêt pour les appliqués.

cargo build --release                        # CLI + MCP bridge, no system deps
cargo build --release --features gui,ble     # + studio editor and Skitch upload

Le module src/machine implémente le protocole Bluetooth du Skitch grâce à la crate btleplug, tandis que src/studio fournit l’interface graphique via egui et glow (OpenGL). Le pont MCP (mcp_bridge.rs) traduit les flux stdio en requêtes HTTP, facilitant l’interaction avec des agents externes comme Claude Desktop.

Distribution et intégration

Pour macOS 11+ (Silicon et Intel), le script make-app.sh --release génère un .dmg signé et notarié, évitant les avertissements de sécurité. Le même script peut créer une version universelle (--universal) et installer l’application dans /Applications. Sous Windows 10/11 (64 bits), le zip ZigZag‑-x86_64-windows.zip contient ZigZag.exe; la première exécution déclenche SmartScreen, qui nécessite une confirmation manuelle. Aucun environnement Rust n’est requis pour l’exécution, les binaires étant pré‑compilés.

Le binaire CLI est accessible globalement via un lien symbolique : ln -s /Applications/ZigZag.app/Contents/MacOS/zigzag /usr/local/bin/zigzag. Cette approche simplifie l’intégration dans des pipelines de génération d’images ou des scripts d’automatisation. Le pont MCP peut être lancé avec --mcp-port 7878 ou --mcp-stdio pour des flux directs.

Analyse technique

Le choix de Rust minimise les fuites de mémoire et les dépassements de tampon, deux sources fréquentes de vulnérabilités dans les outils de traitement d’images. L’implémentation du Bluetooth repose sur btleplug, qui dépend de la pile native du système d’exploitation ; ainsi, la compatibilité est garantie tant que le pilote Bluetooth est à jour, mais aucune couche de chiffrement supplémentaire n’est fournie, ce qui peut poser un risque d’interception sur des réseaux non sécurisés.

Les fonctions de planification, notamment la suppression des chevauchements et le routage interne, réduisent le nombre de points de coupe, améliorant la qualité du pointillage et la durée de vie du fil. Cependant, la marge de 0,5 mm pour les chevauchements peut être insuffisante sur des tissus très fins, obligeant l’utilisateur à ajuster manuellement les paramètres de remplissage.

La distribution Windows nécessite l’acceptation manuelle de SmartScreen, ce qui peut freiner les utilisateurs non techniques. De plus, le rendu OpenGL dépend des bibliothèques X11/Wayland sur Linux, imposant des dépendances supplémentaires pour les environnements serveur.