# Support of COPY and MIRROR modes for IDEX

**URL:** <https://klipper.discourse.group/t/support-of-copy-and-mirror-modes-for-idex/9487>\
**Category:** Developers\
**Created:** [July 16, 2023, 11:08pm UTC](https://klipper.discourse.group/t/support-of-copy-and-mirror-modes-for-idex/9487 "2023-07-16T23:08:01Z")\
**Posts on this page:** 20\
**Page:** 2

<div class="post-metadata">

**Author:** ![LifeOfBrian](https://yyz2.discourse-cdn.com/free1/user_avatar/klipper.discourse.group/lifeofbrian/32/2380_2.png) [@LifeOfBrian](https://klipper.discourse.group/u/LifeOfBrian)\
**Post date:** [August 25, 2023, 6:31am UTC](https://klipper.discourse.group/t/support-of-copy-and-mirror-modes-for-idex/9487/22 "2023-08-25T06:31:07Z")

</div>

Welcome here Justin!  
As far as I know and work with it there is no need or way to independently home each extruder/print head.

You just call G28 X0 and then X homes and after that the Dual\_Carriage (X1) homes.  
Depending on the endstop config X1 either homes against X or against the right endstop.

After the homing finished you can toggle the print heads and move them.

---

<div class="post-metadata">

**Author:** ![JustinThursday](https://yyz2.discourse-cdn.com/free1/user_avatar/klipper.discourse.group/justinthursday/32/7315_2.png) [@JustinThursday](https://klipper.discourse.group/u/JustinThursday)\
**Post date:** [August 26, 2023, 1:12pm UTC](https://klipper.discourse.group/t/support-of-copy-and-mirror-modes-for-idex/9487/23 "2023-08-26T13:12:12Z")

</div>

Okay thanks! I’ll play with it again with that in mind and see if I can get it working. Basically once x homes it doesn’t think that it’s homed so it won’t allow me to move dual\_extruder.

---

<div class="post-metadata">

**Author:** ![LifeOfBrian](https://yyz2.discourse-cdn.com/free1/user_avatar/klipper.discourse.group/lifeofbrian/32/2380_2.png) [@LifeOfBrian](https://klipper.discourse.group/u/LifeOfBrian)\
**Post date:** [August 26, 2023, 2:15pm UTC](https://klipper.discourse.group/t/support-of-copy-and-mirror-modes-for-idex/9487/24 "2023-08-26T14:15:21Z")

</div>

Best is to open a sperate thread if you won’t get it fixed as this is not the right one for such topics here.  
There upload your whole klippy.log as the template requests.  
So we can see any errors in the config.

---

<div class="post-metadata">

**Author:** ![dmbutyugin](https://avatars.discourse-cdn.com/v4/letter/d/e0b2c6/32.png) [@dmbutyugin](https://klipper.discourse.group/u/dmbutyugin)\
**Post date:** [August 26, 2023, 2:54pm UTC](https://klipper.discourse.group/t/support-of-copy-and-mirror-modes-for-idex/9487/25 "2023-08-26T14:54:41Z")

</div>

If you have your carriages homing in the same direction, you can check out the [PR](https://github.com/Klipper3d/klipper/pull/6310) - in these cases the mainline Klipper has a regression and that PR proposes a fix which you could test then. If you do home carriages in the opposite direction, the problem could be elsewhere. One possibility that I previously saw is that if one sets position\_min (or \_max) too close to position\_endstop and uses multi-MCU homing, then due to inherent latencies of such homing setup the carriage may end up below position\_min (or above position\_max, depending on the homing direction), which is technically an invalid position. And that may throw off the kinematic range calculations when changing the carriages. In this case the fix is to introduce a small position difference between position\_endstop and position\_min/max (just ~0.5mm should suffice).

---

<div class="post-metadata">

**Author:** ![MScott](https://avatars.discourse-cdn.com/v4/letter/m/3ab097/32.png) [@MScott](https://klipper.discourse.group/u/MScott)\
**Post date:** [September 8, 2023, 7:51am UTC](https://klipper.discourse.group/t/support-of-copy-and-mirror-modes-for-idex/9487/26 "2023-09-08T07:51:27Z")

</div>

Hello together, I also tried the current version of Klipper with COPY and MIRROR mode. It works pretty good, thanks for the work!  
But I have one issue. When I use BED\_MESH\_CALIBRATE on T0, everything works fine. But when I switch to T1 the printhead moves to the first probing position and after the first “trigger” it just moves to its homing position and crashes into the endstop. Did anyone else observed this behavior?

---

<div class="post-metadata">

**Author:** ![dmbutyugin](https://avatars.discourse-cdn.com/v4/letter/d/e0b2c6/32.png) [@dmbutyugin](https://klipper.discourse.group/u/dmbutyugin)\
**Post date:** [September 15, 2023, 7:38pm UTC](https://klipper.discourse.group/t/support-of-copy-and-mirror-modes-for-idex/9487/27 "2023-09-15T19:38:31Z")

</div>

Please note that bed mesh cannot reasonably work with COPY and MIRROR modes. This is because the two toolheads will be in the different places and cannot physically have different height (unless you’d be able to somehow independently control their Z offsets). So in general, there isn’t much point in probing with T1 (T0 _should_ suffice, but in general, bed mesh probing shouldn’t be used at all). That said, this behavior is still undesirable and may be a bug, so may need to be fixed.

---

<div class="post-metadata">

**Author:** ![MScott](https://avatars.discourse-cdn.com/v4/letter/m/3ab097/32.png) [@MScott](https://klipper.discourse.group/u/MScott)\
**Post date:** [September 18, 2023, 7:18am UTC](https://klipper.discourse.group/t/support-of-copy-and-mirror-modes-for-idex/9487/28 "2023-09-18T07:18:15Z")

</div>

Hello, thanks for your reply. I agree that bed\_mesh doesn’t make any sense to use in COPY or MIRROR mode. But if I want to use my T1 printhead for printing, I would like to probe the bed with T1. I have a probe on each of the printheads so I don\*t have to keep me busy with the z\_offset between the heads…

---

<div class="post-metadata">

**Author:** ![BadMouth](https://avatars.discourse-cdn.com/v4/letter/b/97f17d/32.png) [@BadMouth](https://klipper.discourse.group/u/BadMouth)\
**Post date:** [September 18, 2023, 4:55pm UTC](https://klipper.discourse.group/t/support-of-copy-and-mirror-modes-for-idex/9487/29 "2023-09-18T16:55:34Z")

</div>

Wouldn’t the mesh be the same regardless of which probe is used?  
The bed is shaped how it is shaped regardless of probe.

There is the issue of having to heat T0 for homing Z in case there is cold plastic on the nozzle.  
I guess if you are doing the mesh by probing with the nozzle, that could also throw things off.  
I heat and home with T0 regardless of whether it will be used in the print or not.

If you don’t want to do that, perhaps you could bake application of the offset into your print\_start macro.

If using prusa-slicer 2.6 or newer, you could utilize the recently added is\_extruder\_used placeholder to determine if only T1 will be used for the print and adjust the offset if that condition is met.

---

<div class="post-metadata">

**Author:** ![EddyMI3D](https://yyz2.discourse-cdn.com/free1/user_avatar/klipper.discourse.group/eddymi3d/32/1981_2.png) [@EddyMI3D](https://klipper.discourse.group/u/EddyMI3D)\
**Post date:** [September 18, 2023, 5:11pm UTC](https://klipper.discourse.group/t/support-of-copy-and-mirror-modes-for-idex/9487/30 "2023-09-18T17:11:00Z")

</div>

The question is:  
While printing in copy/mirror mode, does bed mesh compensation make any sense at all?  
To what extruder should the z-axes be compensated to? T0? T1?

And if T0 compensates for a low spot, there can be a high spot with T1 and vice versa. Trouble ahead.

I suggest a average constant z-offest and a thicker 1st layer.

---

<div class="post-metadata">

**Author:** ![BadMouth](https://avatars.discourse-cdn.com/v4/letter/b/97f17d/32.png) [@BadMouth](https://klipper.discourse.group/u/BadMouth)\
**Post date:** [September 18, 2023, 9:31pm UTC](https://klipper.discourse.group/t/support-of-copy-and-mirror-modes-for-idex/9487/31 "2023-09-18T21:31:31Z")

</div>

There is no question there.

Everyone so far has agreed that it’s best to clear the bed mesh before printing in Copy or Mirror mode.

MScott was inquiring about probing for the mesh with T1 instead of T0 if only T1 is going to be used in the print. I don’t see where it makes any difference.

---

<div class="post-metadata">

**Author:** ![MScott](https://avatars.discourse-cdn.com/v4/letter/m/3ab097/32.png) [@MScott](https://klipper.discourse.group/u/MScott)\
**Post date:** [September 19, 2023, 6:48am UTC](https://klipper.discourse.group/t/support-of-copy-and-mirror-modes-for-idex/9487/32 "2023-09-19T06:48:12Z")

</div>

The difference is, that I am probing with the nozzle. So T0 and T1 have different mesh. The benefit of probing with the nozzle for me is, that I don’t have a z offset between the nozzle.  
So for now I will switch to an older version of Klipper and see if in a few months the issue was solved.

---

<div class="post-metadata">

**Author:** ![William](https://avatars.discourse-cdn.com/v4/letter/w/b19c9b/32.png) [@William](https://klipper.discourse.group/u/William)\
**Post date:** [September 30, 2023, 3:34am UTC](https://klipper.discourse.group/t/support-of-copy-and-mirror-modes-for-idex/9487/33 "2023-09-30T03:34:13Z")

</div>

Thx for your great work on IDEX feature [dmbutyugin](https://klipper.discourse.group/u/dmbutyugin)

May I ask a quick question here. Is it not an easy job to implement “multiple stepper motors supports” for “dual\_carriage” in Hybrid-corexy Kinematic?

I had a quick look the code between corexy.py and hybrid-corexy.py. In which, I found that hybrid-corexy kinematic is now supporting single stepper motor for A/B drive only atm. In order to enable mulltiple stepper motor support, I found that we can modify the code for X-Axis/Primary print head with simple replacemnet of method “PrinterRail” with “LookupMultiRail” for stepper\_x for the following line of statement.

self.rails = [ stepper.PrinterRail(config.getsection(‘stepper\_x’)),  
stepper.LookupMultiRail(config.getsection(‘stepper\_y’)),  
stepper.LookupMultiRail(config.getsection(‘stepper\_z’))]

Sorry if I shouldn’t reply on this post with new question 😅

---

<div class="post-metadata">

**Author:** ![klack107](https://yyz2.discourse-cdn.com/free1/user_avatar/klipper.discourse.group/klack107/32/7827_2.png) [@klack107](https://klipper.discourse.group/u/klack107)\
**Post date:** [October 9, 2023, 12:00am UTC](https://klipper.discourse.group/t/support-of-copy-and-mirror-modes-for-idex/9487/34 "2023-10-09T00:00:08Z")

</div>

Hi @dmbutyugin, thanks so much for your work.

I run a Discord group of about 250 members for a budget IDEX printer based on Marlin. We are excited to finally try Klipper on our printers.

During our testing, should we be using your branch and reporting bugs there? Or just use mainline klipper?

---

<div class="post-metadata">

**Author:** ![Sineos](https://yyz2.discourse-cdn.com/free1/user_avatar/klipper.discourse.group/sineos/32/18_2.png) [@Sineos](https://klipper.discourse.group/u/Sineos)\
**Post date:** [October 9, 2023, 7:59am UTC](https://klipper.discourse.group/t/support-of-copy-and-mirror-modes-for-idex/9487/35 "2023-10-09T07:59:16Z")

</div>

> [@klack107](#):
>
> During our testing, should we be using your branch and reporting bugs there? Or just use mainline klipper?

All currently relevant topics are merged into main line.

---

<div class="post-metadata">

**Author:** ![JustinThursday](https://yyz2.discourse-cdn.com/free1/user_avatar/klipper.discourse.group/justinthursday/32/7315_2.png) [@JustinThursday](https://klipper.discourse.group/u/JustinThursday)\
**Post date:** [October 9, 2023, 10:55am UTC](https://klipper.discourse.group/t/support-of-copy-and-mirror-modes-for-idex/9487/36 "2023-10-09T10:55:59Z")

</div>

Did the issue of losing home position when both heads are homed to one side get resolved? I haven’t been able to find anything that explicitly says so yet.

---

<div class="post-metadata">

**Author:** ![Sineos](https://yyz2.discourse-cdn.com/free1/user_avatar/klipper.discourse.group/sineos/32/18_2.png) [@Sineos](https://klipper.discourse.group/u/Sineos)\
**Post date:** [October 9, 2023, 11:14am UTC](https://klipper.discourse.group/t/support-of-copy-and-mirror-modes-for-idex/9487/37 "2023-10-09T11:14:25Z")

</div>

[idex\_modes: Fixed the case when carriages home in the same direction by dmbutyugin · Pull Request #6310 · Klipper3d/klipper · GitHub](https://github.com/Klipper3d/klipper/pull/6310) is merged

---

<div class="post-metadata">

**Author:** ![JustinThursday](https://yyz2.discourse-cdn.com/free1/user_avatar/klipper.discourse.group/justinthursday/32/7315_2.png) [@JustinThursday](https://klipper.discourse.group/u/JustinThursday)\
**Post date:** [October 9, 2023, 12:02pm UTC](https://klipper.discourse.group/t/support-of-copy-and-mirror-modes-for-idex/9487/38 "2023-10-09T12:02:36Z")

</div>

Thanks. I could not remember how to find that to check. 😅

---

<div class="post-metadata">

**Author:** ![klack107](https://yyz2.discourse-cdn.com/free1/user_avatar/klipper.discourse.group/klack107/32/7827_2.png) [@klack107](https://klipper.discourse.group/u/klack107)\
**Post date:** [October 9, 2023, 5:09pm UTC](https://klipper.discourse.group/t/support-of-copy-and-mirror-modes-for-idex/9487/39 "2023-10-09T17:09:58Z")

</div>

I did find a bug where if you choose T1 and then home X, the printer thinks T1 is still selected but T0 is actually moving. T0 and T1 parking routines will then fail with invalid position. The fix is to issue manually:

```
ACTIVATE_EXTRUDER EXTRUDER=extruder
SET_DUAL_CARRIAGE CARRIAGE=0

```

---

<div class="post-metadata">

**Author:** ![dmbutyugin](https://avatars.discourse-cdn.com/v4/letter/d/e0b2c6/32.png) [@dmbutyugin](https://klipper.discourse.group/u/dmbutyugin)\
**Post date:** [October 9, 2023, 6:05pm UTC](https://klipper.discourse.group/t/support-of-copy-and-mirror-modes-for-idex/9487/40 "2023-10-09T18:05:15Z")

</div>

Can you provide more details, like printer configuration and the minimum gcode sequence that demonstrates the problem?

---

<div class="post-metadata">

**Author:** ![dmbutyugin](https://avatars.discourse-cdn.com/v4/letter/d/e0b2c6/32.png) [@dmbutyugin](https://klipper.discourse.group/u/dmbutyugin)\
**Post date:** [October 9, 2023, 6:07pm UTC](https://klipper.discourse.group/t/support-of-copy-and-mirror-modes-for-idex/9487/41 "2023-10-09T18:07:31Z")

</div>

TBH, I’m not sure, perhaps the calculation of the reverse kinematics for the homing may need some minor adjustments. But should be doable in principle.

[Previous page](https://klipper.discourse.group/t/support-of-copy-and-mirror-modes-for-idex/9487.md?page=1)

[Next page](https://klipper.discourse.group/t/support-of-copy-and-mirror-modes-for-idex/9487.md?page=3)
