This project is a desktop IDE to build and run keyboard/mouse macros with its own scripting language (DSL). The sections below give you a quick start guide, then the original full technical specification.
- Python 3.10+
pipavailable in your PATH
Recommended (for best experience):
- Windows (macro recording uses mouse/keyboard hooks)
From the project folder:
pip install -r requirements.txtIf you do not have a requirements.txt yet, you can install the core libraries manually:
pip install PyQt5 QScintilla pynput pillowpython main.pyYou should see Macro Builder v4.0 - Professional IDE with:
- Colorful code editor (syntax highlighting, folding, auto-completion)
- Dark console at the bottom with green text
- Speed slider and iterations selector
- Debug panel (variables, breakpoints, step mode)
Create a new file (Ctrl+N) and paste for example:
echo, Starting demo
loop,3
echo, Loop $i
wait,1
endloop
echo, Done
Press F7 to validate syntax, then F5 to run.
- IDE help: menu Aide → À propos
- Online / generated docs (MkDocs): see
documentation/folder - Detailed language reference:
documentation/docs/command-reference.md(added for easy lookup of all commands with examples)
Ce document décrit précisément l’architecture, le langage, le comportement et les règles internes de Macro Builder v4.0. Il permet à un développeur de recréer entièrement le projet sans accès au code original.
Macro Builder est une application desktop permettant :
- de créer des macros clavier et souris
- via un langage de script dédié (DSL)
- avec une interface graphique
- et un moteur d’exécution contrôlable (pause, stop, debug)
Le projet vise :
- la lisibilité
- la sécurité
- l’extensibilité (v3 → v4+)
- Python 3.10+
tkinter: interface graphiquepynput: contrôle clavier et souristime: gestion des délaisthreading: exécution non bloquantejson: import/export- (optionnel)
PIL/opencv-python: détection pixel/image
macro_builder/
│
├── main.py # Point d’entrée
├── ui/
│ ├── window.py # Fenêtre principale
│ ├── editor.py # Zone d’édition + lignes
│ ├── controls.py # Boutons, sliders, logs
│
├── engine/
│ ├── parser.py # Analyse du script
│ ├── executor.py # Exécution ligne par ligne
│ ├── context.py # Variables, état global
│ ├── recorder.py # Enregistrement actions
│
├── commands/
│ ├── keyboard.py
│ ├── mouse.py
│ ├── control.py
│
├── utils/
│ ├── file_io.py
│ ├── color.py
│ ├── logger.py
│
└── assets/
-
Le script est lu ligne par ligne
-
Chaque ligne devient une Instruction
-
L’exécution se fait dans un thread séparé
-
Le moteur doit supporter :
- pause
- reprise
- arrêt immédiat
- Une instruction par ligne
- Séparateur :
, - Indentation = structure logique
- Commentaire :
#
$nom = "Jean"
$age = 25
- string
- int
- float
- bool
$score += 10
$hp -= 1
| Nom | Description |
|---|---|
$i |
Compteur de boucle |
@speed |
Vitesse globale |
@iterations |
Variable UI |
loop,5
...
next
loop,infinite
...
endloop
while,$hp > 0
...
endwhile
if,condition
...
endif
$a == $b$a != 10$x > 5exists,$varpixel,x,y,#RRGGBB
function heal()
press,h,0.1
endfunction
heal()
Les fonctions :
- n’ont pas de retour
- ont accès au contexte global
| Commande | Effet |
|---|---|
press,touche,durée |
Appui simple |
press,ctrl+c,durée |
Combo |
hotkey,alt+tab |
Raccourci |
type,texte |
Écriture |
Touches spéciales mappées via pynput.keyboard.Key.
| Commande | Effet |
|---|---|
lmc / rmc / mmc |
Click |
move,x,y |
Déplacement |
click,x,y,left |
Click position |
drag,x1,y1,x2,y2 |
Glisser |
scroll,up,3 |
Scroll |
on,lmc / off,lmc |
Maintien |
| Commande | Description |
|---|---|
wait,secondes |
Pause |
echo,message |
Log |
breakpoint |
Pause debug |
-
Capture :
- touches pressées
- clicks
- positions
- délais
-
Génère un script DSL équivalent
-
Nettoyage automatique (groupes, délais inutiles)
Fonctionnalités obligatoires :
- Ligne active surlignée
- Valeurs des variables affichées
- Step by step
- Breakpoints
{
"version": "4.0",
"speed": 1.2,
"script": "...",
"metadata": {
"created_at": "ISO-8601"
}
}- Limite d’itérations configurable
- Timeout global
- Bouton STOP toujours prioritaire
- Blocage des
eval()dangereux
- Le moteur ne doit jamais bloquer l’UI
- Un script invalide ne s’exécute jamais
- Toute boucle infinie doit contenir un
wait - L’arrêt utilisateur doit être immédiat
Un développeur recevant uniquement ce document doit pouvoir :
- recréer l’UI
- implémenter le parser
- reconstruire le moteur
- reproduire le comportement exact
Version de référence : Macro Builder v4.0 Document : Spécification officielle