Bed Mesh Visualizer

Turn 3D printer bed levelling output into a surface plot and a tramming verdict.

Mesh data

Related tools

What it does

Paste the bed mesh your printer prints and get the numbers that actually matter: total deviation, mean, standard deviation, the value at each corner and at the middle, and the worst point on the plate. It reads Klipper BED_MESH_OUTPUT console text, a saved [bed_mesh default] block from printer.cfg, Marlin G29 T and M420 V grids in both the bilinear and the UBL layouts, plain grids of numbers, and JSON arrays of arrays. It also fits a least squares tilt plane through the mesh, so it can tell you how much of the deviation is a bed sitting crooked and how much is a plate that is genuinely bowed. The renders are a color heat map and an isometric 3D surface, both drawn as plain SVG.

How to use it

In Klipper, run BED_MESH_CALIBRATE, then BED_MESH_OUTPUT, and copy the console lines. In Marlin, run G29 and then M420 V, and copy the grid including the row and column labels. Paste it in and read the verdict. Turn on the SVG renders when you want the heat map and the 3D surface, switch the color center to the mesh average when your whole bed is offset from zero, and raise the height exaggeration to make a shallow mesh easier to see.

Why this one

The usual options are a Fusion or Excel surface chart you have to build by hand, an account gated web app, or a plugin you have to install into your printer stack. This page takes the raw text, needs no login, and adds the part those tools skip: it separates tilt from warp, so you know whether the fix is turning bed screws or accepting the plate you have. It runs entirely in your browser, so your files and inputs never leave your device, and it keeps working offline after the first load.

FAQ
How do I get the mesh text out of Klipper or Marlin?
On Klipper, probe the bed with BED_MESH_CALIBRATE and then send BED_MESH_OUTPUT in the console. The rows of Z values print straight into the terminal, and the // prefixes Mainsail or Fluidd add are stripped automatically. You can also paste the saved [bed_mesh default] section out of printer.cfg, which carries min_x, max_x, min_y and max_y so the report can name real bed coordinates. On Marlin, run G29 to probe, then M420 V to print the grid, or use G29 T for the topography report. Both the bilinear grid and the UBL Mesh Z values layout are understood, row and column labels included.
What is a good total deviation for a printer bed?
Under 0.1 mm is excellent and mesh compensation barely has to work. 0.1 to 0.2 mm is normal for a well trammed printer and prints without any thought. 0.2 to 0.35 mm still works with mesh compensation on, but first layers get more consistent if you close some of it mechanically. Above 0.35 mm you are asking the mesh to hide more than it comfortably can, and it tends to show up as squish that changes across the plate.
What is the difference between tilt and warp?
Tilt means the whole plate is flat but sitting at an angle, so one side is higher than the other. That is a levelling problem and bed screws fix it. Warp means the plate itself has a shape, usually a bowl or a dome, and no amount of screw turning will flatten it. This page fits a plane through the mesh and reports how much of the total deviation that plane accounts for. If tilt explains most of the range, tram the bed. If the residual is what dominates, the plate is bowed, and the honest fix is either living with mesh compensation or a different plate.

Keyboard shortcuts: press ? anywhere on this page to see them.