Change Filament at specific layer?

I have a P1S (converted P1P) without AMS and initiated the filament change feature at two points during the print. Assuming it was going to work I waited to see if I would get a notification or something telling me to change filament. Came back after 30 minutes and it was just printing along as if I didn’t have that request.

Am I missing something or does this not work?


1 Like

Change filament does not work without AMS.
You can put a pause at the layer when you want to change. Then change the filament and play/resume.

1 Like

Thank you, I tried out the pause command and it worked. The only issue is because there was no purge tower it took some filament it was trying to purge and attached it to the print :man_facepalming:t4: is there a way to bring back the purge tower it was creating for the filament changes? Maybe that would help instead of dragging purged filament to the print.

If you use the normal load and unload filament commands during the pause it will do normal purging and there is no need for a purge tower.

1 Like

I used normal load and unload and each time it dragged a small piece of filament to the print sadly after the wipe. Which is weird because that doesn’t happen at the beginning of any of my prints, but it did on the filament changes. lol oh well another reason I need to get an AMS. :grin:

I just did the same exact thing… added filament changes assuming that it would pause and without AMS it didn’t do anything…

Since it knows if you have an AMS or not… maybe they could make it automatically convert to a pause at filament changes without an AMS??

Oh, if you want the purge tower also, for now, just add a filament change somewhere knowing it won’t do anything except create the purge tower without the AMS

1 Like

but it DOES do something!!
filament changes will swap the filament profiles properly (extrusion temp, flow rate, etc)

i swear to baby zeus i added a feature request topic some weeks back asking for a non-AMS multimaterial workflow. something like the ‘pause’ or ‘change filament’ features currently available, but more complete so we could ‘pause AND change filament’. would be great if it could automatically unload/load too, but that’s icing on the cake.

that feature request topic is missing though - was it silently moderated away or something? i’m sure i posted it, but i can’t find it.

similar issue posted in github (but still can’t find my post darnit!): Modify Bambu Studio for easier manual filament color change · Issue #2778 · bambulab/BambuStudio (github.com)

4 Likes

Did you ever end up finding a solution to this? I’m having the same issue. I’m printing with TPU so AMS isnt an option and the filament dragging is a bit of an issue

1 Like

It really is unbelievable they haven’t added the ability to do filament changes without an AMS. That should have been there day one. Totally feels like they’re trying to force you into buying an AMS. I have multiple AMS units and multiple printers, but maybe I want to use just one without an AMS.

3 Likes

I don’t know if this method (from this post) works on a P1x, but it does with my non-AMS X1:
First, slice the model. Then, on the right-hand side of the screen when viewing the sliced model, there is a slider that you can slide down and watch the layers of the print disappear. Once you get down to the layer immediately preceding the filament change, you right-click on the + of the slider and say “Add Pause” then you re-slice and send to the printer. (I imagine if you have multiple changes, you can add multiple pauses, but I have not tested).

I found that after pausing, the X1C screen would not let me do anything but resume the print, but I could use the Device tab controls in Studio to manually unload/load the filament.

I also found that I occasionally had a small layer shift after changing filament, which was cured by inserting this g-code at the correct layer, instead of the pause.

M400 U1 ;pause
G28 X ;home

There have been multiple upgrades to Studio and firmware since I did last did this, so I’m not sure if the g-code is still necessary

Having same issue just identifying the layer and adding a pause for each layer is my main issue. Is there a way in the slicer to see a large difference visually between layers to identify colour swaps. I seem to get colours mixed up on multi coloured prints. Light box’s have about 2 or three layers of print on the first few layers. So when you’re trying to print a 3 layer hight 3 colour you have 9 changes to get 3 layers on each colour. Tricky to get them all and in right order. That’s not real clear. You would think it would be same order as first 3 and repeat. But I’m not positive on that. Any ideas?

I know its not using the pause and change filament feature you are trying to use, but honestly just using the paint tool and painting by layers has been really easy for me, and I have the ams. I can’t figure out how to add a pause AND a change filament command. Seem to be able to only add one at the layers I want. So I resorted to painting and it works great

There is a dude (eukatree) on Reddit who wrote a custom G Code for filament change without AMS.
Slice your print and then add the custom G Code at the layer you want to switch the filament.
Here the code:

;===== machine: X1 =========================
;===== date: 20230425 =====================
;===== CaesarDGreat Fork of Custom gcode by EukaDesign =====================
;===== change filament gcode (without AMS) =================

