Repeatable .2mm undersizing of cylindrical studs

External studs print about 0.20 mm undersized across PLA, PETG, ABS and PC

Evidence package: four figures, the exact model, native sliced project and actual G-code are included. Dimensional annotations distinguish independently measured coordinates from Bambu’s own UI labels.

Summary

I am investigating repeatable undersizing of small external studs printed with a 0.2 and .4 mm nozzle (this report includes evidence from the .2mm nozzle). Every stud on the tested boards measures undersized, and I have observed the same approximately 0.20 mm shortfall with PLA, PETG, ABS and PC. The attached new 5.00 mm reproduction model retains a 5.000 mm mesh diameter. Its actual Bambu G-code indicates an approximately 5 mm extrusion envelope, not a 4.8 mm target. Please investigate where the size difference is introduced; the current evidence does not isolate firmware, extrusion, motion or calibration as the cause.

Physical observations

These are my caliper measurements and fit observations from previous prints, not measurements inferred from a slicer preview.

Previous nominal stud diameter Measured printed diameter Result
5.10 mm 4.90 mm Too tight with actual LEGO pieces
4.80 mm 4.60 mm Too loose; no useful clutch
5.05 mm, small underside holes (R36) 4.80 mm Excellent clutch with actual LEGO pieces

I measured every stud on the 4.80 mm test plate and reported the same undersizing across the other tested board. I also measured official LEGO studs at approximately 4.80 mm. The first two comparisons each differ by 0.20 mm; the later 5.05-to-4.80 result differs by 0.25 mm. These observations are preserved as reported rather than forced into one exact correction factor.

I have observed the approximately 0.20 mm issue across PLA, PETG, ABS and PC. A controlled per-material table with raw readings, exact profiles and printer logs was not recorded for this report. This cross-material consistency makes material shrinkage alone a less convincing explanation, but does not establish a particular cause.

The attached R38 5.00 mm coupon has been modeled and sliced but has not yet been physically measured. It is a diagnostic reproduction file, not a claim that a new 5.00 mm print already measured 4.80 mm.

Reproduction environment and settings

Item Verified value in the attached reproduction
Slicer Bambu Studio 02.08.04.57 Beta, native Windows CLI and desktop Preview
Saved printer profile Bambu Lab H2C 0.2 nozzle
Nozzle / layer height 0.20 mm / 0.10 mm
Normal / outside line width 0.22 mm configured; selected emitted width 0.21999 mm
Filament profile Black PLA Tough+; saved filament diameter 1.75 mm
Filament / print flow ratio 0.98 / 1.00
Infill / ironing 100% / OFF
Auxiliary cooling 30%; model commands S0 and S76
XY contour / hole compensation 0 / 0 mm
Auto circle contour-hole compensation OFF
Wall generator / slice resolution Arachne / 0.012 mm
Precise outer wall OFF
Firmware and printer-side calibration Not captured; no claim that these match saved settings

Geometry: one 6 x 6 stud coupon, 48 x 48 mm functional footprint plus an identifying tab; 1.00 mm base, 1.80 mm stud height, 2.80 mm total height, 8.00 mm pitch. Each small centered underside blind hole is 2.60 mm diameter x 1.70 mm deep, leaving a 1.10 mm closed cap. There are no lower-clutch tube structures. This file is black only. The native slice completed without warnings.

Four-image evidence

1. Saved STL geometry

The STL is exported from the actual saved 3MF mesh and checked by re-reading its coordinates. All 36 straight-wall sections measure 5.000 mm in X and Y. The retained circular mesh is faceted: its minimum oblique caliper width is 4.96856 mm. This small mesh approximation is documented and is not a 0.20 mm reduction.

2. Native Bambu preview and re-exported mesh

The preview comes directly from Metadata/plate_1.png in Bambu’s actual exported sliced.3mf; the raw native PNG is also attached. Reopening that native project confirms 5.000 mm X/Y straight-wall spans for all 36 studs. The dimensional caption is an independent coordinate measurement, not a Bambu measurement-tool readout or a measurement from thumbnail pixels. This is native headless output, not a desktop screenshot.

3. Actual sliced extrusion paths

This is an independent rendering of the actual G-code, not a simulated Bambu UI screenshot. All 36 studs x 15 straight-wall layers = 540 contours were checked. X/Y nozzle-centerline extents plus the declared bead width give 4.98599-4.99799 mm, approximately the 5.00 mm target. The bead width must be included: the nozzle centerline alone is intentionally inside the outside surface. The rounded crown is not used for the straight-wall measurement.

4. Native Bambu post-slice toolpath Preview

