Unload and repeat-routine and hook for Ender 3 & 3 Pro

This guide will hopefully help you set up your printer for autonomous printing.

3D printer parts and enhancements

Creative Commons Attribution Share Alike

Commercial use is allowed, you must attribute the creator, you may remix this work and the remixed work should be made available under this license.

Learn more or download attribution tags




A lot of people are printing visors these days due to the corona crisis. You are all heroes! As for myself, I tend to have a lot of other stuff to do. So I can't always spend time with my printers. That normally means a very low efficiency when it comes to print large quantities.
That's why I got very excited when I noticed that some guy made his Prusa do the unloading of the object for him! Automatically. It simply pushed it off the print bed.

But the thing was that I didn't want to apply so much force that was needed for my printer to push the visor loose. Luck strikes again! A guy named Martin Bardosson aka
just released a visor design with a loop!

So I made this hook to work with that preexisting design of a visor with a loop. No bad pressures on the printer.

In this guide, I will try to explain how you can try this method on your own printer. But since I do not own the design of the looped visor, which also is the Swedish version I will not share it. It is originally a remix of faceshield.nu. But you can really use any visor you want. Just add a loop to it.

I can't just upload my Gcode since all printers are different. I can't even use the same code on my 2 almost identical ones. So this project is not for everyone. It does require some knowledge of Gcode.

Try this at your own risk. I won't be held responsible for any damage this could cause you or printer.

Materials and methods

Please keep in mind that this method isn't your ordinary slice and print-routine. And thus not suitably for beginners. It does require gcode-modification as well as a lot of trial and error. Also, remember that I'm no gcode-master. I bet there are 100 ways to do this better. I've attached a video of my routine in the files section.I do recommend a glass bed since they tend to be easier to detach the prints from.

Step 1. Print and mount the hook.
Print the attached file with any preferred settings. It must be sturdy enough so it won't bend too much. I, therefore, recommended 100% infill. Mount it on the upper left wheel bolt on the hot end assembly. Be sure to readjust your bed before printing.

Step 2. Attach a paper to your bed
I used duct tape. But be creative. Just be sure it doesn't interfere with your printer's movement. Place a box in front of your printer.

Step 3. Get yourself a looped visor STL.
This might be the trickiest step. Since I don't own the rights for the visor-design that I am using. It's also a Swedish version. So it won't do the most of you any good anyway. So get your hold on your preferred design and add a loop to it. You could try remix one in your favorite software, or ask friend :) Sorry that I can't help you any further with this step!

Step 4. Slice and print it!
Upload the visor of your choice to your printer and print it. Try to place it as far down on your bed as possible. This gives the hook more freedom to navigate around the loop. Turn of brim and skirt. You also need to delete the prime line that all Ender 3 does. Delete the following in the "Machine settings" to do that:
"G92 E0 ;Reset Extruder
G1 Z2.0 F3000 ;Move Z Axis up
G1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position
G1 X10.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line
G1 X10.4 Y200.0 Z0.28 F5000.0 ;Move to side a little
G1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line
G92 E0 ;Reset Extruder
G1 Z2.0 F3000 ;Move Z Axis up"


Step 5. Locate all coordinates.
Use your printer's "Move Axis" feature to navigate to the following locations and write down each of them. Write them down from inside the "Move Axis" settings, since the overview isn't so precise. Your goal is to navigate through the whole unload routine.
Coordinates reminder:
X= Left/Right
Y= Away/ towards you
Z= Up/down

1. Cooling position:
Preferably a position so that cool air from the parts fan will cool down the build plate.
My position:
G0 X180 Y150 Z50

2. Position behind the loop:
Choose a position a bit behind the loop so that your hook won't hit the loop on its way there from the cooling position.
My position:
G0 X156 Y230 Z1.9

3. Position inside the loop:
Make sure that you have enough space on either side of the hook while entering the loop. Also, be sure not to hit the loop on the Y-axis. That will fling your visor all across the room (Almost).
My position:
G0 X156 Y211.8 Z1.9

