Skip to content

About

Logiciel de pilotage laser GRBL (gravure image, découpe et calques vectoriels) créé par un maker qui aime bidouiller et tester plein de choses.

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Latest commit

 

History

114 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Laser Studio Pro

ko-fi

Laser Studio Pro est un logiciel de pilotage GRBL pour graveur et découpeuse laser, avec :

  • gravure d’images (tramage, niveaux de gris, résolution liée à la taille du spot),
  • sélecteur de matière (fond noir / fond clair) pour graver en négatif ou en positif,
  • séparation couleur / verre (calque noir à graver, calque couleur à imprimer, simulation du rétro-éclairage, PDF à l’échelle 1:1),
  • découpe/gravure vectorielle, import SVG et DXF, conversion PNG/JPEG → SVG,
  • générateur de boîte à encoches (dimensions X/Y/Z, décor texte ou SVG),
  • gestion de calques, avec leurs réglages mémorisés par machine,
  • calibrage guidé : matrice de test, décalage aller/retour et gain de point pour le verre,
  • génération et aperçu 2D du G-Code, file d’attente de jobs,
  • profils machine (dimensions, focale, réglages GRBL, matériaux),
  • export/import de projets, sauvegarde automatique,
  • support multilingue (Français, English, Deutsch, Español).

L’historique détaillé des versions est dans CHANGELOG.md.

Installation

Python 3.11 ou 3.12 est requis (voir Python 3.12 si votre distribution fournit une version plus récente). Installez les dépendances selon votre système :

pip install -r requirements-windows.txt    # Windows
pip install -r requirements-linux.txt      # Linux

numba est optionnel : il accélère le tramage, l’application fonctionne sans. Sous Linux, l’utilisateur doit appartenir au groupe dialout pour accéder au port série. Ajoutez-le au groupe :

sudo usermod -aG dialout $USER

Fermez puis rouvrez la session pour que l’appartenance au groupe soit prise en compte (vérifiez ensuite avec groups).

Python 3.12

Les dépendances imposent numpy<2.0.0 (compatibilité PyInstaller, pyqtgraph et numba). Or numpy 1.26, dernière version de cette branche, ne fonctionne pas au-delà de Python 3.12 : avec Python 3.13 ou 3.14, l’installation de numpy échoue. Les distributions récentes (Fedora 41+, Debian 13, Ubuntu 25.04+) fournissent par défaut une version trop récente ; installez donc Python 3.12 à côté de celle du système, sans la remplacer.

Vérifiez d’abord la version disponible :

python3 --version
python3.12 --version

Fedora — Python 3.12 est disponible dans les dépôts officiels :

sudo dnf install python3.12

Ubuntu — Ubuntu 24.04 fournit Python 3.12 par défaut, il suffit d’ajouter le module venv :

sudo apt install python3.12 python3.12-venv

Sur les autres versions LTS (22.04 par exemple), passez par le PPA deadsnakes :

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.12 python3.12-venv

Debian — aucune version de Debian ne fournit Python 3.12 dans ses dépôts (3.11 pour Debian 12, 3.13 pour Debian 13). Sous Debian 12, Python 3.11 convient :

sudo apt install python3 python3-venv

Sous Debian 13 (ou sur toute distribution sans paquet Python 3.12), utilisez uv, qui télécharge un Python 3.12 autonome dans le dossier de l’utilisateur :

curl -LsSf https://astral.sh/uv/install.sh | sh
uv python install 3.12

Installation dans un environnement virtuel (recommandé)

Un environnement virtuel isole les dépendances du projet de celles du système. Depuis le dossier du projet, créez-le avec Python 3.12, activez-le puis installez les dépendances :

python3.12 -m venv .venv
source .venv/bin/activate
pip install -r requirements-linux.txt

Sous Debian 12, remplacez python3.12 par python3 (Python 3.11). Avec uv, créez l’environnement par uv venv --python 3.12 --seed .venv (--seed y installe pip), puis activez-le et installez les dépendances de la même façon.

