ChitUI : Une passerelle locale vers les imprimantes résine
ChitUI fournit une interface web pour des imprimantes résine SDCP. Un processus Python sert les ressources web, découvre les imprimantes sur le réseau local et traduit les actions du navigateur en communications avec les machines.
Langages du dépôtJavaScript 48.61%5
Parts calculées à partir des octets GitHub Linguist.
| Langage | % | Octets |
|---|---|---|
| JavaScript | 21 743 | |
| HTML | 10 991 | |
| Python | 10 226 | |
| CSS | 1 572 | |
| Dockerfile | 200 |
Aperçu
Pourquoi il existe
Interface de contrôle web pour imprimantes 3D résine SDCP 3.0 avec découverte UDP sur LAN.
Cas d’usage
Contrôle à distance d'imprimantes 3D résine sans poste dédié.
Démarrage
Ces commandes viennent de la documentation du dépôt. Elles n’ont pas été exécutées pendant cette revue.
python -mvenv .venv
source .venv/bin/activate
pip install -r requirements.txtpython main.pydocker build -t chitui:latest .
docker run --rm --name chitui --net=host chitui:latestRéférences du dépôt
Extraits des guides du dépôt, dans leur langue d’origine. Les liens ouvrent la version du code consultée.
Configuration et utilisation
Usage
README.md
Configuration
README.md
Configuration is done via environment variables:
- PORT to set the HTTP port of the web interface (default: 54780)
- DEBUG to enable debug logging, log colorization and code reloading (default: False)
Fonctions et composants 2
- Navigateur et serveur local
- main.py crée une application Flask dont les fichiers statiques se trouvent dans web et y ajoute Flask-SocketIO. Les registres d’imprimantes et de WebSocket restent en mémoire. La découverte locale explique l’exigence de réseau hôte Docker du README.
- Transfert de fichier
- La route d’envoi valide l’extension et conserve temporairement le fichier. La fonction de transfert calcule une empreinte MD5 et transmet des blocs d’un mégaoctet avec leurs décalages. Une route de flux d’événements expose la progression.
Architecture
Les composants et leurs liens restent lisibles en texte. Le diagramme ajoute une vue interactive.
- Interface web
- Flask et SocketIO
- Découverte et session imprimante
- Imprimante SDCP
Liens vérifiés dans le dépôt.
Mermaid Diagramme interactif (chargement à l’ouverture)
Vue générale des composants et des échanges vérifiés dans le dépôt.

