38 KiB
Changelog
[0.9.20] – 2026-06-08
Neu
- Französische Sprachunterstützung (PR #45 von @Nathacks)
- Z-Höhe in der Print-UI (PR #49 von @Nathacks). Zeigt die aktuelle Z-Position in mm unterhalb des Layer-Zählers.
Behoben
- Kamera-Autostart ignorierte das "Kamera bei Druckstart einschalten"-
Setting nach einem Bridge-Restart (Issue #50). Das Setting wurde in
der Prozessumgebung gecacht — nach dem Speichern in der UI überlebte
der alte Wert den Restart und der neue Wert aus
config.iniwurde nicht gelesen. - Kamera startete nach manuellem Stopp während eines Drucks automatisch
neu (Issue #50). Ein neues
_camera_user_stopped-Flag unterdrückt den Autostart für die aktuelle Drucksitzung. Es wird beim Druckende zurückgesetzt. - Falscher "Stream nicht verfügbar"-Fehler-Toast beim manuellen
Kamera-Stopp. Der Bild-Fehler-Handler war noch registriert als
img.srcgeleert wurde. - JS-Fehler (
ReferenceError: br is not defined) beim Licht-Toggle. Variable wurde aus dem falschen Scope referenziert. - Webcam-URLs sind jetzt absolut, damit Mobileraker/Obico-Clients sie erreichen können.
[0.9.19.1] – 2026-06-04
Behoben
- Standalone-Binaries (Linux/Windows) zeigten
vunknownals Version. DieVERSION-Datei ist jetzt ins PyInstaller-Onefile eingebettet. - Bei fehlenden TLS-Zertifikaten (
anycubic_slicer.crt/.key) gab es nur den rohen Fehler[Errno 2] No such file or directory. Die Bridge meldet jetzt klar, wo die Dateien hingelegt werden müssen und dassanycubic-certs.zipaus dem Gitea-Release stammt.
Geändert
- Filament-Profil-Liste neu kuratiert: 209 statt 399 Einträge. Profile die nur für drucker-spezifische Vendor-Bundles existieren (z.B. Eryone Thinker X400, Artillery M1 Pro, WonderMaker ZR, Tiertime, Cubicon, CoLiDo, Afinia, Snapmaker) sind rausgeflogen — OrcaSlicer hätte sie im Standard-Kobra-X-Setup beim Sync ohnehin nicht gefunden, weil die jeweiligen Vendor-Bundles nur bei aktivem Drucker-Vendor geladen werden. Für solche Filamente bleibt der Custom-Profile-Import (Issue #41) der Weg.
[0.9.19] – 2026-06-02
Neu
- 🎯 Filament-Sync mit OrcaSlicer matched jetzt das richtige Preset
statt immer auf „Generic PLA" zu landen. Voraussetzung: ein
OrcaSlicer-Build mit dem
PR #13719
Empfangs-Patch (im OrcaSlicer-KX-Build dabei). Die Bridge sendet pro
AMS-Slot jetzt
name+vendor_nameim Lane-Pfad UNDgate_filament_nameim Happy-Hare-MMU-Pfad (OrcaSlicer wechselt bei AMS-Setups automatisch auf den HH-Pfad). - Eigene OrcaSlicer-Profile in die Bridge importieren (Issue #41).
Settings-Tab → „OrcaSlicer-Profile" oder direkt im Slot-Edit-Dialog
(„★ Eigene Profile importieren…") lädst du deine
.json-Files aus~/.config/OrcaSlicer/user/<id>/filament/hoch — einzeln oder als ZIP. Erscheint dann im Slot-Dropdown unter „★ Eigene Profile" und wird beim Sync an Orca als User-Match weitergegeben. Funktioniert über HTTP, also auch wenn die Bridge im Docker auf Raspi/NAS läuft und OrcaSlicer auf dem Desktop. Auch reine Override-Profile mit nurinherits: "Generic PLA @System"+ ein paar Tweaks werden korrekt erkannt — die Bridge resolved die vererbten Felder aus dem System-Parent.
Fixes
- AMS-Sync landete hartnäckig auf „Generic PLA": das Orca-
Datenmodell hat 68 duplikate
filament_id-Werte (OGFL99allein 136 mal), und die Bridge wählte oft eine ID die für den Kobra X nichtis_compatiblewar (z.B.GFL92aus dem Kobra-2-Profil → Orca verwarf es). Generator priorisiert jetzt Kobra-X-Varianten und filtert Phantom-Profile (Cross-Vendor-Overrides) raus —orca_filaments.jsonvon 1035 → 400 saubere Profile. - Slot ohne expliziten Override sendet jetzt
Generic <Typ>statt einer impliziten Vendor-Annahme. Library-Generic-Profile habencompatible_printers: [](= alle Drucker), sind also immer sichtbar und matchen verlässlich. - Slot-Karte zeigt den Hersteller direkt nach dem Speichern —
ohne Browser-Reload.
poll()war async, das Re-Render kam erst beim nächsten Tick. - ACE-Trockner-Toggle warf 502-Fehler obwohl der Trockner ein-/aus-
ging (PR #42 von @gangoke):
setDryjetzt fire-and-forget wiesetAutoFeed. Der Drucker antwortet auf diesem Push-Topic mitcode: 0stattcode: 200, das hat die Bridge fälschlich als Fehler interpretiert.
Datenmodell / API
orca_filaments.jsonregeneriert: nur echte Vendor-Profile und OrcaFilamentLibrary-Profile bleiben drin. Bambu/Polymaker/SUNLU- Library-Profile dabei, Qidi-Cross-Bundles raus.- Neue Endpoints:
POST /kx/filament/profiles/user(ZIP/JSON-Upload),GET /kx/filament/profiles/user(Liste der User-Imports),DELETE /kx/filament/profiles/user[?vendor=…&name=…]. Persistenz in<KX_DATA_DIR>/orca_filaments.user.json(Volume — überlebt Image-Updates).
Build
- Neues Modul
bridge/orca_filaments.py(gemeinsame Parser-Helfer für Generator und Import-Endpoint). - Dockerfile + release.sh um
orca_filaments.pyerweitert.
[0.9.18] – 2026-05-31
Neu
- 🎉 Filament-Material und -Farbe pro AMS-Slot aus der Bridge an den
Drucker senden: Im Slot-Edit-Dialog gewählte Werte gehen jetzt
tatsächlich an den Drucker und werden persistent übernommen — am
Drucker-Display siehst du sofort dieselbe Belegung wie in der Bridge-UI.
In 0.9.17 wurde der Befehl über das falsche MQTT-Topic
(
slicer/printer/…) gesendet, der Drucker hat ihn stillschweigend ignoriert. Jetzt geht er überweb/printer/…wie der Anycubic Slicer Next es macht (verifiziert via Live-MQTT-Sniff + Workbench-Vue-Source). Achtung: der Drucker muss im Idle-Zustand sein, und leere Slots lassen sich nicht beschriften. - Mehrsprachiges UI – spanische Übersetzung von Muttersprachler
überarbeitet (PR #40 von @pezfisk): fehlende Akzente
(impresión, cámara, después, animación, …), Begriffe vereinheitlicht
(Pause → Pausa, Start → Iniciar, Layer → Capa). Plus neues
README.es.mdund Cross-Links in den drei READMEs. - Z-Höhen-Anzeige in Obico funktioniert jetzt. Der Drucker liefert
keine echte Z-Position via MQTT (per Live-Sniff bestätigt), die Bridge
schätzt sie aus
curr_layer × layer_height + first_layer_height. Layer-Heights kommen aus dem GCode-Header beim Upload, persistiert im GCode-Store; Fallback aus dem OrcaSlicer-Default-Filename (…_0.2_…gcode)./server/files/metadataliefert zusätzlichobject_height(Gesamt-Z), damit ObicosmmProgress-Widgetaktuelles Z / Gesamt-Zanzeigt. - Slot-Karte zeigt den OrcaSlicer-Profil-Vendor unter dem Material (z.B. „PLA / Polymaker"), mit Profil-Namen + interner ID als Tooltip. So ist auf einen Blick erkennbar welcher Slot-Override aktiv ist.
Fixes
- Slot-Profil-Auswahl im AMS-Dialog (Issue #39 von @harrygeier):
drei separate Bugs in 0.9.17 sorgten dafür dass die gewählte Marke
nach dem Speichern verschwand und beim erneuten Öffnen ein falsches
Material angezeigt wurde.
multiColorBox/setInfoüber das falsche MQTT-Topic — siehe oben.- Speichern lief in zwei parallelen Requests (Profil-Override + Material/Farbe) → Race-Bedingung. Läuft jetzt sequenziell und reloaded den lokalen State bevor der Dialog geschlossen wird.
- OrcaSlicer-Filament-IDs sind nicht eindeutig —
orca_filaments.jsonhat 68 duplikate IDs,OGFL99allein ist 136 Vendor-Profilen zugeordnet (Erkenntnis von @gangoke). Der primäre Selector ist jetzt(vendor, name)— über alle 1002 Profile eindeutig.
- MQTT-Reconnect (Issue #33 von @icebear): wurde der Drucker über Nacht ausgeschaltet, schlug die Bridge nach 5 Reconnect-Versuchen (~60 s gesamt) endgültig fehl — Filament-Sync ging morgens noch (weil das HTTP ist), aber Print-Start scheiterte mit „connection refused", User musste die Bridge selbst neu starten. Reader-Thread reconnectet jetzt endlos (Backoff cappt bei 60 s) bis der Drucker wieder antwortet, mit DEBUG-Logging nach den ersten 5 Versuchen damit das Log nicht über Nacht zugemüllt wird.
- „Unknown child pid"-Warnungen im Log: beim Killen der Kamera-
ffmpeg-Prozesse fehlte daswait()— Children blieben als Zombies und asyncio meldete sie alle ~20 s. Gefixt im CameraCache/api/camera/stream.
UI-Aufräumen
- Pause-Button als Toggle: druckt der Drucker →
⏸ Pause, ist pausiert →▶ Weiter. Der separate „Weiter"-Button entfällt. - Pause + Stopp komplett ausgeblendet wenn Drucker idle — bei Standby waren beide Buttons vorher dauerhaft sichtbar, was beim Idle-Drucker verwirrend wirkte.
Build
- GCode-Store-Migration: neue Spalten
layer_height+first_layer_heightingcode_files(automatisch beim ersten Start von 0.9.18 angelegt).
[0.9.17] – 2026-05-30
Neu
- 🧪 Obico-Anbindung (experimentell): Die Bridge spielt jetzt einen Moonraker, der vom moonraker-obico Plugin akzeptiert wird. Damit funktionieren Time-Lapse, Layer-aligned First-Layer-Scan und WebRTC-Live-Stream gegen einen (selbst gehosteten oder Cloud-) Obico-Server. Hinweis: Das KI-Modell zur Spaghetti-Erkennung ist auf seitliche Kamera-Winkel (Ender/Voron) trainiert — wie zuverlässig es beim Kobra X mit Top-Down-Kamera funktioniert, muss empirisch getestet werden (bei uns ging es schon ganz gut). Stream, Time-Lapse und Telemetrie laufen, die Failure-Erkennung ist deshalb noch als experimentell markiert.
- Mehrsprachiges UI (PR #37 von @gangoke): Inline-Translations sind raus, stattdessen wechselbares Sprach-Dropdown mit Globe-Icon. Auto-Auswahl nach Browser-Locale, manuelle Wahl wird im LocalStorage gemerkt. Sprachen: 🇩🇪 🇬🇧 🇪🇸 🇨🇳 (ES + ZH-CN sind KI-übersetzt und noch nicht von Muttersprachlern geprüft).
- OrcaSlicer-Filament-Profil pro AMS-Slot: Im Slot-Bearbeiten-Dialog kannst du jetzt ein konkretes OrcaSlicer-Profil (z.B. „PolyTerra PLA — Polymaker") pro Slot wählen — die Bridge sendet diese Information beim AMS-Sync mit, statt nur „Generic PLA". Die Profil-Liste wird aus dem OrcaSlicer-Source generiert (~1000 Profile, 43 Hersteller). Damit OrcaSlicer den Hint vollständig respektiert, wird ein passender Patch im OrcaSlicer-KX-Build folgen.
- H.264-Direkt-Stream: Neuer Endpunkt
/api/camera/h264liefert den Drucker-Kamera-Stream ohne Re-Encoding als MPEG-TS — Latenz drastisch reduziert, Bridge-CPU bei Obico-Stream von ~13 % auf ~3 %.
Fixes
- Temperatur-Setzen über Bridge-UI / Obico löste Drucker-Systemfehler aus:
Per Live-MQTT-Sniff vom Anycubic Slicer Next korrigiert — der Befehl
tempature/setbraucht eintype-Feld (0=Nozzle, 1=Bett, 2=beide) und muss über dasweb/printer/…-Topic, nichtslicer/printer/…. Nozzle/Bett über die Bridge heizen jetzt sauber. - Große GCode-Uploads (>50 MB) brachen mit Timeout ab: Der
Connect-Timeout vom Socket lief auch während des
sendall()— bei ~200 MB über LAN brauchte das Schieben mehr als die 30 s und wurde fälschlich als Connect-Timeout abgebrochen. Jetzt sind Connect-, Send- und Read-Phase separat getimeoutet. - Kamera-Snapshot war langsam und konnte sich mit dem Live-Stream blockieren: Die Bridge hält nun einen zentralen Kamera-Cache (ein einziger ffmpeg-Prozess zieht vom Drucker, alle Konsumenten teilen sich den Stream). Snapshots kommen in ~1.3 ms aus dem RAM statt nach 1-2 s per neuer ffmpeg-Instanz. Behebt außerdem das Single-Client-Limit am Drucker (HTTP 429 bei parallelen Zugriffen).
- Sprachwechsel aktualisierte den GCode-Browser nicht: Die in die File-Karten eingebackenen Texte („Drucken", „Schätzung", „Download") blieben in der alten Sprache. Beim Sprachwechsel werden die Karten jetzt neu gerendert.
- GCode Web-Upload + Download + Verify-Dialog (PR #32 von @gangoke): Dateien können direkt im Browser hoch/runtergeladen werden, mit Warn-Dialog wenn ein nicht durch OrcaSlicer hochgeladener GCode gestartet wird.
CI/Build
- Multi-Arch Docker-Image (amd64 + arm64) per Gitea-Actions automatisiert.
- Release-Build über lokalen CodeBuilder für alle drei Targets (linux-amd64, linux-arm64, windows.exe).
[0.9.16] – 2026-05-22
Neu
- Kamera bei Druckstart automatisch einschalten: neue Einstellung „Kamera bei Druckstart einschalten" — die Bridge startet den Kamera-Stream automatisch, wenn ein Druck beginnt (für OrcaSlicer und die Bridge-UI).
Fixes
- Einfarbiger Druck durch leeren AMS-Slot blockiert: OrcaSlicer schreibt alle konfigurierten Filamente in den GCode-Header, auch wenn das Modell nur eines nutzt — die Bridge meldete dem Drucker dadurch alle Farben als nötig, und ein leerer ungenutzter Slot brach den Druck ab. Die Bridge mappt jetzt nur die im GCode tatsächlich genutzten Filamente.
- Filament-Sync jetzt positionstreu: Bei einem leeren Slot in der Mitte
(z.B. Slot 1 gelb, 2 leer, 3 rot, 4 weiß) zeigte OrcaSlicer die Farben auf den
falschen Slots. Behoben — leere Slots behalten ihre Position, und das
Sync-Farbformat folgt der Happy-Hare-Konvention (RRGGBB ohne
#). - Slicer-Zeit + Thumbnail fehlten nach Browser-Reload (oder bei Druckstart direkt aus OrcaSlicer): beide werden jetzt aus dem GCode-Store anhand des Dateinamens wiederhergestellt statt aus flüchtigem State.
- Deutsche Übersetzungslücken im ACE-Trockner-Dialog behoben.
Logging
- Wiederholte Log-Zeilen werden als Zähler („×N") zusammengefasst statt zu spammen; Status-Poll-Verkehr wird nicht mehr auf INFO geloggt.
- Neuer Level-Filter (Alle / Fehler / Warnungen), Toast bei neuen Fehlern, volle Tracebacks im Browser-Log und ein Download-Dateiname mit Zeitstempel.
[0.9.15] – 2026-05-21
Fixes (Issue #29)
- UI im OrcaSlicer-Device-Tab kaputt: OrcaSlicers eingebetteter Webview lädt
nur das nackte HTML und ignoriert externe
<script>/<link>-Tags — nach der v0.9.14-Theme-Auslagerung funktionierte dort kein Button mehr. Die Bridge bettet CSS + JS jetzt inline in die Seite ein — funktioniert in Browser UND OrcaSlicer-Webview. - Dropdowns unlesbar (weiß auf weiß) im OrcaSlicer-Webview:
color-scheme+ expliziteselect/option-Farben ergänzt, damit die nativen Dropdowns in Hell- und Dunkel-Theme korrekt dargestellt werden. - „Select slots"-Button tat direkt nach Upload nichts: eine fehlende
Variablen-Deklaration (
storeFiles) warf einenReferenceError, wenn vor dem Laden des Browser-Tabs geklickt wurde. Behoben. - Upload-Banner kam nach abgeschlossenem Druck zurück: der „file ready"-Status
wurde nur bei Stop/Abbruch geleert, nicht bei
finished. Jetzt auch nach erfolgreichem Druckende geleert.
[0.9.14] – 2026-05-21
Neu
- Theme-System (Community-Beitrag von @hirnwunde, PR #27): Die Web-UI liegt
jetzt in echten Dateien unter
web/themes/<name>/(index.html+style.cssapp.js) statt im Python-Quelltext eingebettet. Theme umschalten mit--ui-theme <name>. Für Theme-Autoren gibt es eine dokumentierte Hook-Referenz (web/DOC/THEME-CSS-HOOKS.md,THEME-JS-ID-HOOKS.md). Das Default-Theme enthält die komplette aktuelle UI (ACE2, Objekte überspringen, Filament-Dialog). Für Nutzer keine Änderung — Binaries/Docker-Image liefern das Theme eingebettet.
- Neustart über API (Community-Beitrag von @gangoke, PR #28): neuer Endpoint
POST /api/restart, um die Bridge per API neu zu starten — z. B. für einen Neustart-Button in der Home-Assistant-Integration.
Intern
- Vereinheitlichter PyInstaller-Build (
kx-bridge.spec) für Linux, Windows und Docker — bindetweb/(Themes) ins Onefile-Binary ein, zur Laufzeit aussys._MEIPASSgelesen. Theme-Einbettung in Linux-Binary und Windows-EXE verifiziert. data/in.gitignoreaufgenommen.
[0.9.13] – 2026-05-20
============================================================ STOPP — VOR DEM DRÜCKEN VON "UPDATE" LESEN
Der "Update"-Button ist in 0.9.11 und 0.9.12 KAPUTT. NICHT benutzen. Stattdessen einmalig manuell updaten — ab 0.9.13 funktioniert er wieder.
WINDOWS-.EXE / LINUX-BINARY-Nutzer — GEFAHR: Update ÜBERSCHREIBT deine kx-bridge.exe / kx-bridge mit einer Textdatei. Das Programm STARTET DANN NICHT MEHR und kann sich nicht selbst reparieren. --> Manuell updaten: die 0.9.13 kx-bridge-windows.zip / kx-bridge-linux.zip von der Releases-Seite laden und die alte Datei ersetzen. Deine config/- und data/-Ordner bleiben erhalten.
DOCKER-Nutzer: Update führt zur Crash-Loop des Containers (ModuleNotFoundError: No module named '_web_assets'). --> Manuell updaten: docker compose pull (oder docker compose up -d --build) config- + data-Volumes bleiben erhalten.
Ab 0.9.13 ist der In-App-Updater repariert und wieder sicher.
Fixes
- Self-Update war in 0.9.11 und 0.9.12 kaputt (kritisch): Der In-App-Updater
ersetzte nur
kobrax_moonraker_bridge.py. Zwei Probleme:- Binary/EXE-Modus: Er überschrieb die laufende Programmdatei
(
sys.executable) mit einer Python-Textdatei — übrig blieb ein nicht mehr startbares Programm, das sich nicht selbst reparieren kann (manueller Re-Download nötig). - Python/Docker-Modus: Seit 0.9.12 importiert die Hauptdatei das
ausgelagerte
_web_assets.py(gebündeltes Frontend), das der Updater nicht mitlud →ModuleNotFoundError: No module named '_web_assets'→ Crash-Loop. Der Updater lädt jetzt alle Bridge-Module (Hauptdatei +_web_assets.py+ Client + Loader) erst vollständig herunter, ersetzt sie dann atomar und verweigert das Self-Update im Binary-Modus (mit Verweis auf den manuellen Download).
- Binary/EXE-Modus: Er überschrieb die laufende Programmdatei
(
[0.9.12] – 2026-05-20
Fixes
- Pause-Status wird jetzt korrekt erkannt: Die Bridge las den Geräte-State statt des verschachtelten Druckauftrags-States, dadurch wurde ein pausierter Druck teils noch als „druckend" angezeigt. Layer/Fortschritt/Restzeit kommen jetzt ebenfalls aus dem Auftrags-Report.
Intern
- Frontend (HTML/CSS/JS) aus der Python-Datei nach
web/index.htmlausgelagert, zur Build-Zeit wieder eingebettet — besser wartbar, für Nutzer keine Änderung.
Doku
- Community-Home-Assistant-Integration von @gangoke verlinkt.
[0.9.11] – 2026-05-20
Neu
- ACE Pro 2 Support (experimentell, Community-Beitrag von @gangoke, PR #26): Die Bridge erkennt jetzt die Filament-Hardware automatisch und passt sich an:
- Modi:
toolhead(kein ACE, Standard-4-Slot-Box),ace_direct(ein ACE Pro 2 direkt am Toolhead),ace_hub(bis zu 4 ACE-Units am Slot-4-Hub) — insgesamt bis zu 19 Slots. - AMS Auto-Refill Umschalter.
- Trockner: Temperatur-/Luftfeuchte-Monitor, Start/Stop/Temp/Dauer-Steuerung, mit Material-Presets in einer neuen Config-Sektion
[ace_dry_presets](PLA, PLA+, PETG, TPU, ABS/ASA, PA/PC + 3 Custom). - UI: Filament-Sektion skaliert auf 19 Slots, Modus-Label, geladener Slot grün umrandet mit Lade-/Entlade-Puls-Animation, Unload/Load direkt aus dem Slot-Edit-Dialog.
- GCode-Farb-Mapping: ACE2-fähig, Farbe-aus-GCode-Fix, Hinweis bei Inkonsistenz zwischen Mapping und Objekten, besseres Default-Mapping.
- Modi:
⚠️ Experimentell: Die ACE-Pro-2-Hardware-Pfade wurden vom Contributor mit einer einzelnen ACE2-Unit entwickelt und getestet; die 2–4-Unit-Hub-Konfigurationen sind theoretisch und auf echter Hardware ungetestet. Wir haben hier ebenfalls keine ACE2-Hardware zur Verifikation. Der Standard-
toolhead-Pfad (ohne ACE) wurde live gegen einen echten Kobra X getestet. Wer ein Multi-ACE-Setup betreibt: bitte per Issue Rückmeldung geben.
Fixes
- Happy-Hare-MMU-Emulation: Es werden nur belegte Slots gesynct — kein Placeholder für leere Slots (kompatibel mit OrcaSlicer PR #13372).
- GCode-Farb-Dialog zeigt nach einem neuen Upload nicht mehr die Daten der vorherigen Datei.
[0.9.10] – 2026-05-17
Hinweis: Mit diesem Release wird der Fokus von neuen Features auf Stabilisierung und Bugfixing verlagert. Die Kern-Workflows (Multi-Printer, Drucker hinzufügen/entfernen, Filament-Dialog, Skip-Objekte, Standalone-Binaries) sind funktional ausreichend — ab jetzt steht Robustheit vor neuen Features. Größere Feature-Wünsche (ACE Pro 2, Home-Assistant-Integration vervollständigen, …) bleiben vorerst im Backlog.
Neu
- Objekte überspringen (vor und während des Drucks): Aus dem AnycubicSlicerNext-Workbench-Bundle rekonstruiert — der Kobra X kann das nativ über sein Protokoll, der Anycubic-Slicer bietet es bloß nicht im UI an. Die Bridge schon, in zwei Varianten:
- Vor dem Druck: beim Starten eines Multi-Object-Drucks aus dem Browser-Tab hat der Filament-Dialog jetzt einen zusätzlichen Abschnitt „Objekte". Einzelne Objekte abwählen (oder Polygon direkt im Build-Plate-SVG anklicken) — sie werden vor dem Druck herausgenommen.
- Während des Drucks: neuer ✂-Button im Dashboard (nur während eines laufenden Drucks sichtbar). Öffnet einen Dialog mit derselben interaktiven SVG-Vorschau — Teil anklicken, bestätigen, der Drucker druckt es nicht weiter. Bereits übersprungene Teile bleiben ausgegraut, der Dialog aktualisiert sich live damit man sieht welche schon weg sind.
- Filament-Dialog – farbige Kanal- und Slot-Marker (Issue #23): Die GCode-Kanal-Nummer sitzt jetzt in einer farbigen Box links (Hintergrund = Kanal-Farbe, Auto-Kontrast-Text statt des alten kleinen Punktes), der zugewiesene AMS-Slot bekommt rechts neben dem Dropdown denselben Look — aktualisiert sich live wenn man die Auswahl ändert. Funktioniert mit 4 Kanälen; das Layout iteriert sauber für mehr, aber >4 echte Filament-Slots brauchen eine ACE-Pro-2-Box und sind ohne entsprechende Hardware nicht durchgängig testbar (geparkt als Feature-Request, Issues #22 und #23).
Intern
- Neue Helfer
kobrax_client.skip_objects(names)/query_skip_objects(). - Neue Endpunkte:
GET /kx/files/{id}/objects,POST /kx/skip,POST /kx/skip/query,GET /kx/skip/state. - SQLite-Schema:
gcode_filesbekommt die Spaltenobjects_skip_partsundsvg_image(Auto-Migration auf bestehenden DBs). _on_fileextrahiert die vom Drucker gelieferte Objektliste + SVG-Vorschau und speichert sie pro Datei._on_skip-Callback verfolgt, welche Objekte der Drucker aktuell als übersprungen meldet.
[0.9.9] – 2026-05-14
Fixes
- „Failed to fetch"-Schleife in der UI (Issue #21): Wenn die Web-UI über die LAN-IP geöffnet wurde, lieferte
/kx/printersbridge_url: http://localhost:7125zurück. Der Browser machte daraufhin Cross-Origin-Requests von der LAN-IP nachlocalhost— die wurden vom Browser blockiert und produzierten eine Flut ausTypeError: Failed to fetch-Poll-Fehlern. Die Bridge liefert jetzt im Einzel-Drucker-Modus eine leerebridge_url, sodass das Frontend relative Pfade gegen dieselbe Origin wie die UI nutzt. Im Multi-Printer-Modus werdenlocalhost/127.0.0.1als Bridge-Hosts herausgefiltert. - Windows-EXE crasht beim Start (Issue #21): Die v0.9.8-
kx-bridge.exewurde mit einer veraltetenconfig_loader.pyaus einem früheren Release gebaut und stürzte mitAttributeError: module 'config_loader' has no attribute 'list_printers'ab.release.shsynct jetztconfig_loader.pyzusammen mit den anderen Quellen ins Windows-Build-Repository.
[0.9.8] – 2026-05-12
Neu
- Multi-Printer in einer Bridge-Instanz: Ein Prozess verwaltet jetzt mehrere Drucker gleichzeitig — N MQTT-Verbindungen + N HTTP-Listener (Ports 7125, 7126, …), geteilte SQLite + GCode-Store. Konfiguration über
[printer_1]-,[printer_2]-… Sektionen inconfig.ini. Einzel-Modus ([connection]) funktioniert unverändert weiter.docker-compose.ymlexposed einen Port-Range7125-7130. - Drucker per UI hinzufügen: „+ Drucker hinzufügen"-Button im Drucker-Tab — nur die IP eingeben, Zugangsdaten (Username, Passwort, Device-ID) werden automatisch vom Drucker geholt und entschlüsselt. Weitere Drucker bekommen den nächsten freien Port (7126, 7127, …).
- Drucker per UI entfernen: „✕"-Button auf jeder Drucker-Karte mit Bestätigung — entfernt die
[printer_N]-Sektion und nummeriert die übrigen um. Beim Entfernen des letzten Druckers wird auch[connection]geleert (leerer Zustand). - GCode Store: Hochgeladene Dateien werden in SQLite gespeichert, inkl. Thumbnail-Extraktion. Neue
/kx/files-API. - Browser-Tab: Grid-Ansicht aller hochgeladenen Dateien — Thumbnail, Status-Badge (✓/✗), letzte Druckdauer, plus Suche, Filter und Sortierung.
- Druckhistorie: Druckaufträge (Start/Ende/Status) werden in SQLite protokolliert, Status pro Datei im Browser-Tab sichtbar.
- Filament-Dialog: Per-Kanal-Remapping vor dem Druckstart — jeder GCode-Farbkanal wird einem physischen AMS-Slot zugewiesen (wie im Anycubic Slicer). Verfügbar im Browser-Tab und im Upload-Banner.
- MMU-Emulation:
GET /printer/objects/query?mmuliefert eine Happy-Hare-kompatible Struktur, damit OrcaSlicers Filament-Sync die AMS-Slots erkennt. - Drucker-Tab: Live-Status aller Drucker-Instanzen, IP auf jeder Karte, „Wechseln →"-Button.
- Editierbarer Drucker-Name: Eigener Name in den Einstellungen (gespeichert in
[bridge] printer_name, hat Vorrang vor dem vom Drucker gemeldeten Namen). - Standalone-tauglich: Linux-Binary / Windows-EXE laufen ohne Docker —
config/unddata/liegen neben dem Programm (portabel). Erststart ohne konfigurierten Drucker zeigt den Drucker-Tab mit „+ Drucker hinzufügen" statt des Einstellungs-Dialogs. - i18n: Alle neuen UI-Elemente auf Deutsch und Englisch.
Fixes
- CORS: CORS-Middleware auf allen Endpunkten — Cross-Instance-Fetches in der Multi-Printer-UI funktionieren zuverlässig.
- Einstellungen / Update-Check zeigen im Multi-Printer-Modus jetzt die aktive Bridge-Instanz (via
_apiUrl). - Bridge-Neustart: Config-abhängige Umgebungsvariablen werden vor einem Neustart gelöscht (der Config-Loader cachte sie, wodurch Config-Änderungen erst nach einem Kaltstart sichtbar wurden). Der Neustart ist jetzt plattformabhängig: Docker/systemd → Prozess-Exit (Supervisor startet neu), Linux standalone →
os.execv, Windows → detachter Subprozess. --data-dir-Default ist jetzt plattformabhängig — der/app/data-Default greift nur in Docker (perENVgesetzt), Standalone-Binaries nutzen<exe-dir>/data. Behebt einen Startup-Crash beim Ausführen ohne Docker.
[0.9.7] – 2026-05-08
Neu
- fetch_credentials-Tool: Ruft MQTT-Credentials direkt vom Drucker per HTTP ab — kein laufender Anycubic Slicer nötig, nur die Drucker-IP. Linux-Binary und Windows-EXE im Release enthalten. (Beitrag von bebu, PR #19)
Fixes
- Upload großer GCode-Dateien: Dateien >1 MB wurden mit HTTP 413 abgelehnt — aiohttp
client_max_sizeauf 256 MB erhöht - Upload-Timeout: Socket-Timeout nach GCode-Upload von 10s auf 120s erhöht — große Dateien führten zu einem Absturz der Bridge mit leerer Antwort während der Drucker noch verarbeitete
[0.9.6] – 2026-05-02
Neu
- Licht-Status-Synchronisierung: Ein/Aus-Zustand und Helligkeit des Druckerlichts werden jetzt live über
light/reportMQTT gelesen — der Licht-Toggle in der UI spiegelt den echten Druckerstatus wider - Zeit-Minicards: Fortschritts-Panel zeigt jetzt drei Karten — Verstrichen, Restzeit und Slicer-Schätzung — sowie einen Layer-Badge neben dem Fortschrittsbalken
- Slicer-Schätzzeit aus GCode: Geschätzte Druckzeit wird direkt aus der hochgeladenen GCode-Datei gelesen (OrcaSlicer:
; total estimated time:am Dateiende, PrusaSlicer:; estimated printing timeim Header) - Erweiterte Druckerstatus-Strings:
pausing,paused,resuming,resumed,stopping,stoppedhinzugefügt — fehlten bisher und ließen die UI rohe Status-Codes bei Pause/Fortsetzen/Stopp anzeigen
Fixes
- file_ready-Banner: Upload-Banner wird nach Stopp oder Abbruch eines Drucks nicht mehr angezeigt
- Zeitanzeige bei Stopp/Abbruch: Verstrichen-, Restzeit- und Slicer-Schätzung werden auf null zurückgesetzt wenn ein Druck gestoppt oder abgebrochen wird
- start.sh:
config/-Verzeichnis undconfig.ini.examplewerden beim ersten Start automatisch angelegt wenn sie fehlen (Issue #15)
[0.9.5] – 2026-05-01
Neu
- Upload-Banner: Nach „Nur hochladen" erscheint ein grüner Banner mit Dateiname — „▶ Druck starten" startet den Druck direkt, „✕ Abbrechen" schließt den Banner
Fixes
- Auto-Print:
auto_printwurde nach dem Multipart-Loop immer aufFalsezurückgesetzt — OrcaSlicer „Hochladen und drucken" startete den Druck nie automatisch - Thumbnail: Vorschaubild wird jetzt auch bei „Nur hochladen" angezeigt — Bridge fragt
fileDetailsdirekt nach dem Upload an - Log Auto-Scroll: Scroll-Position bleibt erhalten wenn Auto-Scroll deaktiviert ist — kein ungewollter Sprung nach oben mehr
[0.9.4] – 2026-05-01
Neu
- AMS-Slot-Editor: Slot im AMS-Panel anklicken → Dialog mit Farbpicker und Material-Auswahl (Schnellbuttons: PLA/PETG/ABS/ASA/TPU/PA/PC/HIPS oder Freitext) direkt im Browser
- Verbessertes Log-Panel: Vollständige MQTT-Payloads (keine Kürzung mehr), Richtungsfilter (Alle/RX/TX) und Topic-Schnellfilter (AMS / print / info / status)
Fixes
- i18n: Kamera-Placeholder-Text und Log-Richtungs-Button „Alle" werden jetzt korrekt beim Sprachwechsel übersetzt
[0.9.3] – 2026-05-01
Fixes
- Update-Check: Stable-User erhalten keine Dev-Pre-Releases mehr —
STABLE_RELEASE_APIhattepre-release=true, wodurch stabile Installationen Dev-Builds statt stabiler Releases fanden (Issue #14) - Version nach Update:
VERSION-Datei wird jetzt im Docker-Image mitgeliefert (COPY VERSION .) —_write_version()benötigt eine vorhandene Datei, ohne die wurde die Version nach dem Self-Update nie aktualisiert (Issue #14)
Neu
- Version im Header: Laufende Version wird im Web-UI-Header neben dem Druckernamen angezeigt — kein Öffnen der Einstellungen nötig (Issue #14)
[0.9.2] – 2026-04-29
⚠️ Breaking Change: Konfiguration wechselt von .env zu config/config.ini
Migration erfolgt automatisch beim ersten Start — keine manuelle Aktion nötig.
- Einstellungen werden ab sofort aus
config/config.inigelesen statt aus.env - Beim ersten Start ohne
config.iniwird die Datei automatisch aus.enverstellt - Docker: Volume
./config:/app/configindocker-compose.ymlist der persistente Speicherort — Einstellungen überlebendocker-compose restartund Updates - Standalone:
config/config.iniliegt neben der Binary und wird bei Updates nicht überschrieben .envbleibt als read-only Fallback gemountet — kann liegen bleiben- Zum manuellen Anlegen einer
config.ini: Vorlage unterconfig/config.ini.example
Neu
- Persistente Einstellungen:
config/config.iniersetzt.env— Einstellungen gehen nachdocker-compose restartnicht mehr verloren (Issue #9) - Verbindungsfehler-Banner: Roter Banner oben in der Web-UI wenn MQTT-Verbindung fehlschlägt (z.B. falsches Passwort, Drucker nicht erreichbar) (Issue #11)
- Slicer-Schätzzeit: Geschätzte Gesamtdruckzeit aus dem GCode-Header wird im Fortschritts-Panel angezeigt
Fixes
- README: OrcaSlicer-Verbindung explizit mit
http://und Port:7125dokumentiert (Issue #12) - README: Direkter Download-Link für
extract_credentialsauf Gitea-Releases (Issue #13)
[0.9.1-dev] – laufend (dev-Branch)
Neu
- Dev-Branch-Infrastruktur: Versionsschema
0.9.1-dev+<hash>— jeder Build eindeutig identifizierbar - Separater Update-Kanal: Dev-Versionen prüfen auf Gitea Pre-Releases mit
-dev+im Tag - AMS-Slot-Auswahl: Einstellung „Standard-Slot (Einfarbdruck)" im Settings-Modal — fixiert einen bestimmten AMS-Kanal oder Auto (alle belegten Slots)
- Auto-Leveling: Checkbox im Settings-Modal — steuert
task_settings.auto_levelingbeim Druckstart - MQTT-Logging: Strukturiertes TX/RX-Log mit Duplikat-Filter (
kobrax.mqttLogger) - Server-Log im Browser: Live-Stream via SSE (
/api/log/stream) — alle Server-Logs erscheinen im Log-Tab der UI - Log-Tab Verbesserungen:
- Auto-Scroll ein/aus — deaktiviert sich beim manuellen Hochscrollen, Button zum Reaktivieren
- Textfilter — Live-Filterung der Log-Einträge
- Error-Badge — roter Zähler im Tab-Button bei Fehlern/Warnungen
- Clear-Button — Buffer leeren
- Download-Button — letzte 500 Einträge als
kx-bridge.log - Log-Fenster füllt den gesamten verfügbaren Platz (statt fester Höhe 160px)
- Log-Buffer: 500 Einträge (Server + Browser vereinheitlicht)
- Changelog im Update-Dialog: Release-Notes aus Gitea werden direkt im Update-Dialog angezeigt
- Slicer-Schätzzeit: Geschätzte Gesamtdruckzeit aus dem GCode-Header im Fortschritts-Panel
[0.9.1-beta15] – 2026-04-26
Fixes
- AMS: Leere Slots werden beim Druckstart übersprungen — kein
filament runoutmehr bei unbelegten Kanälen (Issue #5) - AMS: Material-Typ wird jetzt korrekt aus dem Drucker-Protokoll gelesen (Feld
typestattmaterial_type) - AMS UI: Leere Slots werden grau/transparent mit „Leer"-Label dargestellt
[0.9.1-beta14] – 2026-04-26
Fixes
- Z-Achse: ▲ fährt jetzt aufwärts (Z+), ▼ abwärts (Z−) — Pfeile waren vertauscht (Issue #4)
- Home All: korrekter Achsen-Code 5 — homed alle Achsen XYZ (Issue #4)
- Neuer Button „Home XY" (axis=4) in der UI
- Neuer Button „Motoren aus" (axis turnOff) in der UI
[0.9.1-beta13] – 2026-04-26
Fixes (Windows)
- Self-Update / Settings-Neustart:
os.execvfunktioniert jetzt korrekt in der PyInstaller-Binary - Kamera:
ffmpeg nicht gefundencrasht nicht mehr — saubere 503-Antwort wenn ffmpeg fehlt - Reconnect-Loop: Kurze leere TCP-Reads unter Windows lösen keine sofortigen Reconnects mehr aus
Struktur
bridge/: Bridge-Dateien aus05_scripts/herausgelösttools/:extract_credentials.pyals eigenständiges Tool mit eigenem README_archive/: RE-Forschungsordner, Analyse-Tools und alte Release-Checksums archiviert- README komplett neu: klarer 3-Schritte-Schnellstart
[0.9.1-beta12] – 2026-04-25
Fixes
- Falsche MQTT-Zugangsdaten zeigen jetzt eine verständliche Fehlermeldung statt des kryptischen
CONNACK failed: 20020005
[0.9.1-beta11] – 2026-04-25
Fixes
- Drucker-IP wird automatisch bereinigt wenn der Nutzer versehentlich den Port miteingibt (z.B.
192.168.1.102:9883→192.168.1.102) - Settings-Modal: Hinweis erscheint wenn ein
:in der IP erkannt wird docker-compose.yml:.envals Volume gemountet — Einstellungen bleiben nachdocker-compose restarterhalten
[0.9.1-beta10] – 2026-04-25
Neu
start.sh— startet die Bridge per Docker, baut das Image automatisch beim ersten Aufruf- Tests: pytest-Suite (19 Tests) für API-State, Moonraker-Endpunkte, Settings; Installations-Smoke-Test (
test_install.sh) - Settings-Modal öffnet sich beim ersten Start automatisch wenn keine Zugangsdaten hinterlegt sind
Geändert
- README: Schnellstart zeigt jetzt
./start.shstatt manuellemdocker build - README: LAN-Modus korrekt als Drucker-Menüoption beschrieben
- README: Versionsnummer wird ab jetzt automatisch bei jedem Release aktualisiert
extract_credentials:--write-envnicht mehr empfohlen — Werte im ⚙-Menü eintragen- Dockerfile im Release-Repo: Pfade ohne
05_scripts/-Präfix release.sh: Dockerfile für Release-Repo automatisch persedangepasst
Fixes
- Restdruckzeit (
remain_time) wird jetzt korrekt ausprint/reportübernommen und in der UI angezeigt - Übersetzungen: „Schrittweite" und „Ziel"-Placeholder in Temperatureingaben korrekt übersetzt
[0.9.1-beta9] – 2026-04-25
Neu
- OrcaSlicer-Profil (
kobra_x_orcaslicer_preset.zip) als Release-Asset release.sh: OrcaSlicer-Profil wird automatisch ins Release-Repo kopiert und hochgeladen
Geändert
- README:
extract_credentialsohne--write-env, Werte manuell im ⚙-Menü eintragen - README: Docker-Schnellstart vereinfacht
[0.9.1-beta8] – 2026-04-25
Neu
- Restdruckzeit-Anzeige in der UI (≈ Xh Ym verbleibend) aus
remain_time-Feld - Settings-Modal: Verbindungseinstellungen und Self-Update direkt im Browser
- Self-Update: Bridge prüft Gitea-Release-API auf neue Versionen und aktualisiert sich selbst
Geändert
- Bridge startet im Offline-Modus wenn Drucker nicht erreichbar (kein Absturz)
- Verbinden/Trennen-Button im Header
[0.9.1-beta7] – 2026-04-22
Neu
- Offline-Start: Bridge läuft auch ohne MQTT-Verbindung, verbindet automatisch sobald Drucker erreichbar
- Verbinden/Trennen-Button im Header
[0.9.1-beta6] – 2026-04-20
Neu
- Release-ZIPs:
kx-bridge-linux.zip,kx-bridge-windows.zip,anycubic-certs.zipmit Zertifikaten
Fixes
- PyInstaller frozen-Binary:
__file__durchsys.executable-Pfad ersetzt (Cert-Pfad-Fix)
[0.9.1-beta5] – 2026-04-19
Neu
kx-bridge.exe(Windows) wird automatisch via GitHub Actions gebaut
[0.9.1-beta4] – 2026-04-18
Neu
release.sh: baut Linux-Binary und Windows-EXE, lädt alle Assets auf Gitea hoch- Englische README (
README.en.md)
Fixes
progressundfilenamewerden beistoped/canceledkorrekt auf 0 zurückgesetzt
[0.9.1-beta3] – 2026-04-17
Neu
- Druckgeschwindigkeit-Karte (Leise / Normal / Sport)
- Übersetzungen (DE/EN) vervollständigt
[0.9.1-beta2] – 2026-04-17
Fixes
- Temperatursteuerung während eines laufenden Drucks
[0.9.1-beta1] – 2026-04-17
Neu
- UI-Komplettüberarbeitung: Settings-Modal, Self-Update, Dashboard, Responsive Design
- Neue Drucker-Zustände:
pausing,paused,resuming,resumed,stopping release.sh: Version-Bump und Release-Sync Skript
[0.9.0-beta1] – 2026-04-10
Neu
- Erster öffentlicher Release
- Docker-Deployment, Linux-Binary,
extract_credentials-Tool - Moonraker-kompatible HTTP/WebSocket-Bridge für den Anycubic Kobra X
- AMS Einziehen/Ausziehen, Licht- und Lüftersteuerung
- Web-UI mit Dashboard, Temperaturkarten, Achsensteuerung