This is a genuine desktop capture of Bambu Studio’s Preview tab, showing Line Type colors and all 28 layers through Z2.80 mm. The native summary shows 58m30s / 3.92g. The previously saved sliced project was opened directly; no new slice or printer command was sent for this screenshot. Its 5.00 object name and engraved label identify the nominal design. Bambu’s Preview does not display a native individual-stud diameter measurement here; the separately verified mesh is 5.000 mm and its calculated G-code envelope is 4.986-4.998 mm. The caption does not pretend those measurements are a Bambu UI readout. The image is cropped only below the relevant application content to exclude an unrelated desktop notification; the unannotated application crop is included.

Actual G-code excerpt

Source: DB-R38-5.00-Bambu-actual.gcode, original command lines 108286-108313, at Z = 1.20 mm. The selected stud is centered at X185, Y158.5. The position before this excerpt is X182.829, Y159.484. M83 (relative extrusion) is active from original line 1131.

The active feature comment was at original line 108283; the active line-width comment was at line 108248. They are gathered above the unchanged consecutive command lines below for clarity. This excerpt is not a standalone print file.

; FEATURE: Outer wall
; LINE_WIDTH: 0.21999
G1 X182.664 Y158.977 E.00432
G1 X182.617 Y158.445 E.00432
G1 X182.689 Y157.916 E.00432
G1 X182.877 Y157.417 E.00432
G1 X183.171 Y156.971 E.00432
G1 X183.557 Y156.603 E.00432
G1 X184.016 Y156.329 E.00432
G1 X184.523 Y156.164 E.00432
G1 X185.055 Y156.117 E.00432
G1 X185.555 Y156.19 E.00409
G1 X186.088 Y156.38 E.00458
G1 X186.529 Y156.671 E.00427
G1 X186.897 Y157.057 E.00432
G1 X187.171 Y157.516 E.00432
G1 X187.336 Y158.023 E.00432
G1 X187.383 Y158.555 E.00432
G1 X187.311 Y159.084 E.00432
G1 X187.123 Y159.583 E.00432
G1 X186.829 Y160.029 E.00432
G1 X186.443 Y160.397 E.00432
G1 X185.984 Y160.671 E.00432
G1 X185.477 Y160.836 E.00432
G1 X184.945 Y160.883 E.00432
G1 X184.416 Y160.811 E.00432
G1 X183.917 Y160.623 E.00432
G1 X183.471 Y160.329 E.00432
G1 X183.103 Y159.943 E.00432
G1 X182.844 Y159.51 E.00408

For this loop:

X nozzle-centerline span = 187.383 - 182.617 = 4.766 mm
Declared line width                          = 0.21999 mm
Intended outside X span                     = 4.98599 mm

Y nozzle-centerline span = 160.883 - 156.117 = 4.766 mm
Intended outside Y span                     = 4.98599 mm

The E values were also analyzed, not just X/Y positions. Summed commanded filament volume divided by the nominal non-bridge path volume is 0.980423, consistent with the saved 0.98 filament flow ratio to command rounding. This is a volume factor, not a 2% XY scale. The calculation uses the installed-version Bambu non-bridge extrusion-area formula: area = height * (width - height * (1 - pi/4)). An extrusion-width comment expresses intended deposition; it does not prove the cooled plastic attains that width.

Expected versus actual

  • Expected: the physical straight side of an approximately 5 mm external stud should be close to its commanded/model size within the printer’s applicable dimensional tolerance. An unexplained, repeatable approximately 0.20 mm reduction materially changes the fit.
  • Observed on previous prints: 5.10 mm became 4.90 mm and 4.80 mm became 4.60 mm across the tested boards; a later 5.05 mm cavity coupon measured 4.80 mm and fit well.
  • Verified in the new reproduction: a 5.000 mm mesh persists through native Bambu re-export, and the emitted X/Y paths plus declared extrusion width remain about 4.986-4.998 mm. The artifact does not contain a 4.80 mm straight-wall target.
  • Not established: this does not prove that firmware misreads G-code, nor rule out extrusion calibration, flow behavior, motion calibration, pressure dynamics, actual nozzle condition, measurement effects or material behavior. The physical cause remains unresolved.

