I lost a 14-hour print to a layer shift last winter and spent the next two days convinced my mainboard was dying. It wasn’t. It was a single grub screw on the Y-axis pulley that had backed off about a millimeter, and the motor was happily spinning the pulley loose against the shaft every time the bed slung itself across the gantry at 8,000 mm/s². I had stared at that little brass screw a hundred times during normal maintenance and never thought to check whether it was actually doing its job. After I tightened it (against the flat of the shaft, the right way, which I’ll get to below), the printer ran for the next 400 hours without a single shift.
That’s how layer shifts go. They feel mechanical and electrical and software all at once, and the actual fix is almost always smaller than your panic. I’ve written this guide as the troubleshooting tree I wish I’d had that week. If you’re reading this with a half-failed print sitting on your bed and the top half offset two centimeters from the bottom, I want to get you to “fixed” in the shortest path possible, with no false fixes and no fabricated cause-of-the-week. We’ll cover what a layer shift actually is (and what it isn’t), the four categories of root cause, the OrcaSlicer settings that matter, the Klipper and Marlin and Bambu-specific differences, a cheap-first diagnostic workflow, and the common bad advice you’ll find on Reddit so you can stop chasing it.
If you’d rather start with general slicer troubleshooting before diving into this one specifically, our OrcaSlicer troubleshooting guide is the umbrella piece. This article is the deep dive for one specific failure mode.
Table of contents
- What a layer shift actually is
- What’s not a layer shift (VFAs, Z-banding, salmon skin, ghosting)
- Root cause categories
- Mechanical causes (start here)
- Electrical causes
- Slicer and firmware causes
- The print itself
- OrcaSlicer settings that matter
- Klipper-specific notes
- Marlin-specific notes
- Bambu Lab-specific notes
- The diagnostic workflow
- Common false fixes
- FAQ
What a layer shift actually is
A layer shift is a sudden, catastrophic offset of the upper portion of a print relative to the lower portion. You’ll see a clean step at one Z height where everything above is translated a few millimeters (sometimes a few centimeters) in X, or Y, or occasionally both. The shift is binary. There’s the layer where it happened, and every layer above continues from the new wrong position, because the firmware doesn’t know it lost track. Most consumer FDM printers don’t have closed-loop position feedback, so when a stepper skips, the controller keeps issuing G-code as if the carriage were still where it commanded it to be. The print continues, just two centimeters off.
That’s the key thing I want you to take away before we get into causes. A layer shift is a loss of synchronization between commanded position and actual position. Everything we’re going to discuss is either a reason the motor couldn’t deliver the commanded motion, or a reason something physically prevented the carriage from following.
The other thing worth understanding: by the time you can see a shift, the failure already happened. You can’t “tune” your way out of one in real time. You can only prevent the next one. And because the cause space is wide (belts, pulleys, drivers, current, acceleration, collisions, warping), the worst thing you can do is start by lowering acceleration and hoping. That’s the equivalent of taking a painkiller for a broken wrist. It might make the pain go away long enough to ignore the actual problem, until the problem gets worse.
What’s not a layer shift
I see this confusion constantly in forum threads. Users come in saying “I have a layer shift” and post a photo of subtle banding or a scale-pattern wall texture, and the entire thread spins for forty replies before someone gently points out they’re chasing the wrong problem. So before we go further, here’s the disambiguation table.
| What you see | What it actually is | Where it belongs |
|---|---|---|
| Clean horizontal step, entire top of model translated in X or Y | Layer shift (this article) | Keep reading |
| Subtle repeating vertical lines on flat walls, roughly 2 mm period | VFAs (vertical fine artifacts), caused by belt-tooth meshing or stepper resonance | See our VFA test guide |
| Horizontal banding throughout the print at regular Z intervals | Z-banding, usually leadscrew or Z-axis mechanical issue | Different topic, not a layer shift |
| Repeating wavy “fish-scale” pattern on perimeters | Salmon skin, stepper-driver microstepping artifact (classic DRV8825 issue) | Different topic, swap to TMC drivers |
| Echoes or ripples next to sharp corners that fade away | Ghosting / ringing, vibration after direction changes | See our input shaper guide |
| First few layers are scrunched, dragged, or missing material | First-layer issue, not a layer shift | See our first layer guide |
The fastest way to know you have an actual layer shift: look at the side of the print and see if you can identify a single Z height where the entire upper section is offset. If there’s a clean step, that’s a shift. If the texture is repeating or fading or distributed, it’s something else.
VFAs in particular get mislabeled as layer shifts on a daily basis. They’re typically 10 to 40 microns wide, appear at intervals of about 2 mm along the Z axis, and persist across the entire print. They look like a problem you should be able to solve, which is why people get worked up about them, but they’re a surface-finish issue rooted in resonance and tooth meshing, not a position-tracking failure. Z-banding sits in a similar bucket, just at the Z axis instead of XY. And salmon skin is a microstepping artifact that historically plagued DRV8825 boards and largely went away when builders moved to TMC2208/2209 drivers.
If any of those describe your problem better than what I’ve described above, close this tab. None of the fixes here will help you and most of them will make your print times worse for no reason.
Root cause categories
I find it useful to group the causes into four buckets, because the diagnostic path is different for each. Most prints that shift fall into the first or fourth category. The middle two are real but rarer in well-maintained machines.
| Category | Examples | Frequency (anecdotal) | First check |
|---|---|---|---|
| Mechanical | Belt tension wrong, pulley grub screw loose, loose idler, frame flex | Most common single bucket | Grub screws on the shifting axis |
| Electrical | Stepper driver thermal throttling, run_current too low or too high, sense_resistor wrong | Common on overclocked or fan-failed setups | Touch the driver after a long print |
| Slicer / firmware | Acceleration too high for hardware, jerk or Junction Deviation too aggressive, travel speed exceeds mechanical capability | Common after a user crank-up of “speed” | Reduce acceleration and reprint |
| Print-induced | Warped corner the nozzle hits, detached part on the bed, tall narrow geometry that vibrates | Very common, often overlooked | Look for a previously failed corner on the bed |
Important framing: I see this online all the time and it drives me up a wall. “Layer shifts are belt tension.” No they aren’t, not always. Belt tension is a frequent cause but it’s one of many, and if you spend a week obsessing over belt tension when your actual issue is a heat-throttled driver, you’ll be exactly where you started except now you’ve over-tensioned a belt and you’re going to wear out your idler bearings.
Treat the four categories as a search space, not a recipe. Diagnose first, then fix.
Mechanical causes
This is the heaviest section because it covers the majority of cases. I’ll walk through each one in roughly the order I’d check them on a printer that just shifted on me.
Belt tension too low
This is the classic first guess and it’s right often enough that it earned the reputation. When a belt is loose, the teeth don’t seat fully into the pulley grooves under load. The motor turns, the pulley turns, but the belt slips a tooth or two under high acceleration. The result is a position offset that the motor doesn’t know about. Every manufacturer documents this scenario (Prusa, Anycubic, Creality, Sovol, QIDI), and it shows up in essentially every layer-shift thread on every forum.
The simplest field test is what I call the guitar-string test. Pluck the belt midway between the two pulleys and listen. A correctly tensioned belt produces a low bass note, somewhere around a low E or A depending on belt length and printer. A loose belt produces a flap or a muffled thud. There are smartphone apps that read the frequency if you want a number to chase, but in practice the ear test gets you in the right zone.
Belt tension too high
This is the trap. Many users, having read that loose belts cause shifts, crank the tensioner all the way down. That introduces a new problem. An over-tight belt loads the motor shaft and bearings, increases friction on the pulleys and idler, and consumes torque that should be going into acceleration. The motor heats up, the driver heats up, and when the driver hits its thermal limit, it cuts current and the motor skips. Sovol’s documentation puts it neatly: “an overly loose belt will cause lost motion, while an overly tight one can strain the motor bearings and also lead to skipped steps.”
A correctly tensioned belt should sound musical when plucked, not metallic. If you can play a tune on it, it’s too tight.
Pulley grub screw loose on the motor shaft
This is the cause I started the article with, and it’s the single most common silent cause of layer shifts I’ve seen across the printers I maintain. The toothed pulley on the motor (usually a GT2-profile pulley) is held to the motor shaft by one or two tiny set screws, often called grub screws. The shaft has a flat machined into it, called a D-cut. The grub screw is supposed to bear directly against that flat.
What goes wrong is subtle. If the grub screw is tightened against the round part of the shaft instead of the flat, it still feels snug, but the slightest vibration over a few hundred hours of printing rotates the pulley a fraction of a degree, and now neither grub screw is on the flat. The motor shaft can slip inside the pulley under load. You get an intermittent layer shift that drives you insane because it’s not consistent. Sometimes the print finishes fine. Sometimes it shifts twenty layers in.
The fix procedure, from Prusa and Anycubic:
- Rotate the pulley until one grub screw is aligned with the flat (D-cut) on the motor shaft.
- Tighten that screw firmly against the flat. This is the load-bearing screw.
- Rotate the pulley a partial turn so the second grub screw (if there is one) is somewhere else around the shaft. Tighten it too.
- If you tighten the jam screw (the off-flat one) first, the screw that ends up on the flat won’t fully contact the shaft, and you’ve just installed a slow-motion failure.
I check grub screws on every printer in my shop every six months. It’s a five-minute job per axis and it has saved me more failed prints than any other single maintenance task.
Idler and tensioner issues
The far end of the belt (opposite the motor) usually runs over an idler pulley mounted to the frame, often with an adjustable tensioner. On many printers (Ender 3, Sovol SV06, some Bambu A1 variants) the tensioner is a thumbscrew that the user can spin. These can spin themselves loose during printing if they aren’t designed with a locking feature, or if the user assembled them without checking. A loose idler bracket also lets the belt walk side to side, which changes effective tension across the bed and produces inconsistent step loss.
Check the idler bracket for play. Wiggle it. If it moves, tighten the mounting hardware. If the tensioner thumbscrew has loosened, set tension by ear and check it after every long print for a week to confirm it’s stable.
Frame flex
On open-frame i3-style printers (anything with a moving bed, like a stock Ender 3), the entire frame can rack slightly under aggressive Y-axis acceleration. The bed assembly is heavy, and slinging it back and forth at 5,000+ mm/s² puts real lateral load on a frame that wasn’t necessarily designed for it. The result is that the bed assembly lags the motor briefly under high acceleration, and at the limit, the motor skips a step.
This is hard to fix without rebuilding the frame, but it’s also rare on stock acceleration profiles. If you’ve cranked the Y acceleration to 7,000 or above on a bed slinger and started getting shifts, this is probably your cause. Walk it back.
Print head crashing into the print
This is the single most common trigger of a mid-print shift, separate from the underlying mechanical question. If a corner of your print warps and lifts off the bed, the nozzle will hit it on the next pass at print speed or travel speed. The carriage stalls instantly. The motor tries to keep moving but can’t, and the driver either skips steps or throws an over-current condition and resets. Same thing happens with detached parts that get knocked into the print path.
Tall, narrow prints are also vulnerable. They accumulate side-to-side sway as they get tall, and eventually the nozzle catches an earlier layer at exactly the wrong angle and pushes the whole print sideways enough to cause a shift.
If you’re seeing repeat shifts on the same model, look at the print after the shift and see if there’s a damaged corner or a knocked-over part. If so, your real problem is adhesion or warping, not the motor. Our warping and lifting corners guide covers the upstream fix.
Electrical causes
Stepper driver thermal throttling
Modern TMC drivers (TMC2208 and TMC2209 are the common ones on hobbyist printers) include over-temperature protection. Per the Trinamic TMC2209 datasheet, the chip has a thermal warning threshold and a shutdown threshold (the shutdown point is in the neighborhood of 150 °C with automatic current reduction, but check the datasheet directly for your specific revision, because Trinamic has updated thresholds between silicon revs and I don’t want to put a number in your config that you didn’t verify).
When the driver hits its thermal limit mid-print, current drops and the motor instantly loses torque. The carriage stalls or slips. You get a layer shift exactly at the moment the driver overheated, often correlating with a particularly demanding stretch of the print (long high-speed travel, dense infill at high acceleration).
Diagnostic check: after a long-ish print, with the printer still warm, carefully touch the heatsinks on the stepper drivers (or the metal enclosure of the mainboard if it’s a sealed unit). They should feel warm. If they’re too hot to comfortably hold a finger on for a few seconds, you have a thermal issue. Common causes:
- Mainboard cooling fan failed or clogged with dust.
- Printer enclosure trapping heat.
- Driver current set too high for the motor (more on this below).
- No heatsink on the driver chip at all (some bargain mainboards skip them).
Motor current too low
If the run_current setting is below what your motor needs to deliver commanded acceleration, the motor simply doesn’t have enough torque and skips. This usually shows up immediately after a firmware reflash or a fresh Klipper install, where someone copied a config from a different printer.
Motor current too high
This is the counter-intuitive one. Cranking current sounds like a fix for “motor doesn’t have enough torque” but it isn’t, because high current heats the driver, and a hot driver throttles, and a throttled driver skips. I’ve watched users in Klipper Discourse threads walk current up step by step, each time getting fewer shifts in the short term, until they hit the thermal wall and got worse shifts than before. There’s a Goldilocks zone, and you find it by raising current incrementally and checking driver temperature, not by setting it as high as the chip allows.
Setting current in firmware
| Firmware | How to set current | Notes |
|---|---|---|
| Marlin | M906 X<mA> Y<mA> Z<mA> E<mA> |
Requires TMC drivers. Defaults baked into Configuration_adv.h as X_CURRENT, Y_CURRENT, etc. |
| Klipper | run_current: in [tmc2209 stepper_x] block of printer.cfg |
Klipper docs explicitly advise NOT setting hold_current, because it can introduce motor movement at rest. |
| A4988 / DRV8825 | Vref trimpot on the driver itself | Hardware-only adjustment, no G-code support. Measure Vref with a multimeter before adjusting. |
I’m not going to give you a specific milliamp value for your motor, because that depends on the motor’s rated current and your driver’s sense resistor configuration. As a rough guide, the Klipper community suggests running at roughly 70 to 80 percent of the motor’s rated peak current, computed as rated_peak / sqrt(2) × 0.8. For a 1.7 A rated motor, that lands around 0.96 A run_current. Start there, run a long print, check temperatures, adjust.
Klipper sense_resistor mis-configuration
If you copied a Klipper config from a printer with a different mainboard, the sense_resistor value in the TMC block might be wrong for your hardware. The driver scales its commanded current based on this resistor value, so a wrong value produces a wrong actual current. The Klipper Discourse thread “Layer shifts? TMC2209 – Klipper needs higher current than Marlin for Y-axis?” walks through a case where exactly this was happening, and the resolution involved fixing the sense_resistor to match the mainboard’s actual layout.
If your config came from a known-good source for your exact mainboard, you’re probably fine. If you assembled it yourself or copied from a vague guide, verify sense_resistor against your mainboard’s documentation.
Slicer and firmware causes
This is where OrcaSlicer itself can be the trigger, though I want to emphasize that the slicer rarely causes a layer shift in the strict sense. What the slicer can do is request motion profiles that exceed your printer’s mechanical and electrical capability. The firmware caps a lot of this, but not all of it, and a high acceleration value combined with a marginal mechanical setup is a recipe for trouble.
Default acceleration too high for hardware
Acceleration is the rate of change of velocity. High acceleration means the motor has to deliver torque quickly to ramp the carriage up to speed. If the belt-pulley-motor system can’t transmit that torque, something gives, usually a slipped belt tooth or a skipped motor step. Different parts of the print run at different acceleration values in OrcaSlicer, and you can tune them independently.
Jerk and Junction Deviation
Jerk (classic) and Junction Deviation (the newer Marlin 2 default) are both ways of describing how aggressively the printer changes direction at corners. Per the OrcaSlicer wiki, the relationship is approximately JD = 0.4 × (Jerk² / Accel), with typical Junction Deviation values in the range 0.0 to 0.3 mm and typical classic jerk values in the 1 to 20 mm/s range. Setting Junction Deviation to 0 in OrcaSlicer falls back to classic jerk handling on Marlin.
Aggressive cornering causes high instantaneous force at direction changes, exactly when the belt is most likely to slip. If your shifts happen on prints with lots of small corners (text, fine details, dense geometric patterns), corner-handling values are worth checking. Our cornering calibration guide walks through tuning these.
Travel speed and acceleration
Here’s a subtlety. Travel moves don’t extrude, so there’s no plastic friction damping the motion. The carriage is fully free to accelerate. If your travel acceleration is higher than your print acceleration (which is often the default), travel moves are where shifts tend to happen first. I’ve seen prints where the shift always happens on the same long travel near the start of a layer, and the fix was lowering travel acceleration alone.
Wrong steps_per_mm calibration
Less common but real. If your steps/mm value is wrong (more likely on a Marlin printer than on a Klipper-tuned one), the motor will systematically over- or under-travel commanded moves. This doesn’t usually produce a clean layer shift; it produces dimensional inaccuracy. But the Klipper Discourse archives include cases where wrong rotation_distance configuration caused repeated apparent shifts at the same Z height on a specific model, and the fix was a clean recalibration.
The print itself
This category sneaks past a lot of troubleshooters because it doesn’t look like a layer shift cause on paper. But in my experience, a sizeable fraction of “my printer keeps shifting” threads end with someone realizing the actual issue was a print that lifted, warped, or fell over, and the shift was the consequence, not the disease.
Common scenarios:
- Warped or lifted corner. ABS, ASA, and even PLA on a cold or dirty bed will sometimes lift at the corners as the print cools layer by layer. Once a corner sticks up high enough, the nozzle catches it on the next pass and the motor skips. Fix the adhesion, not the motor.
- Detached part on the bed. Same outcome, different cause. The print pops off the bed mid-job and the head collides with what’s left.
- Tall, narrow geometry. Slim towers, vase-mode prints, lithophanes on edge. These accumulate side-to-side wobble as Z grows. Eventually the nozzle clips a previous layer at the wrong angle and the shift happens.
- Cooling-induced shrinkage. Particularly with engineering filaments, cooling tension can pull the print’s geometry slightly inward, and if the print is borderline-adhered, the nozzle can catch on a contracted edge.
If your printer has been reliable for months and suddenly starts shifting on a new model, look at the model before you look at the printer. Tall thin spires? Bad adhesion on the geometry? Brim that won’t stick? Address the print before you adjust your hardware.
OrcaSlicer settings that matter
Here’s the OrcaSlicer-specific section, because that’s why you’re on this site. I’ll walk through the relevant fields, with the verbatim labels from the OrcaSlicer wiki, and tell you which ones to touch first if you’re trying to isolate a slicer-side cause.
Acceleration fields
These live under Process settings, Speed tab, in the Acceleration section. Verified field names from the OrcaSlicer wiki:
default_acceleration(Normal printing)outer_wall_accelerationinner_wall_accelerationbridge_accelerationsparse_infill_accelerationinternal_solid_infill_accelerationinitial_layer_accelerationinitial_layer_travel_accelerationtop_surface_accelerationtravel_accelerationaccel_to_decel_enableandaccel_to_decel_factor
Cornering fields
Process settings, Speed tab, Jerk XY section. OrcaSlicer supports both classic Jerk (Marlin classic / RepRap-style instantaneous direction change limit) and Junction Deviation (the Marlin 2 default). Setting Junction Deviation to 0 falls back to classic Jerk. The Maximum Junction Deviation value lives in Printer settings, Motion ability tab, not in Process settings.
Motion ability caps
Printer settings, Motion ability. These cap what any process can request:
machine_max_acceleration_extrudingmachine_max_acceleration_retractingmachine_max_acceleration_travel- Per-axis:
machine_max_acceleration_x,machine_max_acceleration_y,machine_max_acceleration_z,machine_max_acceleration_e - Per-axis feedrate:
machine_max_speed_x,machine_max_speed_y,machine_max_speed_z,machine_max_speed_e
This matters because if you set Outer wall acceleration to 5,000 in Process settings but your Motion ability cap is 2,000, the printer gets 2,000. The cap wins. This is a frequent source of “I lowered acceleration and nothing changed” confusion in the OrcaSlicer Discord.
My recommended isolation order
When I’m trying to figure out whether a shift is slicer-caused, I don’t start by blanket-reducing default_acceleration. That’s too coarse and it masks the underlying question. Instead, I drop fields in this order:
- Lower
outer_wall_accelerationfirst. It has the most direct effect on visible quality and the least effect on overall print time, so it’s the cheapest test. - If that doesn’t help, lower
inner_wall_accelerationandtravel_accelerationtogether. - If still shifting, lower the Motion ability caps. This is the floor; everything else is bounded by it.
- Only as a last resort, lower
default_acceleration. By the time I’m here I’m pretty sure it’s not a slicer issue.
And remember: the slicer is rarely the actual cause. It can mask a mechanical problem by reducing the load on the system, but the underlying belt or pulley issue is still there and will resurface the moment you walk values back up.
Klipper-specific notes
If you’re running Klipper (on a stock Klipper printer, on Mainsail/Fluidd over Raspberry Pi, on a printer flashed from Marlin, doesn’t matter), the relevant configuration sits in printer.cfg and a few include files.
max_accel and the diagnostic reset
In the [printer] section, max_accel is the hard cap on what any G-code can request. Slicer-side acceleration values are clamped to this number. The single most useful diagnostic when chasing a layer shift on Klipper is to drop max_accel to 1,500 (or even 1,000) temporarily and reprint the same file. If the shift goes away, your printer can’t sustain the higher number, and you have a mechanical or electrical headroom problem somewhere.
run_current tuning
The Klipper TMC drivers page (klipper3d.org/TMC_Drivers.html) has clear guidance on this:
- “Prefer higher current values as long as the stepper motor does not get too hot and the stepper motor driver does not report warnings or errors.”
- “It is okay for the stepper motor to feel warm, but it should not become so hot that it is painful to touch.”
- Don’t set
hold_current. The Klipper docs explicitly warn that doing so “may itself introduce motor movement,” which is the last thing you want when the printer is supposed to be at rest.
For a typical 1.7 A peak-rated NEMA 17, the math lands around 0.96 A run_current as a starting point. Adjust from there based on print results and driver temperature.
Why input shaper is not a layer-shift fix
This part is important because it’s misunderstood constantly in forum threads. Klipper’s input shaper is a feedforward vibration cancellation algorithm. It smooths the acceleration profile to reduce ringing and ghosting on the surface of the print. It does not fix mechanical slack. From the Klipper resonance compensation docs: “Loose bolts, worn bearings, or improper belt tension shift resonance frequencies and reduce print quality; regular mechanical maintenance ensures consistent input shaping performance.”
What that means in practice: if your shifts are caused by vibration-driven step loss at resonant frequencies, input shaper can reduce the peak forces and indirectly help. If your shifts are caused by a loose grub screw, input shaper does nothing. The mechanical health of the printer is upstream of the shaper. People who run shaper calibration on a printer with a slipping pulley and then declare themselves “fixed” are going to be confused two prints later when it shifts again.
Run shaper calibration after you’ve verified mechanical health, not before. Our input shaper guide covers the calibration workflow once you’re ready.
Bed mesh sanity
A wrong or stale bed mesh can cause first-layer drag or contact issues that cascade into a head crash later in the print. If your bed mesh hasn’t been refreshed in a while (or if the printer has been moved, or the bed surface changed), run BED_MESH_CALIBRATE before you start chasing motion-related causes.
Microsteps
TMC2209 supports interpolation, and most setups use 16 microsteps with interpolate: True in the TMC block. Don’t crank to 256 looking for precision. The mechanical resolution of the printer is already past the limit of what stepper accuracy can deliver, and higher microstep counts increase CPU load on the host without improving print quality. They don’t cause layer shifts directly, but they can stress the system enough on a marginal setup that other issues emerge.
Marlin-specific notes
If you’re on a Marlin firmware printer (Ender 3 family stock, many Sovol and Anycubic and Elegoo machines), the relevant settings live partly in Configuration_adv.h (compile-time) and partly in G-code (runtime).
The G-codes that matter
| G-code | Function | Example |
|---|---|---|
M201 |
Set max acceleration per axis (units²/s²) | M201 X1500 Y1500 Z100 E5000 |
M203 |
Set max feedrate per axis | M203 X300 Y300 Z10 E50 |
M204 |
Set starting acceleration (print / retract / travel) | M204 P1500 R3000 T2000 |
M906 |
Set TMC stepper motor current (mA) | M906 X800 Y800 Z700 E700 |
M906 only works with TMC drivers (TMC2208, TMC2209, TMC2130, TMC5160). For A4988 or DRV8825 drivers, current is set by the Vref trimpot on the driver board, with a multimeter and a small screwdriver. There’s no G-code path.
Configuration_adv.h defaults
Inside Configuration_adv.h you’ll find default current values: X_CURRENT, Y_CURRENT, Z_CURRENT, E0_CURRENT, all in milliamps. These are the values applied after a reflash, before any M906 command is sent. If your shifts started after a firmware update, check these against your previous values. A stock firmware download often defaults to conservative current values that may be lower than what you’d been running.
Historical firmware bugs worth knowing about
MarlinFirmware Issue #11577 documented layer shifts specifically with TMC2130 in bugfix-2.0.x branches, and fixes landed in later 2.0.x releases. Issue #26794 documented M906 timing bugs when commands came from SD card prints. Practical implication: if you’re on a Marlin build from before roughly 2.0.9 and you’ve got TMC drivers and you’re seeing shifts, firmware upgrade is on the list. Don’t fight a known and fixed bug on old firmware.
Bambu Lab-specific notes
Bambu’s X1C, X1E, X1 Carbon, P1P, P1S, P2S, A1, and A1 mini handle motion-system tuning in a way that’s substantially different from Klipper or Marlin printers. Most of the slicer-side acceleration discussion above just doesn’t apply, because the firmware caps things itself and runs auto-calibration on the user’s behalf.
Auto vibration compensation
All Bambu Lab printers run an automatic vibration calibration on warm-up or when manually triggered. The printer vibrates its motion system at multiple frequencies and measures the response with an onboard IMU/accelerometer. The X1C additionally validates first-layer behavior using its LiDAR sensor. The P1S and P2S use IMU-based vibration compensation without LiDAR. This is, in effect, automated input shaping, and it runs every time you start a print unless you’ve disabled it in Bambu Studio.
Belt tension on CoreXY Bambu machines
X1C, P1S, and P2S are CoreXY printers. Belt tension is set at the factory by the tensioner hardware and is validated by the printer’s own resonance test, which reports tension as a frequency or “N” value during input shaping calibration. Per the Bambu Lab wiki belt-tension page, manual adjustment is rarely needed but is documented if you do need to do it after a service event. The procedure is non-trivial; follow the wiki, don’t improvise.
A1 series Y belt
The A1 and A1 mini are bed-slinger printers with a moving Y-axis bed and a user-adjustable Y belt tensioner. Bambu has a dedicated A1 belt tensioning page on their wiki, and Y belt issues are a more common layer-shift cause on the A1 family than on the CoreXY machines, because the belt is user-serviceable and can drift over time.
Auto-recovery from step loss
This is the feature Bambu users mostly come here looking to understand. Per the Bambu Lab wiki and the canonical forum thread “What, exactly, is ‘Auto-recovery from step loss’?”: “After enabling this function, when the motor detects a position shift (lost step), the X-axis, Y-axis, and Z-axis are repositioned and return to the pre-shift position to continue executing the unfinished G-code.” The detection uses the onboard accelerometer/IMU and step counting. On the X1C, LiDAR fidelity makes the detection more robust.
The feature is real, it works, and I’ve seen it save prints in real time. It is not infallible. Forum threads include cases where users had auto-recovery enabled and still got shifts, usually because the underlying mechanical cause (warped print, dirty pulley, factory belt tension drift) was severe enough that the recovery couldn’t keep up. Treat it as a safety net, not a license to ignore mechanical maintenance.
Print-by-object as a workaround
One specific workaround documented in the “Layer shift on X1C” forum thread: switching the slicer from “by layer” to “by object” stopped recurring shifts on a particular print. The likely reason is that object-by-object printing reduces cross-bed travel moves, which cuts the opportunity for a high-acceleration travel to interact badly with another part on the bed. Worth trying if you’re stuck.
HMS codes
Bambu’s printers throw error codes called HMS codes. The relevant one for our purposes is HMS_0300-0F00-0001-0001, “Abnormal accelerometer data detected.” When this fires, it correlates with input-shaping calibration failure, which downstream can produce belt-tension warnings or layer shifts. If you’re seeing both this HMS code and shifts, the accelerometer or its data path is suspect. Per the Bambu wiki entry on this code, the resolution is usually a firmware reset and re-calibration; if it recurs, the IMU may have a hardware fault.
For more on dialing in OrcaSlicer profiles on Bambu hardware specifically, our Bambu X1C and P1S guide covers profile setup.
The diagnostic workflow
Here’s the cheap-first sequence I run when a printer shifts on me. Order matters. Don’t skip ahead.
| Step | What to check | Cost / time | What it rules in or out |
|---|---|---|---|
| 1 | Look at the shifted print. Is the offset in X only, Y only, or both? | 30 seconds | X-only: X-axis belt, pulley, or driver. Y-only: same on Y. Both: power, frame, or print collision. |
| 2 | Is there a warped, lifted, or detached part on the bed from before the shift? | 30 seconds | If yes, cause is almost certainly nozzle collision. Fix adhesion before anything else. |
| 3 | Check pulley grub screws on the motor of the shifting axis. Verify both are tight, with one bearing on the shaft flat. | 5 minutes | Resolves a huge fraction of cases. Cheapest single test. |
| 4 | Belt tension test. Pluck like a guitar string. | 30 seconds | Low bass note: correct. Floppy or muffled: too loose. High metallic ping: too tight. |
| 5 | Touch the stepper drivers after a representative test print. (Carefully.) | 15 minutes for the print, 10 seconds for the touch | Too hot to hold finger on: fan failing, current too high, or enclosure cooking the board. |
| 6 | Reduce slicer or firmware acceleration to 1,000 to 1,500 mm/s² and travel speed to 100 mm/s. Reprint same file. | One test print | If shifts stop, it’s a tuning headroom issue. If shifts continue, it’s deeper. |
| 7 | (Klipper) Run shaper calibration. (Bambu) Let auto vibration compensation run. | 5 to 15 minutes | Only helps if shifts are vibration-induced, not mechanical slack. |
| 8 | Run a short test print (Benchy or similar) to isolate. Don’t burn 12 hours diagnosing. | Under an hour | Confirms whether the fix held or you’re still chasing. |
Two principles behind this order. First, cheapest fixes go first because the cost of being wrong is low. Second, you’re trying to isolate which category the cause is in (mechanical, electrical, slicer, print-induced) before you start adjusting things, because adjusting things you don’t need to adjust just adds variables to your debugging.
I keep this checklist taped to the inside of my printer cabinet door, honestly. It saves me from going down rabbit holes.
Common false fixes
These are the bad pieces of advice that show up in nearly every Reddit thread about layer shifts. Most of them are partial truths that get over-applied. None of them are universal fixes.
“Just lower your acceleration.”
Only valid if acceleration was actually the cause. If a grub screw is loose, lowering acceleration just delays the next shift. Worse, it gives you false confidence that you’ve fixed something. You haven’t. You’ve changed the conditions under which the underlying problem manifests. The problem is still there. Diagnose first.
“Tighten the belts as much as possible.”
This is the trap I mentioned earlier. Over-tightening causes the opposite problem: bearing wear, driver heating from increased friction, and eventually thermal-throttle skipped steps. There’s a correct tension range and “as tight as you can crank it” is not in that range.
“Replace the stepper motor.”
Steppers very rarely fail in the way that produces a layer shift. The motor either works or it doesn’t, and “doesn’t” usually means burned-out coil and obvious physical signs. Skipped steps under load almost always trace back to driver current, belt slip, or pulley slip, not motor failure. Don’t waste $30 on a new motor before you’ve checked the cheap stuff.
“Crank up motor current.”
I covered this above but it bears repeating. More current means more heat in the driver. More heat means thermal throttling. Thermal throttling means skipped steps, which is exactly what you were trying to fix. There’s a sweet spot, find it incrementally, don’t go straight to max.
“Klipper input shaper will fix it.”
Input shaper smooths the acceleration profile to reduce vibration-induced artifacts on surfaces. It is not a position-tracking system. It cannot fix a slipping pulley, a loose belt, or a thermal-throttled driver. The Klipper documentation says this plainly. The internet’s collective wishful thinking has not made it less true.
“It’s a slicer bug, switch slicers.”
Slicer essentially never causes mid-print step loss. G-code that doesn’t exceed firmware limits behaves the same on any slicer. Switching from OrcaSlicer to PrusaSlicer or Cura will not fix a layer shift. If it appears to, you’ve changed your acceleration or speed defaults inadvertently and masked the underlying issue.
“Update the firmware.”
This one is occasionally correct, specifically for the historical Marlin TMC bugs I mentioned (Issue #11577 and similar). But “have you tried updating?” is not a diagnostic. If you’re on current firmware and shifting, the firmware isn’t the issue. Don’t flash a fresh build hoping it’ll fix things; you’re more likely to introduce a config regression.
“Just print slower.”
Same fundamental problem as “lower acceleration.” Yes, slow prints have lower acceleration profiles, lower travel speeds, and less mechanical stress, so they shift less. That doesn’t mean your printer is fixed. It means you’re operating in a regime that hides the problem. The moment you bump speed back up for a print where you care about time, the shift comes back.
If you take one thing from this section: don’t apply a fix until you know what the cause is. The temptation to throw four changes at the wall at once and hope is real, but it leaves you with no information about what actually worked, which means you can’t reliably fix the next occurrence.
FAQ
Why do layer shifts always seem to happen at the same Z height on a model?
Because that’s the layer where a specific stress condition gets hit: a particular geometry feature, a long travel, a region of dense infill, or a corner where prior layers have warped. The cause isn’t the Z height itself; it’s whatever happens at that point in the G-code. If you reslice the same model with different settings and the shift moves to a different Z height, you’ve confirmed it’s geometry-driven.
Can a layer shift happen on the very first layer?
Not really, by the strict definition. What you might see on layer one is the print not adhering correctly, or the entire object being placed off-center because of a homing issue. That’s a homing or adhesion problem, not a layer shift. A shift requires at least one layer below it to be in the right place.
I switched from a stock board to an SKR Mini E3 and now I’m getting shifts. Why?
New boards usually have different default current settings, different sense_resistor values, and different stepper drivers from your stock board. Your old M906 / Configuration_adv.h / printer.cfg current values probably don’t apply. Recheck driver type, sense resistor, and run_current or M906 settings against the new board’s documentation.
Does enclosing my printer cause layer shifts?
It can, indirectly. An enclosed printer runs hotter inside. If the mainboard sits inside the enclosure with marginal cooling, drivers thermal-throttle more easily. The fix is usually to relocate the mainboard outside the enclosure or add a dedicated cooling fan with cool-air intake. Many printer manufacturers sell or recommend external mainboard enclosures specifically because of this. It’s not “enclosures cause shifts,” it’s “enclosures stress an already-marginal cooling setup.”
Why did my printer suddenly start shifting after working fine for six months?
Belts stretch slightly with use. Grub screws back off slowly under vibration. Mainboard fans accumulate dust. Bearings wear. Any of those is a candidate. The fact that it worked for six months doesn’t mean the printer is fine; it means whatever drifted has finally drifted past the threshold where the problem manifests. Run the diagnostic workflow above. Our general troubleshooting guide covers the broader maintenance cadence.
Should I just enable auto-recovery from step loss on my Bambu and forget about it?
Use it, but don’t treat it as a substitute for maintenance. It’s a recovery feature, not a prevention feature. If your printer is recovering from step losses regularly, you have an underlying issue that’s eating into reliability and possibly print quality. The feature can hide the problem long enough for you to ignore it until something worse happens. Check belt tension and idler hardware periodically even with auto-recovery on.
My layer shift is in both X and Y at the same time. What does that mean?
Usually one of three things. First, a print collision: the nozzle hit something solid and both motors lost steps. Second, a power supply problem: brownout or instantaneous voltage sag dropping current to both drivers. Third, a frame or chassis issue: the entire gantry moved relative to the bed, but the motors didn’t. Print collisions are by far the most common.
Is it worth installing a CNC-style closed-loop stepper system?
Probably not for most users. Closed-loop steppers (with onboard encoders that detect skipped steps and recover) are real products and they work, but they’re expensive, they require driver and firmware changes, and they’re an answer to a problem that almost everyone can solve more cheaply with good maintenance. They make sense on industrial-grade printers or production setups where uptime is dollars per hour. For a hobby printer, fix the grub screw.
Will lowering my outer wall acceleration in OrcaSlicer slow my whole print down?
Not by as much as you’d think. Outer walls are a small fraction of total print time on most models. Infill and inner walls dominate. Cutting outer wall acceleration in half might add 5 to 10 percent to total time on a typical print, and the surface quality improvement (and shift-isolation diagnostic value) is usually worth it.
Closing
Almost every layer shift I’ve personally diagnosed on a customer’s printer in the last three years has come back to one of three things: a loose grub screw on a pulley, a warped corner that the nozzle caught, or a stepper driver baking under a dead fan. None of those are exotic. None of them require buying parts. All of them are catchable by the diagnostic workflow above in under thirty minutes. The trap is that the failure mode looks dramatic enough (centimeters of offset, hours of print time lost) that users assume the cause is dramatic too. It usually isn’t.
If you’ve got a printer sitting with a shifted print on it right now, my advice: walk through the eight-step diagnostic table from the top, in order, and don’t change two things at once. Find the cause, fix that cause, run a short test print to confirm, and then go back to the rest of your life. Don’t replace your motherboard, don’t buy a new stepper, don’t reflash your firmware for the third time. Check the cheap stuff first.
For ongoing reliability, build a small habit: every few months, check belt tension by ear, touch the drivers after a long print, and verify pulley grub screws are seated against the shaft flat. Five minutes of preventive work prevents the kind of failures that ruin a weekend. If you want a broader maintenance cadence as well, our OrcaSlicer troubleshooting guide is the right entry point. Get the printer healthy first, then go calibrate. That order matters.
Good luck. May your next 14-hour print finish at the right coordinates.
Related OrcaSlicer guides
- OrcaSlicer Troubleshooting: Master Index of Every Common Fix
- OrcaSlicer Crashing While Slicing? 8 Fixes for E-Cores, GPU, RAM
- OrcaSlicer Won’t Open or Won’t Launch: Windows, Mac, Linux Fixes
- Elephant Foot in OrcaSlicer: Compensation Done Right (2026 Guide)
- OrcaSlicer Tolerance & Fit Test: Functional Parts (2026 Guide)