A huge proportion of the complaints about the K2 Plus (and probably other CREALITY models as well) revolve around first‑layer difficulties. Most users have ended up resigning themselves to babysitting the first layer every single time, manually adjusting the Z‑offset as soon as things start going wrong. What’s most frustrating is the lack of repeatability, especially for those who—following CREALITY’s rather strange advice—recalculate the mesh before every print.
The following experiment will point you toward the real reason behind these issues, and how to fix them while waiting for CREALITY to update their software properly.
WARNING: Everything that follows assumes you have not patched the machine’s configuration files in any other way.
In the file printer.cfg, temporarily replace the line (in the bed_mesh section, around line 360):
probe_count: 9,9
with
probe_count: 3,3
This will quickly generate a 9‑point (3×3) mesh. The goal is not to print with this mesh, but to observe what happens when the same algorithm is repeated.
In Fluidd, under the Console tab, run the following commands N times:
BED_MESH_CALIBRATE
and
BED_MESH_OUTPUT
You will collect N mesh matrices, each representing the measured height of the nine points. In a perfect world, the matrices would be identical, but no measuring instrument is perfect. The only real question is whether the observed deviations are acceptable given how the measurement is used.
I ran the experiment 10 times (you should try it—it’s quick since there are only nine points). Your results will differ from mine because every machine is different, but you will likely see the same pattern. Here’s what I observed on my machine:
- The maximum deviation between the 10 measurements for any of the nine points was 0.068 mm, which is 34% of a 0.2 mm layer height.
- The average absolute deviation across the 10 measurements was 0.032 mm, or 16% of a 0.2 mm layer.
With a supposedly constant flow—which already puts the extruder under pressure to compensate for pressure variations—it’s easy to see how this leads to ripples and lifting that ruin the first layer. The measurement error at each point of the bed is simply too large to produce a reliable first layer.
WHAT TO DO
First, a few thoughts that go against common assumptions:
- The main quality we expect from a mesh is not how flat it is (though that doesn’t hurt), but how accurately it reflects the actual topology of the bed.
- The topology of the bed has no reason to change from one print to the next (otherwise it could also change during a print).
- It does not change when you update the firmware, switch filament types (PLA, PETG, TPU…), install a new nozzle, a new hotend, or even a new extruder—even a non‑CREALITY one.
- As long as you don’t touch the gantry or the bed itself, the topology stays the same.
With a bit of luck, you might get a mesh whose error is small enough to give you “good enough” prints. If you ever manage to obtain such a mesh, keep it, because the odds of recalculating a better one are low.
The real question is whether we can force that luck and obtain an acceptable mesh. When a measuring instrument produces unacceptably noisy data, the scientific approach is to repeat the measurement N times and average the results, reducing the error by a factor of 1 / sqrt(N).
CREALITY knows this perfectly well: the reference Z measurement at the start of each print is repeated several times (at least 5), with additional checks likely used to discard outliers.
So, in theory, CREALITY would only need to measure each mesh point N times to produce an acceptable mesh. And indeed, machines equipped with a prtouch probe have a samples parameter in the [prtouch_v3] section of printer.cfg. Unfortunately, on the K2 Plus, changing this parameter has no effect on the mesh calculation.
Thus, the mesh problem would be solved if CREALITY simply enabled this parameter, allowing users to choose between a fast “bad” mesh and a slower “good” one.
In the meantime…
You can approximate this behavior by performing several mesh measurements, averaging the resulting matrices, and replacing the mesh stored in the commented section at the end of printer.cfg.
However, there is a crucial detail: Each mesh is measured relative to a Z reference that changes slightly from pass to pass due to measurement noise. You must not average the raw matrices. You must first normalize each matrix by subtracting its own average value.
The algorithm is:
- Choose a grid size N (9×9, 11×11…). The “right” value is another topic I’ll return to later.
- Run
BED_MESH_CALIBRATEthenBED_MESH_OUTPUTP times, saving each matrix. - Normalize each matrix by subtracting its mean value.
- Compute the average of the P normalized matrices and paste the result into the mesh section at the end of
printer.cfg. This averaged matrix becomes the default mesh at the next reboot. Be extremely careful with syntax—this part of the file is not meant to be edited.
To ensure the mesh is always loaded after reboot, add the following line to the [gcode_macro START_PRINT] macro in gcode_macro.cfg, after:
NEXT_HOMEZ_NACCU
G28 Z
add
BED_MESH_PROFILE LOAD=default
Reboot the machine, then adjust your Z‑offset, which should now be close to 0 and depend only on the filament.
MY RESULTS
After validating the method with a 13×13 grid measured 10 times, the resulting mesh produced an almost perfect first layer up to a 250×250 mm square. Minor defects appear beyond that, more visible as the print size increases. This is due to a fundamental limitation of interpolation algorithms: they cannot interpolate accurately near the edges, and even less near the corners.
With a 13×13 matrix, the outer 25 mm border is poorly reproduced. The closer you get to the edge, the worse the approximation. To print larger areas, you must increase the matrix size, but measurement time grows with the square of the grid size.
Being a compulsive perfectionist, I pushed things far beyond reason. With a 65×65 matrix (4225 points) measured 17 times (two full days of measurements), here is the resulting mesh (range 0.4290 mm—not impressive on paper):
But in practice, it allows me to print a 348×348 mm first layer (leaving room for a skirt) with perfect repeatability, as shown here:
I’ve been using this mesh for two weeks. I’ve printed large PLA parts and smaller TPU parts. I will never repeat this experiment—it produces a level of perfection no one actually needs—but this will remain my reference mesh until I’m forced to modify the bed. (As a precaution, I never touch the magnetic build plate.)
This experiment makes one thing unmistakably clear: the machine itself is not the problem. The K2 Plus delivers excellent flow control, applies mesh compensation reliably, and is mechanically solid. The only real flaw is a software decision — CREALITY’s choice to prioritize mesh‑calculation speed over mesh quality. That trade‑off cripples first‑layer consistency, and users shouldn’t be forced to live with it. CREALITY should simply give us control: a parameter that lets the user decide how many times each probe point is measured. One small change, and the entire first‑layer experience transforms.

