Extruder Spins Too Fast After Manual Mid-Print Filament Change

Hi everyone,

I’m new to 3D printing (first printer last week) and could really use some help troubleshooting a filament change issue.

I’m using:

Printer: Elegoo Neptune 3 Pro
Slicer: OrcaSlicer 2.3.0
Firmware: Stock (Marlin-based)
Interface: OctoPrint (not printing from SD card)


Problem:

When I perform a manual mid-print filament change, the printer pauses correctly and allows me to swap filament. However, after resuming, the extruder spins much faster than normal and barely extrudes any filament. It looks like it’s trying to push too much material at once, and the layers after the change end up under-extruded or inconsistent.


Background / What I’ve Tried:

I came across this earlier thread that describes the same issue:
:point_right: Pause/Resume Script Not Extruding After Resume

Following advice from that discussion (especially from @b-morgan and @jneilliii), I adapted their suggestions since OrcaSlicer 2.3.0 only provides a single “Pause G-Code” box — not separate pause and resume fields. Based on that limitation, ChatGPT helped me merge both sequences into one combined script for use in OctoPrint:

; --- Combined Pause + Resume Script for OrcaSlicer 2.3.0 ---
; keeps extruder in relative mode so filament resumes correctly

{% if pause_position.x is not none %}
; --- Pause sequence ---
G91 ; relative positioning
G1 Z+5 E-5 F1800 ; retract 5mm, lift nozzle
G90 ; back to absolute XY
M83 ; relative E
G1 X0 Y0 F3000 ; move to safe position

M117 Filament Change ; message on screen
M0 ; pause and wait for user
; user changes filament manually here

; --- Resume sequence ---
M83 ; relative E
G1 E5 F1800 ; prime nozzle
G92 E{{ pause_position.e }} ; restore E position
G1 X{{ pause_position.x }} Y{{ pause_position.y }} Z{{ pause_position.z }} F1800 ; return to print
{% endif %}

This script worked perfectly for short prints (like test pieces or small dog tags), but on the first longer job (e.g., a 3-hour print with a color change near the end), the problem returns — no grinding noise, just visibly incorrect extrusion speed and flow after the change. The extruder behaves unpredictably after resuming. I suspect this may be related to how OctoPrint or Marlin handles the M83 (relative extrusion) state or the pause_position.e variable after a long pause.

Is there a better way to structure a combined pause/resume script for use with OctoPrint and OrcaSlicer 2.3.0?
Should any of the M83 or G92 commands be moved, removed, or reordered?
How can I ensure the extruder stays in relative mode after a long manual pause?
Could this be a Marlin or OctoPrint behavior rather than a slicer issue?

Any suggestions or clarification would be greatly appreciated. I’m still new to all this, so detailed explanations are welcome!

Thanks so much for your time and help.
Jerome Slater

The extruder does, but the sliced code does not.

Are you sure the slicer is also set to relative extrusion?
Else at the end of the code scripts you have to use M82 or set the slicer to relative mode.

Thanks the help!

I double-checked and confirmed that OrcaSlicer already has “Use relative E distances” enabled, so the sliced G-code should be using M83.

Perhaps either OctoPrint or the firmware might be switching extrusion back to absolute during or after the pause? I’ll try adding a redundant M83 (and possibly a G92 E0) at the start of the resume section to force relative mode again.

Appreciate the guidance — I’ll test that setup and report back!

These settings your entering were specifically for inside OctoPrint's gcode script settings, not inside your slicer. In your slicer you just make sure to use the pause command @PAUSE instead of M600.

Thanks — I think understand now.
I’m using OrcaSlicer’s pause feature (@PAUSE) to insert the pause at the desired layer, and my OctoPrint pause/resume script (with M83, M400, Z lift, and priming) handles all the actions when the printer pauses. I don’t need to manually embed M0 or M600 in the slicer.

So the I removed the code I added in te slicer and added the following to Octoprint:

After Print Paused:
; --- After Pause ---
M83 ; ensure relative extrusion mode
G91 ; relative positioning for safe moves
G1 Z+5 E-5 F1800 ; lift nozzle 5mm and retract 5mm filament
G90 ; back to absolute XY
G1 X0 Y0 F3000 ; move to park position
M117 Filament Change ; display message on printer LCD
M0 ; pause until user resumes

Before Print Resumed:
; --- Before Resume ---
M83 ; re-confirm relative extrusion mode
G92 E0 ; reset extruder position
M400 ; wait for all queued moves to complete
G1 E5 F1800 ; prime nozzle
G92 E{{ pause_position.e }} ; restore pre-pause extruder position
G1 X{{ pause_position.x }} Y{{ pause_position.y }} Z{{ pause_position.z }} F1800 ; return to paused location
M117 Resuming Print... ; display message

Do I need to add anything in the Slicer Pause G-Code box, or will it automaticlly just add the @pause?

Sorry for all the questions, this has been a pretty steep learning curve lol, I had never even heard of "G-code" last week.

The correct slicer command is @pause.

To solve the "spins too fast" problem, add at the end of your Before Print Resumed:

; reset to feed rate before pause if available
{% if pause_position.f is not none %}G1 F{{ pause_position.f }}{% endif %}

If that doesn't fix it, then we will need to figure out what feed rate is required by examining the gcode. Slice something small, like a 5x5x5mm cube and change filament somewhere in the middle. Save the gcode file, verify that the problem exists, and upload it here (you may have to zip it first).

Another useful debugging tool is OctoPrint's serial.log. You can enable it, do the experiment, and upload it via a systeminfo bundle. Turn the serial log off afterwards.

Since you are new to gcode, here are a couple of references:
http://marlinfw.org/meta/gcode/
http://reprap.org/wiki/G-code

Thank you for the help, that seems to have solved my issue! I printed several small test pieces and here are the results.
ON the first print, the printer didn’t recognize @PAUSE — it just kept printing. I tried M600 with the same result, and got an error that M0 wasn’t recognized. I switched the slicer pause command to M25 and replaced M0 with M25 in the OctoPrint scripts. After that, the next two test prints worked — the printer paused, allowed a filament change, and resumed correctly.

When changing colors, I had some leftover filament at the start of the resumed layer, so I added:

G0 X0 Y5 Z0.28 F5000 ; move to front-left
G1 X200 E15 F1200 ; purge line

Thanks again for the help!

1 Like