CutStock — Bedienungsanleitung
Version 2026.10.43 — Verschnittoptimierung für Platten und Stangen
CutStock besteht aus vier Tabs: Material & Lager, Projekte, Optimierung und Einstellungen. Die Oberfläche gibt es auf Deutsch, Englisch, Französisch und Italienisch, im SAP-Horizon-Design in Hell und Dunkel.
Kopfzeile
- Lizenz-Anzeige — „Community (PolyForm Noncommercial)“ oder der Name des Lizenznehmers bei kommerzieller Lizenz
- ☾ / ☀ — wechselt das Farbschema (System, Hell, Dunkel)
- Beenden (nur Desktop-App) — beendet CutStock nach einer Rückfrage; der Browser-Tab schließt sich
Tab 1 — Material & Lager
Links die Materialliste, rechts der Lagerbestand des ausgewählten Materials.

Materialien
Ein Material beschreibt eine Werkstoffart — z. B. „Spanplatte 19 mm“ oder „Kiefer Kantholz 44×44“. CutStock unterscheidet zwei Typen:
- Platte — zweidimensional (Länge × Breite): Span-, MDF-, Multiplex-, Leimholzplatten, Glas, Blech …
- Stange — eindimensional (nur Länge): Leisten, Kanthölzer, Rohre, Profile …
Material anlegen: Neu klicken (oder N drücken). Der Dialog fragt:
| Feld | Beschreibung |
|---|---|
| Name | Frei wählbar, z. B. „Eiche Leimholz 18 mm“ |
| Typ | Platte oder Stange |
| Dicke (Platte) | Materialstärke — nur zur Information, wird in der Materialtabelle angezeigt |
| Querschnitt Breite / Tiefe (Stange) | Profilmaße — nur zur Information |
| Maserung | Keine (frei drehbar), Längs (lange Kante) oder Quer (kurze Kante). Teile mit Maserungsvorgabe werden nur passend zur Maserung platziert. |
| Besäumung (Rand) | Randbreite, die an jeder Kante abgezogen wird (bei Stangen an beiden Enden) — z. B. bei Platten mit unsauberer Kante |
| Min-Restlänge / Min-Restbreite | Ab dieser Größe gilt ein Rest als verwertbar und wird wieder ins Lager gebucht; kleinere Reste zählen als Verschnitt. |
| Bild | Optionales Foto (JPG, PNG, WebP, max. 5 MB) |
Bearbeiten: Material auswählen und Bearbeiten klicken (oder E). Löschen: Löschen (oder Entf) — nach einer Rückfrage werden auch alle Lagerstücke dieses Materials und alle Teile mit diesem Material in sämtlichen Projekten gelöscht.
Material-Bilder
Im Material-Dialog gibt es einen Bildbereich mit Bild hochladen, Ändern und Entfernen. Übernommen wird das Bild erst mit Speichern. In der Materialtabelle erscheint es als Vorschaubild in der Spalte „Bild“ — mit der Maus darüberfahren vergrößert es.
Lagerbestand
Jeder Lagereintrag hat Länge, bei Platten zusätzlich Breite, und eine Stückzahl — z. B. „2800 × 2070 mm, 8 Stück“ für acht ganze Spanplatten oder „3000 mm, 10 Stück“ für zehn Kanthölzer.
Einzelstücke: Bei einer Stückzahl über 1 klappt ein Klick auf ▶ in der Spalte „Stückzahl“ die einzelnen Stücke auf: #1, #2, #3 … mit Notiz und Anzahl ihrer Defekte. So weißt du bei vielen gleichen Brettern, welches gemeint ist — am besten die Nummer mit Kreide aufs Holz schreiben.
Defekte markieren
Astlöcher, Risse, Verfärbungen: Lagereintrag auswählen und Defekte klicken. Der Dialog listet alle Defekte mit Stück #, Position und Länge (bei Platten zusätzlich Position Y und Breite). Mit „Defekt hinzufügen“ kommt ein neuer dazu; jede Zeile lässt sich bearbeiten oder löschen.
Lagerzeilen mit Defekten tragen ein rotes Zähler-Badge. Bei der Optimierung legt CutStock keine Teile auf defekte Bereiche — im Schnittplan erscheinen sie rot schraffiert, und der Plan-Kopf nennt die Stücknummer (z. B. „#1“).

Etiketten (Lager)
Etiketten im Lagerbereich erzeugt ein PDF mit einem Etikett pro vorhandenem Stück des ausgewählten Materials: Materialname, Maße und Lagerkennung (#ID). Das Papierformat stellst du in den Einstellungen ein.
Tab 2 — Projekte
Links die Projektliste, rechts die Teile des ausgewählten Projekts.

Projekte verwalten
Ein Projekt fasst alle Teile eines Vorhabens zusammen — z. B. „Kleiderschrank Schlafzimmer“ oder „Werkstattregal“.
| Button | Funktion |
|---|---|
| Neu / Bearbeiten / Löschen | Projekt anlegen, umbenennen oder mit allen Teilen löschen |
| Duplizieren | Kopie „<Name> (Kopie)“ mit allen Teilen — der Gesägt-Stand beginnt wieder bei 0. Praktisch für Varianten. |
| Export | Projekt als JSON-Datei mit allen Teilen, Materialangaben und CutStock-Version (ohne Gesägt-Stand) |
| Import | Legt aus einer JSON-Datei immer ein neues Projekt an. Fehlende Materialien werden automatisch angelegt (Name, Typ, Maserung, Bestand 0) — Maße und Lager ergänzt du danach. Stammt die Datei aus einer neueren CutStock-Version, erscheint ein Hinweis. |
Teile
Die Teiletabelle zeigt Label, Typ, Material, Maserung, Länge, Breite, Stückzahl und den Fortschritt (Balken mit „gesägt/gesamt“, z. B. 2/4).
Neues Teil: Projekt auswählen und Teil hinzufügen klicken (oder N):
| Feld | Beschreibung |
|---|---|
| Label | Name des Teils, z. B. „Seitenwand links“ (Vorgabe: „Teil n“) |
| Typ | Platte oder Stange — die Materialauswahl zeigt nur passende Materialien |
| Material | Zuordnung zu einem vorhandenen Material |
| Maserung | Egal (frei drehbar), Längs (∥ Teillänge) oder Quer (∥ Teilbreite) |
| Länge / Breite | Fertigmaße des Teils |
| Stückzahl | Wie oft das Teil gebraucht wird |
| Gesägt (Stück) | Nur beim Bearbeiten: Gesägt-Stand von Hand korrigieren |
Teile kopieren
Kopieren nach… kopiert das ausgewählte Teil oder alle Teile in ein anderes Projekt (Was kopieren? → Zielprojekt → Kopieren). Die Kopien starten ungesägt.
CSV-Import
CSV-Import lädt Teilelisten aus Excel, LibreOffice & Co. Trennzeichen und Spalten werden automatisch erkannt; möglich sind Label, Länge, Breite, Anzahl, Maserung und Material in beliebiger Reihenfolge.
Vor dem Import zeigt ein Dialog die Zahl der erkannten Teile, fragt die Maßeinheit und ein Material für Zeilen ohne Material-Spalte ab. Zeilen mit unbekanntem Materialnamen werden übersprungen und gemeldet — anders als beim JSON-Import wird kein Material angelegt.
Trapez-Helfer
Für Treppenstufen und andere trapezförmige Teile: Trapez-Helfer berechnet aus Gerade Kante, Tiefe links, Tiefe rechts und optionalem Versatz das umschließende Rechteck und legt die Teile an. Dazu kommen Label-Prefix (z. B. „Stufe“ → „Stufe 1“, „Stufe 2“ …), Material (nur Platten), Maserung und Stückzahl. Eine Live-Vorschau zeigt das Trapez im Rechteck.
Tab 3 — Optimierung
Projekt, Material, Sägeblatt und Algorithmus wählen, dann Optimieren (oder R). Das Material-Feld zeigt nur Materialien, für die das Projekt noch offene Teile hat. Wechselst du eine Auswahl, wird das angezeigte Ergebnis verworfen.
Auswahl
| Feld | Beschreibung |
|---|---|
| Projekt | Dessen offene (noch nicht gesägte) Teile werden verplant |
| Material | Nur Teile dieses Materials werden berücksichtigt |
| Sägeblatt | Bestimmt die Schnittbreite, die zwischen den Teilen eingerechnet wird |
| Algorithmus | Schnell (Greedy), Nested Guillotine (Platten) oder Gründlich (GA) — siehe unten |
Algorithmen
Alle Verfahren erzeugen Guillotine-Schnitte: Jeder Schnitt geht von Kante zu Kante und ist mit Tisch- oder Handkreissäge machbar.
| Algorithmus | Platten (2D) | Stangen (1D) |
|---|---|---|
| Schnell (Greedy) | Best-Area-Fit: jedes Teil kommt in den am besten passenden freien Bereich — sehr schnell | Exakte Optimierung (ILP) |
| Nested Guillotine (Platten) | Verschachtelte Streifen mit kluger Schnittrichtung — Voreinstellung, guter Standard | Exakte Optimierung (ILP) |
| Gründlich (GA) | Genetischer Algorithmus: sucht länger und ist nie schlechter als Nested | Genetischer Algorithmus |
Stangen: Mit „Schnell“ und „Nested“ löst CutStock die Aufteilung als ganzzahliges lineares Programm (ILP, SciPy) — so wenige Stangen wie möglich. Sind für das Material Defekte erfasst, kommt stattdessen ein Best-Fit-Verfahren zum Einsatz, das die defekten Bereiche ausspart.
Ergebnis und Schnittplan

Kacheln: Lagerstücke verwendet · Teile platziert · Fehlende Teile · Materialbedarf (nur wenn etwas fehlt) · Materialausnutzung · Nutzbares Restmaterial · Gesamtverschnitt (mit „echter Verschnitt“ = nicht verwertbarer Abfall).
Schnittpläne: Pro Lagerstück eine Karte „Vorschau n“ mit Maßen, Stücknummer (#n), Teileanzahl, Ausnutzung und Verschnitt. Die Teile sind farbkodiert und tragen ihr Label (sofern Platz ist); „R“ kennzeichnet gedrehte Teile. Bei Stangen stehen die Teile von lang nach kurz, der Rest am Ende wird grau mit seiner Länge angezeigt.

Schnittfolge: Unter jedem Plan lässt sich „Schnittfolge (n)“ aufklappen — bei Platten z. B. „2780×2050 bei 996 mm von links → 996×2050 + 1781.6×2050“, bei Stangen „Label: Länge ablängen“. Fährst du mit der Maus über einen Schritt, wird der Schnitt im Plan rot hervorgehoben.
Als gesägt markieren: Ein Klick auf ein Teil im Plan hakt es ab, ein erneuter Klick nimmt das zurück. Beim ersten abgehakten Teil eines Lagerstücks wird dieses ausgebucht und verwertbare Reste werden eingebucht.
Fehlende Teile und Materialbedarf
Reicht das Lager nicht, zeigt die Kachel Fehlende Teile Anzahl und Namen der nicht platzierten Teile. Daneben schätzt die Kachel Materialbedarf, wie viele Platten oder Stangen zusätzlich nötig sind (in der Größe der vorhandenen Lagerstücke, ohne Lager in einem Standardformat). Ins Lager bucht diesen Bedarf direkt als Lagerbestand ein — danach einfach neu optimieren.

Aktionen nach der Optimierung
| Button | Funktion |
|---|---|
| Bestätigen (gesägt) | Übernimmt nach einer Rückfrage den ganzen Plan: Lagerstücke ausbuchen, Reste einbuchen, Teile als gesägt markieren. Bereits abgehakte Teile werden nicht doppelt gezählt. |
| PDF Export | Schnittpläne mit Stückliste (#, Label, Länge, Breite, Lager-ID), bei Platten zusätzlich die Schnittfolge — zum Ausdrucken für die Säge. Das PDF ist auf Deutsch und in mm. |
| Etiketten | Ein Etikett pro Teil: Label, Maße („(R)“ bei gedrehten Teilen), Projekt · Material und Plan-Nummer („P1“) |
| Werkstatt-Modus | Vollbildansicht für das Tablet an der Säge (siehe unten) |
Werkstatt-Modus

- Ein Lagerstück pro Seite mit großem Plan und Teileliste
- Abhaken durch Antippen in der Liste oder im Plan — synchron mit der normalen Ansicht und dem Lager
- „Als Nächstes“ markiert das nächste zu sägende Teil; ganz oben der Gesamtfortschritt
- Blättern mit den Pfeil-Buttons oder ← →; Esc oder ✕ schließt
- Sind alle Teile erledigt, erscheint „Alle Teile gesägt“
http://<IP-des-Rechners>:8421 erreichbar.Tab 4 — Einstellungen
Aussehen
| Einstellung | Optionen |
|---|---|
| Sprache | Deutsch, English, Français, Italiano |
| Maßeinheit | Millimeter (mm) oder Zentimeter (cm) — gilt für alle Eingaben und Anzeigen |
| Farbschema | Auto (System), Hell oder Dunkel |
Etiketten
Papierformat für alle Etiketten-PDFs:
- A4-Bogen 3×8 — 70 × 36 mm (Avery 3475), 24 pro Bogen
- A4-Bogen 3×7 — 63,5 × 38,1 mm (Avery L7160), 21 pro Bogen
- Etikettendrucker 89 × 36 mm — z. B. Dymo 99012
- Etikettendrucker 62 × 29 mm — z. B. Brother DK-11209
- Benutzerdefiniert — Breite und Höhe frei, ein Etikett pro Seite
REST-API
Alle Funktionen stehen auch als REST-API unter /api/ zur Verfügung — für Skripte, Automatisierung und Integrationen. Eine interaktive Endpunkt-Übersicht liefert /docs.
- API-Key — mit Generieren erzeugen, mit Kopieren übernehmen. Ist ein Key gesetzt, müssen externe Programme ihn als
Authorization: Bearer <Key>mitsenden. Die eigene Weboberfläche und Zugriffe vom selben Rechner brauchen keinen Key. - Ohne Key ist die API für jeden erreichbar, der den Server erreicht — im Heimnetz mit Docker also am besten einen Key setzen.
- API aktivieren und Port (Standard 8421) betreffen nur die Desktop-App: Eingeschaltet ist CutStock nach einem Neustart im Netzwerk erreichbar, ausgeschaltet nur auf dem eigenen Rechner. In der Docker-Variante ist die API immer aktiv.
Backup
- Backup erstellen — lädt
cutstock_backup_JJJJ-MM-TT.zipherunter: die komplette Datenbank (Materialien inkl. Bilder, Lager, Einzelstücke, Defekte, Projekte, Sägeblätter) und die Einstellungen (inkl. Lizenzschlüssel und API-Key). - Backup wiederherstellen — ersetzt nach einer Rückfrage alle aktuellen Daten durch die ZIP-Datei; danach lädt die Seite neu.
Lizenz
CutStock steht unter der PolyForm Noncommercial 1.0.0 — kostenlos für den privaten, nicht-kommerziellen Einsatz, auch für Schulen, gemeinnützige Vereine und öffentliche Einrichtungen. Für den Einsatz im Betrieb gibt es eine kommerzielle Lizenz auf Anfrage (Anfrageformular auf der Projektseite).
Den Lizenzschlüssel fügst du im Feld Lizenzschlüssel ein und klickst Aktivieren. Angezeigt werden dann Lizenztyp, Lizenziert für und Gültig bis (oder „Unbefristet“); abgelaufene Lizenzen sind gekennzeichnet. Entfernen kehrt zur Community-Lizenz zurück.
Über / Links
- Version — installierte Programmversion
- Projektseite (WorldGate) und Quellcode auf GitHub
- Nach Updates suchen — prüft auf GitHub, ob es eine neuere Version gibt
Sägeblätter
Sägeblätter mit Name und Schnittbreite verwalten (Neu, Bearbeiten, Löschen). Die Schnittbreite wird bei der Optimierung als Materialverlust zwischen zwei Teilen eingerechnet — typisch sind 2,4–3,2 mm bei Kreissägeblättern.
Tastenkürzel
Die wichtigsten Aktionen gehen per Taste. Die Tasten für Neu, Bearbeiten, Löschen, Lagerbestand und Optimieren sind frei belegbar: in den Einstellungen unter „Tastenkürzel“ auf die Taste klicken und die neue drücken (Esc bricht ab). Bereits belegte Tasten werden abgelehnt.
| Taste | Aktion |
|---|---|
| 1 – 4 | Tab wechseln (fest) |
| N | Neu — im Material-Tab ein Material, im Projekte-Tab ein Teil (ohne gewähltes Projekt: ein Projekt), in den Einstellungen ein Sägeblatt |
| E | Ausgewähltes Element bearbeiten — im Material-Tab das gewählte Lagerstück, sonst das Material |
| Entf / ⌫ | Ausgewähltes Element löschen (gleiche Logik wie E) |
| S | Neuer Lagerbestand (Material-Tab) |
| R | Optimierung starten (Optimierungs-Tab) |
| Enter | Dialog speichern (fest) |
| Esc | Dialog, Vergrößerung oder Werkstatt-Modus schließen (fest) |
Solange der Cursor in einem Eingabefeld steht, sind die Kürzel inaktiv.
Installation
Desktop-App (macOS / Windows)
Download auf der GitHub-Releases-Seite. Die Builds sind nicht code-signiert:
- macOS: beim ersten Start Rechtsklick auf die App → „Öffnen“
- Windows: „Weitere Informationen“ → „Trotzdem ausführen“
Die App startet einen lokalen Server und öffnet CutStock im Standard-Browser; eine Internetverbindung ist nicht nötig. Die Daten liegen unter macOS in iCloud Drive/CutStock (sofern iCloud aktiv ist) und werden so zwischen Macs synchronisiert, unter Windows in %APPDATA%\CutStock. Startest du CutStock auf einem zweiten Mac, übernimmt dieser, und die erste Instanz beendet sich — so arbeiten nie zwei Rechner gleichzeitig auf derselben Datenbank.
Web-App (Docker)
Für NAS, Homeserver oder Raspberry Pi (amd64 und arm64):
services:
cutstock:
image: ghcr.io/orohde/cutstock:latest
container_name: cutstock
restart: unless-stopped
ports:
- "8420:8000"
volumes:
- ./data:/data
environment:
- CUTSTOCK_DB=/data/cutstock.db
Starten mit docker compose up -d — danach läuft CutStock unter http://localhost:8420 und ist von jedem Gerät im Netzwerk erreichbar. Die Datenbank liegt im Ordner ./data.
CutStock Version 2026.10.43 · Zurück zur Projektseite · GitHub · PolyForm Noncommercial 1.0.0