{if toolchange_count > 1}
M204 S9000 ; set starting acceleration
G17 ; set workspace to XY plane
G2 Z{max_layer_z + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift
G1 Z{max_layer_z + 3.0} F1200 ; vertical lift

; lower nozzle temp to prevent oozing
M104 S100

; turn off fans P1 and P2
M106 P1 S0
M106 P2 S0

; move to poop chute
G1 X70 F21000
G1 Y245
G1 Y265 F3000
M400

; wipe
G1 X70 F5000
G1 X90 F3000
G1 Y255 F4000
G1 X100 F5000
G1 Y265 F5000
G1 X70 F10000
G1 X100 F5000
G1 X70 F10000
G1 X100 F5000
G1 X70 F10000

; move to position to prep for cutting filament
G1 X20 Y50 F21000
G1 Y-3

; cut filament
G1 X5 F300
G1 X20 F12000

; move to poop chute
G1 Y210 F21000
G1 X70 Y235 F12000
G1 Y265 F3000
M104 S200 ; preheat nozzle to minimize wait time
M400

; retract out
G1 E-10 F200
G1 E-20 F5000

; pause for user to load and press resume
M400 U1

; close chute to roll purged filament
G1 X70 Y235 F12000
G1 Y265 F3000

; set and wait for nozzle temp for flushing
M109 S[nozzle_temperature_range_high]

; don’t know when next_extruder is >=255, so this may always activate?
{if next_extruder < 255}
M400

G92 E0
{if flush_length_1 > 1}
; FLUSH_START
{if flush_length_1 > 23.7}
G1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part
G1 E{(flush_length_1 - 23.7) * 0.02} F50
G1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}
G1 E{(flush_length_1 - 23.7) * 0.02} F50
G1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}
G1 E{(flush_length_1 - 23.7) * 0.02} F50
G1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}
G1 E{(flush_length_1 - 23.7) * 0.02} F50
G1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}
{else}
G1 E{flush_length_1} F{old_filament_e_feedrate}
{endif}
; FLUSH_END
G1 E-[old_retract_length_toolchange] F1800
G1 E[old_retract_length_toolchange] F300
{endif}

{if flush_length_2 > 1}
; FLUSH_START
G1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}
G1 E{flush_length_2 * 0.02} F50
G1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}
G1 E{flush_length_2 * 0.02} F50
G1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}
G1 E{flush_length_2 * 0.02} F50
G1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}
G1 E{flush_length_2 * 0.02} F50
G1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}
G1 E{flush_length_2 * 0.02} F50
; FLUSH_END
G1 E-[new_retract_length_toolchange] F1800
G1 E[new_retract_length_toolchange] F300
{endif}

{if flush_length_3 > 1}
; FLUSH_START
G1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}
G1 E{flush_length_3 * 0.02} F50
G1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}
G1 E{flush_length_3 * 0.02} F50
G1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}
G1 E{flush_length_3 * 0.02} F50
G1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}
G1 E{flush_length_3 * 0.02} F50
G1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}
G1 E{flush_length_3 * 0.02} F50
; FLUSH_END
G1 E-[new_retract_length_toolchange] F1800
G1 E[new_retract_length_toolchange] F300
{endif}

{if flush_length_4 > 1}
; FLUSH_START
G1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}
G1 E{flush_length_4 * 0.02} F50
G1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}
G1 E{flush_length_4 * 0.02} F50
G1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}
G1 E{flush_length_4 * 0.02} F50
G1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}
G1 E{flush_length_4 * 0.02} F50
G1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}
G1 E{flush_length_4 * 0.02} F50
; FLUSH_END
{endif}
; FLUSH_START
M400
M109 S[new_filament_temp]
G1 E2 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature
; FLUSH_END
M400
G92 E0
G1 E-[new_retract_length_toolchange] F1800
M106 P1 S255
M400
G1 X80 F15000
G1 X60 F15000
G1 X80 F15000
G1 X60 F15000; shake to put down garbage

G1 X70 F5000
G1 X90 F3000
G1 Y255 F4000
G1 X100 F5000
G1 Y265 F5000
G1 X70 F10000
G1 X100 F5000
G1 X70 F10000
G1 X100 F5000
G1 X165 F15000; wipe and shake
G1 Y256 ; move Y to aside, prevent collision
M400
G1 Z[z_after_toolchange] F3000
{if layer_z <= (initial_layer_print_height + 0.001)}
M204 S[initial_layer_acceleration]
{else}
M204 S[default_acceleration]
{endif}
{else}
G1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000
{endif}

{endif}

; as there is no AMS, these next three lines only serve to hide T[next_extruder]
; if this was not included, the T[next_extruder] command is input after this
; code and will cause the system to hang as the toolchange command searches
; for the AMS
M620 S[next_extruder]A
T[next_extruder]
M621 S[next_extruder]A

I hope this helps :slightly_smiling_face:

2 Likes

I have a solution for this. A simple and straightforward for external spool filament change.

  1. Hit slicer button will take you to Preview tab
  2. There is slider on right side, move up layer slider to layer you want to change filament
  3. Right click on that (+) slider will bring up menu; you will see “Change Filament”

Bambu Studio will generate G-code that parks extruder, eject filament, cools down then prompt you to change filament and hit continue. It’ll heat up and purge then the usual business.

On a small note: this procedure above is meant for same type of filament but different colour.

Update: Change filament feature is currently broken. I tested it a few hours ago. Printer didn’t stop at specific layer. It kept continue. So temporarily workaround is to do the same steps above, instead of “Change Filament”, choose “Pause”. Once it’s paused, click Unload then change spool then click load.

I wonder if it’s a bug in Bambu Studio or the firmware in the printer. Does anyone know?

Also before you hit Load, you get option to tell printer what filament it is… I guess that’s one advantage on Pause feature. It changes temperature (and maybe flow rate?)