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.
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 # Linuxnumba 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 $USERFermez puis rouvrez la session pour que l’appartenance au groupe soit prise en compte (vérifiez ensuite avec groups).
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 --versionFedora — Python 3.12 est disponible dans les dépôts officiels :
sudo dnf install python3.12Ubuntu — Ubuntu 24.04 fournit Python 3.12 par défaut, il suffit d’ajouter le module venv :
sudo apt install python3.12 python3.12-venvSur 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-venvDebian — 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-venvSous 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.12Un 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.txtSous 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.12et nonpython3. 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’erreurModuleNotFoundError: No module named 'PyQt6'alors que PyQt6 est installé. En cas de doute, supprimez.venvet 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.
Lancez main.py depuis le dossier du projet.
source .venv/bin/activate
python main.pymain.py— lance l’applicationapp_utils.py— version de l’application, chemins de ressources, écriture atomique des fichiers de données
graphics_view.py—ZoomableGraphicsViewvector_font.py—VectorFontvector_layers.py— calques et objets vectoriels, canevas de l’éditeurusb_controller.py—LaserUSBControllerworkers.py— threads et fonctions de traitement image / G-Codewidgets_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 moduleconverter)i18n.py— système de traduction multilingue
main_window.py— assemblage de la fenêtre principaleui_setup_mixin.py— interface utilisateur, menus, onglets, dialoguesmachine_profiles_mixin.py— profils machine / matériaux / réglages de calques par machineimage_processing_mixin.py— chargement et traitement d’image, matièrevector_editing_mixin.py— éditeur vectoriel et SVGgcode_generation_mixin.py— génération, aperçu et export G-Codelaser_control_mixin.py— USB / GRBL / commandes temps réelproject_io_mixin.py— sauvegarde et ouverture de projet, sauvegarde automatiquejob_queue_mixin.py— file d’attente de jobspng2svg_mixin.py— onglet PNG/JPEG → SVGseparation_mixin.py— onglet Séparation Couleur / Verrebox_dialog.py— fenêtre du générateur de boîtenesting_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
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)
Conversion PNG → SVG :
Déplacement d’un SVG sur le plan de travail :
Interface en anglais et en allemand :
- 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.
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.
Vérifier la syntaxe Python :
py -m py_compile i18n.py ui_setup_mixin.py main_window.pyLancer les tests automatiques (bibliothèque standard uniquement, aucune dépendance supplémentaire) :
python -m unittest discover tests -vVérifier qu’aucun widget n’est utilisé sans être construit (utile après avoir remplacé plusieurs fichiers) :
python tools/check_ui_attributes.pyContrôler les traductions (rapport détaillé) :
python tools/check_translations.pyMerci à toutes les personnes qui contribuent au projet, testent les fonctionnalités et signalent les bugs.
Voir le fichier LICENSE associé au dépôt si présent.