@@jes00456To my understanding some purge lines/brim things will bypass the trash bin and you’ll find them days/months later somewhere in your print room/living area.
For those with Bambu printers Click the edit button above plate type, (looks like pencil to paper)(when you hover over the button it says "click to edit preset") Click the second tab, "Machine Gcode". The top text box should be called "Machine start G-Code" At the bottom of that box, paste in: G92 E0.0; reset extruder G1 X{first_layer_print_min[0]-10} Y{first_layer_print_min[1]} Z0.8 F6000.0; position 10mm left from the lower left of the first layer G1 X{first_layer_print_min[0]-10} Y{first_layer_print_min[1]+30} E30 F360.0; extrude 30mm of filament in the Y direction G92 E0.0; reset extruder G1 E-0.5 F2100; small retraction G1 Y(first_layer_print_min[1]+40) f6000.0; move an aditional 10mm without extruding G92 E0.0; reset extruder ^ that will add the new fancy purge line talked about in the video. To remove the default purge line, remove the code (above but int he same text box) which says ;===== nozzle load line =============================== M975 S1 G90 M83 T1000 G1 X18.0 Y1.0 Z0.8 F18000;Move to start position M109 S{nozzle_temperature_initial_layer[initial_extruder]} G1 Z0.2 G0 E2 F300 G0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} G0 Y15 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} G0 X239.5 G0 E0.2 G0 Y1.5 E1.166 G0 X18 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} M400
G-Code für ungültigen benutzerdefinierten G-Code konnte nicht erzeugt werden. machine_start_gcode Parsing error at line 247. Expecting a legacy variable expansion format G1 Y(first_layer_print_min[1]+40) f6000.0; move an aditional 10mm without extruding ^ Bitte überprüfen Sie den benutzerdefinierten G-Code oder verwenden Sie den standardmäßigen benutzerdefinierten G-Code.
@@_MicZ_ Only the position is dependent on the model, not other parameters. The position is already known to Klipper via the bounding box data, which is used to selectively cancel a single object and for the adaptive mesh
I've always just used a skirt, but as you mentioned it gets to be a bit much, especially for larger prints, when the skirt completely surrounds the part. I'm definitely going to need to give this one a try. Thank you for this informative video.
I've just got into printing ABS and couldn't start printing the object without getting ball that would get caught in the fan duct, get pulled along and cause the entire line it was printing to be lifted. I wrote a CURA post processor specfically to read the first G0 co-ordinates (usually the move to the brim start point) and process them. It purges down one side in the normal way, across to the G0's X co-ordinate, then turns left and prints straight down the bed to the G0's Y co-ordinate. So in its initial printing it doesn't get a chance to run the duct over a stuck up tail. Works really well.
I just realized it's possible to use the same variables for adaptive meshing in Marlin. G29 has the L, R, F, B parameters that control the scanning zone. This should be the command, I kept a 10mm margin, you can change them: SEE THE UPDATE I just tested it on my machine (Marlin 2.1.2.1), and it works. UPDATE: I rewrote the line to avoid values outside the bed limit. Such a value would make the printer completely ignore the G29 command. Here is the new line: G29 L{((first_layer_print_min[0]-10) < print_bed_min[0])? print_bed_min[0]:(first_layer_print_min[0]-10)} R{((first_layer_print_max[0]+10) > print_bed_max[0])? print_bed_max[0]:(first_layer_print_max[0]+10)} F{((first_layer_print_min[1]-10) < print_bed_min[1])? print_bed_min[1]:(first_layer_print_min[1]-10)} B{((first_layer_print_max[1]+10) > print_bed_max[1])? print_bed_max[1]:(first_layer_print_max[1]+10)} This will ensure all values are inside the bed limit.
@@SirVergil I don't have a Bambu printer, so I checked the print profile of the P1P. It looks like something similar was already implemented in the start G-code: G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]} I'm not sure if this is correct, can someone with a Bambu machine check what I'm saying?
That's neat but adaptive bed meshing in Klipper also reduces the number of probes based on the first layer area to save time. This method wouldn't do that, but it would get a more precise mesh of the actual print area instead of the entire bed. Good job!
If it’s possible to perform integer division in your slicer’s g-code compiler, then you could set a fixed number of millimetres between each probe. Edit: on the Slic3r page for conditional g-code, it mentions that it supports functions from the C resource exprtk, which includes regular division and the modulo operator, so I think it’s possible. It would probably be easier to just use floor or ceiling or round using normal division, which it also supports.
Oh, that's perfect! I also have my bed slightly bent upwards just at the last 20mm on the left side, right where my purge line is placed. But I use the skirt not only used for purging, but also for checking correct z-height right before the actual print.
i'm really liking the purge method on my xl, so easy to take off. i added a bit to reduce the height near the end of the purge to kinda cut off the extrusion before moving away to help reduce stringing from the purge line
Nice. I thought I would need to follow your video to do it on my two main printers, even though they have Klipper installed. Because it's a user-made beta version of Klipper on a machine with locked firmware. But as it turns out, I was able to install KAMP on them. Little bit of set up work and a lot of web searching little things, but I got it working.
I tweaked my purge macros on a Robox 3D printer years ago and it was always to get a no blob start print, then modded the native slicer to create. Skirt, but I can see your method of nixing KAMP is going to be more useful on my current 3D printers. Thank you for doing this.… have a beer on me.
This is great! I've definitely missed the KAMP purge feature with my Bambus. The delicate and hard to remove line along with the string and sometimes blob, have been one of largest (but still extremely minor) gripes. Can't wait to try this!
I'll probably give it a try because why not, seems better than the traditional type of purge line, with the added benefit of not having to travel as far after
I always added a skirt when printing with my Wanhao Duplicator i3 Plus, stopped when I switched to Bambu Lab printers. The new printers are definitely an upgrade but one thing I miss about printing with my i3 is watching it print. It moved at a nice even pace and watching it was relaxing, almost hypnotic. 😌 The X1C and P1P are definitely not relaxing to watch so I’ve had settle for improved print quality and speed. 😂
Great stuff! Would have been cool to have the gcode fragment in the description for a quick cut & paste for those a little familiar with gcode :-) Thanks EDIT: While I didnt find a great deal of diff on small prints/layer heights etc, this has been amazing for large models eg >400mm and nozzle sizes > 0.6...thanks again for the condensed info
I'm still using a variation of your start code for purge from around '19. May I recommend using layers of blue tape under your flex plate to build up low areas. It's about 0.12mm thick. I have 3 layers in a couple of areas on my Ender 3. Thermal camera shows no adverse effect in heating of the flex sheet due to the tape. I haven't needed to run a mesh in months; just recall the stored mesh {55 & 70C have their own) and go.
Amazing video, I just thought of one flaw… When you purge close to the model, you will either have to use your finger to remove it (adding oil to the build plate) or a sharp pit of tweezers or a knife which could scratch the bed I do like the advantage of it reducing the travel from the purge line to the print. I love to see new techniques. Thank you for the hard work you do for the community
@@n3m37h guitar pick is a great suggestion! I find any printed tools do not have a sharp edge that lasts, you’ve really gotta be able to get the tool underneath to begin with before you lift everything up Thank you for taking the time to suggest a great idea
Ugh i hate not having Klipper. Don't want to bother with Klipperizing ny current printer since I'm planning to get a new one by the end of the year, but it has sucked missing out on stuff like this, adaptive temperature script, good resonance compensation, all the perks of Fluidd, etc. I really appreciate you doing this to give us Marlin users access to some of the good stuff lol. I'm definitely going to try it bc my purge lines often fail to clean the nozzle and instead just cause the oozed filament to fold or curl up onto the sides of it.
Interesting! I have a Cetus 3D printer, and its dedicated slicer has used the same purge line for many years. But I never thought it could be applied to other 3D printers. Good job!
A few questions that came to me while watching : - have you taken into account in this custol gcode to avoid having the purge line out of the print plate boundaries ? This is a real risk by printing pieces close to the border of the plate. From the video it does not look like this is checked. - how does this interract with print settings like "print by object" ? - do you think it would be possible to merge this method with the official purge lines from bambu printers, which does more that just purging 30mm of filament ? (Dynamic calibeation flow is done at the same time typically). I.e. the purge line frol A1s printers typically alrernates between 3 flows settings during this process. Would be really really good to allow just to move this purge line closer to the print onstead of doing a more basic one :)
1. The slicer checks moves against defined boundaries. So while slicing it would throw up an error if the line was outside of the build plate (if the origin and bed shape and size are set correctly). 2. It simply prepends some gcode before any actual generated gcode is initiated. So it would do the purge line once, and continue with the rest of the objects one by one. 3. I don't know how bambu printers work, but I assume the calibration is done with a baked in macro in firmware. So I think the location of it will be hardcoded. Not 100% sure though.
I just got a K1C after having my E3v2 for 3 years, and tbh....I dont feel like messing with it at all!....The factory Klipper prints at speed and basic plug and print with fantastic results....Its The total inverse of my experience with the 3v2, where I spent a year upgrading almost every weakness I could...(octopi/w webcam, direct feed, CRtouch,full spyder hotend,etc) just to get accurate results. Its great yet sad to see the industry advancements over the years, yet still plagued by such minutia as custom purge lines. Cheers from Texas!
thanks micheal i have kamp and klipper setup although didnt get adaptive purge to work correctly must of missed something thanks 🙏 will take another look 😊
I've worked around this for years by just printing closer to the lower left corner and placing the seam also in the same position on the first layer. Its stupid but it works.
I like the KAMP purge line in Klipper but it doesn't seem to account for organic supports or wide brims. I don't know if this slicer gcode version does or not but knowing how to change the location is a good thing to know.
Oh, neat! I recently picked up (and got rid of!) an Anycubic Kobra 2. When it worked, it was printing a purge-line across the width of the 'handle' of the print-sheet. I looked: it was built-in to the starting G-Code. I got rid of the printer because the print-bed was warped way beyond what leveling could deal with...more than 0.6 mm from center to 'best corner'. Worst was nearly 0.9 mm! The flexible sheet wasn't the issue, it was the frame that held the heating-plate under the print-bed that was warped. Looks like some bad or out of place spot-welds... It was trying to print on a 'Pringles chip'! I am so done with 'the printer is the hobby'! Got a Bambu X1 Carbon coming in a few days...get some work done.
For those using Marlin and Cura I use the following start code which can be set up in Cura Start code G28 ;Home G1 Z5.00 F3000 ;move table down G1 X10.0 Y10.0 Z0.25 ; Prime the nozzle G92 E0 G1 X100.0 E22 F400 G1 Z5.00 F3000 M900 K0 ;Set linear advance K factor G92 E0 extrudes 100 mm line and adjust E value to suit.
I have an IDEX printer, and it has brushes on both sides. So I just put an extruder gcode in the start up and let it purge off the side of the printer and then the brush cleans ir on the way to the print bed. It saves so much filament and no brims needed. I only use a brim on something very tall and skinny to give it better adhesion. I wish more printers worked like that. I used to use lines on the front for the other printers
The purge line is the first opportunity to adjust the nozzle height by baby-stepping, so for that it can help to make the line a little longer and/or slower.
300*300 square 1 line skirt takes 30s and 35mm of filament. It cleans your nozzle in 4 directions, you see your bed leveling while printing it and if your extralarge print will fit your bed. Set skirt to: 1 line 2mm away (if you like 215mm pieces on a 220mm bed) 10mm min extruded( seems yours extrude 9mm). All under 45mm radius will take 2 loops to reach 10mm extruded filament.
I kept meaning to do something like this. I wanted an up, right, down three sided rectangle a few mm from the bottom left corner of the print to maximize the ability to leave an nozzle drool bugger or blob in the purge line and not have it fall into the print. I want the purge line to be easy to remove and discard. Thanks!
I decided to make the prime line change position as needed based on the first layer size and location. This goes through the 4 sides and uses the first one it finds as valid in this order: left vertical line front horizontal line right vertical line back horizontal line if the print is within 10 of all 4 sides it doesn't do a prime line ;prime line G92 E0.0 ; reset extruder {if first_layer_print_min[0] - 10 > print_bed_min[0]} ; check left valid G1 X{first_layer_print_min[0] - 10} Y{first_layer_print_min[1]} Z0.8 F6000.0 ; position 10mm left of print G1 X{first_layer_print_min[0] - 10} Y{first_layer_print_min[1]+30} E30 F360.0 ; extrude 30mm of filament in the y direction G92 E0.0 ; reset extruder G1 E-0.5 F2100 ; small retraction G1 Y{first_layer_print_min[1]+40} F6000.0 ; move an additional 10mm without extruding G92 E0.0 ; reset extruder {elsif first_layer_print_min[1] - 10 > print_bed_min[1]} ; check front valid G1 X{first_layer_print_min[0]} Y{first_layer_print_min[1]-10} Z0.8 F6000.0 ; position 10mm front of print G1 X{first_layer_print_min[0]+30} Y{first_layer_print_min[1]-10} E30 F360.0 ; extrude 30mm of filament in the x direction G92 E0.0 ; reset extruder G1 E-0.5 F2100 ; small retraction G1 X{first_layer_print_min[0]+40} F6000.0 ; move an additional 10mm without extruding G92 E0.0 ; reset extruder {elsif first_layer_print_max[0] + 10 < print_bed_max[0]} ; check right valid G1 X{first_layer_print_max[0] + 10} Y{first_layer_print_min[1]} Z0.8 F6000.0 ; position 10mm right of print G1 X{first_layer_print_max[0] + 10} Y{first_layer_print_min[1]+30} E30 F360.0 ; extrude 30mm of filament in the y direction G92 E0.0 ; reset extruder G1 E-0.5 F2100 ; small retraction G1 Y{first_layer_print_min[1]+40} F6000.0 ; move an additional 10mm without extruding G92 E0.0 ; reset extruder {elsif first_layer_print_max[1] + 10 < print_bed_max[1]} ; check back valid G1 X{first_layer_print_min[0]} Y{first_layer_print_max[1]+10} Z0.8 F6000.0 ; position 10mm back of print G1 X{first_layer_print_min[0]+30} Y{first_layer_print_max[1]+10} E30 F360.0 ; extrude 30mm of filament in the x direction G92 E0.0 ; reset extruder G1 E-0.5 F2100 ; small retraction G1 X{first_layer_print_min[1]+40} F6000.0 ; move an additional 10mm without extruding G92 E0.0 ; reset extruder {endif}
I made it slightly touching the model, just 0.3mm distance. When I release the model from the build plate, purge line is attached to the model with a tiny bit, which could be snapped off easily. I won't forget to remove purge line then.
There is a similar thing on the FlashForge slicer where you can set the length of the skirt. It means on big prints its not doing a massive skirt round the whole print
I use OrcaSlicer. There is a MINIMUM length for the skirt, if it's not at least that long it adds another loop. But I cannot find any maximum length where it stops if it gets too long. So I'm hoping that this "adaptive purge line" thing can help simulate that.
Skirt length and total extrusion depends on first layer perimeter. Might be more personal preference than actual printing issue what to use 😉 (I'm running both long traditional 2-way purge _and_ 2 skirt lines - 1 seems too easy to get loose and interfere - and don't feel like I'm wasting too much time or filament 😅)
Skirts are obnoxiously big and flimsy and hard to take off the bed. Also as other comments have said they aren't always the same size, so if you only do one loop it might not be enough, and if your print is big it might be way too much.
In my experience with prime lines, 30mm isn't enough, at least on my v0 where I sometimes have to increase the amount of skirt or the nozzle isn't primed enough. I've heard you mention KAMP before and had no idea what that was and I always thought I was mis-hearing you and thought you were saying CAM.
Just made this change to my "base" profile for my Bambu P1S. Mostly love it, one thing I dislike is the shorter purge blob is PEERFECTLY sized to flick off and send itself straight down the opening for the rear Z-screw. If you planned this, you're diabolical... :D ----- Just discovered a issue with this change, if the print is "huge" you need to add a conditional to not have the head try and move beyond the limits of the print area.... I just tore off the front of my P1S because it (stupidly) tried to move blindly outside the total area... 😢 something like: {if (first_layer_print_min[0]-10 > print_bed_min[0]) && (first_layer_print_min[1]+50 < print_bed_max[1])} then... use TT purge {else} use the default purge logic
I really like this idea - I do wonder how supports would be handled, though... I suppose as long as you account for that with the placement/distance of the new purge...
@10:40 Maybe this only works in OrcaSlicer, but would it be better to set the retraction line to use machine settings? something like...: G1 E-{retraction_length[0]} F{retraction_speed[0]*60}
I was having trouble with molten plastic remaining on the _side_ of the nozzle in between prints. I modified my purge line to back up after purging, lower 0.04mm, then draw a triangle through the purge line. It knocks the plastic off the nozzle side like those little silicone boot scrapers.
Donuts are cool too: G1 E35 F300 ; Extrude 25mm of filament at 300mm/min G4 P1000 ; Dwell for 1000ms (1 second) G1 E-0.200 Z5 F600 ; Retract 0.2mm and raise Z by 5mm at 600mm/min
This is a bit like the pre-extrusion setting in Flashprint slicer. It's like a skirt but you can specify the length between 50mm and 200mm and the offset distance so it doesn't do a full loop around of your print. It doesn't do a traditional purge line unless you add it to the start gcode.
@TeachingTech the line at 9:50 is because the purge for pause is also showing up, I think, and I am unsure if you can just replace the purge line with the adaptive purge twice, for the initial and on pause one, with that in mind does it purge properly after a pause? or does it collide?
I followed the directions for my A1 mini using orca slicer. It does, however, do the initial purge line like what happened to you in the first round. I deleted the same portion (extrusion cali line). What could be the issue? Is there another portion of the start g code I should be deleting?
Adaptive meshing is available in Klipper itself, you no longer need KAMP for it. I don't really find the purge line of KAMP that great. It purges quite a lot and I often had PETG from that purge sticking to the nozzle and because of the short distance to the print drawing an annoying and relatively thick string connecting it with the part. I actually went back to a purge line at the front of the bed, first extruding a blob in the air then moving the nozzle down and right laying that blob on the edge of the bed and attaching it due to some more extrusion on that bed edge, finally quickly moving away further to the riht with tiny retract and then quickly moving to the actual print.
The other day I was trying to figure out how to remove the purge line because I was proton on a t-shirt amber didn't want the line on the shirt. I ended up putting down a piece of tape where the line will be so I could just remove the tape later.
I've been using this for a while... only problem I've discovered is that the purge line will intersect the brim if your using a large brim.... not sure how to fix it but its been great
Does the code need to check if the purge coordinates are off the bed? I know with KAMP that it sends a message to the console if you need to remove the purge line before printing.
The purge line has never really bothered me, I keep my bed leveled to ~0.2 maximum offset across and that's always worked well. What bothers me more is that when it homes it always touches the bed at 0,0 and that leaves a small divot plus there's always a little blob of filament there before it starts printing if I don't push it off once it's ready to go.
The only problem is now the purge line is off the plate of the model is too close to the edge. We'll need to fiddle with the start g-code each time, or figure out some way of deciding on different purge lines depending on where the model is or how big it is. Nice version, though. Definitely food for thought. Maybe a horizontal or vertical purge line just at the edge of the object, or the -1 if the model is too far forward.
Very cool. Is it possible to mimic the other feature of camp to have the printer only probe the print area? I get frustrated at how long my ender 3 takes to probe the whole bed
The issue I had with such fat purge line very close to the print is that it can obstruct the way of the BL-touch sensor making print head jump every time probe bumps into purge line. Just be cautious about your configuration and put purge line further away from the print.
Hi. Nice work. Is there a way to make sure the purge stay within le limit of the bed area. I had a out of range error cause the purge was trying to do it outside the print area with a bed full of parts to print.
What if my print is so large or positioned so close to the edge of the bed that there is no place 10 or 20mm to the side? What if I have multiple objects being sliced? Since its in the start g code it will do the purge line only once, right before starting the print of the first object, right?
Your slicer will throw up an error about a toolpath outside the print area. Yes, it will only do one purge even if you have multiple objects on the build plate. Also only one purge line when you have "complete individual objects" turned on.
Not sure if everyone knows this.. Prusa mk4 does actually measure the bed level on two points where it purges before the print. I was wondering how it will work in back to back prints and was relieved to see it just measures the existing purge height and adds another layer there
Remember to offset yiour variable_purge_margin by at least the probe offset. But probably do 2x that just in case. Or do that + 5mm. Because the probe will scrape over the line if you don't since the purge line is much higher than your first layer.
Question: what would happen if you made a print that take up the whole square build plate? What I mean is, on my A1 Mini, the build plate has that bit sticking out at the front where the default purge line normally goes that isn’t really part of the print surface. For max-size prints, is there a way to dynamically swap between the adaptive and default purge line?
You can see that the nozzle travels after purging still pretty long distance all over the model. Can you automatically put the purge line to the initial starting point of the first layer?
I made my purge a little lightening bolt. Takes a little more time but I like finding them all over the printer room.
😂
😂
Mind sharing?
Right on, Zeus! ⚡️
@@jes00456To my understanding some purge lines/brim things will bypass the trash bin and you’ll find them days/months later somewhere in your print room/living area.
For those with Bambu printers
Click the edit button above plate type, (looks like pencil to paper)(when you hover over the button it says "click to edit preset")
Click the second tab, "Machine Gcode".
The top text box should be called "Machine start G-Code"
At the bottom of that box, paste in:
G92 E0.0; reset extruder
G1 X{first_layer_print_min[0]-10} Y{first_layer_print_min[1]} Z0.8 F6000.0; position 10mm left from the lower left of the first layer
G1 X{first_layer_print_min[0]-10} Y{first_layer_print_min[1]+30} E30 F360.0; extrude 30mm of filament in the Y direction
G92 E0.0; reset extruder
G1 E-0.5 F2100; small retraction
G1 Y(first_layer_print_min[1]+40) f6000.0; move an aditional 10mm without extruding
G92 E0.0; reset extruder
^ that will add the new fancy purge line talked about in the video. To remove the default purge line, remove the code (above but int he same text box) which says
;===== nozzle load line ===============================
M975 S1
G90
M83
T1000
G1 X18.0 Y1.0 Z0.8 F18000;Move to start position
M109 S{nozzle_temperature_initial_layer[initial_extruder]}
G1 Z0.2
G0 E2 F300
G0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}
G0 Y15 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}
G0 X239.5
G0 E0.2
G0 Y1.5 E1.166
G0 X18 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}
M400
nice
G-Code für ungültigen benutzerdefinierten G-Code konnte nicht erzeugt werden.
machine_start_gcode Parsing error at line 247. Expecting a legacy variable expansion format
G1 Y(first_layer_print_min[1]+40) f6000.0; move an aditional 10mm without extruding
^
Bitte überprüfen Sie den benutzerdefinierten G-Code oder verwenden Sie den standardmäßigen
benutzerdefinierten G-Code.
Error occuring while slicing in Orca
@@josefno.1 Ah yes I got the same error. Let me know if you manage to work out what the correct variable is.
@@liamburgo23 i am honest i dont know how to Coding. I thought you know how to
Thank you very much! Looking forward to seeing this easy improvement being picked up by the developer community and implemented in OrcaSlicer
Anything model-agnostic should be handled by your printer's start macro, like it is in KAMP, not your slicer
@@polycrystallinecandy A regular purge line is model-agnostic, but an adaptive purge line means it's relative to the model, so not model-agnostic ...
@@_MicZ_ Only the position is dependent on the model, not other parameters. The position is already known to Klipper via the bounding box data, which is used to selectively cancel a single object and for the adaptive mesh
Ive been anoyed with having the purge line in The same place all the time.
Thank you for sharing a solution to that problem!
Just use a skirt.
I've always just used a skirt, but as you mentioned it gets to be a bit much, especially for larger prints, when the skirt completely surrounds the part. I'm definitely going to need to give this one a try. Thank you for this informative video.
I find two loops of skirt to be a quick early warning when the bed is out of level. It's easy to spot inconsistencies in the overall width
So awesome, thank you Michael.
I've just got into printing ABS and couldn't start printing the object without getting ball that would get caught in the fan duct, get pulled along and cause the entire line it was printing to be lifted. I wrote a CURA post processor specfically to read the first G0 co-ordinates (usually the move to the brim start point) and process them. It purges down one side in the normal way, across to the G0's X co-ordinate, then turns left and prints straight down the bed to the G0's Y co-ordinate. So in its initial printing it doesn't get a chance to run the duct over a stuck up tail. Works really well.
Could you share your CURA post processor script/code please? I would like to try it. TY.
This is fab Michael. I was getting sick of the spindly little purges on the A1.
Thanks so much!
I just realized it's possible to use the same variables for adaptive meshing in Marlin.
G29 has the L, R, F, B parameters that control the scanning zone. This should be the command, I kept a 10mm margin, you can change them:
SEE THE UPDATE
I just tested it on my machine (Marlin 2.1.2.1), and it works.
UPDATE:
I rewrote the line to avoid values outside the bed limit. Such a value would make the printer completely ignore the G29 command.
Here is the new line:
G29 L{((first_layer_print_min[0]-10) < print_bed_min[0])? print_bed_min[0]:(first_layer_print_min[0]-10)} R{((first_layer_print_max[0]+10) > print_bed_max[0])? print_bed_max[0]:(first_layer_print_max[0]+10)} F{((first_layer_print_min[1]-10) < print_bed_min[1])? print_bed_min[1]:(first_layer_print_min[1]-10)} B{((first_layer_print_max[1]+10) > print_bed_max[1])? print_bed_max[1]:(first_layer_print_max[1]+10)}
This will ensure all values are inside the bed limit.
Will this work for a bambulab p1p? if so, can you make a tutorial for dumb people like me? thank you.
@@SirVergil did you not watch the vide0? For p1p just follow the steps from it
@@SirVergil I don't have a Bambu printer, so I checked the print profile of the P1P. It looks like something similar was already implemented in the start G-code: G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}
I'm not sure if this is correct, can someone with a Bambu machine check what I'm saying?
That's neat but adaptive bed meshing in Klipper also reduces the number of probes based on the first layer area to save time. This method wouldn't do that, but it would get a more precise mesh of the actual print area instead of the entire bed. Good job!
If it’s possible to perform integer division in your slicer’s g-code compiler, then you could set a fixed number of millimetres between each probe.
Edit: on the Slic3r page for conditional g-code, it mentions that it supports functions from the C resource exprtk, which includes regular division and the modulo operator, so I think it’s possible. It would probably be easier to just use floor or ceiling or round using normal division, which it also supports.
Tried it today and it works perfectly on my Marlin Sovol SV06plus. Thanks for sharing your knowledge!
Oh, that's perfect! I also have my bed slightly bent upwards just at the last 20mm on the left side, right where my purge line is placed.
But I use the skirt not only used for purging, but also for checking correct z-height right before the actual print.
Been using KAMP for a while now and it’s been awesome.
Just got an X1C and the lidar reviewing the purge to adapt the flow is even more awesome
i'm really liking the purge method on my xl, so easy to take off. i added a bit to reduce the height near the end of the purge to kinda cut off the extrusion before moving away to help reduce stringing from the purge line
Since my p1s started ozzing a bit between purge and 1st model layer i started using skirt again. Its a wonderful feature.
Nice. I thought I would need to follow your video to do it on my two main printers, even though they have Klipper installed. Because it's a user-made beta version of Klipper on a machine with locked firmware. But as it turns out, I was able to install KAMP on them. Little bit of set up work and a lot of web searching little things, but I got it working.
I tweaked my purge macros on a Robox 3D printer years ago and it was always to get a no blob start print, then modded the native slicer to create. Skirt, but I can see your method of nixing KAMP is going to be more useful on my current 3D printers. Thank you for doing this.… have a beer on me.
This is great! I've definitely missed the KAMP purge feature with my Bambus. The delicate and hard to remove line along with the string and sometimes blob, have been one of largest (but still extremely minor) gripes. Can't wait to try this!
I'll probably give it a try because why not, seems better than the traditional type of purge line, with the added benefit of not having to travel as far after
Another great video. Just completed this and it works fantastic on my Sovol SV06!!
Ahhhhh this is how you do it. I got close working at it a few nights.Thank you Michael!
Brilliant. Thanks for sharing Michael.
I always added a skirt when printing with my Wanhao Duplicator i3 Plus, stopped when I switched to Bambu Lab printers. The new printers are definitely an upgrade but one thing I miss about printing with my i3 is watching it print. It moved at a nice even pace and watching it was relaxing, almost hypnotic. 😌
The X1C and P1P are definitely not relaxing to watch so I’ve had settle for improved print quality and speed. 😂
Bruh 😂
amazing!! This should totally fix my biggest problem with my CR10 max! Thank you! You are always a life saver! :)
thank you so much for showing this off! I'm so adding this to my printer
This is actually REALLY nifty! Thank you!
I have been looking for something like this forever! Thank you!
Great stuff! Would have been cool to have the gcode fragment in the description for a quick cut & paste for those a little familiar with gcode :-) Thanks
EDIT: While I didnt find a great deal of diff on small prints/layer heights etc, this has been amazing for large models eg >400mm and nozzle sizes > 0.6...thanks again for the condensed info
A brim and/or tabs help with adhesion as well as purging the filament from the nozzle.
Sublime! Exactly what the doctor ordered.
I'm still using a variation of your start code for purge from around '19.
May I recommend using layers of blue tape under your flex plate to build up low areas. It's about 0.12mm thick. I have 3 layers in a couple of areas on my Ender 3. Thermal camera shows no adverse effect in heating of the flex sheet due to the tape. I haven't needed to run a mesh in months; just recall the stored mesh {55 & 70C have their own) and go.
Amazing video, I just thought of one flaw…
When you purge close to the model, you will either have to use your finger to remove it (adding oil to the build plate) or a sharp pit of tweezers or a knife which could scratch the bed
I do like the advantage of it reducing the travel from the purge line to the print. I love to see new techniques. Thank you for the hard work you do for the community
Guitar pick, spudger both work, can print your own too
@@n3m37h guitar pick is a great suggestion!
I find any printed tools do not have a sharp edge that lasts, you’ve really gotta be able to get the tool underneath to begin with before you lift everything up
Thank you for taking the time to suggest a great idea
I'm trying this today on my Bambu printers, Thank you!!!
Ugh i hate not having Klipper. Don't want to bother with Klipperizing ny current printer since I'm planning to get a new one by the end of the year, but it has sucked missing out on stuff like this, adaptive temperature script, good resonance compensation, all the perks of Fluidd, etc. I really appreciate you doing this to give us Marlin users access to some of the good stuff lol. I'm definitely going to try it bc my purge lines often fail to clean the nozzle and instead just cause the oozed filament to fold or curl up onto the sides of it.
Interesting! I have a Cetus 3D printer, and its dedicated slicer has used the same purge line for many years. But I never thought it could be applied to other 3D printers. Good job!
A few questions that came to me while watching :
- have you taken into account in this custol gcode to avoid having the purge line out of the print plate boundaries ? This is a real risk by printing pieces close to the border of the plate. From the video it does not look like this is checked.
- how does this interract with print settings like "print by object" ?
- do you think it would be possible to merge this method with the official purge lines from bambu printers, which does more that just purging 30mm of filament ? (Dynamic calibeation flow is done at the same time typically). I.e. the purge line frol A1s printers typically alrernates between 3 flows settings during this process. Would be really really good to allow just to move this purge line closer to the print onstead of doing a more basic one :)
1. The slicer checks moves against defined boundaries. So while slicing it would throw up an error if the line was outside of the build plate (if the origin and bed shape and size are set correctly).
2. It simply prepends some gcode before any actual generated gcode is initiated. So it would do the purge line once, and continue with the rest of the objects one by one.
3. I don't know how bambu printers work, but I assume the calibration is done with a baked in macro in firmware. So I think the location of it will be hardcoded. Not 100% sure though.
@@lucaspeltie thanks for the answers, it's clearer :)
I will try to dig on my side regarding Bambulab calib code
I just got a K1C after having my E3v2 for 3 years, and tbh....I dont feel like messing with it at all!....The factory Klipper prints at speed and basic plug and print with fantastic results....Its The total inverse of my experience with the 3v2, where I spent a year upgrading almost every weakness I could...(octopi/w webcam, direct feed, CRtouch,full spyder hotend,etc) just to get accurate results.
Its great yet sad to see the industry advancements over the years, yet still plagued by such minutia as custom purge lines. Cheers from Texas!
thanks micheal i have kamp and klipper setup although didnt get adaptive purge to work correctly must of missed something thanks 🙏 will take another look 😊
I've worked around this for years by just printing closer to the lower left corner and placing the seam also in the same position on the first layer. Its stupid but it works.
Thank you Michael, thank you for this extremely informative sharing ;-)
it's so simple, yet so useful!
Mynew flashforge 5m does this and wow it saved me from some bad prints the crap it purged
Thanks so much, kamp wasn't working for me and this solved my issue
Thank you for the solution. I am going to try it on my creality ender 5 with biqu H2 V2S extruder.
I like the KAMP purge line in Klipper but it doesn't seem to account for organic supports or wide brims. I don't know if this slicer gcode version does or not but knowing how to change the location is a good thing to know.
It works. I tested some ridiculous brims and supports in Prusaslicer and this purge always stays outside of it.
Oh, neat!
I recently picked up (and got rid of!) an Anycubic Kobra 2.
When it worked, it was printing a purge-line across the width of the 'handle' of the print-sheet.
I looked: it was built-in to the starting G-Code.
I got rid of the printer because the print-bed was warped way beyond what leveling could deal with...more than 0.6 mm from center to 'best corner'. Worst was nearly 0.9 mm!
The flexible sheet wasn't the issue, it was the frame that held the heating-plate under the print-bed that was warped. Looks like some bad or out of place spot-welds...
It was trying to print on a 'Pringles chip'!
I am so done with 'the printer is the hobby'!
Got a Bambu X1 Carbon coming in a few days...get some work done.
Klipper already supports adaptive bed meshing natively. I wonder how long until it supports adaptive purge?
Thanks again for another valuable video. Qidi Xmax3 and Q1 Pro do this out of the box.
For those using Marlin and Cura I use the following start code which can be set up in Cura
Start code
G28 ;Home
G1 Z5.00 F3000 ;move table down
G1 X10.0 Y10.0 Z0.25
; Prime the nozzle
G92 E0
G1 X100.0 E22 F400
G1 Z5.00 F3000
M900 K0 ;Set linear advance K factor
G92 E0
extrudes 100 mm line and adjust E value to suit.
I have an IDEX printer, and it has brushes on both sides. So I just put an extruder gcode in the start up and let it purge off the side of the printer and then the brush cleans ir on the way to the print bed. It saves so much filament and no brims needed. I only use a brim on something very tall and skinny to give it better adhesion. I wish more printers worked like that. I used to use lines on the front for the other printers
thanks! very helpful video!😄
The purge line is the first opportunity to adjust the nozzle height by baby-stepping, so for that it can help to make the line a little longer and/or slower.
300*300 square 1 line skirt takes 30s and 35mm of filament. It cleans your nozzle in 4 directions, you see your bed leveling while printing it and if your extralarge print will fit your bed.
Set skirt to:
1 line
2mm away (if you like 215mm pieces on a 220mm bed)
10mm min extruded( seems yours extrude 9mm). All under 45mm radius will take 2 loops to reach 10mm extruded filament.
Just as I wanted to do something like this myself, thanks!
I just made this change on my x1c. Getting ready to try my first print with it but if it even makes the line easier to remove it'll be worth it.
I kept meaning to do something like this. I wanted an up, right, down three sided rectangle a few mm from the bottom left corner of the print to maximize the ability to leave an nozzle drool bugger or blob in the purge line and not have it fall into the print. I want the purge line to be easy to remove and discard. Thanks!
I decided to make the prime line change position as needed based on the first layer size and location. This goes through the 4 sides and uses the first one it finds as valid in this order:
left vertical line
front horizontal line
right vertical line
back horizontal line
if the print is within 10 of all 4 sides it doesn't do a prime line
;prime line
G92 E0.0 ; reset extruder
{if first_layer_print_min[0] - 10 > print_bed_min[0]} ; check left valid
G1 X{first_layer_print_min[0] - 10} Y{first_layer_print_min[1]} Z0.8 F6000.0 ; position 10mm left of print
G1 X{first_layer_print_min[0] - 10} Y{first_layer_print_min[1]+30} E30 F360.0 ; extrude 30mm of filament in the y direction
G92 E0.0 ; reset extruder
G1 E-0.5 F2100 ; small retraction
G1 Y{first_layer_print_min[1]+40} F6000.0 ; move an additional 10mm without extruding
G92 E0.0 ; reset extruder
{elsif first_layer_print_min[1] - 10 > print_bed_min[1]} ; check front valid
G1 X{first_layer_print_min[0]} Y{first_layer_print_min[1]-10} Z0.8 F6000.0 ; position 10mm front of print
G1 X{first_layer_print_min[0]+30} Y{first_layer_print_min[1]-10} E30 F360.0 ; extrude 30mm of filament in the x direction
G92 E0.0 ; reset extruder
G1 E-0.5 F2100 ; small retraction
G1 X{first_layer_print_min[0]+40} F6000.0 ; move an additional 10mm without extruding
G92 E0.0 ; reset extruder
{elsif first_layer_print_max[0] + 10 < print_bed_max[0]} ; check right valid
G1 X{first_layer_print_max[0] + 10} Y{first_layer_print_min[1]} Z0.8 F6000.0 ; position 10mm right of print
G1 X{first_layer_print_max[0] + 10} Y{first_layer_print_min[1]+30} E30 F360.0 ; extrude 30mm of filament in the y direction
G92 E0.0 ; reset extruder
G1 E-0.5 F2100 ; small retraction
G1 Y{first_layer_print_min[1]+40} F6000.0 ; move an additional 10mm without extruding
G92 E0.0 ; reset extruder
{elsif first_layer_print_max[1] + 10 < print_bed_max[1]} ; check back valid
G1 X{first_layer_print_min[0]} Y{first_layer_print_max[1]+10} Z0.8 F6000.0 ; position 10mm back of print
G1 X{first_layer_print_min[0]+30} Y{first_layer_print_max[1]+10} E30 F360.0 ; extrude 30mm of filament in the x direction
G92 E0.0 ; reset extruder
G1 E-0.5 F2100 ; small retraction
G1 X{first_layer_print_min[1]+40} F6000.0 ; move an additional 10mm without extruding
G92 E0.0 ; reset extruder
{endif}
oh that's radical, thank you a lot. i hate these things, long purge lines and skirts. always a pain to collect them
Great video! Love your content bro!
I made it slightly touching the model, just 0.3mm distance. When I release the model from the build plate, purge line is attached to the model with a tiny bit, which could be snapped off easily. I won't forget to remove purge line then.
I believe there’s an option for max length for a skirt. That would also be a viable solution. I do something to 2:44 for my ender 3.
There is a similar thing on the FlashForge slicer where you can set the length of the skirt. It means on big prints its not doing a massive skirt round the whole print
I use OrcaSlicer. There is a MINIMUM length for the skirt, if it's not at least that long it adds another loop. But I cannot find any maximum length where it stops if it gets too long. So I'm hoping that this "adaptive purge line" thing can help simulate that.
I must be missing something but doesn’t a skirt essentially do the same thing since is just outside the 3D Print?
I will stick with a skirt, as it's also a good way to check/dial in the first layer if you need to without affecting the actual printed object.
💯
Skirt length and total extrusion depends on first layer perimeter. Might be more personal preference than actual printing issue what to use 😉
(I'm running both long traditional 2-way purge _and_ 2 skirt lines - 1 seems too easy to get loose and interfere - and don't feel like I'm wasting too much time or filament 😅)
Skirts are obnoxiously big and flimsy and hard to take off the bed. Also as other comments have said they aren't always the same size, so if you only do one loop it might not be enough, and if your print is big it might be way too much.
@@lucaspeltie how are they any harder to take off than other prime lines? You can change the number skirt lines with a single click in the slicer.
Very useful, thanks 😊
In my experience with prime lines, 30mm isn't enough, at least on my v0 where I sometimes have to increase the amount of skirt or the nozzle isn't primed enough.
I've heard you mention KAMP before and had no idea what that was and I always thought I was mis-hearing you and thought you were saying CAM.
Thank you!
Just made this change to my "base" profile for my Bambu P1S. Mostly love it, one thing I dislike is the shorter purge blob is PEERFECTLY sized to flick off and send itself straight down the opening for the rear Z-screw. If you planned this, you're diabolical... :D
-----
Just discovered a issue with this change, if the print is "huge" you need to add a conditional to not have the head try and move beyond the limits of the print area.... I just tore off the front of my P1S because it (stupidly) tried to move blindly outside the total area... 😢
something like:
{if (first_layer_print_min[0]-10 > print_bed_min[0]) && (first_layer_print_min[1]+50 < print_bed_max[1])}
then... use TT purge
{else} use the default purge logic
I really like this idea - I do wonder how supports would be handled, though... I suppose as long as you account for that with the placement/distance of the new purge...
@10:40 Maybe this only works in OrcaSlicer, but would it be better to set the retraction line to use machine settings? something like...: G1 E-{retraction_length[0]} F{retraction_speed[0]*60}
I was having trouble with molten plastic remaining on the _side_ of the nozzle in between prints. I modified my purge line to back up after purging, lower 0.04mm, then draw a triangle through the purge line. It knocks the plastic off the nozzle side like those little silicone boot scrapers.
Super idea!
Go Team Solidoodle!!!
Merci beaucoup pour cette vidéo 👍
Nice, good stuff.
i have a ender 3 and a flashforge at work I'll have to do this on.
Donuts are cool too:
G1 E35 F300 ; Extrude 25mm of filament at 300mm/min
G4 P1000 ; Dwell for 1000ms (1 second)
G1 E-0.200 Z5 F600 ; Retract 0.2mm and raise Z by 5mm at 600mm/min
going to use this thank you> :)
This is a bit like the pre-extrusion setting in Flashprint slicer. It's like a skirt but you can specify the length between 50mm and 200mm and the offset distance so it doesn't do a full loop around of your print. It doesn't do a traditional purge line unless you add it to the start gcode.
Ooooh, was your second ever video with a Solidoodle Printer? 🤩
Is that a clear A1 mini? How?
I think they were given out to 3D printing influencers before the machine was released.
@TeachingTech the line at 9:50 is because the purge for pause is also showing up, I think, and I am unsure if you can just replace the purge line with the adaptive purge twice, for the initial and on pause one,
with that in mind does it purge properly after a pause? or does it collide?
I followed the directions for my A1 mini using orca slicer. It does, however, do the initial purge line like what happened to you in the first round. I deleted the same portion (extrusion cali line). What could be the issue? Is there another portion of the start g code I should be deleting?
Adaptive meshing is available in Klipper itself, you no longer need KAMP for it. I don't really find the purge line of KAMP that great. It purges quite a lot and I often had PETG from that purge sticking to the nozzle and because of the short distance to the print drawing an annoying and relatively thick string connecting it with the part. I actually went back to a purge line at the front of the bed, first extruding a blob in the air then moving the nozzle down and right laying that blob on the edge of the bed and attaching it due to some more extrusion on that bed edge, finally quickly moving away further to the riht with tiny retract and then quickly moving to the actual print.
The other day I was trying to figure out how to remove the purge line because I was proton on a t-shirt amber didn't want the line on the shirt. I ended up putting down a piece of tape where the line will be so I could just remove the tape later.
I've been using this for a while... only problem I've discovered is that the purge line will intersect the brim if your using a large brim.... not sure how to fix it but its been great
You can adjust the purge distance from object.
@@0Gotland4Ever0 how?? I actually like the idea of removing KAMP and just using Orca
Super! Is it also possoble to have adaptive mesh bed lvl on the bambu printers aswell?
Does the code need to check if the purge coordinates are off the bed? I know with KAMP that it sends a message to the console if you need to remove the purge line before printing.
your slicer will give you an area about a toolpath outside the print area
The purge line has never really bothered me, I keep my bed leveled to ~0.2 maximum offset across and that's always worked well. What bothers me more is that when it homes it always touches the bed at 0,0 and that leaves a small divot plus there's always a little blob of filament there before it starts printing if I don't push it off once it's ready to go.
The only problem is now the purge line is off the plate of the model is too close to the edge. We'll need to fiddle with the start g-code each time, or figure out some way of deciding on different purge lines depending on where the model is or how big it is. Nice version, though. Definitely food for thought. Maybe a horizontal or vertical purge line just at the edge of the object, or the -1 if the model is too far forward.
Very cool. Is it possible to mimic the other feature of camp to have the printer only probe the print area? I get frustrated at how long my ender 3 takes to probe the whole bed
G29 in Marlin can take left/right/top/bottom arguments. It wouldn't be as smart but you could get close. Klipper had adaptive probing natively now.
The issue I had with such fat purge line very close to the print is that it can obstruct the way of the BL-touch sensor making print head jump every time probe bumps into purge line.
Just be cautious about your configuration and put purge line further away from the print.
Hi. Nice work.
Is there a way to make sure the purge stay within le limit of the bed area. I had a out of range error cause the purge was trying to do it outside the print area with a bed full of parts to print.
Such thick purge line is taller than first layer. Fan ducts may collide with it.
There's more clearance than 0.8mm on fan ducts
I think your trying to hard to find something to comment about - fans are not that low.
What if my print is so large or positioned so close to the edge of the bed that there is no place 10 or 20mm to the side?
What if I have multiple objects being sliced? Since its in the start g code it will do the purge line only once, right before starting the print of the first object, right?
Your slicer will throw up an error about a toolpath outside the print area. Yes, it will only do one purge even if you have multiple objects on the build plate. Also only one purge line when you have "complete individual objects" turned on.
Not sure if everyone knows this.. Prusa mk4 does actually measure the bed level on two points where it purges before the print. I was wondering how it will work in back to back prints and was relieved to see it just measures the existing purge height and adds another layer there
Remember to offset yiour variable_purge_margin by at least the probe offset. But probably do 2x that just in case. Or do that + 5mm.
Because the probe will scrape over the line if you don't since the purge line is much higher than your first layer.
You mentioned the XL. How would you apply this to the 5H XL?
Question: what would happen if you made a print that take up the whole square build plate? What I mean is, on my A1 Mini, the build plate has that bit sticking out at the front where the default purge line normally goes that isn’t really part of the print surface. For max-size prints, is there a way to dynamically swap between the adaptive and default purge line?
my 3d printer came with a slightly modified version of KAMP adaptive purge that CAN be seen in the slicer
You can see that the nozzle travels after purging still pretty long distance all over the model. Can you automatically put the purge line to the initial starting point of the first layer?
feels like using a skirt with "min extrusion length" set to a proper value would achieve the same result
idk tried on ender 3 using marlin and orca slicer couldn't get it to work :(