Skip to content

Configuration

github-actions[bot] edited this page Nov 12, 2026 · 1 revision

Configuration reference

Every configuration option these extensions read, with the literal default and constraints the source gives it. Extracted with a Python parser, so no default is transcribed by hand.

156 options across 18 modules.

Source: NebulaOS-klipper-extensions at 178a0c2.

Defaults are never invented. An option whose default is computed at runtime rather than written as a literal is shown as computed - the source is the only honest answer there. An option with no default is required: Klipper raises an error if the section omits it.

Section names are the module names, which is how Klipper's [section] headers map to these files.

Every one of these needs a Klipper restart

Checked, not assumed. Every configuration read in this repository happens in a module's __init__ or load_config, at load time - a scan of all call sites found no option re-read at runtime. So changing any option below takes effect only after Klipper restarts, and nothing here can be adjusted live.

On the printer that is Settings -> Printer -> Restart Klipper, or FIRMWARE_RESTART from the console. The live adjustments a user can make during a print - speed, flow, Z offset, pressure advance - are not configuration options and are not in this file.

Where the explanations come from

The text below each heading is the module's own header comment, written by its author. The Purpose column is hand-written, by reading the module that uses the option - not extracted, because this repository carries no inline comments above its options, and not inferred from the option's name, which would be invention dressed as documentation.

Where an option is passed straight to a stepper driver register field, the purpose says so and names the field rather than explaining what the field does. That is the boundary of what can be established from this source: the driver's own datasheet is the authority on the field, and paraphrasing it from memory here would be the same invention in a more convincing costume.

Some options are accepted and then ignored

A handful of options are read by a module and deliberately not acted on. Their Purpose cell begins Accepted but not acted on, and a reader who sets one should expect nothing to happen.

Two different reasons, both from the source:

  • To stop Klipper refusing to start. Klipper hard-errors on any option in a section that the module never reads. [z_compensate] on a real device sets tri_min_hold, tri_max_hold and speed, which belonged to a sensitivity override removed with PRTouch in Phase 1.8B. They are read and discarded so the printer still boots.
  • Because the meaning is unconfirmed. type_nozz, noz_pos_center, noz_pos_offset and pumpback_mm are read but unused, and the source explains why: noz_pos_center is plausibly an XY reference point with nothing confirming it, and misapplying it would send the toolhead somewhere unintended; pumpback_mm is plausibly a pre-wipe retract, and wiring untested E-axis motion into a probe and heat sequence was judged not worth the risk on a guess.

That second group is the author choosing to leave a thing visibly unfinished rather than act on a plausible guess. Documenting them as ordinary settings would undo that: it would tell a reader these controls work.

Where an option has its own Purpose, it was written by reading the module. Where the cell says From the source comment, it is the comment the author left above that line, quoted. A dash means neither exists - and a dash is the honest answer, because the alternative is a sentence invented from the option's name.

[autotune_tmc]

Klipper TMC Autotune (autotune_tmc.py)

