3D Printer Bed Mesh Visualizer

A bed mesh visualizer turns the numbers your printer prints after probing into a 3D surface and a heat map, so you can see the high and low spots. Paste the output of Marlin G29 T or M420 V, Klipper BED_MESH_OUTPUT or a [bed_mesh] profile, Prusa G81, or a plain grid. It also tells you how far to turn each bed screw. Nothing is uploaded.

1. Paste the mesh

Try a sample:

2. Orientation and mesh area

The first and last probe positions in mm (printer coordinates). Klipper profiles and UBL maps fill these in; for Marlin bilinear and Prusa enter your probing area. They matter for the screw turns.

Mesh Surface and Heat Map

Paste a mesh and press Show the mesh, or try a sample.
Drag to rotate · red = high (closer to the nozzle)
Heat map, seen from above (back at the top, front at the bottom)
The heat map appears here.
low high

Bed Screw Helper

Screw positions (printer X, Y in mm)
#XYWhere
1
2
3
4
Preset positions are approximate. Measure where your screws sit in printer coordinates (jog the nozzle over each one and read X and Y).
Assumes standard right-hand screws with the knobs under the bed, as on most spring-mounted beds: turning the knob clockwise (seen from below) tightens it and pulls that corner down. Check one corner with a sheet of paper before turning them all.

Results