flowchart LR
subgraph group_server["Server and discovery"]
node_app["HTTP and Socket.IO server<br/>[main.py]"]
node_discovery["Printer discovery<br/>[main.py]"]
node_upload["File upload handling<br/>[main.py]"]
node_transfer["Printer file transfer<br/>[main.py]"]
end
subgraph group_printer["Printer communication"]
node_commands["SDCP commands<br/>[main.py]"]
node_connection["Printer WebSocket connection<br/>[main.py]"]
end
subgraph group_webui["Browser interface"]
node_index["Web page entry<br/>[index.html]"]
node_ui["Printer dashboard and actions<br/>[chitui.js]"]
node_protocol["SDCP constants<br/>[sdcp.js]"]
node_theme["Theme preferences<br/>[color-modes.js]"]
end
node_user(("Operator"))
node_browser(("Web browser"))
node_printer["SDCP printer"]
node_user -->|"uses"| node_browser
node_browser -->|"opens interface"| node_app
node_app -->|"serves"| node_index
node_user -->|"operates"| node_ui
node_ui -->|"sends events"| node_app
node_app -->|"emits updates"| node_ui
node_app -->|"runs discovery"| node_discovery
node_discovery -->|"broadcasts discovery"| node_printer
node_app -->|"connects printers"| node_connection
node_connection -->|"opens WebSocket"| node_printer
node_app -->|"dispatches requests"| node_commands
node_commands -->|"sends SDCP"| node_printer
node_printer -->|"sends messages"| node_connection
node_connection -->|"routes printer events"| node_app
node_browser -->|"posts print file"| node_upload
node_app -->|"handles upload"| node_upload
node_upload -->|"starts transfer"| node_transfer
node_transfer -->|"uploads file"| node_printer
node_ui -->|"uses constants"| node_protocol
node_index -.->|"loads interface code"| node_ui
node_index -.->|"loads theme control"| node_theme
class node_app,node_discovery,node_upload,node_transfer,node_browser toneBlue
class node_commands,node_connection toneAmber
class node_index,node_ui,node_protocol,node_theme toneMint
class node_user,node_printer toneIndigoUn panneau de contrôle web pour les imprimantes résine utilisant Chitubox SDCP 3.0. Le serveur découvre les imprimantes, ouvre les connexions WebSocket, dirige les commandes et les états, puis transfère les fichiers téléversés pendant que le navigateur présente les contrôles.
- Composants
- 13
- Connexions
- 21
- Liens appuyés par le code ou le README
- 16/21
Version texte du diagramme
- Interface web → Flask et SocketIO
- Flask et SocketIO → Découverte et session imprimante
- Découverte et session imprimante → Imprimante SDCP
- Imprimante SDCP → Découverte et session imprimante
Suivre un parcours dans le code
Suivez /upload jusqu’au fichier temporaire et à la fonction de transfert. La progression est globale dans cette implémentation; des envois simultanés nécessiteraient un état par tâche pour éviter de mélanger leurs pourcentages.
Parcours
Vue pas à pas du chemin inspecté dans le dépôt. Ce n’est pas une exécution en direct.
API de transfert vers l’imprimante
POST /upload accepte les champs multipart file et printer. L’identifiant sélectionne une entrée du dictionnaire des imprimantes découvertes. Les extensions acceptées sont ctb, goo et prz. Le serveur crée un fichier temporaire et transfère des blocs au point d’accès de l’imprimante sur le port 3030.
| Méthode | Chemin | Contrôle vérifié | Fichier |
|---|---|---|---|
POST | /upload | Aucun contrôle d’authentification dans le gestionnaire inspecté. Les champs multipart file et printer sont requis. | main.py |
GET | /upload | Aucun contrôle d’authentification. Le gestionnaire inspecté retourne 405. | main.py |
GET | /progress | Aucun contrôle d’authentification dans le gestionnaire inspecté. La réponse est un text/event-stream partagé entre les transferts. | main.py |
POST /upload
Content-Type: multipart/form-data
file: [supported print file]
printer: [identifier returned by discovery]Réponse et erreurs
Authentification, limites et pagination
Les gestionnaires inspectés n’ont ni authentification ni limiteur de débit. Gardez cette interface sur un réseau de confiance. La progression est globale et ne distingue pas les transferts simultanés. La pagination ne s’applique pas à cette opération.
Déploiement et exploitation
Les ports, le stockage et les relations de démarrage ci-dessous viennent de la configuration du dépôt. depends_on indique l’ordre de démarrage, pas la disponibilité du service.
Réseau. Host network (--net=host), requested in the README so UDP broadcast can reach the LAN.
Structure des fichiers
La carte montre les fichiers inspectés et leur organisation.
Référence
6 / 6 fichiers admissibles lus (31 dans l’arbre); 0 trop volumineux, 0 échec de lecture et 0 diagnostic de syntaxe.
Ce que couvre l’analyse
Les dossiers connus de dépendances et de compilation, les fichiers d’identifiants et les binaires sont exclus. La collecte couvre les README, les manifestes reconnus et les fichiers source pris en charge.
Les statistiques Linguist couvrent l’ensemble du dépôt et peuvent inclure d’autres langages.
Carte des fichiers
flowchart TD
root["ChitUI"]
f0["main.py"]
root --> f0
f1["requirements.txt"]
root --> f1
f2["README.md"]
root --> f2
f3["web/js/chitui.js"]
root --> f3
f4["web/js/color-modes.js"]
root --> f4
f5["web/js/sdcp.js"]
root --> f5
Fichiers à lire 3
Références
Fiche projet