Incomplete: designed and machine-checked; nothing printed yet

Print coupon · designed and gated, nothing printed yet

How tall can a thin tower stand?

Six single-wall towers on one plate, from two beads wide to twelve, every one commanded to 100 mm. The plate is a question written directly in gcode: which diameters reach the top? And it carries its own ruler, so even a wrecked run still reports its answer.

Where this is right now

It has now been printed, and the first run did not answer the question. On 2026-08-05 the six tower plate ran on the K2 and was stopped by hand at about 44 mm of the commanded 100. All six were standing at that height. That is not the same as all six standing on their own, and the reason is the first real finding.

The plate came off webbed in fine filament hair. Printing six towers layer by layer means the head crosses between them on every layer, and each crossing drags a molten thread. The web braced the towers to each other, so a thin tower that appeared to stand may have been held up by its neighbours. The run cannot tell those apart. Measured off the emitted files, the six tower plate carries 53.0 m of travel and a single tower plate carries 0.6 m, so the web is a function of travel and nothing else.

Broken by hand after removal, the towers ranked in the order the geometry predicts: 4.92 mm broke easily, 6.56 mm took effort, 9.84 mm did not break. That ranking is a physical result. A height at which any of them fails is not, because none of them was taken to failure.

The 8.2 mm follow up failed twice before it worked, and both causes were ours. A single tower printed as a coiled rope rather than a column. Removing five towers had removed the cooling with them: six towers in rotation gave every layer 4.50 s to freeze, one tower gave it 0.57 s. The machine table also had the wrong spool, so the file commanded 230 C on filament rated 210. Corrected to 210 C with the part fan raised, the same geometry printed as a straight ribbed column.

Every number on this page that is not in this block is still a measurement of the gcode file rather than of a part. The question in the title, which diameters reach 100 mm, has not been answered by any run yet.

The bridges work, and that was the point of the towers. The plate exists so that something can be built between the posts. Spans laid every 10 layers between 8.2 mm towers at 25 mm pitch, 16.8 mm of unsupported air each, came out as taut parallel strands rather than sags, at full flow and 50 mm/s with nothing underneath them.

How the span is laid decides whether it is printable at all. The first attempt treated a bridge as a separate visit: lift clear, fly to the anchor, drop back down, extrude across. The validator refused that file twice over, for descending below the layer floor into finished work and for 96 travel moves inside the object. Both refusals were correct. The fix was not a smaller lift, it was deleting the visit: on a bridge layer the move BETWEEN towers becomes the extrusion. Nothing lifts, nothing descends, nothing travels, and the span leaves the wall it is welded into instead of landing on top of it.


1 · The question, verbatim

"0.8 nozel would not print it. and in general sub milimeter extrusions - is it even workable?" Oleg, asking about a bucket handle that a 0.8 mm nozzle could not draw. Then: "lets start with a coupons how high can we build thin towers vertically, once we have that primitive we can connect it with bridgest"

The plate encodes the answer the geometry forced: sub-millimetre width is real; sub-millimetre features are not. Every wall on this plate is a single 0.82 mm bead, so a sub-millimetre wall is just what this machine draws. But a free-standing round member cannot be thinner than two beads, because under that the toolpath circle is narrower than the bead itself, and the loop folds through its own centre. On this nozzle the floor is 1.64 mm. Section 3 draws why.

What no file can answer is how TALL each diameter stands before it stops standing. That number has to come from a physical run, which is exactly why this plate exists and why this page, so far, is a design document.

2 · The plate, as it will print

0 30 60 90 mm 1.64 2 beads 2.45 3 beads 3.27 4 beads 4.92 6 beads 6.56 8 beads 9.84 12 beads outer diameter, mm 6.000 6.000 6.000 mm, measured tall band at 60.1 tower 4 of 6, zoomed
front elevation, every silhouette from the emitted gcode. true scale: 100 mm tall, feet and collar bands included. the zoom dimensions the collars as measured.

The rungs are whole bead counts: 2, 3, 4, 6, 8 and 12 beads, which on this 0.82 mm bead means 1.64 / 2.46 / 3.28 / 4.92 / 6.56 / 9.84 mm. Counting in beads is what makes the result transfer: "four beads wide survived 100 mm" is a statement about any nozzle, while "3.28 mm survived" is a statement about this one.

The bottom rung sits exactly on the 2-bead floor, not safely above it. A plate that starts above the floor cannot say where the floor is. And every tower is commanded to the same 100 mm, so the thin end runs at a 61:1 height-to-width ratio and the thick end at 10:1. Failure, if it comes, arrives from the thin end.

3 · Why two beads is the floor

