16.04.2026 09:53
7

Resuming a print after a power cut

That’s what happened to me the other day. Power was out for several hours, the printer has no resume-print feature, and I hadn’t set one up in Klipper from the start.

0

If the part hasn’t peeled off the bed — you’re halfway there.

What do you need to resume printing?

  1. Restore print settings (temperatures, accelerations, and so on)
  2. Tell the printer the current nozzle coordinates, bypassing the usual routine
  3. Start printing from where it stopped.

Sounds simple, but in practice there are nuances and gotchas. We’ll walk through it with Klipper as the example, but except for one step this applies to any printer.

What to do?

Let’s start from the very beginning — you find the printer stopped mid-print. Next:

  1. Heat the bed and hotend so the part doesn’t detach and the nozzle can unstick from the model

  2. If motors are on, disable them and manually move the hotend away from the model toward home (do not change the Z axis!)

  3. Remove any plastic blob from the nozzle if one formed while idle

  4. Figure out which layer (ideally which exact spot in the gcode) the stop happened — that’s fairly easy in the slicer.

    Compare the printed part to specific layers in the slicer (move the right-hand layer slider in OrcaSlicer).

    1

    2

  5. Manually trim the gcode file you sent to print to the line you need.

First you need to find the exact line in the gcode file — you can nudge the bottom slider and turn on gcode display:

3

For me that was line 6053187. For huge text files I recommend Sublime Text — it handles them well without freezing the machine. Then you edit the gcode, but not blindly.

  • Keep at the start of the file everything related to print setup (bed and nozzle temps, coordinate mode, accelerations, various coefficients). From the start gcode, strip anything that changes coordinates — homing moves, purge/prime lines, whatever else you have.

Here’s my start gcode with the lines I removed marked:

; EXECUTABLE_BLOCK_START
M73 P0 R3318
M201 X5000 Y5000 Z50 E5000
M203 X250 Y250 Z30 E50
M204 P5000 R5000 T5000
M205 X3.00 Y3.00 Z1.00 E1.00 ; sets the jerk limits, mm/sec

;TYPE:Custom
M107 ; Turn off the fan
G21  ; set units to millimeters
G90  ; use absolute coordinates
M83  ; use relative distances for extrusion

G28   ;home           --delete--
G29   ;bed leveling   --delete--

M104 S210      ; set extruder temp
M140 S60       ; set bed temp
M109 S210      ; wait for extruder temp
M190 S60       ; wait for bed temp

G0 Z2.0 F600     ;  --delete--
G0 X50 Y10 F12000;  --delete--

G92 E0.0              ; reset extruder distance position --delete--
G0 Z0.4 F600          ;                                  --delete--
G1 X100.0 E10 F3000.0 ; intro line                       --delete--
G92 E0.0              ; reset extruder distance position --delete-- 
G1 X200.0 E15 F3000.0 ; intro line                       --delete--
G92 E0.0              ; reset extruder distance position --delete--
G0 Z0.8 F600          ;                                  --delete--
G1 X100.0 E15 F3000.0 ; intro line                       --delete--

G1 Z0.4 F600     ;Wipe  --delete--
G0 Y12 F6000    ;Wipe   --delete--
G1 X100 F6000    ;Wipe  --delete--
G0 Y8 F12000   ;Wipe    --delete--
G1 X200 F6000    ;Wipe  --delete--
G1 X190 Y12 F6000 ;Wipe --delete--
G1 X180 Y8 F6000 ;Wipe --delete--
G1 X170 Y12 F6000 ;Wipe --delete--
G1 X160 Y8 F6000 ;Wipe --delete--
G1 X150 Y12 F6000 ;Wipe --delete--

;G0 Z2.0 F600;
G92 E0.0 ; reset extruder distance position

SET_VELOCITY_LIMIT ACCEL_TO_DECEL=10000
G90
G21
M83 ; use relative distances for extrusion
; filament start gcode
M900 K0.04; Override pressure advance value
M106 S0
;LAYER_CHANGE
;Z:0.2
;HEIGHT:0.2
;BEFORE_LAYER_CHANGE
;0.2
G92 E0

;AFTER_LAYER_CHANGE
;0.2
;_SET_FAN_SPEED_CHANGING_LAYER
M204 S3000
; printing object repaired-new.stl id:0 copy 0

Anything starting with ; is a comment and doesn’t affect printing. Then paste all gcode from the line you picked. Preferably start a bit above, from the Z positioning command and the extruder command — mine looked like this:

G92 E0
G1 E.5
;TYPE:Outer wall
G1 F5280
G1 X66.366 Y33.417 E.00339
G1 X65.82 Y33.812 E.01299

G92 resets the extruder coordinate to 0 (relative extrusion is in use).

G1 — the actual moves for X, Y, Z, E.

Save the text file, upload it to the printer, but don’t start yet.

  1. Home only X and Y. If your Z zero is nozzle-at-bed — don’t home Z on the bed! Exception: if “home” is the nozzle all the way up (or the bed all the way down), or you’re absolutely sure homing won’t crash the hotend into the model.

  2. If you can’t home Z like I couldn’t — there’s a way out. Set the Z coordinate without moving. In Klipper, enable that in the config (Configuration > printer.cfg):

[force_move]
enable_force_move: True

Restart Klipper so the change applies.

Set the height to where the printer actually is (you can check the height at the stop in the slicer).

SET_KINEMATIC_POSITION Z=36.08
  1. Set a low print speed (30%, for example)

  2. Start the trimmed file (we removed everything up to the stop, so no homing or purge should run).

  3. Watch that everything looks right — not printing in thin air, you guessed the layer and stop point correctly, and the model hasn’t shifted. If it’s all good — congrats, your long print is saved!

If you can’t continue from the same spot on the model (peeled off the bed, etc.) — don’t despair. You can cut the bottom of the model to where you need it, reprint just the top separately, then glue it on. It might even come out neat.

Mine continued without issues; the seam isn’t visible unless you stare really close, and it’s easy to mistake for ordinary layer lines on the part.

4

Tags: 3d-print Fdm
More exclusive content and real-time updates in my Telegram channel

No comments yet

Latest articles