Option Purpose Type Default Constraints
extra_hysteresis Added to the computed chopper hysteresis before hstrt and hend are written. The module computes hysteresis from the motor constants, the voltage, the run current, the blank time and toff; this is the manual nudge on top, 0-8. int 0 (EXTRA_HYSTERESIS) minval 0, maxval 8
motor Which motor this stepper is, by the name of a [motor_constants <name>] section (the vendored motor_database.cfg supplies them). Required: every tuned value is computed from that motor's electrical constants, so without it there is nothing to tune from. Klipper refuses to start if the name is not defined, and a deprecated alias produces a runtime warning naming the replacement. The KE's stock motors are creality-42-34 (X/Y) and creality-42-40 (Z). string required -
overvoltage_vth From the source comment: A zero threshold asserts the overvoltage condition continuously, and values above the TMC2240 absolute maximum cannot protect it in time. Leaving the option unset preserves the driver's hardware default. float none (OVERVOLTAGE_VTH) above 0.0, maxval 41.0
pwm_freq_target Target chopper frequency in Hz. Sets how many clock cycles one chopper cycle gets, which is what toff and tpfd are derived from when they are left to the module. The default is per driver type - 55 kHz for the 2130/2208/2209, 20 kHz for the 2240/2660/5160, which the source says run very hot at high frequencies. float computed minval 10000.0, maxval 100000.0
sedn CoolStep current decrement step, written to the driver's sedn field. Range 0-3. int 2 (SEDN) minval 0, maxval 3
seimin CoolStep minimum-current selector, written to the driver's seimin field. 0 or 1. int 1 (SEIMIN) minval 0, maxval 1
semax CoolStep upper threshold, written to the driver's semax field. Range 0-15. int 4 (SEMAX) minval 0, maxval 15
semin CoolStep lower threshold, written to the driver's semin field. Range 0-15. int 2 (SEMIN) minval 0, maxval 15
seup CoolStep current increment step, written to the driver's seup field. Range 0-3. int 3 (SEUP) minval 0, maxval 3
sg4_thrs StallGuard4 threshold. Written to sg4_thrs on a driver that has StallGuard4 (and sg4_filt_en is enabled with it), or to sgthrs on a 2209. The default is per driver: 40 generally, but 0 on the TMC2240, which makes Klipper use the SGT homing path - the one compatible with the SpreadCycle and CoolStep configuration autotune writes. Set it explicitly on a 2240 to opt into SG4 homing. int computed minval 0, maxval 255
sgt StallGuard2 threshold, written to the driver's sgt field as part of the CoolStep setup. Range -64 to 63. int 1 (SGT) minval -64, maxval 63
tbl Comparator blank time, written to the driver's tbl field as an index: 0-3 selects 16/24/32/40 clock cycles on the 2208 and 2209, and 16/24/36/54 on the others. The module overrides a configured 0 to 1 when toff ends up at 1, because a 16-cycle blank time does not work in that combination. Also an input to the hysteresis calculation. int 1 (TBL) minval 0, maxval 3
toff Slow-decay time, written to the driver's toff field. 0, the default, means compute it: the module sizes it so the two slow-decay phases take about half a chopper cycle at pwm_freq_target. It is also an input to the hysteresis calculation. int 0 (TOFF) minval 0, maxval 15
tpfd Passive fast-decay time, written to the driver's tpfd field. Unset by default, which means compute it from whatever is left of the chopper cycle after the blank and slow-decay phases. int none minval 0, maxval 15
tuning_goal What to optimise for: silent (StealthChop at all speeds), performance (SpreadCycle at all speeds), autoswitch (StealthChop low, SpreadCycle when needed - the module labels this experimental), or auto, the default. auto resolves at connect time to silent for a motor with holding torque above 0.3 Nm that is not in the module's performance list, and performance otherwise. string auto (TUNING_GOAL) -
voltage The stepper supply voltage, in volts. Not written to the driver: it is an input to the hysteresis, pwmofs and pwmgrad calculations, so a wrong value makes every derived value wrong. The module raises a config error when a computed PWM value will not fit its 8-bit field and names raising or lowering the voltage as the fix. On a TMC2240 it is also checked against overvoltage_vth. float 24.0 (VOLTAGE) above 0.0, maxval 60.0

[calibrate_shaper_config]

Persist input-shaper calibration results to printer.cfg (SAVE_INPUT_SHAPER)

Option Purpose Type Default Constraints
shaper_freq_x Input shaper frequency for X, in Hz, as measured by the calibration. float 0.0 minval 0.0
shaper_freq_y Input shaper frequency for Y, in Hz. float 0.0 minval 0.0
shaper_type Input shaper algorithm to save for both axes, when they share one. string mzv -
shaper_type_x Input shaper algorithm for the X axis, overriding shaper_type. string computed -
shaper_type_y Input shaper algorithm for the Y axis, overriding shaper_type. string computed -

[gcode_shell_command]

Run a shell command via gcode

Option Purpose Type Default Constraints
command Shell command this section exposes to G-code. Required: the section exists only to name a command. string required -
timeout Seconds before the command is abandoned, so a hung process cannot block G-code indefinitely. float 2.0 above 0.0
verbose Whether the command's output is echoed to the console. bool true -

[motor_constants]

Klipper TMC Autotune (motor_constants.py)

