# Dual extruder bed leveling gcodes missing

**URL:** <https://forum.snapmaker.com/t/dual-extruder-bed-leveling-gcodes-missing/40190>\
**Category:** Snapmaker 2.0 (3-in-1)\
**Created:** [October 19, 2025, 9:18am UTC](https://forum.snapmaker.com/t/dual-extruder-bed-leveling-gcodes-missing/40190 "2025-10-19T09:18:31Z")\
**Posts on this page:** 17\
**Page:** 1

<div class="post-metadata">

**Author:** ![mhb](https://avatars.discourse-cdn.com/v4/letter/m/71e660/32.png) [@mhb](https://forum.snapmaker.com/u/mhb)\
**Post date:** [October 19, 2025, 9:18am UTC](https://forum.snapmaker.com/t/dual-extruder-bed-leveling-gcodes-missing/40190/1 "2025-10-19T09:18:31Z")

</div>

I recently bought a dual extruder for the sm2 and had quite some bed leveling issues. Therefore I used the great Klicky probe guides in the forum + the models on printables for the dual extruder. Now that that was working It was way better but still not great with a 6x6 mesh. Wanted to do a 11x11 then but found out that the gcodes for leveling are not available for the dual extruder.

It would be really great to have 11x11 bed leveling without the automatic z offset on the nozzles at the end would be great to Save some pinched fingers.

@Jade I do know you have loads of stuff on the plate with the u1 coming. And i am in the first batch of Kickstarters there as well, but it would be still really great to get some updates/informations for the s2.0 as well (want to utilize the bigger build volume)

---

<div class="post-metadata">

**Author:** ![xchrisd](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.snapmaker.com/xchrisd/32/1503_2.png) [@xchrisd](https://forum.snapmaker.com/u/xchrisd)\
**Post date:** [October 19, 2025, 11:12am UTC](https://forum.snapmaker.com/t/dual-extruder-bed-leveling-gcodes-missing/40190/2 "2025-10-19T11:12:45Z")

</div>

Here is how to do a leveling with a greater matrix:

> [@How to do a larger than 3 x 3 matrix level](https://forum.snapmaker.com/t/how-to-do-a-larger-than-3-x-3-matrix-level/5727):
>
> So here’s my attempt at doing a leveling matrix larger than 3 x 3. Please be advised that this is not for the faint of heart. If you mess up this process you can bury your nozzle into your print surface. I know, I did. I’ll try and tell you how to avoid that. If you aren’t having any trouble with the first layer of printing then this process isn’t for you. I am doing this on an A250, so you may have to change some things for your size Snapmaker. The controller has a version of leveling that the…

But honestly I’m not sure how to proceed with the nozzle offsets, but it seems you know the way to go.

Some additional info:

> [@How to persist Z-Level set with G1029 D \<value\> across restarts?](https://forum.snapmaker.com/t/how-to-persist-z-level-set-with-g1029-d-value-across-restarts/30802):
>
> I used the automatic bed leveling with the new dual print head to level the bed and this actually works pretty well as I get really consistent print quality across the bed. However the offset from the print sheet is always way too high usually about 1.5mm above the board. I tried to fix this with a manual Z-Level from the menu but this was pretty hit and miss as I had to do it with the calibration card and getting this consistent is hard enough for one extruder, almost impossible for two extrude…

---

<div class="post-metadata">

**Author:** ![mhb](https://avatars.discourse-cdn.com/v4/letter/m/71e660/32.png) [@mhb](https://forum.snapmaker.com/u/mhb)\
**Post date:** [October 19, 2025, 11:32am UTC](https://forum.snapmaker.com/t/dual-extruder-bed-leveling-gcodes-missing/40190/3 "2025-10-19T11:32:19Z")

</div>

Hello fellow Austrian 🙂 thanks for the fast response.

The g1029 command seems to only work for the single extruder. And It seems that there are no commands for the dual extruder publicly available.

It seems that at the moment bed leveling with the dual extruder is only possible via the macro on the screen.

---

<div class="post-metadata">

**Author:** ![xchrisd](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.snapmaker.com/xchrisd/32/1503_2.png) [@xchrisd](https://forum.snapmaker.com/u/xchrisd)\
**Post date:** [October 19, 2025, 6:04pm UTC](https://forum.snapmaker.com/t/dual-extruder-bed-leveling-gcodes-missing/40190/4 "2025-10-19T18:04:16Z")

</div>

To complete the information, here is the reference for G1029:

[https://snapmaker.github.io/Documentation/gcode/G1029-abl](https://snapmaker.github.io/Documentation/gcode/G1029-abl)

Welcome from Linz 😉

---

<div class="post-metadata">

**Author:** ![xchrisd](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.snapmaker.com/xchrisd/32/1503_2.png) [@xchrisd](https://forum.snapmaker.com/u/xchrisd)\
**Post date:** [October 19, 2025, 7:25pm UTC](https://forum.snapmaker.com/t/dual-extruder-bed-leveling-gcodes-missing/40190/5 "2025-10-19T19:25:13Z")

</div>

In theory this should be an easy fix to the firmware.

I have to retry with a fresh GitHub clone if you are willing to use a custom firmware from a stranger..

My recent changes made it impossible to run on a stock machine..

---

<div class="post-metadata">

**Author:** ![xchrisd](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.snapmaker.com/xchrisd/32/1503_2.png) [@xchrisd](https://forum.snapmaker.com/u/xchrisd)\
**Post date:** [October 19, 2025, 7:33pm UTC](https://forum.snapmaker.com/t/dual-extruder-bed-leveling-gcodes-missing/40190/6 "2025-10-19T19:33:30Z")

</div>

More reference:

> [@G Code for Bed Level Visualizer](https://forum.snapmaker.com/t/g-code-for-bed-level-visualizer/11953/31):
>
> Yes this is what I tried, and the output: Recv: ok Send: G1029 P11 Recv: leveling OFF Recv: X:52 - 28 Recv: Y:43 - 30 Recv: leveling ON Recv: Set grid size : 11 Recv: ok Send: G1029 A Recv: cannot do auto leveling without 3DP Recv: ok Send: G1029S Recv: nozzle height: -234.000 Recv: echo:Settings Stored (1185 bytes; crc 39524) Recv: ok Send: G1029D0 Recv: leveling OFF Recv: leveling ON Recv: ok Send: M140 S0 Recv: new B target temp: 0 Recv: ok Send: G28 Recv: leveling OFF [...] Recv: leveling O…

And, sorry for the confusion, it’s a older topic 😉

> [@Dual Extruder: bed leveling with nozzle i.s.o. proximity sensor](https://forum.snapmaker.com/t/dual-extruder-bed-leveling-with-nozzle-i-s-o-proximity-sensor/31613):
>
> Hi all, Before getting my dual extruder I was looking into getting a glass bed for my A350T, and fitting the 3DP module with an optical sensor. Then I got my dual extruder and got so occupied with it that it went completely to the back of my mind. However I couldn’t help but wonder: the dual extruder is perfectly capable of auto-determining the nozzle offset (“Z offset”) by probing the bed using the actual nozzle, no longer requiring offset it with the supplied calibration card. Why stop there…

---

<div class="post-metadata">

**Author:** ![mhb](https://avatars.discourse-cdn.com/v4/letter/m/71e660/32.png) [@mhb](https://forum.snapmaker.com/u/mhb)\
**Post date:** [October 19, 2025, 9:23pm UTC](https://forum.snapmaker.com/t/dual-extruder-bed-leveling-gcodes-missing/40190/7 "2025-10-19T21:23:34Z")

</div>

I think I read somewhere, that the bed isn’t stable enough in the corners to calibrate with the nozzle directly touching. That’s the way the do it on the artisan. Therefore they only do the z offset calibration in the middle of the bed with the nozzles, the rest with the sensor. As I use a Klicky probe I would need the z offset in the end anyways.

So you would make the g1029 work correctly? I mean in my opinion it is something that snapmaker should actually bake into the firmware themselves. As the sell the dual extruder explicitly for the sm2 as well and I think it is fair to assume that the same capabilities are available for the upgraded part as well.

Off topic: Just installed the bracing Kit and thought it would take me an hour or so. Actually took me quite a bit longer 😅

Greetings from nearby Vienna 😉

---

<div class="post-metadata">

**Author:** ![xchrisd](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.snapmaker.com/xchrisd/32/1503_2.png) [@xchrisd](https://forum.snapmaker.com/u/xchrisd)\
**Post date:** [October 20, 2025, 5:28pm UTC](https://forum.snapmaker.com/t/dual-extruder-bed-leveling-gcodes-missing/40190/8 "2025-10-20T17:28:04Z")

</div>

Not sure if I am able to implement this. If it’s easy enough I guess it would be possible.

I will report back..

---

<div class="post-metadata">

**Author:** ![xchrisd](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.snapmaker.com/xchrisd/32/1503_2.png) [@xchrisd](https://forum.snapmaker.com/u/xchrisd)\
**Post date:** [October 23, 2025, 6:05pm UTC](https://forum.snapmaker.com/t/dual-extruder-bed-leveling-gcodes-missing/40190/9 "2025-10-23T18:05:23Z")

</div>

No success till now, I asked the Devs about but I’m not sure if there will come anything back 😏.

---

<div class="post-metadata">

**Author:** ![theDude](https://avatars.discourse-cdn.com/v4/letter/t/d6d6ee/32.png) [@theDude](https://forum.snapmaker.com/u/theDude)\
**Post date:** [October 24, 2025, 5:18am UTC](https://forum.snapmaker.com/t/dual-extruder-bed-leveling-gcodes-missing/40190/10 "2025-10-24T05:18:26Z")

</div>

I think it would make sense if they implemented the 11x11 in the gui as well. This way the user can just choose whatever fits best without having to mess with gcode commands.

It would also be nice if they gave us the option for a pause between leveling and z offset calibration then we could safely remove our clicky probes.

---

<div class="post-metadata">

**Author:** ![FraOrolo](https://avatars.discourse-cdn.com/v4/letter/f/e480ec/32.png) [@FraOrolo](https://forum.snapmaker.com/u/FraOrolo)\
**Post date:** [December 26, 2025, 6:02pm UTC](https://forum.snapmaker.com/t/dual-extruder-bed-leveling-gcodes-missing/40190/11 "2025-12-26T18:02:05Z")

</div>

The gcodes used by the Android remote are [M3002](https://github.com/Snapmaker/Snapmaker2-Controller/blob/main/snapmaker/src/gcode/M3000.cpp#L40) and [M3003,](https://github.com/Snapmaker/Snapmaker2-Controller/blob/main/snapmaker/src/gcode/M3000.cpp#L73) but one needs to run multiple commands in series to achieve full leveling.  
; Test right extruder height  
M3002 L0  
; Test left extruder height  
M3002 L1

; Auto level start 3x3 grid  
M3003 L0 G3  
; Test grid point 1 with inductance probe  
M3003 L1 P1  
; Test grid point 2  
M3003 L1 P2  
…  
; Test grid point 9 (depending on size you need to generate P1 … P  
M3003 L1 P9  
; Finish leveling, this performs height test with force sensor and applies mesh  
M3003 L2

---

<div class="post-metadata">

**Author:** ![xchrisd](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.snapmaker.com/xchrisd/32/1503_2.png) [@xchrisd](https://forum.snapmaker.com/u/xchrisd)\
**Post date:** [December 26, 2025, 7:59pm UTC](https://forum.snapmaker.com/t/dual-extruder-bed-leveling-gcodes-missing/40190/12 "2025-12-26T19:59:02Z")

</div>

Thank you for sharing!

---

<div class="post-metadata">

**Author:** ![FraOrolo](https://avatars.discourse-cdn.com/v4/letter/f/e480ec/32.png) [@FraOrolo](https://forum.snapmaker.com/u/FraOrolo)\
**Post date:** [December 29, 2025, 1:55pm UTC](https://forum.snapmaker.com/t/dual-extruder-bed-leveling-gcodes-missing/40190/13 "2025-12-29T13:55:31Z")

</div>

This is the final script that I’m now using in Octoprint. The bed is supposed to be pre-heated (or also the chamber if there is a heating).

It is supposed to work with both: the normal mono print head and the dual version, this is decided based on the Octo print profile.  
The mono code contains a machine dependent constant (the step with the calib card). You need to write down the number in the manual calibration.  
For the dual head it is important to note the the hotend must be clean and **COLD .**  
I created holes in the sticker surface of the bed with a 250° nozzle.

I found some info in the sources for the other 300X commands:  
M3000 shows current settings relevant to the dual head (offsets, nozzle dias, …)  
M3001 does a single probe run at current position, but has no effect on the calibration  
M3002 should be used to find out the z-offsets of the 2 nozzles in auto mode, with Levels 2-5 also with the card manually  
M3003 does the calibration automatically  
M3004 does the calibration with manual interaction  
M3005 does a single automatic probe to some center point, but does not change settings

```auto
; Home
G28
{% if printer_profile.extruder.count == 1 %}
  ; Grid level off
  M420 S0
  ; 5 x 5 Grid
  G1029 P5
  ; Execute Auto Level
  G1029 A

  G91 ; Relative Coords movement
  ; My Value! dont copy blindly
  G1 Z-2.0 F30 ; Move nozzle blindly to surface
  G1029 S ; Save Grid Level result
  ;G1029 D1
  G90 ; absolute coords
{% else %}
  ; Set the hotend temp to something low and 
  ; non-bed-melting. Got holes with 250°C
  M109 T0 S70
  {% set grid_count = 5 %}
  ; Start leveling procedure - L0
  M3003 L0 G{{ grid_count }}
  {% set grid_points = range(1,grid_count*grid_count+1) %}
  {% for point in grid_points %}
    ;M118 Point {{ point }}
    ; Leveling step - L1
    M3003 L1 P{{ point }}
  {% endfor %}
  ; Finish and store - L2
  M3003 L2
  ; Make sure, leveling is on
  M420 S1
{% endif %}

```

---

<div class="post-metadata">

**Author:** ![abbat](https://avatars.discourse-cdn.com/v4/letter/a/7ea924/32.png) [@abbat](https://forum.snapmaker.com/u/abbat)\
**Post date:** [January 13, 2026, 7:07pm UTC](https://forum.snapmaker.com/t/dual-extruder-bed-leveling-gcodes-missing/40190/14 "2026-01-13T19:07:56Z")

</div>

how you run this script? G1029 A command do not work

---

<div class="post-metadata">

**Author:** ![xchrisd](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.snapmaker.com/xchrisd/32/1503_2.png) [@xchrisd](https://forum.snapmaker.com/u/xchrisd)\
**Post date:** [January 13, 2026, 7:12pm UTC](https://forum.snapmaker.com/t/dual-extruder-bed-leveling-gcodes-missing/40190/15 "2026-01-13T19:12:28Z")

</div>

You have to run each command one by one by entering it into a terminal:

> [@FraOrolo](#):
>
> one needs to run multiple commands in series to achieve full leveling.  
> ; Test right extruder height  
> **M3002 L0**  
> ; Test left extruder height  
> **M3002 L1**
> 
> ; Auto level start 3x3 grid  
> **M3003 L0 G3**  
> ; Test grid point 1 with inductance probe  
> **M3003 L1 P1**  
> ; Test grid point 2  
> **M3003 L1 P2**  
> …
> 
> ; Test grid point 9 (depending on size you need to generate P1 … P  
> **M3003 L1 P9**  
> ; Finish leveling, this performs height test with force sensor and applies mesh  
> **M3003 L2**

---

<div class="post-metadata">

**Author:** ![abbat](https://avatars.discourse-cdn.com/v4/letter/a/7ea924/32.png) [@abbat](https://forum.snapmaker.com/u/abbat)\
**Post date:** [January 14, 2026, 3:33am UTC](https://forum.snapmaker.com/t/dual-extruder-bed-leveling-gcodes-missing/40190/16 "2026-01-14T03:33:39Z")

</div>

thank you

---

<div class="post-metadata">

**Author:** ![cns](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.snapmaker.com/cns/32/29745_2.png) [@cns](https://forum.snapmaker.com/u/cns)\
**Post date:** [September 28, 2026, 7:49am UTC](https://forum.snapmaker.com/t/dual-extruder-bed-leveling-gcodes-missing/40190/17 "2026-09-28T07:49:59Z")

</div>

Based off some of the comments here, and my (and claude’s) research and months of frustration with levelling and wasted prints I built

> **[GitHub - chrisns/OctoPrint-NozzleTouch: Levels the bed of a Snapmaker 2.0 dual extruder by...](https://github.com/chrisns/OctoPrint-NozzleTouch)**
>
> Levels the bed of a Snapmaker 2.0 dual extruder by touching the plate with the cold nozzle, and sets the T1 height

its a octoprint plugin that does bed 11x11 bed levelling with nozzle touches, also combines setting z-offset of both nozzles

in a similar vein for the xy nozzle offset built [GitHub - chrisns/OctoPrint-NozzleAlign: OctoPrint plugin: measures the XY offset between two nozzles with a camera on the bed, and writes it to the firmware · GitHub](https://github.com/chrisns/OctoPrint-NozzleAlign)

now all my prints are getting beautifully glossy flat bottoms and perfect dual-extruder alignments, all automagically

may be biased to my a350 dual extruder with quick-swap & bracing kit,
