- TypeScript 54.2%
- Python 44.7%
- JavaScript 0.5%
- CSS 0.4%
- HTML 0.2%
| backend | ||
| deploy | ||
| frontend | ||
| .env.example | ||
| .gitignore | ||
| README.md | ||
AutoPrinter
Lokale Webapp fuer einen Raspberry Pi 4/5, der Projekte mit mehreren 3D-Dateien verwaltet, lokal slicet und die resultierenden G-Code-Jobs an OctoPrint liefert. Standardziel fuer OctoPrint ist http://octopi.local.
Die App spricht keine Cloud an. Uploads, SQLite-Datenbank, G-Code, Queue-Status und Slicing bleiben lokal auf dem Raspberry Pi.
Kernverhalten
- Mehrere
.stl,.objund.3mfDateien pro Projekt hochladen. - Pro Teil Menge, Material, Layerhoehe, Infill, Supports, Brim, Temperaturen, Geschwindigkeit und Rotation speichern.
- Queue aus Mengen erzeugen: Teil A x3 wird zu drei einzelnen Jobs.
- PrusaSlicer CLI wird beim Start/test geprueft, Version und Fehler werden im UI angezeigt.
- Mock-Slicer und Mock-OctoPrint fuer Entwicklung ohne Drucker.
- Echte OctoPrint REST API fuer Upload, Select, Start, Pause und Cancel.
- Live-Status ueber WebSocket
/ws/status. - Sicherheitsregel: Nach jedem fertigen Druck geht der Job auf
waiting_for_bed_clear. Der naechste Job startet erst nach Klick aufTeil entfernt - weiter.
Entwicklung lokal starten
Backend:
cd backend
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --host 0.0.0.0 --port 8080 --reload
Frontend:
cd frontend
npm install
npm run dev
Das Vite-Frontend laeuft dann auf http://localhost:5173 und proxyt /api sowie /ws zum Backend auf Port 8080.
Raspberry-Pi-Installation
Beispielpfad:
sudo mkdir -p /opt/autoprinter
sudo chown -R pi:pi /opt/autoprinter
git clone https://git.fxrz.de/TheoZockt/AutoPrinter /opt/autoprinter
cd /opt/autoprinter
Python:
cd /opt/autoprinter/backend
python3 -m venv .venv
. .venv/bin/activate
pip install -r requirements.txt
Frontend bauen:
cd /opt/autoprinter/frontend
npm install
npm run build
Danach liefert FastAPI die gebauten Dateien aus frontend/dist direkt mit aus.
Konfiguration:
sudo mkdir -p /etc/autoprinter
sudo cp /opt/autoprinter/.env.example /etc/autoprinter/autoprinter.env
sudo nano /etc/autoprinter/autoprinter.env
Wichtig fuer deinen OctoPi:
AUTOPRINTER_OCTOPRINT_URL=http://octopi.local
AUTOPRINTER_MOCK_OCTOPRINT=false
Den OctoPrint API-Key speicherst du bequem im Webinterface unter OctoPrint.
PrusaSlicer CLI
Die App sucht standardmaessig nach prusaslicer im PATH. Wenn dein Binary anders heisst oder woanders liegt, setze:
AUTOPRINTER_PRUSASLICER_PATH=/usr/bin/prusa-slicer
AUTOPRINTER_MOCK_SLICER=false
Falls PrusaSlicer auf dem Raspberry Pi noch nicht verfuegbar ist, bleibt die Projektverwaltung nutzbar. Im UI erscheint eine klare Warnung, und du kannst den Mock-Slicer aktiv lassen:
AUTOPRINTER_MOCK_SLICER=true
systemd
sudo cp /opt/autoprinter/deploy/systemd/print-queue-app.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now print-queue-app.service
sudo systemctl status print-queue-app.service
Aufruf im LAN:
http://raspberrypi.local:8080- oder
http://<raspberry-pi-ip>:8080
Optional nginx
Wenn du Port 80 statt 8080 nutzen willst:
sudo cp /opt/autoprinter/deploy/nginx/print-queue-app.conf /etc/nginx/sites-available/
sudo ln -s /etc/nginx/sites-available/print-queue-app.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
OctoPrint API-Key
In OctoPrint:
- Settings oeffnen.
- Application Keys oder API aktivieren.
- Key erzeugen.
- In AutoPrinter unter
OctoPrinteintragen. - Mock-OctoPrint deaktivieren.
- Verbindung testen.
API-Uebersicht
GET /api/healthGET /api/system/statusGET /api/settingsPOST /api/settings/octoprintPOST /api/octoprint/testGET /api/printer/statusGET /api/slicer/statusPOST /api/slicer/testGET /api/projectsPOST /api/projectsGET /api/projects/{project_id}DELETE /api/projects/{project_id}POST /api/projects/{project_id}/filesPATCH /api/parts/{part_id}POST /api/projects/{project_id}/generate-queuePOST /api/projects/{project_id}/startPOST /api/jobs/{job_id}/slicePOST /api/jobs/{job_id}/retryPOST /api/jobs/{job_id}/skipPOST /api/jobs/{job_id}/confirm-bed-clearPOST /api/queue/pause?project_id={project_id}POST /api/queue/resume?project_id={project_id}POST /api/queue/cancel?project_id={project_id}WebSocket /ws/status
Orientierung / Rotation
rotation_x, rotation_y und rotation_z werden pro Teil gespeichert und ueber die API ausgeliefert. rotation_z wird an PrusaSlicer als --rotate weitergereicht. Fuer robuste X/Y-Rotation ist im Slicer-Service eine TODO-Stelle fuer Mesh-Preprocessing vorbereitet.
Sicherheit
AutoPrinter startet nie automatisch den naechsten Druck direkt nach Abschluss eines Jobs. Erst wenn der Nutzer bestaetigt, dass das Druckbett frei ist, wird der vorherige Job abgeschlossen und der naechste Job gestartet.