mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-06-10 05:52:44 +00:00
## Summary Adds end-to-end Creality K-series (K2 / K2 Plus / K2 Pro) host support to OrcaSlicer in a single bundle, per [@SoftFever's request to consolidate](https://github.com/OrcaSlicer/OrcaSlicer/pull/13752#issuecomment-4560837450) the previously stacked PRs. Three logically separable features, all gated on `host_type=crealityprint`: 1. **LAN auto-discovery** — `Browse...` in the Physical Printer dialog now finds K-series printers on the local network via a DNS-SD meta-browser (per-device-unique service names `_Creality-<MAC>._udp.local.`). Other host types unchanged. 2. **CFS filament sync** — `CrealityPrintAgent` (inheriting `MoonrakerPrinterAgent`) queries the K-series WebSocket on `:9999` for `boxsInfo`, maps loaded CFS slots to Orca filament presets, and populates the Sidebar via the standard `fetch_filament_info` → `build_ams_payload` path. Matches the shape of `MoonrakerPrinterAgent` / `QidiPrinterAgent` / `SnapmakerPrinterAgent` per [the earlier review feedback](https://github.com/OrcaSlicer/OrcaSlicer/pull/13752#discussion_r3278574545). 3. **K-series filament profiles** — system profiles for CR-PLA / CR-PETG / CR-ABS / CR-Silk / CR-TPU / CR-Nylon / CR-Wood / Hyper PLA / etc. on K2 / K2 Plus / K2 Pro nozzle sizes (imported from CrealityPrint v7.1.0+, normalised to OrcaSlicer profile conventions). The previous stack base (#13291, *CrealityPrint as host type*, by @imammedo) is **also bundled into this PR** since it's currently conflicting with main and not moving. Happy to extract it back out if @imammedo's PR is preferred to land first for attribution — let me know. ## What this PR is *not* - **No new UI surfaces.** All three features hook into existing UI (Browse button, Sidebar sync icon, filament dropdowns). - **No phone-home / telemetry.** No Hark Tech endpoints, no licence checks, no opt-in dialogs. Pure upstream feature work. - **No K-series-specific Device tab.** Embedded WebView falls back to Fluidd/Mainsail on `:4408`, same shape as the existing Moonraker integration. ## Screenshots Captured against a K2 Combo (F021, firmware v1.1.260206) on the v4 test build: | | | |---|---| |  | **Discovery dialog** — `Browse...` flow on a `host_type=crealityprint` printer. Click → ~5–10 s LAN scan → K2 found with model + hostname + IP. | |  | **CFS filament sync** — Sidebar after clicking the sync icon: 4 slots populate with the real loaded CFS spools (3× Hyper PLA + 1× CR-Silk). | |  | **Device tab** — Mainsail loaded into the embedded WebView for `host_type=crealityprint`, mid-print state visible. | ## What's added ### LAN discovery - **`deps_src/mdns/`** — vendors [mjansson/mdns](https://github.com/mjansson/mdns) (public domain) plus Creality's `cxmdns` C++ wrapper from CrealityPrint v7.1.1 (AGPL-3.0, compatible with OrcaSlicer's AGPL-3.0). Attribution in `deps_src/mdns/NOTICE.md`. - **`Utils/CrealityHostDiscovery.{hpp,cpp}`** — synchronous DNS-SD scan + per-host `GET /info` probe. Maps model codes `F008` / `F012` / `F021` → K2 Plus / K2 Pro / K2. - **`GUI/CrealityDiscoveryDialog.{hpp,cpp}`** — modal `wxDialog` showing Model / Hostname / IP for each discovered host. - **`src/slic3r/CMakeLists.txt`** — adds `Iphlpapi.lib` and `Ws2_32.lib` to `libslic3r_gui`'s MSVC link line (needed by `GetAdaptersAddresses` + Winsock2 calls in vendored `mdns.c`). ### CFS filament sync - **`Utils/CrealityPrintAgent.{hpp,cpp}`** — inherits `MoonrakerPrinterAgent`, overrides `fetch_filament_info()` to query the K-series WS protocol on `:9999`, build `AmsTrayData`, and call inherited `build_ams_payload()`. No printer-specific code lives outside the agent. - K2 Plus slot-state parser handles the three documented slot states (`0` empty / `1` manually entered / `2` RFID-tagged) per [DaviBe92's reverse-engineering docs](https://github.com/DaviBe92/k2-websocket-re). ### K-series filament profiles - ~110 profile JSONs under `resources/profiles/Creality/filament/` covering K2 / K2 Plus / K2 Pro × 0.2 / 0.4 / 0.6 / 0.8 nozzle combos × CR-PLA / CR-PETG / CR-ABS / CR-Silk / CR-TPU / CR-Nylon / CR-Wood / Hyper PLA / Hyper PETG-GF / Hyper PLA-CF / etc. - Imported from CrealityPrint v7.1.0; normalised to OrcaSlicer profile conventions (tabs not spaces, no `{if !multicolor_method}` wrappers, `filament_vendor: ["Creality"]` on Creality Generic profiles). ## Tester confirmations on the v4 test build | Printer | Firmware | Result | Reporter | |---|---|---|---| | K2 Pro | v1.1.5.5 / CFS v1.4.2 | ✅ LAN discovery on #13752 test build | [@Requiem-MH](https://github.com/OrcaSlicer/OrcaSlicer/pull/13752#issuecomment-4495235225) | | K2 Pro | v1.1.5.5 / CFS v1.4.2 | ✅ CFS sync across 1-CFS, 2-CFS, partial, full configurations | [@Requiem-MH](https://github.com/OrcaSlicer/OrcaSlicer/pull/13744#issuecomment-4495230061) | | K2 Plus | v1.1.5.2 / CFS v1.2.2 | ✅ Slot-state fix resolves the partial-sync regression | [@DaviBe92](https://github.com/OrcaSlicer/OrcaSlicer/pull/13744#issuecomment-4499425852) | | K2 Plus | v1.1.5.5 / CFS v1.4.2 | ✅ All slots syncing correctly after fix | [@swilsonnc](https://github.com/OrcaSlicer/OrcaSlicer/pull/13744#issuecomment-4503273127) | | K2 Plus | (Reddit u/TrainAss) | ✅ Both PLA + PETG slots populated correctly | [@TrainAss](https://github.com/OrcaSlicer/OrcaSlicer/pull/13744#issuecomment-4503401664) | | K1C | (latest stock) | ✅ `boxsInfo` payload format compatible (4 slots of generic PETG) | [@JoveYu](https://github.com/OrcaSlicer/OrcaSlicer/pull/13744#issuecomment-4519036448) | ## Known follow-ups (out of scope) - **Snapmaker U1 regression** ([@TrainAss](https://github.com/OrcaSlicer/OrcaSlicer/pull/13744#issuecomment-4529350262)): the v3 build also happened to sync filament from his U1; v4 regressed this. The refactor only touches `htCrealityPrint`-gated code so this is likely incidental — needs his config + logs to diagnose. Will follow up in a separate issue once this lands. - **Native Device tab for K-series**: deferred. Current Mainsail WebView shim covers the common case. - **#13581 (@hamham999) profile overlap**: confirmed minimal code conflict (zero), profile-file overlap of ~204 files. Whichever PR lands second rebases off the other. ## Test plan - [x] Linux build clean on commit `<UPDATED AFTER BUILD>` (LXC 104, GCC 12, cmake) - [x] MSVC link clean (manual VS 2026 / MSVC 14.51 build) - [x] End-to-end on real hardware: K2 Combo, K2 Pro, K2 Plus, K1C - [x] `host_type ≠ htCrealityPrint` paths unchanged — Bonjour fires for OctoPrint, Flashforge picker fires for Flashforge, Moonraker / Qidi / Snapmaker agents unchanged - [x] Profile-validation CI green (was a separate Elegoo test-fixture failure on main, not introduced by this PR) Signed-off-by: Igor Mammedov <niallain@gmail.com> Co-authored-by: Igor Mammedov <niallain@gmail.com> Co-authored-by: grant0013 <grant@harktech.co.uk> Co-authored-by: SoftFever <softfeverever@gmail.com> Co-authored-by: hamham999 <hamham999@users.noreply.github.com> Co-authored-by: Alys Andreollo <3528187+alysandreollo@users.noreply.github.com>