Note : créez l’environnement avec python3.12 et non python3. Un environnement créé avec la version du système (3.13 ou 3.14) ne pourra pas installer numpy, et un environnement mélangeant deux versions provoque l’erreur ModuleNotFoundError: No module named 'PyQt6' alors que PyQt6 est installé. En cas de doute, supprimez .venv et recréez-le.

L’environnement doit être activé (source .venv/bin/activate) dans chaque nouveau terminal avant de lancer l’application. Pour en sortir, utilisez deactivate.

Lancer l’application

Lancez main.py depuis le dossier du projet.

source .venv/bin/activate
python main.py

Structure du projet

Point d’entrée

  • main.py — lance l’application
  • app_utils.py — version de l’application, chemins de ressources, écriture atomique des fichiers de données

Composants autonomes

  • graphics_view.py — ZoomableGraphicsView
  • vector_font.py — VectorFont
  • vector_layers.py — calques et objets vectoriels, canevas de l’éditeur
  • usb_controller.py — LaserUSBController
  • workers.py — threads et fonctions de traitement image / G-Code
  • widgets_extra.py — petits widgets réutilisables (historique de commandes, libellé à masquage automatique)
  • separation_engine.py — calculs de séparation couleur / verre (sans Qt)
  • image_filters.py — filtres d’image purs (netteté)
  • vector_order.py — ordre de découpe sûr (gravure avant découpe, intérieur avant extérieur)
  • nesting.py — imbrication automatique des pièces sur une feuille (sans Qt)
  • image_size.py — taille d’origine d’une image d’après sa résolution (sans Qt)
  • vector_nudge.py — pas de déplacement aux flèches du clavier (sans Qt)
  • dxf_import.py — lecteur DXF texte (sans Qt, sans dépendance)
  • box_generator.py — calcul des panneaux d’une boîte à encoches (sans Qt)
  • vector_import.py — passerelle vers les objets de l’éditeur vectoriel (DXF, boîte, décor)
  • png2svg_widget.py — widget de conversion PNG/JPEG → SVG (utilise le module converter)
  • i18n.py — système de traduction multilingue

Fenêtre principale découpée en mixins

  • main_window.py — assemblage de la fenêtre principale
  • ui_setup_mixin.py — interface utilisateur, menus, onglets, dialogues
  • machine_profiles_mixin.py — profils machine / matériaux / réglages de calques par machine
  • image_processing_mixin.py — chargement et traitement d’image, matière
  • vector_editing_mixin.py — éditeur vectoriel et SVG
  • gcode_generation_mixin.py — génération, aperçu et export G-Code
  • laser_control_mixin.py — USB / GRBL / commandes temps réel
  • project_io_mixin.py — sauvegarde et ouverture de projet, sauvegarde automatique
  • job_queue_mixin.py — file d’attente de jobs
  • png2svg_mixin.py — onglet PNG/JPEG → SVG
  • separation_mixin.py — onglet Séparation Couleur / Verre
  • box_dialog.py — fenêtre du générateur de boîte
  • nesting_apply.py, nesting_dialog.py — imbrication dans l’éditeur vectoriel (passerelle et fenêtre de réglage)
  • settings_window.py — fenêtres « Paramètres du graveur », « Matériaux et connexion au graveur » et « Configuration GRBL » ouvertes depuis le menu Paramètres

Qualité

  • tests/ — tests automatiques (G-Code, fin de job, calibrage, séparation couleur/verre, sauvegardes, reset/référencement, calques par machine, traductions)
  • tools/check_translations.py — rapport sur les traductions (clés inutilisées, textes en dur, registre tu/vous)
  • tools/check_ui_attributes.py — détecte les widgets utilisés mais jamais construits (fichier resté à l’ancienne version)

Captures d’écran

Tramage Apercu tramages gravure-test-4

Conversion PNG → SVG :

Test svg

Déplacement d’un SVG sur le plan de travail :

Déplacement

Interface en anglais et en allemand :

English Allemand