Reproduction and requested investigation

  1. Open DB-R38-6x6-Thin-5.00-0.2mm.3mf as a project in Bambu Studio using the saved H2C 0.2 nozzle profile. Preserve its dimensions and settings.
  2. Confirm the 5.000 mm straight-wall mesh spans. The supplied STL provides the same mesh without printer settings; use the 3MF for reproducing the supplied settings.
  3. Slice and compare the result with the attached actual native G-code. The supplied file was generated by version 02.08.04.57 and completed without warnings.
  4. For a hardware reproduction, use the correct machine/material profile, record the actual firmware, calibration and any overrides, then measure the cooled straight stud sides in both X and Y. No print was started as part of this software inspection.
  5. Please check whether any hidden contour offset, slicer path handling, firmware motion behavior, or extrusion/calibration effect could produce a similar absolute undersize across PLA, PETG and PC. Please advise what diagnostic logs or controlled print would distinguish those possibilities.

The attached new reproduction is PLA-profiled. PETG and PC observations refer to prior prints; this package does not pretend that one PLA profile documents all three materials.

Attachments and integrity

  • This report as Markdown and PDF.
  • The four full-resolution numbered PNGs above, raw native model previews and the unannotated desktop Preview crop.
  • The original 5.00 mm project, exact exported STL, Bambu native sliced project, full unchanged G-code and exact excerpt.
  • Machine-readable geometry, native-slice, toolpath and X/Y/E checks, with source hashes and a package manifest.
5.00 mm project SHA256:
c12a2d2b63923853344501939ee8f2f212db85dad3fcf4c244d75f8bb038b2b0

Actual native G-code SHA256:
8c2ef6e2c08dfb99764f8651c85cd11fc47ee6e5ccb11ef42d78145eb3721771

The accompanying 5.025 mm R38 test is separate from this bug reproduction. Both targets remain distinguishable after slicing: all 1,080 paired X/Y comparisons are larger for 5.025 mm, with a median difference of 0.026 mm. This verifies representable paths, not a guaranteed 0.025 mm physical printing accuracy.

DB-R38-6x6-Thin-5.00-0.2mm.3mf (349.2 KB)

DB-R38-5.00-Bambu-native-sliced.3mf (1.5 MB)

First of all, I have a lot of respect for this in‑depth analysis. :+1:


I think you might also find this topic interesting - it touches on the same issues, and the team (not me) has published some studies on it as well. It’s not exactly the same topic, but there’s quite a bit of overlap.

Sorry for the short response but it is getting late here.

I am also trying to do a few brick compatible designs and am looking at that problem.

Time permitting, my way forward is to disable all XY compensations (hole and contour) to (hopefully) get repeatability.

Then I’ll subtract the error in CAD to get compatible parts although precise fits may be material specific.
It may also require a couple of loops.

:four_leaf_clover: & :crossed_fingers:

I hope my evidence package is sufficient enough to prove that the .2mm is repeatable. I think it’s a gcode interpretation problem since the models and gcode all prove it SHOULD be printing at 5.00mm, but the physical output is 4.8 (which is LEGO standard). 5.1 prints at 4.9, 5.2 prints at 5.0 etc. regardless of material (as I stated in the report, I printed in everything from PLA to PC). Feel free to copy my design since it has the slight taper that LEGO uses on the very top of the studs and the clutch at 5.05 is nearly identical to official LEGO

Thank you! I’m hoping the “Team” actually reads my in-depth analysis so they can devise a solution!

We can give one of the team a call, but I have no idea when he’ll be back online.


@I_Built_A_Thing

You might find this interesting.

I appreciate the enormous amount of time and effort that you’ve spent on this very in depth analysis of the issue.

I need to take some time to read through it all when having more time.

But I would like to give you some additional tests if you are willing to consider them.

Please try the following:

  • Try a 20mm rod
  • Try a 5mm square pillar
  • Try to enable arc fitting (I know, it will probably advise not to use it) and try the 5mm rod again
  • Try to change the wall order (outside first)

Just measure the parts, make sure on the square one that you don’t get deviations due to incorrect flow dynamics.

Some additional context:

FDM printing has always been suffering from diametrical deviations due to the “rubber band effect” caused by the circular motion. The deviation is the most dominant on small circular holes.
The larger the hole, the smaller the deviation becomes. But on bosses the effect is measurable also.

The slicer and firmware have several compensation algorithms in place to compensate for holes.

Additionally, the newer controllers have advanced motion planning. This means that it calculates a smooth spline through the points that are given in the gcode.
This usually is done by adding a bandwidth in which the actual motion is allowed to deviate from the theoretical contour.
How much that influences your results, I don’t know, therefore the test with the arc fitting.

Hopefully this expands your vision a bit on the matter.

@Gerrit @RetroSharky @EnoTheThracian — thank you for your kind replies; I have put significant time and effort into this because LEGO is a true hobby of mine, but, also because I am an engineer by trade, with the past 15 years of my life being dedicated to Quality Engineering (what Microsoft used to call SDET, but with significantly more scope).

