3D Print Troubleshooting: Identify Any Flaw by Its Marks, Then Fix It on Klipper, Marlin, or Duet
Share
3D Print Troubleshooting: Identify Any Flaw by Its Marks, Then Fix It on Klipper, Marlin, or Duet
Last updated: September 2026 · By Advanced 3D Printing
Your print came out wrong — but which wrong? A blob at a corner, a layer shifted halfway up, and fine vertical lines across every face all look like “my printer is broken,” and they have almost nothing in common. Fixing them by guessing is how people burn an evening changing three settings at once and ending up worse than they started.
Every print defect leaves a signature: a specific pattern of shape, spacing, and location that points at a specific cause. This guide is built the way we diagnose at the bench — identify first, fix second. Find your artifact below, run the one-minute triage test, work the fixes in order of likelihood, and use the firmware-specific commands for Klipper, Marlin, and RepRapFirmware/Duet when the fix is something you type.
Want the number behind the fix? If you land in the pressure-advance sections, our full walkthrough — with the free G-code generator that supports all three firmwares — is in the Pressure Advance tuning guide.
Table of contents
- Start here: the 3-question triage
- Corner blobs & ooze
- Ringing, ghosting & echoes
- Vertical Fine Artifacts (VFAs)
- Wood grain & repeating extrusion lines
- Extruder skipping & under-extrusion
- Layer shifts & z-wobble
- Elephant's foot, warping & first-layer trouble
- Perimeter separation & bulging
- Pockmarks & moisture
- Pillowing & rough top surfaces
- Heat creep (and why not to print PLA in an enclosure)
- The firmware cheat matrix
- Tools we use (affiliate disclosure inside)
- The order to fix things in
Start here: the 3-question triage
Before touching a single setting, answer three questions about the print in your hand. They route you to the right section faster than any forum post.
- Is it only the first layer? Adhesion, squish, and thermal-drift problems live at the bed interface — the rest of the print looks perfect. Go to first-layer trouble.
- Do all layers look wrong? Blobs, thin spots, and repeating grain are extrusion dynamics: pressure advance, flow limits, or a slipping extruder. Go to blobs, skipping, or wood grain.
- Are the marks on straight vertical lines, echoing a corner, or is the whole top half offset? That's motion hardware: VFAs, ringing, layer shift or z-wobble.
Two rules that save the most time, from every good guide that ever existed: fix mechanics before tuning software — no firmware value hides a loose belt or worn idler — and change one variable per test print. A print where three things changed teaches you nothing, even when it comes out right.
Corner blobs & ooze
Signature: little zits of plastic at corners and sharp internal angles; blobs or strings along travel paths; corners that look over-filled while straight walls look fine.
This is the classic pressure-advance artifact. When the toolhead decelerates into a corner, pressure stored in the filament path keeps pushing plastic out after the extruder has slowed — the corner gets the overshoot. Too much of the opposite correction carves gaps instead (that read is in the ringing row of the matrix below).
Triage
- Blobs are worst at corners and move ends, straight walls clean → pressure advance is too low (or off).
- Blobs plus stringing between parts → also check retraction and ooze prevention; PA reduces ooze through the print but doesn't replace retraction.
- One fat blob at the same spot every print, usually mid-face → that's the Z seam, not PA. Set the seam to a fixed or aligned position in the slicer first — it makes every other read more honest.
- Blobs at the start of short segments only, at any PA value → extruder backlash or a flow problem, not PA. See wood grain.
Fixes, in order of likelihood
-
Calibrate pressure advance at your normal print accelerations. Our generator writes per-line
M900/M572/SET_PRESSURE_ADVANCEtest files for all three firmwares:
🟢 Klipper
; live during test — generator emits one per line/band
SET_PRESSURE_ADVANCE ADVANCE=0.040
; interactive tower alternative (enter AFTER print start):
TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=ADVANCE START=0 FACTOR=.005
; save: pressure_advance = 0.065 under [extruder] in printer.cfg, then RESTART
; (Klipper's own note: PA reduces ooze on travel moves and blobbing on corners)
🔵 Marlin
M900 K0.18 ; set live (generator emits one per line)
M500 ; save to EEPROM
M900 K0 ; disables Linear Advance
; bare M900 reports the current K — if it errors, enable
; LIN_ADVANCE in Configuration_adv.h and reflash.
; Per-material: put M900 K<value> in each filament's start G-code
; and leave the firmware default at 0 so the script value always wins.
🟣 RepRapFirmware / Duet
M572 D0 S0.08 ; drive 0, seconds (generator emits one per band)
M500 ; save to config-override.g
; Duet's own simplest test: a 100 mm cube, 1 bottom layer,
; 1–2 perimeters, seam aligned mid-face, M572 stepped every
; 25 layers — seam bulge = too little PA, seam gap = too much.
; Expect a brief pause when each M572 change executes; that's normal.
- Reduce slicer retraction after PA works. PA already pulls filament back at move ends; every firmware doc says to recheck retraction after tuning, and Marlin notes it may drop to zero.
- Check travel speed and wipe settings. A little wipe-at-end and reasonable travel speeds catch residual ooze; PA does not erase stringing between distant parts.
- Don't raise PA past the flow ceiling to chase blobs. If higher K stops changing anything, your max-volumetric-flow limits are clamping the extruder — fix those first (our flow-rate calculator and the flow-ceiling box in the PA guide cover it).
Primary sources: Klipper Pressure Advance · Marlin Linear Advance · Duet3D Pressure advance · More detail: bulging (feature-adjacent blobs)
Ringing, ghosting & echoes
Signature: a repeated “echo” of an edge or corner — fine ripples trailing behind sharp features, like the corner was drawn with an unsteady hand. The echo follows the geometry of the part.
Printed fast enough, the toolhead is a mass on a spring (the springs are the belts), and every direction change leaves it ringing at the frame's natural frequency. All three firmware docs agree on the physics and the doctrine: check the mechanics first, then cancel the vibration with input shaping.
Triage
- Ripples appear only behind corners and after direction changes, and shrink when you print slower → ringing. Confirmed.
- Ripples are on straight vertical lines everywhere, regardless of geometry → that's not ringing; go to VFAs.
- Belt tension is the mechanic worth checking first: a common starting target is roughly 110 Hz over a 150 mm span of CoreXY belt (many builders run X/Y closer to 120 Hz and tension Z higher, ~140 Hz). A phone app — Gates Carbon Drive (set to “motorcycle”), Spectroid on Android, or Sound Spectrum Analysis on iPhone — measures it by plucking the belt.
- Heavy toolhead, springy frame, or tightened-to-the-point-of-rigidity-mortis belts all lower the frequency you'll have to shape around.
Fixes, in order of likelihood
- Measure, don't guess. Every firmware has a route — an accelerometer if you have one, a ringing tower if you don't.
🟢 Klipper
; with ADXL345 / LIS2DW-class accelerometer:
MEASURE_AXES_NOISE ; noise floor first
SHAPER_CALIBRATE ; per axis: SHAPER_CALIBRATE AXIS=X
SAVE_CONFIG
; no accelerometer — ringing tower (docs/prints/ringing_tower.stl):
SET_PRESSURE_ADVANCE ADVANCE=0
TUNING_TOWER COMMAND=SET_VELOCITY_LIMIT PARAMETER=ACCEL START=1500 STEP_DELTA=500 STEP_HEIGHT=5
; frequency from the ringing: freq = speed × oscillations ÷ distance
; e.g. 100 mm/s, 6 waves in 12.14 mm → ~49 Hz
; then: [input_shaper] shaper_freq_x/_y, shaper_type (try mzv, then ei)
; Don't auto-calibrate constantly — it runs the printer at resonance and
; loosens the very screws you're trying to keep tight. Re-check screws after.
🔵 Marlin
; M593 — built-in ZV shaper (Marlin 2.1.2+, runs even on AVR):
M593 X F31 ; 31 Hz on X (from ringing tower or the
; web Single-Layer Calibration Tool)
M500
; M493 — Fixed-Time Motion planner (2.1.3+): ZV/ZVD/EI/MZV +
; its own separate Linear Advance gain — do NOT mix it with
; M900-based tuning without reading the M493 doc.
; Ringing-tower trick: layer-change G-code that steps M593 F up
; through 15–60 Hz; rotate the model 45° on CoreXY to isolate A/B.
; Print shaping tests with Linear Advance OFF, then retune K.
🟣 RepRapFirmware / Duet
M593 P"zvd" F40.5 ; one frequency for X+Y by design — RRF
; deliberately avoids per-axis shaping so
; diagonals track the slicer path
M593 P"none" ; disable
M500 ; or put the M593 line in config.g
; LIS3DH-based accelerometer support from RRF 3.3 + the DWC
; input-shaping plugin does the curve fitting; without hardware,
; the ringing-tower route works.
- Retune pressure advance after shaping. Shaping changes the accelerations your printer actually executes — Klipper and Duet docs both say shape first, then PA; the field guides agree (retune PA after input shaping).
- Only then raise max acceleration. With a correct shaper, ringing disappears and you get higher usable accel as the bonus.
Primary sources: Klipper Resonance Compensation and Measuring Resonances · Marlin Input Shaping with M593 / M493 · Duet3D Input Shaping · plain-English walkthrough: 3DPrinterLY on ghosting & ringing
Vertical Fine Artifacts (VFAs)
Signature: perfectly vertical lines or fine ridges that run up every face of the print, evenly spaced, ignoring the part's geometry entirely. Roughly 2 mm apart is the classic spacing — that's the GT2 belt tooth pitch telling on itself.
Unlike ringing, VFAs are not a tuning problem you can shape away — they're a hardware fingerprint. The spacing is the suspect list:
- ~2 mm apart → something in the belt/pulley/idler path: belts too tight (the #1 cause), pulley height misaligned with the belt, an unsquared/de-racked gantry, debris compressed in the teeth, or cheap belts/pulleys.
- Other spacing (subtle lumps or sharp lines, still vertical/diagonal) → a gritty bearing, a bad toothed idler, a poor belt, or a bad linear rail.
Triage: the 45° test
Print two wide, flat squares — one normal, one rotated 45° — and see which faces show the lines. On CoreXY, that tells you which axis (or which pair of motors) owns the defect, and the likelihood-ordered suspect list in the linked guides does the rest.
Fixes, in order of likelihood
- Retension the belts by frequency, not feel. ~110 Hz over a 150 mm span is a common starting target (120 Hz X/Y, ~140 Hz Z are also seen). But treat the absolute number as a guide, not a gospel: belt width (6 mm vs 9 mm reads different Hz at identical tension) and metal vs printed-plastic brackets/holders (plastic flexes, reads lower) all shift it. What matters most is symmetry — X and Y reading the same as each other tells you the machine is balanced, which is what actually kills the VFA. Most people who tension by hand pull far too tight, and overtightened belts are the canonical ~2 mm VFA cause.
- Check pulley height and belt line. Motor pulleys too high/low or belts rubbing a bearing flange show up as belt wear and belt dust.
- Square the gantry / de-rack (CoreXY), and check rail alignment (Cartesian). A skewed frame produces artifacts mesh tuning can't fix.
- Clean the teeth. Debris compresses between pulley and idler teeth and prints its spacing onto every wall.
- Upgrade suspect parts. In side-by-side testing, genuine Gates belts/pulleys/idlers beat no-name parts — and spin each idler bearing by hand; a grainy feel is the whole diagnosis.
On Cartesians the same logic applies per axis: with power off, push each axis by hand and pull each belt — unequal resistance is your starting suspect.
Primary source: VFAs (page tailored to CoreXY; the spacing test and 45° method generalize)
Wood grain & repeating extrusion lines
Signature: a diagonal “wood grain” sheen across walls, or an “innie-outie” scallop repeating along each extrusion line. Unlike VFAs, these patterns can run diagonally and are tied to the extrusion itself.
Triage
- Pattern runs along the extrusion path and repeats at the gear's period → extruder consistency, most often backlash between the drive gear and its mating gear.
- Diagonal wall patterns that appear on one axis only can still be axis mechanics (rails/idlers) — run the 45° test before blaming the extruder.
- Set expectations honestly: the linked guide is blunt that you are “very unlikely to get this perfect.” Bowden setups are less prone — the tube's springiness buffers gear eccentricity. This artifact is far more common on direct drive.
Fixes, in order of likelihood
- Set extruder backlash. A tiny amount — just enough that the gears aren't jammed together — measured with filament loaded and spring tensioned. Too little: repeating patterns and chewed plastic gears. Too much: clacking during retraction/PA moves and inconsistent ideal PA values (gaps and bulges together — the same mechanical-backlash signature the PA guide warns about). Re-tune PA (and sometimes e-steps) after adjusting.
-
Print external perimeters first. Cheap, slicer-only, and the top tuning guides credit it for this and several bulging issues: PrusaSlicer/SuperSlicer
external_perimeter_first; Cura “Wall Ordering → Outside to Inside”. - Adjust filament tension screw and check gear alignment/quality — any eccentricity in the drive train prints its signature onto every line.
Primary source: Extrusion Patterns / “Wood Grain” (adjustment details Voron-specific; backlash diagnosis general)
Extruder skipping & under-extrusion
Signature: wide gaps in the wall (noticeably wider than moisture pockmarks), missing top layers, sections that print then stop, sometimes with a clicking from the extruder or a shaved filament tip.
The single best diagnostic is the sharpie test, and it splits the problem in one print:
Triage: mark and watch
Put a line of marker on the extruder motor shaft and watch it when the skipping happens:
- Shuddering → wiring problem or mechanical resistance (drag on the filament path).
- Not moving at all → electrical: wiring, connection, or an overheating stepper driver.
- Turning normally while filament doesn't feed → grip: loose grub screw, gear tension, or slipping on dust.
Fixes, in order of likelihood
- New nozzle / partial clog check. Extruding mid-air that shoots sideways instead of straight down = partial clog. Cold-pull or replace — 30 minutes, versus a day of ghost-chasing.
- Heat creep. Printing PLA in an enclosed chamber softens filament in the heatbreak and causes endless jams — open the enclosure or remove panels (details in heat creep). Confirm the hotend fan runs at 100% and never stalls.
- Gear tension: yank on filament and tighten the tensioner until it stops slipping, then ~1–2 turns more. Too tight causes skipping; too loose strips filament.
- First-layer-only skipping → too much squish or too much first-layer flow — the nozzle is fighting the bed.
- Filament path drag: spool catching, kinked tube, restrictive small-ID tubing on a direct drive (use ≥3 mm ID from extruder to spool), retraction set absurdly high (direct drive: ~1 mm max; Cura's defaults are bowden-sized).
- Motor current & driver: both too high and too low cause skipping; the general rule is to stay under ~50–60% of rated motor current. On skipping-after-enabling-PA, check the per-firmware fixes in the PA guide's troubleshooting table — PA demands fast filament motion.
🟢 Klipper current check (TMC drivers)
SET_TMC_CURRENT STEPPER=extruder CURRENT=0.55 HOLDCURRENT=0.40
; live tune; verify with the motor's datasheet / stock config
🔵 Marlin current check
M906 E700 ; stepper motor current in mA — software
; current control needs TMC drivers on
; serial/SPI; legacy digital-trimpot boards
; use M907 instead
; Linear Advance needs headroom: it silently REDUCES print
; acceleration when K outruns the extruder-jerk budget —
; a hidden speed tax on bowden + high K.
🟣 RepRapFirmware current check
M906 E550 ; peak current, mA, per drive
M906 I40 ; idle-current factor (0..100)
- Volumetric flow reality check: if the slicer's speed preview shows demands above what your hotend melts, thin sections aren't skipping — they're starving. Fix with the flow-rate calculator, not a new extruder.
Primary source: Extruder Skipping (concepts all-printers; some parts Voron-tailored)
Layer shifts & z-wobble
Two different motion failures that both “ruin the top of the print” — and the fix order starts with stopping the printer.
Layer shift: one clean step, usually sudden
Signature: everything above a certain height is offset in one direction, then prints “normally” from there. Stop and cancel the print. The material above the shift is scrap, and the nozzle plowing through the offset section can bend the toolhead — turning a reprint into a real repair.
Triage the direction (on CoreXY the B motor is on the left, A on the right viewed from the front — “it goes BBBAA like a sheep”), then walk the four buckets in order:
- Mechanical: belt tension (too tight and too loose both cause tooth-slip; ~120 Hz X/Y over 150 mm), z-lift of 0.2–0.3 mm to stop the nozzle harpooning curling prints, correct belt routing, free-spinning idler bearings (belt off, spin each by hand), quality motors.
- Electrical: motor run currents per firmware (see the current blocks under skipping), and crimps/wiring — high-strand-count 24 AWG or thicker in drag chains, solid-core wire will break invisibly inside the insulation.
- Thermal: driver heatsinks and airflow — a driver that skips when hot is a driver that's cooking.
- Speeds/accelerations: you may simply be asking more than the steppers can deliver — lower accel (input shaping raises the ceiling), disable stealthChop, don't over-microstep.
Same height every single print → suspect the G-code at that point (a pause, an M600, a filament-runout retry), not the mechanics.
Z-wobble: a wave at fixed heights, repeating forever
Signature: a periodic bulge/groove band that appears at a fixed Z spacing and repeats identically around the whole perimeter — the Z axis's rotation, printed as a fingerprint.
- Confirm: the wave period should equal one full Z-lead-screw rotation. Put a mark on the screw or coupling, print a tall square, and match spacing to rotation.
- Fixes, in order: loose Z-motor coupler grub screw (the #1 offender), a bent lead screw, Z belt tension (multi-Z machines often run Z around ~140 Hz), a binding Z bearing, Z current too low to hold on descents.
- It is not ringing, and shaping won't touch it — this is Z hardware.
Also worth reading: 3DPrinterLY's plain-language takes — layer shifting — plus the dedicated Layer Shifting page.
Elephant's foot, warping & first-layer trouble
Signature check first, because these two look similar and mean opposite things: elephant's foot is the bottom rows squeezed wider than the wall above while the print clings to the bed; warping is the print letting go, corners peeling up off the plate.
Elephant's foot
- Causes, in order: too much first-layer squish (too-close Z), first-layer line width too wide/hot, and upper layers pressing into a still-soft base. Small amounts are physically normal on most prints — fight it with compensation, not with heroics.
-
Compensation settings: SuperSlicer “XY first layer compensation” (
first_layer_size_compensation, fade it withfirst_layer_size_compensation_layers), PrusaSlicer “Elephant foot compensation” (elefant_foot_compensation— yes, misspelled), Cura “Initial layer horizontal expansion”. - But note: that compensation set too high causes a different defect — perimeter separation on the lower layers. It's a trade, not a cure.
Adhesion / warping
The isopropyl wash protocol fixes the majority of adhesion complaints — and it's free:
- Wash the plate (new and used) with dish soap and elbow grease, scrub in small circles, rinse. New plates carry manufacturing release; fingers carry oil.
- Air dry or paper towel — laundry products put fats and waxes back onto the surface via cloth. IPA is fine for maintenance between washes, not as the wash.
- Handle by the tabs/sides from now on.
- Smooth PEI? Scuff it (kitchen scouring pad, ~800–1000 grit) unless you want the glass finish more than the adhesion. Textured PEI wants more squish so filament presses into the dimples.
- Then the settings: first-layer bed temp (PLA ~60 °C, PETG ~80 °C, ABS ~90–100 °C — some brand defaults are conservative), correct squish, thicker first-layer line widths (~120%) for more pressure against the plate. Brims and adhesives (Magigoo, nano-polymer) are tools, not the baseline.
First-layer inconsistency & thermal drift
-
Squish varies by bed spot → bed mesh, generated hot: a cold mesh is not your print's mesh. Klipper:
BED_MESH_CALIBRATEin your PRINT_START, bicubic algorithm above a 3×3 grid, and with a physical Z endstop setrelative_reference_index = ((x_points × y_points) − 1) / 2. -
Squish varies print-to-print on an enclosed printer → thermal drift: the frame expands and Z creeps upward as it soaks. Heat-soak large enclosed machines ~1 hour before probing/homing; the software upgrades are Klipper's
z_thermal_adjustand auto-baby-stepping with a physical probe. -
Z repeatability doubt: Klipper
PROBE_ACCURACY(a solid benchmark: std dev ≤ 0.004, range ≤ 0.0125), MarlinM48, RRF repeatG30 S-1.
Primary sources: Build Surface Adhesion, First Layer Inconsistency and Thermal Drift (Voron/Klipper-tailored; the heat-soak and mesh-hot principles generalize); first-layer squish physics cross-checked against Teaching Tech's first-layer guide
Perimeter separation & bulging
Walls splitting apart (perimeter separation)
- Only in the lower layers? That's usually too much first-layer/elephant-foot compensation — the perimeters are “printing over nothing” at their widened size. Reduce or fade the compensation, and confirm squish.
-
Everywhere? Stepover: your outer perimeters don't overlap their neighbors enough to bond. A good stepover visualization from Maker's Muse is worth 20 minutes; the rule of thumb is that 100% line widths stop working once your layer height exceeds ~50% of the nozzle diameter — The mental image is “you're basically printing sausages.” Widen the external perimeter line width, verify flow, slow the perimeters (small perimeters especially: PrusaSlicer/SuperSlicer
small_perimeter_speed), and give the plastic heat to bond — higher hotend temp, especially at speed (ABS lives around 240–255 °C).
Bulging (fat rows, fat corners, fat spots)
- Bulging layers: print external perimeters first (the single cheapest fix on this page — it helps bulging, extrusion consistency, and stepover at once), disable “extra perimeters” / “supporting dense layers”, and reduce perimeter accelerations.
- Bulges at STL vertices: square-corner velocity / jerk too low or too high, perim accel too high, or a shaper that needs re-tuning.
- Bulges around embossed features: over-extruded supporting infill — tune PA and extrusion multiplier first, then drop infill/perimeter overlap toward 20–25%.
- Striped patterns on overhangs (SuperSlicer): profiles with “above the bridges” flow >100% — put it back to 100%.
Primary source: Bulging and Perimeter Separation
Pockmarks & moisture
Signature: tiny pinhole craters/steam-pop pits scattered on surfaces — much narrower than extruder-skip gaps, and they show up across the whole print rather than at one height.
- Dry the filament. Water in the filament flashes to steam at the nozzle and pops out of the surface. Test: extrude in mid-air and watch/listen — popping sounds and visible steam mean wet. New and sealed does not mean dry; plenty of filaments ship soaked.
- Z seam not “random” — a pockmark in the same column every print is a seam leak, not moisture.
- Try a new nozzle — a partly-degraded orifice nucleates the pops.
Drying: typical PLA/PETG-class guidance is around 45–55 °C for 6–12 h in a filament dryer or food dehydrator (check your material's rating); then store sealed with desiccant. If drying makes the pits vanish, that's the whole lesson.
Primary source: Pockmarks
Pillowing & rough top surfaces
Signature: the top surface looks like a dimpled mattress or sandpaper instead of flat plastic.
This is a cooling/bonding failure, not an extrusion failure: top layers laid over sparse infill have no support underneath and no heat to fuse them to each other. Fixes, in order: more top layers (and a solid top on a 0.4 nozzle wants ≥4), slower top layers so they don't freeze before fusing, 100% top-infill overlap into the walls, less part-cooling fan on the last layers (especially PETG/ABS), and denser top-surface infill where it's structural. If only one spot is rough and it's the same column every print, go check the Z seam instead.
Further reading: 3DPrinterLY — pillowing fixes (topically the best public walkthrough — coverage of this artifact is thin everywhere, which is exactly why this section exists)
Heat creep (and why not to print PLA in an enclosure)
Signature: prints start fine, then jam/skip minutes later; the extruder fights, the filament stops feeding, sometimes nothing comes out at all — and a cold pull or a rebuild temporarily “fixes” it. It always comes back.
Heat creep is heat traveling up past the heatbreak and softening the filament in the feed path, where the drive gears can no longer push it. The canonical triggers, in order:
- PLA in an enclosure. Enclosure temperatures easily exceed PLA's softening point in the heatbreak — open the door or lose the panels. This is the single most common heat-creep cause we see.
-
Hotend fan not doing its job: stalled, wired to stop/start, running at 40% because a vendor config set
max_powerlow, or 12 V on a 24 V rail. The fan should be continuous and full-speed while the heater is live. - Printed parts creeping: a partially blocked heatsink path insulates the “cool” side. The quick diagnostic: with nozzle off and cool, push fresh filament through the heatsink by hand — resistance means plastic is welded to the walls; warm just enough to push it out and turn the heater off immediately.
- Long, slow layers (small footprints at low flow) give heat time to climb. If it only jams on tiny features, that's the mechanism.
Toolheads designed for it (Stealthburner-class cooling, AB-BN-style mods for Afterburner) fix the hardware version; the enclosure version is fixed by a door hinge.
Primary source: PLA is Overheating + the heat-creep section of Extruder Skipping
The firmware cheat matrix
When the fix is something you type, these are the commands. Everything else in this guide is a wrench.
| Function | Klipper | Marlin | RepRapFirmware / Duet |
|---|---|---|---|
| Pressure advance |
SET_PRESSURE_ADVANCE ADVANCE=0.05 · save: pressure_advance in [extruder] + RESTART
|
M900 K0.18 · save: M500
|
M572 D0 S0.08 · save: M500
|
| Input shaping |
SHAPER_CALIBRATE / [input_shaper] (per-axis) |
M593 X F31 (2.1.2+) · M493 FTM (2.1.3+) |
M593 P"zvd" F40.5 (one freq both axes — deliberate) |
| Motor current | SET_TMC_CURRENT STEPPER=… CURRENT=… HOLDCURRENT=… |
M906 E700 (trimpot boards: M907) |
M906 E550 (mA, per drive) |
| Firmware retraction |
SET_RETRACTION RETRACT_LENGTH=0.8 (needs [firmware_retraction]) |
M207 S0.8 F1200 then G10/G11
|
M207 S0.8 F3000 then G10/G11
|
| Live first-layer tweak | SET_GCODE_OFFSET Z=0.05 MOVE=1 |
LCD Babystep (M290) |
DWC baby-stepping (M290) |
| Persist changes |
SAVE_CONFIG + restart |
M500 (never M502 — that resets to factory) |
M500 (config-override.g) |
Three unit traps that bite people mixing firmwares
- PA values are not portable. Klipper and Duet both use seconds; Marlin K is a different scale entirely (mm of filament per mm/s). Never copy a number across families.
- RRF speed units are mm/min on M203/M566 (and M566 jerk is mm/min while M205 is mm/s) — Klipper and Marlin speak mm/s.
- With PA on, RRF caps extruder accel at M566 E (mm/s) ÷ S, whichever is lower against M201 E. Skip-and-nothing-helps on a Duet? Check that interplay before replacing the extruder.
Tools we use
Affiliate disclosure: some links below are affiliate links. If you buy through them we earn a small commission at no extra cost to you — it's what keeps the free G-code generators free. We only list tools we actually use on our own machines.
- Digital calipers — measuring band heights, layer thickness with a scale-free guess, and wall width on flow tests. Browse calipers on Amazon
- A bright LED + a jeweler's loupe (or USB microscope) — half of artifact diagnosis is simply seeing it: raking light along the wall reveals whether a mark is vertical, periodic, and where it starts. USB scopes have gotten genuinely cheap. Browse loupes · Browse USB microscopes
- A filament dryer / dry box with desiccant — the pockmark section starts with “dry your filament,” and sealed-new still isn't dry. Browse filament dryers
- A tuning fork or belt-tension meter (or the free apps) — every VFA and layer-shift diagnosis on this page wants ~110 Hz over 150 mm, not vibes. Browse tension gauges
- Replacement nozzles, in bulk — “try a new nozzle” is one of the most common fixes in this guide; keep a drawer full. Browse nozzle packs
- High-strand-count silicone wire (24 AWG+) — The wiring-bucket fixes all start with “don't trust the wire that came with the printer.” Browse wire
For the printer-side upgrades this guide keeps recommending — genuine Gates belts and pulleys are the big one — check the A3DP store first; we stock what we couldn't buy elsewhere. First-layer problems start with the surface: we carry magnetic PEI flex plates and textured build plates in many sizes — or use them as a spec reference and buy PEI sheets on Amazon if you prefer.
The order to fix things in
Troubleshooting works when you fix in dependency order — each step changes the answer of the steps after it. All three firmware docs converge on roughly this sequence (we teach it per-firmware in our getting-started tuning guide):
- Mechanical truth: frame, belts, rails, bearings, motor grip, wiring.
- First layer / Z: squish, mesh hot, thermal soak, probe repeatability.
- Temperature & e-steps: PID, rotation distance / steps per mm.
- Input shaping (measure, don't guess).
- Pressure advance — after shaping, always. → the PA guide + generator
- Flow / extrusion multiplier, then max volumetric flow.
- Retraction, last — PA shrinks what retraction has to do.
And keep a calibration log. A text file with “date, filament, value before → after, what changed” turns troubleshooting from roulette into engineering — and it's what makes the PA calibrator's labeled test prints so satisfying: you're reading the number off the print instead of guessing at it.
Sources
- Ellis — VFAs, Layer Shifting, Extruder Skipping, Extrusion Patterns / Wood Grain, Bulging, Perimeter Separation, Build Surface Adhesion, Pockmarks, PLA is Overheating, First Layer Inconsistency & Thermal Drift — several pages are written Voron-first; where a fix is Voron-specific we've kept the general principle only.
- Klipper: Resonance Compensation, Measuring Resonances, Pressure Advance
- Marlin: Input Shaping, M593, M493, Linear Advance, Troubleshooting Tips (electronics/firmware errors — the other half of “my printer is broken”)
- Duet3D: Input Shaping & Pressure advance
- Teaching Tech — troubleshooting (workflow-first: frame check, first layer, jams, probes)
- 3DPrinterLY: ghosting/ringing, pillowing, stringing, layer shifts, blobs & zits
