I own a delta 3D printer. The problem is that, at the beginning of a print the extruder outputs dirty filament. I want a clean filament flow at the start of my prints!

How can I make the hotend exit the print surface (glass plate) by 10mm, extrude the bad filament and go back to printing again? Can this be done with G-code?

My Z high is 190 mm and the glass plate diameter is 120 mm. I'm using Marlin + Ramps 1.4.

I'm using Repetier-Host and CuraEngine as Slicer, but I really would like a G-code that can work on multiple environments like Cura and Repetier. I just want to add it to the start G-code and print!


You can achieve this using the G1 command. I don't know your exact printer, but you should be able to use something like this (add to the start G-code in your slicer):

G1 X0 Y62 Z0.2 F9000 ; Move slightly past edge of bed

G92 E0 ; Zero extruder position

G0 E1 F100 ; Extrude 1mm of filament

G92 E0 ; Zero again

G1 X0 Y0 F9000 ; Move back to center of bed

The first line moves the extruder to slightly past the edge of the bed (since the diameter is 120, the radius is 60, and 62 is slightly past the maximum radius). I've set Z to 0.2mm to avoid hitting the plate, but you might be able to lower this.

The next 3 lines zero the extruder position, extrudes 1mm of filament, and resets it to zero (when starting a print the slicer expects E to start at 0).

The final line moves back to the bed center. This might not be neccesary (you might be able to replace this line with just G1 F9000 to set the feedrate back to something that makes sense for travel moves) because you don't need to move back explicitly: the slicer will take care of moving the head in position to start the print.

  • $\begingroup$ This worked well for me : G1 X63 Y63 Z0.4 F9000 ; Move slightly past edge of bed G92 E0 ; Zero extruder position G0 E20 F100 ; Extrude 1mm of filament G92 E0 ; Zero again G1 X0 Y0 F9000 ; Move back to center of bed G28 ; Home extruder $\endgroup$
    – masterleo
    Aug 21 '16 at 20:53
  • $\begingroup$ I just added it to the end of the "start Gcode" Gcode and the nozzle purges at the start of my prints, pefect ! $\endgroup$
    – masterleo
    Aug 21 '16 at 20:54
  • $\begingroup$ For those who are curious here is the finql result. dropbox.com/s/81odyromk5i09cw/IMG_20160821_230255.jpg?dl=0 $\endgroup$
    – masterleo
    Aug 21 '16 at 21:12
  • $\begingroup$ I have found it preferable to hold the printhead well above the surface while oozing/pumping waste, as it makes it easier to grab than "barely above the plate surface (even if off the edge of it.)" But mostly I do that while heating up and oozing (hold it forward and 50mm off the deck) and then use a skirt to deal with getting filament to flow nicely before printing. $\endgroup$
    – Ecnerwal
    May 29 '17 at 20:09

Slic3r, and all other slicers that I saw, have an option called Skirt that enables your printer to print a number of lines around your object before it starts printing the object itself.

This should ensure that both the nozzle is filled with filament and the printer got rid of any burned / dirty filament when it starts printing your object.

If you use Slic3r as standalone, you have to activate expert mode in the preferences. If you use it through Repetier-host it should already be in expert mode.

You can see all available options in the Slic3r documentation for Skirt.

  • $\begingroup$ my problem with the skirt is that the first bit of filament ends up dragging behind the print head, potentially fouling up the print area... $\endgroup$
    – kolosy
    May 5 '19 at 23:45
  • $\begingroup$ @kolosy What I usually do before starting a print is extrude some filament until it gets consistent and pinch that off the printer head with a tweezer. Otherwise, make sure the adhesion to your print bed is satisfactory $\endgroup$
    – Nicu Surdu
    May 6 '19 at 14:08
  • $\begingroup$ If you can't print a skirt properly, how do you get it do do the rest of the print properly? $\endgroup$
    – Perry Webb
    Dec 21 '20 at 14:14

A lot of slicers will have a Wipe option. Here are some examples:

  • See Unofficial Simplify3D Documentation. Go to the section talking about Wipe Nozzle, under the heading Extruder Tab

    Two more ooze-fighting options are Coast at end and Wipe nozzle. Coast turns off the extruder the specified distance before it normally would, to drain what would have oozed as the end of a line. This can help with ooze-induced blobs at the end of lines, but if turned up too high will lead to gaps in your print walls. Changes to this setting will be visible as gaps in the g-code preview.

    Wipe has the nozzle retrace over the start of a perimeter line at the end of a perimeter for the specified distance with the extruder off, to leave any ooze behind before proceeding. It is similar to Coast in that it moves the extruder without extruding, but wipe occurs after the end of the line while coast occurs before.

  • Slic3r has some sort of coasting. But I think in their docs the option is there: Slic3r Manual - Fighting Ooze

    Wipe before retract - Moves the nozzle whilst retracting so as to reduce the chances of a blob forming.

As you asked for G-Code here you go:

  • Reprap Forum - Wipe nozzle via GCODE


    ;Sliced at: {day} {date} {time}
    ;Basic settings: Layer height: {layer_height} Walls: {wall_thickness} Fill: {fill_density}
    ;Print time: {print_time}
    ;Filament used: {filament_amount}m {filament_weight}g
    ;Filament cost: {filament_cost}
    ;M190 S{print_bed_temperature} ;Uncomment to add your own bed temperature line
    ;M109 S{print_temperature} ;Uncomment to add your own temperature line
    G21        ;metric values
    G90        ;absolute positioning
    M82        ;set extruder to absolute mode
    M107       ;start with the fan off
    G28 X0 Y0  ;move X/Y to min endstops
    G28 Z0     ;move Z to min endstops
    M117 Auto-level...
    G29        ;auto-level
    ;G92 Z-.01 ; Lower = Z Pos, Lift = Z Neg
    M117 Preparing...
    G1 Z10.0 F{travel_speed} ;move the platform down 15mm
    G92 E0                  ;zero the extruded length
    G1 F100 E30              ;extrude 10mm of feed stock
    G92 E0                  ;zero the extruded length again
    G1 F{travel_speed}
    ;Put printing message on LCD screen
    M300 S900 P160         ;start beep
    M300 S1000 P160
    M300 S2000 P160
    M0    ;Wait for the user
    M117 Printing...
  • Lulzbot forum - Start GCODE Script for Wipe, in particular this post:


    G91 ; switch to relative positioning
    G1 Z10 ; safe raise of z axis to ensure probe doesn't hit bed clamp
    G90 ; switch back to absolute positioning
    G28 ; home all axes
    G29 ; level print bed
    G1 X298 Y137 Z2 F5000 ; move to wait position right hand side of the table
    G1 Z0.4 ; position nozzle
    G1 E25 F300 ; purge nozzle
    M400 ; wait for purge to complete
    G1 X285 F1200 ; slow wipe
    G1 Z0.5 F1200 ; lift

That should get you started.

  • $\begingroup$ Hi! We expect answers to be self-contained, and not depend on external links (which may change or become unavailable, rendering your answer useless). It's fine to include links for further reference, but please make sure your answer can stand on its own. $\endgroup$ Aug 7 '16 at 7:25
  • $\begingroup$ Fair enough. I will copy the contents. $\endgroup$
    – StarWind0
    Aug 7 '16 at 7:26
  • $\begingroup$ Please see 3dprinting.stackexchange.com/help/referencing $\endgroup$ Aug 7 '16 at 7:28

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.