The original post’s edit window has expired, so I am adding the missing evidence files here.

Complete downloadable evidence

The complete original R38 submission package is now available below. It contains all 25 files: the four full-resolution numbered images, raw native previews and desktop crop, both reproduction 3MF files, exact STL, full unchanged G-code and excerpt, PDF/Markdown report, validation records and integrity manifest. These are the original archived evidence files; no new physical test results are claimed.

Read the illustrated report online.

ZIP SHA256: 85785a091607f2ad673cf12dc70ff0e2051f877f96915a12403258432c9cd735.

The G-code excerpt is for inspection and is not a standalone print file.

Additional original image attachments

The native angled/top previews, the unannotated desktop Preview crop, and Figure 4 are attached below. The forum converts the larger images to JPEG for display; the complete evidence ZIP above retains the original full-resolution PNG files and all validation records.

Diagnostic tests and measurement clarification

@Gerrit I will run the 20 mm round rod, 5 mm square pillar, 5 mm round rod with arc fitting enabled, and the outside-first wall-order comparison as you requested. I have prepared matched baseline, arc-fitting-only and outside-first-only projects so those changes can be compared independently. I will report the cooled measurements and the actual printer, firmware and calibration settings.

One detail I want to emphasize is how repeatable the approximately 0.20 mm shortfall has been across PLA, PETG, ABS and PC - all vastly different materials. It also occurred on solid studs before I introduced any of the small blind holes underneath them. Those later holes therefore cannot explain the original discrepancy. I understand that you also mentioned the rubber-band effect on external bosses, not only holes; I am not ruling that out. However, a similar absolute offset across these different materials seems to warrant checking for a shared systematic cause as well, rather than assuming material shrinkage alone. That is precisely why I tested using various substrate, and the .2 delta remained consistent even when the gcode proved there should be no delta at all.

Would the combination of the 20 mm rod and square-pillar measurements help distinguish curvature-related deposition effects from a contour offset or motion-planning issue? My G-code analysis describes the intended path and bead envelope; it does not, by itself, prove a firmware defect, but my instincts are screaming a firmware gcode interpretation failure.

For measurement transparency, my caliper displays 0.01 mm increments. I cannot claim a measured 4.825 mm result for the 5.025 mm coupon; 4.825 mm is only the arithmetic expectation if a 0.20 mm offset is assumed. I will preserve the displayed readings, including any variation, rather than force the new results into that assumption.

In holes it is proven that round holes get smaller due to the rubber band effect and square holes do not.
Therefore the square poles test.

The rubber band effect gets less on bigger holes, therefore the 20mm one, to verify if the deviation gets less.

The arcs in the gcode would normally eliminate the motion planning, so differences there, might be an indication of an issue in the firmware. Maybe not so much a bug, but rather a particular tolerance that is used internally.

And my wall order swap was intended to see if the deviation would increase. Theory behind this is that in the standard wall order the outer wall leans against the inner one. Reversing the wall order, the rubber band effect might be more dominant as the outer wall has nothing to lean against.

In the latest V1.4 firmware of the H2D, I know there is added compensation for holes. Not sure if your H2C has this already.
Also not clear yet if the firmware only compensates on all small diameter circles, or that it explicitly detects holes.
Given the firmware changes, your results might change after the next firmware update.

One more addition to consider is feed rate. High feeds will essentially increase the rubber band effect as the viscosity of the filament is dragging the bead inward. Very slow (possibly none functional) feed rates should reduce the rubber band effect also.

I really appreciate your efforts because these tests consume a lot of time.

According to a lot of quality rules, the resolution of a measurement device, is not equal to the accuracy it can measure.

What I learned decades ago before digital measurement equipment was commonly available, was that the accuracy for analog equipment was 10 times its resolution.
A metric tape measure would have an accuracy of 10mm in that context.

Using this rule on your caliper would suggest 0.1mm accuracy is the minimum.

However, according to ISO-13385 for a digital caliper a measured length of 0–50 mm should have an accuracy of ±0,020 mm and above 50mm ±0,030 mm

But the manufacturer should give these details also.

Precision (accuracy on repeatability) however is another factor that also is of influence. But let’s keep this out for simplicity.

I printed the 6x6 Lego grid on my X1C,and the 5 mm studs do measure about 4.8 mm.

However, I also created two 5 mm cylinders, 12mm tall, in Fusion, one as an STL, one as a STEP. I printed those and a Studio primitive of the same size, and all three diameters came out between 4.96 and 5.00 mm.