Your first layer is perfect on the left side and translucent on the right. You’ve adjusted the bed screws four times and it’s still uneven. The problem isn’t your leveling technique — it’s that your bed isn’t actually flat, and manual corner leveling can’t compensate for a warped build plate. Here’s how bed mesh leveling fixes this, and how to configure it correctly.
Manual vs Automatic Bed Mesh: What Each Actually Does
Manual mesh leveling (available in Marlin without a probe) measures the bed at grid points using a piece of paper and the nozzle. You feel for friction at each point and store Z-offset values. Automatic mesh leveling (BLTouch, CR Touch, inductive probe) does the same thing with a sensor in under 60 seconds.
The mesh is the same data structure either way — a grid of Z-offset values. The difference is accuracy, repeatability, and how much of your life you spend generating it.
Step 1: Manual mesh — when it’s good enough and when it’s not
A manual 3×3 mesh takes about 5 minutes to generate and compensates for beds that are dished or domed by up to 0.3mm. That’s enough for PLA and PETG with a 0.20mm first layer. If your bed varies by less than 0.20mm, a manual mesh produces first layers indistinguishable from an automatic probe.
When manual fails: If your bed has localized high or low spots (not a smooth dish shape), a 3×3 grid misses the peaks and valleys between points. The nozzle traces a smooth curve through the measured points, but the actual bed has bumps. You get alternating over-squish and under-squish across the print.
Verification: Generate the mesh, then run a single-layer test print covering the full bed. Look for consistent line width. If you see alternating thick/thin bands more than 20mm wide, your manual grid is too coarse for the bed’s surface variation. Upgrade to automatic probing or increase manual grid density.
Step 2: Automatic probe — configure mesh density for your bed size
A 3×3 grid on a 235x235mm bed measures points 117mm apart. The firmware interpolates between them. If you have a localized dip 40mm wide, a 3×3 grid might miss it entirely.
Recommended mesh densities:
– 3×3 for beds under 150x150mm or known flat beds (cast aluminum tooling plate)
– 5×5 for standard 220-235mm beds (Ender 3, Prusa MK3-style) — this is the sweet spot
– 7×7 or higher for 300mm+ beds or beds with known warping
Setup in Marlin: #define GRID_MAX_POINTS_X 5 in Configuration.h. Then run G29 from the LCD or terminal. Save with M500.
Setup in Klipper: In printer.cfg under [bed_mesh], set probe_count: 5,5 for a 5×5 grid. Run BED_MESH_CALIBRATE from the console. Klipper saves automatically.
Step 3: Set fade height — the most overlooked mesh setting
Mesh compensation applies fully at Z=0 (the bed surface) and should fade to zero by layer 5-10. If fade height is disabled or set too high, the printer actively tilts the X and Y axes for the entire print to follow the bed mesh. This causes visible banding on tall prints because the Z-axis is constantly micro-adjusting.
Recommended: Fade height of 10mm (roughly 50 layers at 0.2mm). By layer 10, the printed surface should be level and mesh compensation should be off. The printer is printing on top of its own plastic, not the warped bed.
In Marlin: #define ENABLE_LEVELING_FADE_HEIGHT and #define DEFAULT_LEVELING_FADE_HEIGHT 10.0
In Klipper: Add fade_start: 1.0 and fade_end: 10.0 to the [bed_mesh] section.
Parameter Comparison: Bed Mesh Options
| Configuration | Manual 3×3 | Manual 5×5 | BLTouch 3×3 | BLTouch 5×5 | BLTouch 7×7 |
|---|---|---|---|---|---|
| Probe time | 5 min | 12 min | 25 sec | 50 sec | 90 sec |
| Point spacing (235mm bed) | 117mm | 59mm | 117mm | 59mm | 39mm |
| Detects local dips <50mm | No | Sometimes | No | Yes | Yes |
| Repeatability (same point) | ±0.05mm | ±0.05mm | ±0.005mm | ±0.005mm | ±0.005mm |
| Requires probe hardware | No | No | Yes | Yes | Yes |
| Human error factor | High | High | Zero | Zero | Zero |
| Best for | Flat beds, PLA | Mildly warped, PLA | Any bed, any material | Warped beds, PETG/ABS | Large beds, precision |
Common Mistakes & What Most Makers Get Wrong
Mistake 1: Probing a cold bed. The bed expands when heated. A mesh generated at 20°C is wrong at 60°C because the aluminum plate has expanded unevenly (constrained by mounting points). A 0.15mm error at printing temperature is common.
Consequence: “I leveled the bed but the first layer is still uneven.” You leveled it cold. The printer is heating it to 60°C and the mesh is off by the thermal expansion difference.
Fix: Always probe with the bed at printing temperature. In your start G-code, heat the bed (M190 S{bed_temp}), wait 2-3 minutes for thermal stabilization, then probe (G29). This adds 3 minutes to every print start — worth it.
Mistake 2: Using a 3×3 mesh on a large, warped bed. The interpolation between 3×3 grid points assumes a smooth curve. Real warped beds have localized dips from the stamping or rolling process that a 3×3 grid can’t capture.
Consequence: The first layer looks like a topographic map — thin where the bed is high (gap between grid points), thick where it’s low — despite the mesh compensation being “enabled.”
Fix: Bump to 5×5 minimum on 235mm beds, 7×7 on 300mm+. The probing time increase is proportional to the grid area (5×5 = 25 points vs 3×3 = 9), but the first-layer improvement is dramatic. On Klipper with a BLTouch, 5×5 probing takes under a minute.
Mistake 3: Disabling mesh fade height (or setting it to 0). With no fade, the printer physically moves the Z-axis to follow the bed warp for the entire print height. If your bed has a 0.3mm warp, the printer is printing a 0.3mm wave into every layer.
Consequence: Visible horizontal banding on tall prints. The effect is subtle — a slight ripple every 10-20mm of Z height — but ruins the surface finish on prints you planned to display.
Fix: Set fade height to 10mm. After the 10th layer, your printed surface is flat enough that further compensation is unnecessary and harmful.
⚠️ Safety Notice: Bed mesh probes involve moving parts near the hotend. Ensure the probe deploys and retracts correctly before starting a print — a stuck probe can collide with the bed or printed parts. For BLTouch/CR Touch probes: verify the pin drops freely before homing. For inductive probes: confirm the sensing distance is set correctly for your bed surface (metal vs glass vs PEI). Always supervise the first homing sequence after any probe maintenance or firmware change.
Good mesh leveling is complementary to proper first layer calibration — the mesh handles the bed’s shape, Z-offset handles the nozzle height. Get both right and first layers are invisible. For those upgrading their printer, the BLTouch/CR Touch installation guide covers wiring and firmware setup for Marlin and Klipper.
The uavmodel CR Touch kit includes the probe, mounting bracket, and pre-crimped extension cable — compatible with Creality, BTT, and MKS control boards without soldering or pin repinning.
