3d printing workflow
Find a file
Kevin Mika 89330f53dc
fix(slice): 3MF-Zentrierung, Support-Erkennung und Volumenprüfung
Bisher wurden nur STLs vor dem Slicen zentriert; unpositionierte 3MFs
verursachten dadurch fast alle "outside of print volume"-Fehler, auch
wenn das Objekt locker aufs Bett gepasst hätte. --center beim
prusa-slicer-Aufruf zentriert jetzt beide Dateitypen einheitlich.

Zusätzlich: Objekte, die auch zentriert nicht ins Druckvolumen passen,
wandern einmalig nach models/ignored/ statt bei jedem Lauf erneut zu
scheitern. Objekte, die laut G-Code (;TYPE:Support-Marker) Supportmaterial
brauchen, wandern nach models/manual/ zur manuellen Neuausrichtung statt
mit Stützstrukturen automatisch hochgeladen zu werden.

Nicht mehr genutzte Materialprofile entfernt.
2026-07-25 11:37:39 +02:00
material fix(slice): 3MF-Zentrierung, Support-Erkennung und Volumenprüfung 2026-07-25 11:37:39 +02:00
printer Initial commit: slice.sh, material profiles, printer config 2026-06-13 11:46:32 +02:00
.gitignore add Readme 2026-06-21 08:12:55 +02:00
nexus-ender.code-workspace Initial commit: slice.sh, material profiles, printer config 2026-06-13 11:46:32 +02:00
README.md add Readme 2026-06-21 08:12:55 +02:00
slice.sh fix(slice): 3MF-Zentrierung, Support-Erkennung und Volumenprüfung 2026-07-25 11:37:39 +02:00

nexus-ender / slice.sh

Automatisiertes Slicen von STL/3MF-Modellen mit PrusaSlicer, inkl. optionalem Nextcloud-Sync (WebDAV) für Modelle und fertige GCodes.

Voraussetzungen

  • Linux (Arch, Debian/Ubuntu o. ä. — getestet auf Arch)
  • Bash ≥ 4 (für mapfile, assoziative Arrays)
  • PrusaSlicer (CLI muss als prusa-slicer im PATH verfügbar sein)
  • curl
  • Python 3 inkl. pip
  • Python-Pakete: numpy, numpy-stl

Installation der Abhängigkeiten

Arch Linux:

sudo pacman -S bash curl python python-pip prusa-slicer
pip install --user numpy numpy-stl

Debian/Ubuntu:

sudo apt update
sudo apt install bash curl python3 python3-pip
pip3 install --user numpy numpy-stl

PrusaSlicer gibt es für Debian/Ubuntu nicht offiziell als Paket — am einfachsten das AppImage von der PrusaSlicer-Releases-Seite herunterladen, ausführbar machen und als prusa-slicer ins PATH legen, z. B.:

chmod +x PrusaSlicer-*.AppImage
sudo mv PrusaSlicer-*.AppImage /usr/local/bin/prusa-slicer

Prüfen, ob alles gefunden wird:

prusa-slicer --help > /dev/null && echo "PrusaSlicer OK"
python3 -c "import stl, numpy; print('Python-Pakete OK')"

Download

git clone <repo-url> nexus-ender
cd nexus-ender
chmod +x slice.sh

Verzeichnisstruktur

nexus-ender/
├── slice.sh
├── .env                # optional, siehe unten
├── material/           # Material-Profile (*.ini, aus PrusaSlicer exportiert)
├── printer/             # Drucker-Profil (*.ini), wird mit Material-Profil gemergt
├── models/              # STL/3MF-Dateien (auch in Unterordnern)
│   └── manual/          # wird ignoriert — für Modelle, die NICHT automatisch gesliced werden sollen
├── output/              # generierte GCodes (nach Material/Pfad sortiert)
└── logs/                # detaillierte Logs je Lauf, automatisch angelegt

Mindestens ein *.ini in material/ muss vorhanden sein, sonst bricht das Script ab. Ein Drucker-Profil in printer/ ist optional — fehlt es, wird nur das Material-Profil verwendet.

Konfiguration (optional): Nextcloud-Sync

Nur nötig, wenn STLs automatisch von Nextcloud geholt und GCodes dorthin hochgeladen werden sollen. .env im Projektordner anlegen:

NEXTCLOUD_URL="https://deine-nextcloud.example.com"
NEXTCLOUD_BASE="/remote.php/dav/files/<benutzername>/dein-ordner"
NEXTCLOUD_USER="dein-benutzername"
NEXTCLOUD_PASS="dein-app-passwort"

Fehlt die .env, sind die Zugangsdaten unvollständig, oder ist Nextcloud nicht erreichbar, gibt das Script nur eine Warnung aus und slict trotzdem ganz normal lokal weiter — nur der Sync-Teil wird übersprungen.

Nutzung

./slice.sh

Das Script läuft in 5 Schritten:

  1. Neue STLs von Nextcloud herunterladen (falls konfiguriert)
  2. Lokale STL/3MF-Dateien in models/ einlesen
  3. Material-Profile prüfen (per Hash erkennen, ob sich seit dem letzten Lauf etwas geändert hat)
  4. Slicen (nur wo nötig) und GCode hochladen (falls Nextcloud verfügbar)
  5. Erfolgreich gesyncte STLs wieder von Nextcloud löschen

Im Terminal erscheint pro Material eine kompakte Fortschrittszeile:

PETG_GST3D       [ 7/12] sliced:5  skipped:2  failed:0

Alles Detaillierte (einzelne Dateien, PrusaSlicer-Ausgabe, Warnungen) landet in logs/slice_<timestamp>.log — dort nachsehen, falls etwas fehlschlägt.

Hinweise

  • Modelle in models/manual/ werden weder synchronisiert noch automatisch gesliced.
  • Wird ein Modell größer als die Druckbett-Fläche (220×220 mm) erkannt, skaliert das Script es automatisch passend herunter (nur bei STL, nicht bei 3MF).
  • Ändert sich ein Material-Profil, werden beim nächsten Lauf alle zugehörigen GCodes neu generiert; unveränderte Profile slicen nur fehlende GCodes.