4 beads (3.27 mm) a real loop off the file toolpath circle 2.454 mm bead 0.82 mm wide bore left inside: 1.63 mm 2 beads (1.64 mm) the floor, on the file toolpath circle 0.82 mm bead 0.82 mm wide bore left inside: 0.00 mm toolpath = one bead wide. the wall is just solid. floor. laid twice 1.6 beads (1.31 mm) computed. no file exists: the generator refuses it toolpath circle 0.49 mm, narrower than the bead. inner 0.16 mm: covered again on every revolution. a blob with a seam, not a tower.
left and middle: real loops from the emitted file, bead width to scale. right: computed from the same bead width, because no file with this geometry exists; the generator refuses to write one.

A single-wall tower of outer diameter D is drawn as a circle of diameter D minus one bead. At two beads wide, that toolpath circle is exactly one bead across, and the wall closes into a solid section: the last real tower. Any thinner and the nozzle would orbit inside its own bead width, covering the same ground on every revolution. That is not a thin tower, it is an over-extruded blob with a seam, so the generator raises an error rather than emit it.

The floor is a feature floor, not a width floor, and the two are different. The generator's own notes record this project driving the 0.8 mm orifice down to a 0.735 mm bead elsewhere, and a narrower bead would lower the floor in proportion. That is a width ladder; this plate is a height ladder, and it does not pretend to answer the other question.

4 · A ruler that survives the wreck

A tall thin tower usually destroys its own record: it falls, and "somewhere between zero and the top" is all that survives. So every 25 layers, which is exactly 6.000 mm here, each tower steps out 0.30 mm for two layers and leaves a raised collar. Every fifth collar is a taller band, marking exact multiples of 30 mm. Count collars on any fragment, in any orientation, multiply by six, and the fragment reports the height it came from.

break break tall band +6 +12 +18 a fragment of tower 3, silhouette straight off the file, on its side
the silhouette is tower 3 as emitted; the break faces are the hypothetical. one tall band anchors a 30 mm multiple, three collars later the far face sits between 78 and 84 mm.

The pitch is the whole mechanism, so it is gated, not assumed: the generator computes 25 layers times 0.24 mm in exact decimal and refuses to emit anything that is not a whole number of millimetres. A ruler that read 5.9998 mm while its header said 6 would be a wrong number dressed as a measurement.

The collar is a declared perturbation, and it is falsifiable in two ways.

  1. If every tower breaks exactly at a collar, the collar is the cause, and the plate gets re-run with the ruler disabled before any number from it is believed. The generator has a switch for exactly that run.
  2. On the thinnest rung only, the collar opens a 0.60 mm bore for two layers inside a wall that is otherwise solid. A break at a collar on the 2-bead tower alone, but not on the thicker ones, is that defect talking, not the tower's limit.

5 · The foot, so it measures the tower and not the glue

start tower 3's layer 1, every point off the file centreline: thin line bead as it lands: a 1.97 mm wide band spiral ends ON the wall loop's seam: one stroke, no travel, no join
plan view of one tower's first layer, every point from the emitted file. the band is the bead at the width it lands on layer 1.

The thinnest tower standing on its own footprint would touch the plate along a ring one bead wide: a fraction of a square millimetre of bond holding a lever a hundred times longer. It would peel, and the plate would have measured adhesion instead of height, a wrong quantity arriving as a confident number.

So each tower starts on a spiral foot, wound from the outside in and ending exactly on the tower's own seam. Foot and tower are one continuous stroke, with no travel move and no joint to peel from. The base becomes a clamp instead of a hinge.

6 · Six towers in lockstep

1 2 3 4 5 6 layer 209 z 50.02 1 2 3 4 5 6 layer 210 z 50.26 every tower gets layer n before any tower gets layer n+1; the row is walked end to end, then walked back
two consecutive layers from the middle of the file, loops and travel moves as emitted. dashed is travel; the wandering is the seam walking one segment per layer.

Every tower gets layer n before any tower gets layer n+1, so each loop is revisited at a fixed interval at every height: the measured median is 4.50 seconds, and 414 of the 417 layers sit within a 10 percent spread of it. The exceptions are the two foot layers and the final parking move, each named by the measuring tool.

That constancy is the experimental control. If layer time drifted with height, cooling would degrade in lockstep with the variable under test and the plate could not tell sagging filament from a swaying tower. Here the comparison across diameters is clean by construction rather than by padding.

7 · Measured off the file, not read from the plan

Nothing on this page quotes the generator's intentions. A separate measuring tool parses the emitted gcode, rediscovers the towers by clustering the moves, and re-derives every quantity by a different route than the one that produced it. It then compares what it measured against what the file's header declares, and prints every disagreement as a bug. On this plate, all checks agree. The tool also corrupts a copy of the file four different ways and requires itself to catch each one, so a silent pass is not trusted either.

towerbeadsouter mmcollar step mmtop z mmfilament mm
121.6400.60099.94096
232.4520.59699.940186
343.2740.59899.940276
464.9160.60099.940455
586.5600.60099.940633
6129.8380.60099.940990