Option Purpose Type Default Constraints
deprecated Marks a database entry as superseded, so it can be kept for compatibility while being discouraged. bool false -
holding_torque Motor holding torque in Nm, from its datasheet. Used by TMC autotune to compute drive settings. float required above 0.0
inductance Winding inductance in henries, from its datasheet. float required above 0.0
max_current Motor rated maximum current in amps, from its datasheet. float required above 0.0
motor Name of the motor this section describes, matched against the motor database. string required -
resistance Winding resistance in ohms, from its datasheet. float required minval 0.0
steps_per_revolution Full steps per revolution. A choice of 200 (a 1.8 degree stepper) or 400 (0.9 degree); no other value is accepted. choice [200, 400] -

[nebulaos_bed_soak]

NebulaOS bed warp soak switch, remembered (Run 21, 2026-10-28)

Tested by extras/test_nebulaos_bed_soak.py.

Option Purpose Type Default Constraints
filename File remembering the switch state across Klipper restarts. string computed -
pin Output pin name the bed warp soak switch is exposed as, so SET_PIN can toggle it. string Bed_Warp_Stabilisation (DEFAULT_PIN) -

[nebulaos_bed_tram]

NebulaOS guided bed tramming (G87, simplified version agreed)

Tested by extras/test_nebulaos_bed_tram.py.

Option Purpose Type Default Constraints
max_shim Largest total shim the procedure will ask for. Beyond this the bed needs mechanical attention rather than shimming. float 0.5 maxval 2.0
max_tries How many adjustment rounds to attempt before reporting that it is not converging. int 2 minval 1, maxval 5
min_improvement Improvement below this counts as no improvement, so a round that changed nothing is detected rather than repeated. float 0.02 above 0.0
samples Probe samples averaged per corner, trading time against noise. int 3 minval 1, maxval 10
shim_step Thickness of one shim step, used when the guidance tells you how much to add at a corner. float 0.1 above 0.0, maxval 1.0
state_path File holding tramming state between runs, so a procedure can resume and results survive a restart. string computed -
tolerance How close the four corners must come, in millimetres, before tramming is considered done. float 0.1 above 0.0, maxval 1.0

[nebulaos_beeper]

Klipper-owned KE buzzer (G108), host-side Klipper extra

Tested by extras/test_nebulaos_beeper.py.

Option Purpose Type Default Constraints
channel PWM channel within that controller that the buzzer is wired to. int 3 minval 0, maxval 15
click_duration_ms Length of that touch click, in milliseconds. int 4 minval 1, maxval 200
click_duty Loudness of the touch click, separate from duty so taps can be much quieter than alert beeps. float 0.02 above 0.0, maxval 0.5
click_frequency Pitch in Hz of the short click played when the touchscreen is tapped. int 260 -
default_song Melody used when NEBULAOS_PLAY_TUNE is called without naming one. string mario -
duty Default PWM duty cycle, which sets loudness. Also the default for NEBULAOS_BEEP's DUTY parameter. Capped at 0.5 because a square wave is loudest at half duty. float 0.5 above 0.0, maxval 0.5
max_beep_ms Upper bound on a single NEBULAOS_BEEP, so a bad DURATION cannot leave the buzzer sounding indefinitely. int 10000 minval 1
max_queue_seconds Upper bound on how much queued sound may be pending, so repeated requests cannot build an unbounded backlog. float 180.0 above 0.0
max_tune_seconds Upper bound on a melody's total length when the printer is idle. float 120.0 above 0.0
max_tune_seconds_printing Upper bound on a melody's length while a print is running, normally lower than the idle limit. float 20.0 above 0.0
pwmchip Sysfs directory of the PWM controller driving the buzzer. string /sys/class/pwm/pwmchip0 -
songs_file File of named melodies that NEBULAOS_PLAY_TUNE can play by name. string /opt/printer_data/config/songs.conf -

[nebulaos_calibration]

NebulaOS calibration coordinator (Phase 2 calibration-framework mission; contact-safety stabilization rewrite, corrected).

Tested by extras/test_nebulaos_calibration.py.

