No description
  • TypeScript 54.2%
  • Python 44.7%
  • JavaScript 0.5%
  • CSS 0.4%
  • HTML 0.2%
Find a file
2026-06-28 17:39:52 +02:00
backend Initial AutoPrinter web app 2026-06-28 17:39:52 +02:00
deploy Initial AutoPrinter web app 2026-06-28 17:39:52 +02:00
frontend Initial AutoPrinter web app 2026-06-28 17:39:52 +02:00
.env.example Initial AutoPrinter web app 2026-06-28 17:39:52 +02:00
.gitignore Initial AutoPrinter web app 2026-06-28 17:39:52 +02:00
README.md Initial AutoPrinter web app 2026-06-28 17:39:52 +02:00

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, .obj und .3mf Dateien 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 auf Teil 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:

  1. Settings oeffnen.
  2. Application Keys oder API aktivieren.
  3. Key erzeugen.
  4. In AutoPrinter unter OctoPrint eintragen.
  5. Mock-OctoPrint deaktivieren.
  6. Verbindung testen.

API-Uebersicht

  • GET /api/health
  • GET /api/system/status
  • GET /api/settings
  • POST /api/settings/octoprint
  • POST /api/octoprint/test
  • GET /api/printer/status
  • GET /api/slicer/status
  • POST /api/slicer/test
  • GET /api/projects
  • POST /api/projects
  • GET /api/projects/{project_id}
  • DELETE /api/projects/{project_id}
  • POST /api/projects/{project_id}/files
  • PATCH /api/parts/{part_id}
  • POST /api/projects/{project_id}/generate-queue
  • POST /api/projects/{project_id}/start
  • POST /api/jobs/{job_id}/slice
  • POST /api/jobs/{job_id}/retry
  • POST /api/jobs/{job_id}/skip
  • POST /api/jobs/{job_id}/confirm-bed-clear
  • POST /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.