4. Lift movement:
I recommend doing this in two steps. First up and forward a very small bit. Then a bit higher and more forward. Notice the F command to make this move really slow. If you got trouble with visorflinging, you could ad G4 S300 so make your printer halt for 0.3 seconds between the move commands. Or add another speed modifier to any required line. That helped me reduce the flinging on one printer.
My positions:
G0 X156 Y211.2 Z5 F1200
G0 X156 Y200.7 Z10

5. Push movement:
This one is simple. This position should be at the end of your build plate. So far down that, your visor is guaranteed to reach the paper. It is also advised to lover you nozzle to make it easier for the visor to let go of the hook. Be advised. If the visor hits tape or something, it will turn a bit and get stuck on the hook. It might not be an issue, but keep that in mind.
My position: G0 X156 Y51.7 Z2

6. Drop off/touch down movement:
This coordinate should be where your visor falls down from the paper. The easiest way is just to change the Y-value to a higher Y.
My position:
G0 X156 Y190 Z2

7. Fail-safe procedure
If you got trouble with getting this to work every time, you could add a failsafe procedure. This is mine. It does an extra sweep of the build plate to make sure that the visor is pushed onto the paper.
My position:
G0 X156 Y220 Z80
G0 X110 Y220 Z2
G0 X110 Y55 Z2

Step 5. Insert your coordinates/my whole routine:
Open your sliced gcode. Open it in notepad or maybe notepad++. You will see that I've added a pause. That's because of a bug that won't allow us to drop the bed temperature below 40Β°. Scroll down to the bottom. There you will find ";End of Gcode".
Insert the following after that:
M300 S1500 P200
G0 X180 Y150 Z50;Your cooling position
M106 P0;turns on fans to increase cooling
M106 P1
M106 P2
M117 cooling
M109 R25;wait for hotend to cool
G4 P120000;a pause
M190 R36;wait for bed to cool
M300 S1700 P200
M300 S1700 P200
M117 removing print
G0 X156 Y230 Z1.9;behind loop
G0 X156 Y211.8 Z1.9;inside loop
G0 X156 Y211.2 Z5 F1200;lift movement
G0 X156 Y200.7 Z10;further lift movement
G0 X156 Y51.7 Z2;push moivement
G0 X156 Y190 Z2;drop off movement
G0 X156 Y190 Z50
; the following is my failsafe
G0 X156 Y220 Z80
G0 X110 Y220 Z2
G0 X110 Y55 Z2
;Finnish notification
M300 S2200 P200
M300 S2200 P200
M300 S2200 P200

Step 6: Save and print.

Step 7. Calibrate all movements.
Film the first routine. Use the video to make adjustments if your printer is unsuccessful in unloading your print. You might also need to lower your temperature or adjust the speed for some specific movements. You might need to repeat this step a lot of times.

Step 8: Copy and paste.
When you have created a code that worked well, just copy and paste the whole code as many times you want. I did it 20 times. That way my printers won't run out to filament. I also check my bed leveling every time I restart the program.

This method DOES require a lot of trial and error. I made maybe 5-10 adjustments to my code before finding a version that worked 100%. On EACH PRINTER. So don't give up. And a reminder. I strongly recommend using a glass bed!



Issues are used to track todos, bugs or requests. To get started, you could create an issue.


B20e0683840925a530c93df982c9f062?default=blank&size=40Dalton Rollins added this to the 3d printer parts collection ago
Bf80d14a7a0bfb961673eac01321b195?default=blank&size=40kjskls226 added this to the future makes collection ago
7667ed3f9e90ed7e584269da8cfa62b5?default=blank&size=40Kim Watson added this to the Printer Mods collection ago
5cb57538038269412b47d8f381b34790?default=blank&size=40illbehavior added this to the New collections collection ago
73abd81506f314ffd3d3745fb0e14232?default=blank&size=40dbirky added this to the Misc to Make collection ago
918aabb05e77cfa8e40d2a76a5168326?default=blank&size=40Travis Hardiman added this to the to make collection ago
Mini screen shot 2013 07 15 at 6.49.36 pmErik de Bruijn added this to the COVID19 collection ago
Mini 3dsiluettDiligentWorkshop published this design ago