Repository navigation
Conversation
Treat the K3 as a U1-style four-nozzle toolchanger (no CFS). Profiles and start/end/tool-change G-code are adapted from Creality Print (AGPL). F039 is a known model with the stack default /mnt/UDISK gcode root; start stays on opGcodeFile. Catch2 covers model detection, holder parse, and a four-colour T0-T3 slice. Co-authored-by: aceRage <aceRage@users.noreply.github.com>
Direct-rack holders are read-only; T0-T3 stay as sliced and filament_mapping() is empty so history cannot record a fake remap. Add a K3 cover (K2 Plus stand-in), drop obsolete profile keys, bump Creality.json to 02.03.02.07, use the K2 260x260 bed, and tighten the K3 slice asserts. Co-authored-by: aceRage <aceRage@users.noreply.github.com>
Assert a Z+F30000 or I0.86 spiral on the motion after T1-T3, not strings that also appear in start/end G-code. Compare holder colours with the existing RGB-distance helper and warn when filament 5+ has no nozzle. Format the send-dialog note and mismatch lines with _L() so xgettext can extract them. Co-authored-by: aceRage <aceRage@users.noreply.github.com>
change_filament_gcode is emitted before the T command. Scan the nearest preceding custom-gcode span for the K3 Y-dodge (G1 Y… Z… F30000) or I0.86 J0.86 P1 spiral, and require one such block per T1/T2/T3. Co-authored-by: aceRage <aceRage@users.noreply.github.com>
|
Code Evaluator review: re-review 3/3 @dbefe65b9a, FAIL (1 blocker, test only). The 3 re-review limit has been reached, so this goes to the upstream reviewer with the open findings below. The code itself is clean: no libslic3r, U1 or CFS changes, and the profile validator exits 0 with no new warnings. B1, a one-line test fix: the [CrealityK3] count check (test_wipe_tower_no_sparse_gcode.cpp :777-778) also counts the start G-code's bare T3. With a prime tower on a non-Bambu printer and priming at 0, GCode.cpp:3435-3438 uses the last used extruder (3 with four extruders, ToolOrdering.cpp:1403-1406) as initial_no_support_extruder (:3442-3443). The K3 start G-code emits Open follow-ups:
Still owed: Edge CI, MSVC Release+Debug, Catch2 run, a real K3 send and print (send protocol, |
…f039-38ab Adopt the shared Bambu-style filament map panel for K3 direct-rack printers (third_party_map_read_only). Read-only mapping[i] is the identity T-number slot so tiles, highlight and mapping_warning() agree. filament_mapping() stays empty; start remains opGcodeFile. T1-T3 counts only lines whose previous non-blank is "; custom gcode end" (allowing ;_FORCE_RESUME_FAN_SPEED). A preceding T0 block cannot credit a later T1-T3 (F10). Conflicts in PrintHostDialogs kept K3 mapping_warning() next to the #625 third_party_mismatch_warning() helper. Co-authored-by: aceRage <aceRage@users.noreply.github.com>
Russ #622 B1: skip M106/M107 (including P-indexed) between '; custom gcode end' and T so real tool changes still count after CoolingBuffer replaces ;_FORCE_RESUME_FAN_SPEED. Start G-code T, M104 T3, and T0 reset stay excluded. F1: apply the Slot.name tile label only on direct_rack so #612's 1A-1D grouping is not overridden. Co-authored-by: aceRage <aceRage@users.noreply.github.com>
Description
Depends on #625 (merge #625 first) via #619. Merge the Creality stack (#618 → #616 → #619) then this.
#625 adoption: direct-rack (K3) printers opt in with
third_party_map_read_only().mapping[i]iswarning_slot_position()(identity T-number) so tiles, highlight andmapping_warning()agree (F13).filament_mapping()stays empty; start staysopGcodeFile. K3mapping_warning()is kept next to #625'sthird_party_mismatch_warning(). T1–T3 counts only lines whose previous significant line is; custom gcode end(allowing blanks,;_FORCE_RESUME_FAN_SPEED, and M106/M107 including P-indexed); a preceding T0 block cannot credit a later T1–T3 (F10). Slot.name tile labels apply only whendirect_rack(F1).Stacked PR. Base is
cursor/creality-cfs-sync-d523(head of the Creality stack: #618 → #616 → #619). Must land after #619. Do not merge ontomainfirst.Draft Creality K3 (model code F039) support. The K3 is on pre-order (not shipping). It is a Klipper 4-nozzle KliTek toolchanger: four independent nozzles, each fed from its own filament holder, one printing at a time, ~5 s swaps, no CFS.
This fork already handles that machine class for the Snapmaker U1 (
single_extruder_multi_material=false, fournozzle_diameterentries, filament i → physicalTi). The K3 reuses that path. Creality Print'sfilament_map/filament_is_mixedmachinery is not ported. No shared slicer code is changed in a way that would alter U1 G-code.Screenshots/Recordings/Graphs
None. No hardware. The send dialog shows K3 holders read-only (what's loaded in each nozzle) and states that T0–T3 are as sliced.
Art (F9):
Creality K3_cover.pngandCreality K3_thumbnail.pngare K2 Plus placeholders. They need real K3 art before this is more than a draft.Tests
Catch2 cases were added in existing files only (no CMake edits). The full
[CrealityK3]slice case was not compiled — this environment has nobuild/,/opt/edgeslicer-deps, or/opt/edgeslicer-app. The T-count helper was compiled standalone and passed.tests/slic3rutils/printhost_devices_tests.cpp: F039 is a known direct-rack model (not CFS, not K1-family);resolve_model("", "Creality K3")→F039; gcode root is the stack default/mnt/UDISK;opGcodeFilestart;parse_direct_rack_responseaccepts four 1-slot racks or one 4-slot box and skips the type-1 external rack;status_from_direct_rackis never CFS; holder labels areNozzle N (T{n}); mismatch helper warns on empty / type+colour (tolerant RGB distance) / filament 5+ with no nozzle. Identity fill:warning_slot_positionfor read-only mapping.tests/libslic3r/test_wipe_tower_no_sparse_gcode.cpp[CrealityK3]: four-cube K3 system-profile slice asserts the ported start sequence (START_PRINT EXTRUDER_TEMP=,BED_TEMP=,M104 S140,M104 S220 T,G1 X120 Y0 E15),END_PRINT/G1 X130 Y255, T0–T3 tool lines, and a K3 change-filament marker in the; custom gcode endadjacency immediately before each T1/T2/T3. Only T lines whose most recent significant line is; custom gcode end(allowing blanks,;_FORCE_RESUME_FAN_SPEED, and M106/M107 includingM106 P2 S255) are counted. Start G-code T andM104 T3are not counted. A preceding T0 block cannot credit a later T1–T3 (F10). Marker:G1 Y… Z… F30000(the template's Y±5 dodge) orI0.86 J0.86 P1(spiral fallback). Not a bareZ…F30000(travel z-hop uses that too).orca_extra_profile_check.py --vendor Creality --check-filaments --check-materials --check-obsolete-keys --check-assetsexits 0. Warning count is 714 on this branch and oncursor/creality-cfs-sync-d523. No printed line names K3.Review 4/3 (
da5e12a325) — panel-adoption B1 / F1count_k3_change_t_linesalso skips M106/M107 (including P-indexed, e.g.M106 P2 S255) between; custom gcode endand T, because CoolingBuffer replaces;_FORCE_RESUME_FAN_SPEEDwith those commands. Synthetic cases: marker thenM106 S128then T2; marker thenM106 P2 S255+M107then T1. Start T3,M104 T3, and T0 no-credit remain. Standalone helper compile passed.ds.label = s.nameonly whendirect_rack, so it cannot override Happy Hare and AFC slot reading for the Moonraker send dialog #612's 1A–1D grouping for QIDI/HH/AFC. Comment onuse_third_party_map_panel(): once Happy Hare and AFC slot reading for the Moonraker send dialog #612 merges it must becfs || direct_rack || qidi_box || happy_hare || afc.Review 2/3 (
dbefe65b9a)G1 Y… Z… F30000orI0.86 J0.86 P1, and requires one such block per T1/T2/T3.Review 1/3 follow-ups (
8e4d32d9d5on35d4c1caf9)colour_rgb_dist_sq(the same RGB helperauto_match_indexuses). Near-identical shades (about 32 RGB units) do not warn. Filament 5+ emits “has no matching nozzle” instead of being ignored._L()/format_wxstrliterals so xgettext can extract them. Status.note stays English for Catch2.Review 1/3 blockers (
35d4c1caf9)filament_mapping()returns empty so history / Snapmaker unload cannot record a fake remap. Start staysopGcodeFile. Note says mapping is set when slicing (assign filaments to extruders); T0–T3 go to nozzles 1–4; send does not remap G-code. Type/colour mismatch vs the T-number holder is a warning only.Creality K3_cover.pngandCreality K3_thumbnail.png(K2 Plus stand-ins; see F9). Dropped obsolete keys:filament_load_time/filament_unload_timefrom Hyper PLA;overhang_speed_classic/overhang_totally_speedfrom the K3 process files.Creality.jsonversion02.03.02.06→02.03.02.07.creality_hi_buildplate_model.stl+creality_k2_buildplate_texture.svg(not the K1 235×250 assets).Nozzle 1 (T0)…Nozzle 4 (T3).[CrealityK3]asserts the K3 start/tool-change sequence (see Review 2/3 for the tool-change half).Validator output
Same command on
cursor/creality-cfs-sync-d523(#619): errors 0, warnings 714, same printed obsolete-key set. No new warnings.Sources (Creality Print, AGPL)
Inspected on
CrealityOfficial/CrealityPrint(current default branch at the time of this work):resources/profiles/Creality/machine/Creality K3.json,Creality K3_model.json(nozzle_diameter0.4×4,single_extruder_multi_material=false)resources/profiles/Creality/process/0.20mm Standard @Creality K3.json(and siblings)resources/profiles/Creality/filament/Hyper PLA @Creality K3.json(and Generic PLA/PETG/ABS/ASA/TPU)doc/creality-k3-current-direct-rack-scope-plan.md; SendToPrinter revertc709a2aaf(K3-specificfilament_maps/open_cfsstart was reverted; start isopGcodeFile)PrinterBoxFilamentPanel.cpp(model == "F039")MachineVender::is_creality_k3used only forOozePrevention::post_toolchangeM109doc/bugfixes/F039-K3-*.mdCreality.jsonK3 entriesUpstream OrcaSlicer has no K3 profile.
What was adapted
resources/profiles/Creality/(machine model + 0.4 nozzle, four processes, six filaments) and surgical inserts inCreality.jsonafter the K2 SE counterparts. Schema adapted to EdgeSlicer: scalarnozzle_type/nozzle_volume;host_type/printer_agent=crealityprint;printer_model=Creality K3(the stack preset fallback). Start / end /change_filament_gcodeported from Creality Print and credited in the machine JSON.tool_change_temprature_wait=0(profile-gated M109 fix → M104).purge_in_prime_tower=0on the machine.machine_tool_change_time=5.CrealityPrintModel.hpp):direct_rack_models{F039 → K3}separate fromcfs_capable_models.is_known_modelincludesF039only (not the display name).resolve_modelreverse-mapsCreality K3/K3→F039.omit_upload_path("F039")is false. G-code root: stack default/mnt/UDISK(see unverified).opGcodeFile+enableSelfTest.#618deadline/cancel rules unchanged. Probe uses/info+boxsInfo; F039 is parsed byparse_direct_rack_response(does not reuse CFS 4-slot padding). If holders are reported they are shown read-only via the shared Bambu-style swatch map for third-party send dialogs (CANVAS, U1, QIDI Box) #625 panel; filaments stay T0–T3 as sliced. No "Use CFS". Calibrate before printing is kept because Creality Print putsenableSelfTeston genericopGcodeFile.OozePreventionC++ changes (Creality Print'sWipeTowerCrealityzhop is not ported). U1 / Snapmaker files untouched.Unverified (needs a real K3)
/mnt/UDISK. Flag this on first hardware test.boxsInfoschema. Parser accepts both "four type-0 boxes, one material each" and "one type-0 box, four materials" and skips type 1. On-wire layout is unknown.opGcodeFileas other non-CFS Creality machines after the SendToPrinter revert. No K3 start-message capture.[CrealityK3]slice binary not built.enable_prime_tower,purge_in_prime_tower=0, ooze / standby).Real-K3 smoke checklist
When a K3 is available:
Creality K3 0.4 nozzle+0.20mm Standard @Creality K3 0.4 nozzle+ four filaments. Confirm Check profiles / profile validator is clean.T0–T3,START_PRINT EXTRUDER_TEMP=/M104 S140/M104 S220 T, aG1 Y… Z… F30000(orI0.86 J0.86 P1) custom block immediately before each T1–T3, prime tower, and M104 (not wait-M109) on tool changes.cursor/creality-cfs-sync-d523(this PR must not change U1 G-code)./infomodelisF039and the preset fallbackCreality K3→F039./mnt/UDISK/printer_data/gcodes/(or record the real root).opGcodeFile(nocolorMatch/multiColorPrint/ CFS fields) and the printer starts.#618deadline/cancel still applies (no hang).libslic3r_tests "[CrealityK3]"andprinthost_devices_tests(F039 / direct-rack sections) after a real compile.