Option Purpose Type Default Constraints
bed_mesh_profile Name of the bed mesh profile that auto calibration writes. string default -
bootstrap_contact_envelope_mm From the source comment: bootstrap_contact_envelope_mm: how far below the nozzle's own actual, known, currently-measured starting Z (horizontal_move_z, default 5.0mm) a BOOTSTRAP/virgin calibration run (no credible prior) may blindly search. A SEPARATE value from down_min_z - never silently reused as one. Phase 2... float 8.0 minval 0.5, maxval 30.0
down_min_z Lowest Z a downward probing move may reach, bounding the search. float 10.0 minval 1.0, maxval 50.0
established_contact_margin_mm From the source comment: Nozzle-contact safety envelope constants (corrected) - see nebulaos_probe_pair.py's own header for the exact two formulas. Deliberately no invented production defaults for either; exactly one is required per run, depending on whether the CURRENT live probe z_offset is a credible physical prior... float 1.0 minval 0.01, maxval 5.0
esteps_commanded_length_mm Length of filament the E-steps calibration asks the extruder to feed, which you then measure. float 100.0 above 0.0
esteps_extrude_speed_mm_s Speed of that extrusion. float 5.0 above 0.0
esteps_max_correction_ratio Largest correction the E-steps calibration will apply, so a mis-measurement cannot produce an absurd step value. float 0.3 above 0.0
esteps_temp From the source comment: NEBULAOS_ESTEPS_CALIBRATE (mission §14) - a separate, standalone guided workflow (not part of NEBULAOS_AUTO_CALIBRATE). Formula (upstream's own documented measure-and-trim relationship): new_rotation_distance = old_rotation_distance * actual_extruded / commanded_extrusion... float 200.0 minval 0.0, maxval 320.0
history_path From the source comment: G104/G105: history + last result, next to the journal (same directory; a test journal_path keeps its history beside it). string computed -
horizontal_move_z Height the toolhead travels at between probe points, clearing the bed and any print. float 5.0 minval 1.0, maxval 50.0
input_shaper_journal_path From the source comment: NEBULAOS_INPUT_SHAPER_CALIBRATE (mission §13) - a separate, standalone guided workflow (not part of NEBULAOS_AUTO_CALIBRATE: resonance testing is done cold and has nothing to do with the nozzle/bed thermal state that workflow coordinates). A genuine 3-call guided sequence (see... string computed -
journal_path From the source comment: Overridable only for unit tests (a real printer always uses the real default path under /usr/data) - see nebulaos_calibration_journal.py's own header for why this journal exists at all (crash-safety around the one SAVE_CONFIG+restart boundary, not routine status - NEBULAOS_CALIBRATION_STATUS's... string DEFAULT_JOURNAL_PATH -
max_abs_fit_delta From the source comment: Measurement-quality and repeatability acceptance bounds (§7/§9/ §10). Phase 2 mission §7 qualification (2026-09-02): all three defaults below are qualified from the same 22-run/66-touch cold+hot dataset referenced above. Observed maxima against each bound (all comfortably passing, no violations... float 0.3 minval 0.001, maxval 10.0
max_offset_correction_mm From the source comment: Same conservative default and rationale as z_compensate.py's own max_offset_correction_mm - a sanity ceiling, not a physical bound (that is [heater_bed]/[extruder] max_temp's job for temperatures, and here simply "this is a fine-tune, not a re-leveling"). float 2.0 minval 0.1, maxval 10.0
max_repeatability_range Largest spread between samples at one point before the result is rejected as unrepeatable. float 0.15 minval 0.001, maxval 10.0
max_repeatability_stddev Largest standard deviation across samples before the result is rejected. float 0.06 minval 0.001, maxval 10.0
min_accepted_samples Fewest samples that must succeed for a point to be accepted. int 2 minval 1
pid_bed_target From the source comment: NEBULAOS_AUTO_CALIBRATE (mission §11). pid_bed_target/ pid_hotend_target are the PID-tune targets only (PID_CALIBRATE's own TARGET=, run early in the sequence, well before nozzle clean) - defaults are the qualification thermal state this mission's hot-reliability evidence was gathered at (bed... float 65.0 minval 0.0, maxval 120.0
pid_hotend_target Nozzle temperature used for the hotend PID calibration. float 230.0 minval 0.0, maxval 320.0
pro_cnt Number of probe samples taken per point. int 3 minval 1
probe_lift_speed Speed of the lift after each probe touch. float 20.0 above 0.0
reference_x From the source comment: reference_x/reference_y (Phase 2 contact-safety mission, §11): the canonical physical bed point NEBULAOS_Z_OFFSET_CALIBRATE LOAD_CELL measures at, absent an explicit X=/Y= override - firmware config's job, not a hardcoded Python constant. Factory candidate is the stock KE's own validated... float none -
reference_y Y coordinate of the canonical physical bed reference point, paired with reference_x. float none -
shaper_accel_per_hz Acceleration per Hz used by the input shaper test, passed through to Klipper's own shaper calibration. float none above 0.0
shaper_freq_end From the source comment: shaper_freq_end / shaper_accel_per_hz (mission Phase 2, overnight 2026-09-03/04 prep, NOT hardware-qualified yet - deliberately left unset/None below): this guided workflow previously called plain SHAPER_CALIBRATE AXIS=X/AXIS=Y with no parameters of its own, meaning its actual test envelope... float none above 0.0
shaper_graph_config_dir Directory the graphs are exposed under in the config tree, so Mainsail can serve them. string computed -
shaper_graph_dir Directory where input shaper graphs are written for the screen to display. string computed -
shaper_graph_timeout From the source comment: G109 (Run 20): per-axis graphs, drawn by nebulaos_shaper_graph.py in a nice'd child process after each axis. The screen PNG lives next to the journal, the large one in the config folder for Mainsail (latest per axis). A graph that fails or times out never fails the calibration. float 240.0 above 0.0
thermal_soak_seconds How long to hold temperature before probing, so the machine is thermally settled. float 15.0 minval 0.0, maxval 300.0
travel_speed Speed for moves between probe points, where no contact is being made. float 200.0 above 0.0
z_offset_reference_temp Reference nozzle temperature the Z offset is calibrated at, since thermal expansion shifts it. float 150.0 minval 0.0, maxval 320.0

[nebulaos_compat]

Startup compatibility preflight for the NebulaOS Klipper extension set

Tested by extras/test_nebulaos_compat.py.

Option Purpose Type Default Constraints
klipper_path Path to the Klipper checkout whose symbols are checked against that manifest at startup. string computed -
manifest Path to nebulaos-extensions.json, the manifest naming which modules and Klipper symbols this extension set requires. string computed -

[nebulaos_load_cell_calibration]

NebulaOS guided load cell calibration with a water bottle (G86)

Tested by extras/test_nebulaos_load_cell_calibration.py.

Option Purpose Type Default Constraints
default_grams Weight offered on the keypad before you type your own. float 1500.0 -
empty_shift_grams From the source comment: An empty bed this far (grams, previous calibration) from the saved zero gets a "something on the bed?" note (no false alarm on 2026-10-20; a tramming shim shifted the zero ~50 g). float 100.0 above 0.0
max_grams Highest accepted bottle weight, guarding against a mistyped figure. float 5000.0 -
min_grams Lowest accepted bottle weight. The procedure is built around a filled 1.5 litre bottle weighed on a kitchen scale; too light a weight calibrates poorly. float 1000.0 minval 500.0
previous_change_percent From the source comment: A result this far from the previous calibration is shown as a warning before Apply & Save (measured: rough vs exact placement differs 22%; two careful runs 3%). float 25.0 above 0.0
replace_tolerance_percent From the source comment: Lift-and-put-back must agree within this percent (measured: +-1.1% careful, -4.5% careless; a clearly wrong placement is >10%). float 10.0 above 0.0, maxval 50.0
stable_drift_counts_per_s Drift above this means the reading has not settled, so the procedure waits rather than recording a moving value. float 300.0 above 0.0
window_seconds Length of the averaging window for a force reading. float 2.0 minval 0.5, maxval 10.0
zero_tolerance_grams From the source comment: Grams the empty bed may differ from the zero after the bottle is removed (measured: 2-8 g on ke-dev). float 30.0 above 0.0

[nebulaos_memory]

Klippy-side memory policy, host-side Klipper extra

Tested by extras/test_nebulaos_memory.py.

Option Purpose Type Default Constraints
child_oom_score_adj OOM score adjustment applied to child processes, so the kernel kills a helper rather than Klipper itself when memory runs short. int 300 minval 0, maxval 1000
mlock Whether to lock Klipper's memory so it cannot be swapped out. choice computed -

[nebulaos_power_loss_recovery]

NebulaOS's own power-loss recovery extra (Phase 1.9B), built entirely on public/mainline Klipper interfaces.

Tested by extras/test_nebulaos_power_loss_recovery.py.

Option Purpose Type Default Constraints
checkpoint_interval Seconds between checkpoints during a print. Shorter loses less to a power cut and writes more often. float 5.0 (DEFAULT_CHECKPOINT_INTERVAL) above 0.0
eeprom_path Sysfs path of the small EEPROM holding the durable checkpoint record - the only thing trusted as proof that a checkpoint fully landed. string /sys/bus/i2c/devices/2-0050/eeprom (DEFAULT_EEPROM_PATH) -
min_z_for_start Height below which no checkpoint is taken, so a cut in the first moments of a print does not offer a useless recovery. float 0.6 (DEFAULT_MIN_Z_FOR_START) minval 0.0
physical_resume Whether a resume actually restarts printing. Off by default: with it off, NEBULAOS_PLR_RESUME restores state only. The source records that it stays off until it has passed a supervised power-cut test print on the machine in question. bool false -
poll_interval Seconds between checks of print state while deciding whether to checkpoint. float 0.75 (DEFAULT_POLL_INTERVAL) above 0.0
prime_length Millimetres of filament extruded at the park position during a physical resume, after the nozzle has reached temperature and before the toolhead returns to the print. It primes away the ooze and the gap left by the power cut, as G1 E<prime_length> F300 in relative extrusion, and the extruder position is restored afterwards so the resumed file's E coordinates still line up. 0 disables the prime; the maximum is 50. float 8.0 (DEFAULT_PRIME_LENGTH) minval 0.0, maxval 50.0
resume_z_lift How far to lift Z before moving back to the interrupted position, so the nozzle does not drag across the part. float 5.0 (DEFAULT_RESUME_Z_LIFT) minval 1.0, maxval 20.0
sidecar_dir Directory for the larger JSON checkpoint files, written and fsynced before the EEPROM record so a power cut cannot leave the two disagreeing. string /usr/data/nebulaos/printer_data/plr (DEFAULT_SIDECAR_DIR) -
timelapse_frame_path Directory moonraker-timelapse keeps its frames in. Set it to preserve a timelapse across a power cut: on resume the frames from before the cut are set aside, and _NEBULAOS_PLR_TIMELAPSE_MERGE puts them back in front, renumbered without a gap, before Moonraker renders. Empty disables the handling, and the timelapse is lost on resume. string "" -

[nebulaos_version]

Runtime version-truth printer object, host-side Klipper extra

Tested by extras/test_nebulaos_version.py.

Option Purpose Type Default Constraints
generation_file File tracking the app generation, used to tell an image's own apps from separately updated ones. string /usr/data/nebulaos/system/app-generation.json -
version_file File reporting the installed NebulaOS version. string /opt/nebulaos-version.json -

[nebulaos_z_adjust]

NebulaOS Z offset adjustment, saved like OpenKE did (G92)

Tested by extras/test_nebulaos_z_adjust.py.

Option Purpose Type Default Constraints
filename File storing the saved Z adjustment, so it survives restarts. string /opt/printer_data/config/z_offset_adjust.json (DEFAULT_PATH) -
max_adjust Largest total Z adjustment accepted. A saved or requested value beyond this is refused, treating it as a damaged file or a mistake rather than an intention. float 2.0 above 0.0, maxval 5.0

[nebulaos_z_offset_probe]

NebulaOS Z-offset contact probe — nozzle load cell adapter for Z-offset calibration

Option Purpose Type Default Constraints
auto_check_time From the source comment: G99: the user's mode + the last automatic check (reference) in a small state file - no SAVE_CONFIG, no restart. float 2.0 minval 1.0, maxval 10.0
contact_detection_mode From the source comment: G83b weight-free contact (docs/NEBULAOS_RAW_CONTACT_BRIEF.md in the firmware repo). G99 (2026-10-22): automatic contact is the default for everyone. contact_detection_mode 'auto' (default) follows the user's persisted choice auto manual (nebulaos_load_cell_mode, NEBULAOS_LOAD_CELL_MODE);... choice computed
contact_speed Speed of the slow downward move that makes contact. Slower reads the touch more precisely. float 2.0 minval 0.1, maxval 10.0
force_safety_limit Force above which the probe aborts, so a runaway contact stops rather than pressing harder. float 2000.0 minval 100.0, maxval 10000.0
load_cell_mode_file File recording which load-cell mode is selected, shared with the load-cell mode extension. string DEFAULT_PATH -
raw_contact_profile_id From the source comment: G99: the qualified profile automatic contact uses (KE stock). string DEFAULT_PROFILE_ID -
raw_health_time From the source comment: Idle window before a raw touch: long enough for validate_idle() (>= 20 samples) and a meaningful noise/drift estimate. float 0.75 minval 0.3, maxval 5.0
raw_reference_counts From the source comment: Run 15: the persisted unloaded reference R for a unit WITHOUT a grams calibration (brief 5.1.5), captured by NEBULAOS_RAW_CONTACT_REFERENCE into the SAVE_CONFIG autosave block. Never in an image-owned cfg (configfile include conflict). G99: superseded by the automatic check's reference (state... int none -
raw_settle_time From the source comment: Run 15 (ke-dev compare, 2026-10-20): right after earlier touches (~270 g each) and travel moves, the bed is still settling - drift -865 counts/s, p2p 4445 for the first window. Settling (drift or noise above the profile) is measured again in consecutive windows for up to raw_settle_time; real... float 5.0 minval 0.3, maxval 30.0
retract_dist How far to lift after a touch before the next sample. float 2.0 minval 0.5, maxval 10.0
retract_speed Speed of that lift. float 10.0 minval 1.0, maxval 50.0
sensor_type Which load cell sensor backend to use. choice computed -
tare_time Seconds spent averaging the unloaded reading to establish zero before a touch. float computed minval 0.01, maxval 1.0
trigger_force Force in grams at which the nozzle is considered to have touched the bed. float 75.0 minval 10.0, maxval 250.0

[nozzle_clear]

Native nozzle-wipe routine using upstream Klipper's load-cell probe

Option Purpose Type Default Constraints
bed_max_err Allowance for bed position error. Also serves as the fallback hover height when vs_start_z_pos is unset. float 5 minval 1
clr_noz_len_x Width of the wipe pad area, within which the two probe points are randomised. float 1.0 minval 1
clr_noz_len_y Depth of the wipe pad area. float 1.0 minval 1
clr_noz_start_x X corner where the wipe pad area starts. The default of 0 is deliberate: the pad sits partly off the near edge of the bed's own X origin. float 0.0 minval -50, maxval 1000
clr_noz_start_y Y corner where the wipe pad area starts. float 0.0 minval 0, maxval 1000
clr_xy_spd Speed of the wiping move itself - slow, because it is a dragging contact. float 2.0 minval 0.1
g29_down_min_z Lowest Z the downward probing move is allowed to reach, bounding the search. float 25 minval 1
pa_clr_dis_mm_x How far the nozzle is dragged along X during the wipe. float 30 minval -100, maxval 100
pa_clr_dis_mm_y How far the nozzle is dragged along Y during the wipe. Zero means a straight X-only wipe. float 0 minval -100, maxval 100
pa_clr_down_mm How far below the probed pad surface the nozzle presses while wiping. Negative presses into the pad, which is what makes the wipe contact. float -0.15 minval -1, maxval 1
pr_clear_probe_cnt How many probe samples must agree at each of the two wipe-pad points before the wipe proceeds. int 3 minval 1
rdy_xy_spd Travel speed used to get to the pad, much faster than the wipe. float 200 minval 1
vs_start_z_pos Hover height above the pad before probing starts. Defaults to bed_max_err, a dual use that predates this option. float bed_max_err -

[tmcstatus]

TMC stepper-driver status reporting for GuppyScreen's TMC panel

Tested by extras/test_tmcstatus.py.

Option Purpose Type Default Constraints
enabled Whether TMCSTATUS reporting is active. bool true -

[z_compensate]

Per-print auto-Z-offset orchestration, host-side Klipper extra

Option Purpose Type Default Constraints
bed_add_temp From the source comment: bed_add_temp (real key): the bed temperature for the nozzle-wipe - the wipe heats the bed to the higher of its current target and this value, clamped to [heater_bed] max_temp (wipe_bed_temp() above; it used to be added to the target, which asked for 125 C after a 65 C PID target).... float 0 minval -20, maxval 100
bl_offset X and Y offset of the BLTouch from the nozzle, as two numbers. float list (0.0, 0.0) -
hot_end_temp From the source comment: hot_end_temp (real key): final nozzle temp after the wipe - threaded through to prtouch_nozzle.clear_nozzle()'s hot_end_temp param. float none minval 80, maxval 300
hot_rub_temp Nozzle temperature held while the nozzle is rubbed against the pad. float 180 minval 80, maxval 300
hot_start_temp Nozzle temperature to reach before the wipe sequence begins. float 150 minval 80, maxval 200
max_offset_correction_mm From the source comment: max_offset_correction_mm (2026-08-09 hardening mission, new): a sanity ceiling on the magnitude of a candidate correction before it's ever applied as a live offset - this command is documented (module docstring) as a per-print THERMAL/WEAR FINE-TUNE, not a full re-leveling; a multi-millimeter... float 2.0 minval 0.1, maxval 10.0
noz_pos_center Accepted but not acted on. The source records this as plausibly another XY reference point, with nothing confirming it - and notes that misapplying it would send the toolhead somewhere unintended. Read, not used, flagged rather than silently dropped. float list (0.0, 0.0) -
noz_pos_offset Accepted but not acted on. As noz_pos_center: plausibly an XY reference, unconfirmed, deliberately not acted on. float list (0.0, 0.0) -
persist_offset From the source comment: Opt-in permanent persistence (see module docstring) - off by default. bool false -
pr_probe_cnt From the source comment: pr_probe_cnt (real key): probe-agreement count for this command's own touch, distinct from clear_nozzle()'s own pr_clear_probe_cnt (read in prtouch_nozzle.py). int 3 minval 1
pumpback_mm Accepted but not acted on. The source records this as plausibly a pre-wipe retract, unconfirmed, and judges that wiring untested E-axis motion into a probe and heat sequence is not worth the risk on a guess. float 0.0 -
save_config_command G-code command used to persist the offset when persist_offset is on. Normally Klipper's own SAVE_CONFIG. string SAVE_CONFIG -
speed Accepted but not acted on. As tri_min_hold - read, unused, present because the real device sets it (5). float none minval 0.1
tri_expand_mm From the source comment: tri_expand_mm (real key): no source exists for z_compensate_wrapper.so (see module docstring), so this is an inference, not a confirmed port - applied as a fixed additive correction to the Z_OFFSET_CALIBRATION measurement, on the theory that it accounts for a systematic gap between the load... float 0.0 -
tri_max_hold Accepted but not acted on. As tri_min_hold - read, unused, present because the real device sets it (2000). int none -
tri_min_hold Accepted but not acted on. Read only so Klipper does not refuse to start: the real device's [z_compensate] section sets it (1400), and Klipper hard-errors on any section option that is never read. The sensitivity-override mechanism it belonged to was removed with PRTouch in Phase 1.8B, and the native probe backend has no equivalent. int none -
type_nozz Accepted but not acted on. The source records its meaning as unknown. Read so Klipper starts; nothing uses the value. int 0 -
vs_start_z_pos From the source comment: vs_start_z_pos (real key, replaces the old Klipper-only z_offset_hover_height default): hover height before the (unregistered, see header) Z_OFFSET_CALIBRATION touch, and passed through to clear_nozzle() for its own two wipe-pad touches. float 5 minval 1, maxval 50
z_offset_down_min_z Lowest Z the downward probing move may reach during Z offset calibration. float 10 minval 1, maxval 50