Plate totals: 417 layers at 0.24 mm, top of material at 99.94 mm, 2.66 m of filament, 7.9 g of PLA. One commanded speed for every move in the file, 50 mm/s, delivering 9.84 mm³/s. The motion model prices the print at 31 minutes, with a caveat it states itself: three of the five axis limits it uses are stand-ins carried from another machine, so treat the minutes as an estimate, not a measurement.

The same generator emits a twin plate for a 0.42 mm bead machine: same design, 875 layers of 0.08 mm to 70 mm, a 4.000 mm ruler pitch, a 0.84 mm floor, 2.8 g. Same measuring tool, same all-checks-agree. Two machines, one question, and the bead-count ladder is what lets their answers be compared at all.

8 · What this plate cannot say

  1. Nothing about bead width. Every tower here is one 0.82 mm bead wide; how narrow a bead can go is a different ladder, unmeasured by this one.
  2. So it cannot lower its own 1.64 mm floor. That floor is two of THIS bead; a narrower bead moves it, and only a width ladder can say how far.
  3. Nothing about bridging between towers, which is the next primitive, not this one.
  4. Nothing about any other machine or bead geometry than the two it was emitted for.
  5. It cannot separate swaying from overheating on its own. Layer time being constant makes the comparison across diameters clean, but a single failure height is a boundary, not a mechanism. What the operator hears during the run decides that part.
  6. It cannot prove a survivor's limit. A tower standing at 100 mm means at least 100 mm, nothing more.
  7. And the largest gap of all: none of it has happened. The plate is an instrument that has not yet taken its measurement.

9 · Before you reproduce anything, check your Z zero is where it says

This machine's Z zero sat about 0.15 mm higher than it reported, for nine days, and nothing caught it. Three attempts at a 320 mm part were cancelled over the same first layer. Each time the answer looked like more material, so the commanded line width went 2 mm, then 3, then 5, and the failure never changed shape: round strands sitting on the plate rather than pressed into it.

Round is the whole tell, and it is arithmetic rather than judgement. A bead has nowhere to go but sideways, so its landed width is the material rate divided by the gap it lands in. At 0.5 mm2 per mm into a real 0.10 mm gap that has to land 5 mm wide. Round at that rate means the gap was never 0.10, and no width can close a gap.

0.05 0.1 0.2 0.3 0.4 0.5 1 2 3 4 5 6 nozzle gap, mm landed width, mm one fixed rate (0.2 mm2/mm) 1 2 3 4 5 all five land 2.00mm: the rate scales with the gap where the nozzle actually was when the file said 0.10

Drawn from the ladder plate's own gcode. The dashed curve is one fixed material rate: it lands 2 mm wide at a 0.10 gap and only 0.5 mm at 0.40, which is what a nozzle sitting higher than it thinks produces. The five numbered points are ladder cells whose rate scales with their gap, so every one lands the same 2.00 mm. The vertical line marks where this nozzle actually was while the file said 0.10.

Two things were wrong at once and they wore the same symptom, which is why fixing either alone still read as failure:

  1. The Z reference. A gcode offset moves where zero is, and every commanded height in the file stays what it was.
  2. The first layer's material rate, which was computed for a 0.10 gap the nozzle never reached. Metered for 0.10 and laid into 0.20, a bead lands half the width its own header claims.

Measure it with a printed plate, not by feel. A paper feeler gauge said the error was 0.30 mm and it was wrong by a factor of two, because the spring steel sheet flexes under the shim and absorbs the quantity being measured. The ladder prints five cells at five real first layer heights, each labelled with its own printed digit, each metered to land the same width so the height is the only variable. It takes six minutes. Peel a corner of each: welded fights back and leaves colour on the sheet, and not welded lifts in one piece with a glossy underside.

On this machine all five welded, from 0.05 mm to 0.25 mm, so the window is wide rather than a knife edge. That is worth knowing before you go hunting for one magic number. The cell at 0.25 mm runs at zero offset, which is the exact setting that had failed three times, and it welded once its rate matched its gap.

zladder.py · the ladder. Five numbered cells, each with a second layer on top at the real part's own bead and fan
python3 zladder.py · then read the plate and pass the winning height to the part generator as one number

10 · Reproduce it

Everything is small dependency-free Python in the public crackle repository. The generator writes gcode directly, no slicer and no STL; run it with python3 and nothing to install. Every figure on this page is drawn from the emitted file by a script in the site repository, never by hand; the one computed panel is declared in its caption.

towercoupon.py · the generator. Its docstring is the full design argument, including what would falsify it
measure_towers.py · measures the emitted file, checks it against its own declarations, and corrupts a copy four ways to prove it can catch lies
towers-draw.py · draws this page's figures from the gcode
python3 towercoupon.py · emits the 0.82-bead plate  |  python3 towercoupon.py --printer f022 · the 0.42 twin  |  python3 tools/measure_towers.py out/towercoupon_*.gcode --selftest · the numbers above