Aller au contenu

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.

Application et services Fork API Docker Parcours
  • Mis à jour
  • JavaScript · 48.61%
SDCP 3.0DockerBrowser UILocal network Crédit amont
Langages du dépôtJavaScript 48.61%5

Parts calculées à partir des octets GitHub Linguist.

Langage%Octets
JavaScript48.61%21 743
HTML24.57%10 991
Python22.86%10 226
CSS3.51%1 572
Dockerfile0.45%200

GitHub · README · Statistiques de langages

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.

README.md · Setup
python -mvenv .venv
source .venv/bin/activate
pip install -r requirements.txt
README.md · Usage
python main.py
README.md · Docker
docker build -t chitui:latest .
docker run --rm --name chitui --net=host chitui:latest

Ré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

After creating the virtual environment and installing the requirements, you can run ChitUI like this:
Lire les instructions complètes ↗

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)
Lire les instructions complètes ↗
Documentation source

1 documents lus parmi 1 candidats.

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.

Contexte système Contexte
  1. Interface web
  2. Flask et SocketIO
  3. Découverte et session imprimante
  4. 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.

Vue statique de l’architecture de ChitUI
Aperçu statique. Le diagramme interactif le remplace après le chargement de Mermaid.
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 toneIndigo

Un 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.

Contrôles d’accès lus dans les gestionnaires. Une mention « admin » dans le README ne figure ici que si le code la vérifie.
MéthodeCheminContrôle vérifiéFichier
POST/uploadAucun contrôle d’authentification dans le gestionnaire inspecté. Les champs multipart file et printer sont requis.main.py
GET/uploadAucun contrôle d’authentification. Le gestionnaire inspecté retourne 405.main.py
GET/progressAucun contrôle d’authentification dans le gestionnaire inspecté. La réponse est un text/event-stream partagé entre les transferts.main.py
Exemple de requête
POST /upload
Content-Type: multipart/form-data

file: [supported print file]
printer: [identifier returned by discovery]

Réponse et erreurs

Le corps de succès est {“upload”:“success”,“msg”:“File uploaded”}. Un fichier ou une imprimante manquants et une extension non prise en charge retournent 400. GET /upload retourne 405. GET /progress diffuse des mises à jour text/event-stream.
Vérifiez le fichier sur l’imprimante après le transfert. Le helper met la progression à 100 et retourne true même lorsqu’un bloc échoue et interrompt la boucle. La réponse de succès ne prouve donc pas la livraison. Le calcul divise aussi par le nombre de blocs complets de 1 Mio, qui vaut zéro pour un fichier plus petit.
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