Paste a mesh and press Show the mesh, or try a sample.

    Mesh as probed

    Lowest
    -
    Highest
    -
    Range (peak to valley)
    -
    Mean
    -
    Std deviation
    -
    Points
    -
    Flatness:

    With the tilt removed (true bed shape)

    Range
    -
    Std deviation
    -
    Tilt across mesh
    -
    Bed shape:

    Screw turns

    Flatness bands are a rule of thumb. Turns come from a least-squares plane through the mesh, so local bumps do not upset them. Re-probe after turning and repeat if needed.

    How the Bed Mesh Visualizer Works

    When your printer probes the bed, it stores a grid of heights. Each number is how far the bed is above (+) or below (−) the reference height at that point. Positive means the bed is higher there, closer to the nozzle. This tool reads that grid, works out which corner is which, and shows it as a surface you can turn round and as a coloured map with the values.

    It then fits a flat, tilted plane to the points. The tilt is what your bed screws can fix. What is left once the tilt is removed is the real shape of the plate (a bow, a dip or a twist), which only the mesh, a new plate or a straighter frame can fix.

    Which Corner Is Front-Left in Each Format

    Firmware prints its grids in different orders, and getting this wrong turns your screw advice back to front. The tool places each format as shown, assuming the usual printer layout with X = 0 at the left and Y = 0 at the front. Use the rotate and flip controls if your printer is homed differently (for example Y = 0 at the back).

    OutputFirst line printedFront-left point
    Marlin bilinear G29 T / M420 V ("Bilinear Leveling Grid") and Marlin mesh bed levelingRow 0 = front (Y ascending)Row 0, column 0: top-left of the text
    Marlin UBL G29 T / M420 V ("Bed Topography Report")Highest row number = back (Y descending)Row 0, column 0: bottom-left of the text
    Marlin UBL G29 T1 (CSV)Back rowFirst value of the last line
    Klipper BED_MESH_OUTPUT "Probed Z positions"Front row (Y ascending)First value of the first line
    Klipper [bed_mesh default] points =Front row (Y ascending)First value of the first line
    Klipper "Measured points" (interpolated)Back row (Y descending)First value of the last line
    Prusa G81Back row (Y descending)First value of the last line
    Plain CSV or space gridYou choose (default: back, as seen from above)First value of the last line (default)

    Marlin and the UBL map label each row with its Y index, and the tool uses those labels. The UBL point shown in [brackets] is the nozzle's current position, not a fault. Empty points (UBL "." or Marlin "=====") are left out of the numbers.

    The Formulas

    1. Statistics
    range = max − min (peak to valley)
    mean = Σz ÷ n
    std dev = √(Σ(z − mean)² ÷ n)
    Flatness rule of thumb on the range: under 0.1 mm good; 0.1 to 0.2 mm fine with the mesh on; 0.2 to 0.3 mm marginal; over 0.3 mm check the bed and gantry.
    2. Plane fit (the tilt)
    z ≈ a + b·x + c·y
    a, b and c are the least-squares fit through every probed point, with x and y in mm from the mesh area. b and c are the slopes in mm per mm. The surface with the tilt removed is z − (a + b·x + c·y).
    3. Height at each screw
    Δz = plane(screw) − plane(reference screw)
    A positive Δz means that corner is higher than the reference, so it must come down. Screws outside the probed area use the plane extended out to them.
    4. Turns
    turns = |Δz| ÷ thread pitch
    clock minutes = fraction of a turn × 60
    M3 = 0.5 mm per turn, M4 = 0.7 mm, M5 = 0.8 mm. "00:15" means a quarter turn, the same notation as Klipper's SCREWS_TILT_CALCULATE.

    Worked Example

    The built-in sample: a 5 × 5 mesh probed from X 10 to 210 and Y 10 to 210 mm on an Ender 3 style bed with M3 screws
    • Lowest point −0.112 mm (front-left), highest +0.146 mm (back-right), so the range is 0.258 mm: marginal by the rule of thumb. Mean +0.029 mm, standard deviation 0.063 mm.
    • The plane fit gives b = 0.000616 and c = 0.000635 mm per mm. Across the 200 mm mesh the bed rises 0.123 mm left to right and 0.127 mm front to back. That is tilt.
    • With the tilt removed the range drops to 0.037 mm. The plate itself is flat; the screws just need setting.
    • With the front-left screw at (30, 30) as the reference: front-right (205, 30) is 0.000616 × 175 = 0.108 mm high, so 0.108 ÷ 0.5 = 0.215 turns, 00:13, tightened (clockwise seen from below). Back-right is 0.219 mm high: 0.438 turns, 00:26. Back-left is 0.111 mm high: 00:13.

    Tips for a Flatter First Layer

    • Heat soak first. Probe with the bed at printing temperature and give it 5 to 10 minutes. A cold mesh can differ from a hot one by 0.05 mm or more.
    • Fix the tilt with screws, the shape with the mesh. If the tilt-removed range is small but the raw range is large, level the screws. If the tilt-removed range is large, the plate is bowed or the gantry is twisted; check that the X gantry is square and both Z sides are at the same height.
    • Pick the lowest corner as the reference if your springs are already near fully compressed, so you only loosen; pick the highest if the springs are loose.
    • Check the corners. If the mesh area is set wrong, the slopes and turns are wrong too. Use the real first and last probe positions.
    • Printing fixtures? A flat first layer matters for accurate holes. See hole compensation, heat-set insert hole sizes and the clearance hole chart. If ringing spoils your walls, use the input shaper explainer.

    Frequently Asked Questions

    As a rule of thumb, a peak-to-valley range under 0.1 mm is good, 0.1 to 0.2 mm prints fine with bed mesh compensation on, and over 0.3 mm points to a tilted bed, a warped plate or a gantry problem. These are typical values, not a standard.

    It depends on the leveling system. Marlin bilinear prints row 0, the front, first. Marlin UBL prints the back row first and row 0 last. Klipper's probed points and saved profiles start with the front row, while Prusa G81 starts with the back row. This tool handles each one for you.

    On most spring-mounted beds the knobs are under the bed. Turning a knob clockwise as seen from below tightens it and pulls that corner of the bed down, away from the nozzle. Anticlockwise raises it. Seen from above, the directions are the other way round. Klipper's default CW-M3 setting describes clockwise as raising the bed.

    It subtracts the best-fit flat plane from the mesh. What is left is the true shape of the bed surface, such as a dome, a dip or a twist. Bed screws can only remove tilt, so this view shows what the mesh still has to correct after the screws are set.

    No. The text you paste is read by your browser on your own device. Only your last settings and pasted mesh are saved in this browser so they are there next time.

    The flatness bands are rules of thumb and the preset screw positions are approximate. Turn the screws in small steps and re-probe; the mesh is only as good as your probe's repeatability.

    Published October 30, 2026.