Nouveautés de la version 2.4.0

  • Imbrication automatique : range les pièces sur une feuille pour gaspiller le moins de matière possible (rotations, écart, marge, emboîtement dans les creux ; les trous et détails suivent leur pièce).
  • Ordre de découpe sûr : graver avant de découper, et couper l’intérieur avant l’extérieur, pour qu’une pièce ne bouge pas avant que ses détails soient faits.
  • Netteté dans les réglages photo : accentue les contours avant le tramage.
  • Menus de réglages (Paramètres Machine, Machine & Profils, Configuration GRBL, Matrice de test), image insérée à sa taille d’origine, flèches du clavier dans l’éditeur vectoriel et homing automatique activé par défaut.
  • Remplissage vectoriel corrigé : plus de vides aux croisements de traits, et le décalage aller/retour s’applique aussi aux remplissages (contours moins en escalier).

Précédemment, dans la version 2.3.0 :

  • Import DXF dans l’éditeur vectoriel (lignes, polylignes, cercles, arcs, ellipses, splines, blocs), avec réunion automatique des segments en contours.
  • Générateur de boîte à encoches : panneaux prêts à découper, avec décor texte ou SVG gravé sur les faces.
  • Décalage aller/retour : corrige le flou des contours verticaux de la gravure d’image, avec un motif de test pour trouver la bonne valeur (mémorisée par machine).
  • Assistant de calibrage du gain de point pour la gravure sur verre : une grille à graver pour régler le curseur au bon endroit.
  • Fin de job fiable : l’application attend que la machine soit réellement à l’arrêt (état Idle), et un Reset n’est plus annoncé comme une fin normale.
  • Sauvegardes en arrière-plan : l’autosave et la file d’attente ne figent plus l’interface.
  • Boîtes de dialogue de l’éditeur vectoriel traduites, et tutoiement harmonisé dans toutes les langues.

Précédemment, dans la version 2.2.0 :

  • Sélecteur « Matière » (Image / Filtres) : fond noir ou fond clair, qui coche ou décoche « Inverser Couleurs » ; la matière est rappelée dans l’alerte avant gravure et enregistrée dans le projet.
  • Réglages des calques mémorisés par machine : vitesse, puissance, passes… retrouvés à la réouverture, propres à chaque profil machine.
  • Séparation Couleur / Verre : calque noir, calque couleur, simulation et PDF d’impression à l’échelle 1:1.
  • Correction importante de la gravure d’image : le G-Code appliquait la puissance au mauvais segment ; régénérez les G-Codes d’image créés avec une version antérieure.
  • Reset / arrêt d’urgence : le statut « référencé » est retiré si la machine n’était pas à l’arrêt, un nouveau homing est demandé.
  • Sauvegardes atomiques (autosave, file d’attente, projet) : plus de fichier tronqué en cas de plantage.

Voir CHANGELOG.md pour le détail et les versions précédentes.

Compilation (PyInstaller)

Les ressources suivantes sont cherchées à côté de l’exécutable puis dans le bundle PyInstaller : laser_studio_pro.ico (ou laser_studio_pro_256.png / laser_studio_pro_512.png), laser_studio_pro_banner.png et buy_me_a_coffee.png. Pour les embarquer, ajoutez --add-data "fichier;." (Windows) ou --add-data "fichier:." (Linux) à la commande PyInstaller. Supprimez build/, dist/ et LaserStudioPro.spec avant de recompiler pour que les nouvelles ressources soient prises en compte.

Développement / validation

Vérifier la syntaxe Python :

py -m py_compile i18n.py ui_setup_mixin.py main_window.py

Lancer les tests automatiques (bibliothèque standard uniquement, aucune dépendance supplémentaire) :

python -m unittest discover tests -v

Vérifier qu’aucun widget n’est utilisé sans être construit (utile après avoir remplacé plusieurs fichiers) :

python tools/check_ui_attributes.py

Contrôler les traductions (rapport détaillé) :

python tools/check_translations.py

Remerciements

Merci à toutes les personnes qui contribuent au projet, testent les fonctionnalités et signalent les bugs.

Licence

Voir le fichier LICENSE associé au dépôt si présent.

About

Logiciel de pilotage laser GRBL (gravure image, découpe et calques vectoriels) créé par un maker qui aime bidouiller et tester plein de choses.

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages