Pick ground on the map. LoAm downloads the public elevation raster for it, turns it into a solid, and writes a binary STL a slicer will take without repair.
Every export is verified first: each directed edge must be canceled by its opposite. That is the closed, consistently oriented test a slicer needs, and STL does not guarantee it.
Elevation is the public Terrain Tiles raster on AWS, decoded as meters = red × 256 + green + blue ÷ 256 − 32768. It resolves about 30 m worldwide, 10 m over the United States; ask for a finer grid and the readout says the extra detail is interpolation.
The patch fetches itself. Move or resize it and it re-samples once your hand stops; a reply from an area you have left loses to the newer one. Everything below the fetch re-cuts from what it holds, without the network.
The basemap, place search and boundaries are OpenStreetMap. Outside the outline the map is drained of color, so the part you will print is the only part in color. Fit, under the zoom buttons, recenters the patch at a zoom that frames it.
Rectangle, rounded rectangle and ellipse come from the patch. Polygon is 3 to 12 straight edges you can turn about its own center and fillet — at 1 the fillet is the inscribed circle — with corners you drag like a curve’s dots; changing the side count lays them out regular again. Drag a loop on the map and it becomes a curve, editable by its dots: Lazy is a closed uniform cubic B-spline, curvature-continuous and forgiving of a finger; Freeform is a cubic Bézier through each dot.
Metablob is one to eight soft points. Each carries a radius, they are summed into one field, and the outline is a single level of that sum — so two that come near swell into one another with a fillet no one drew. Blend is how far a blob reaches to join its neighbors, in multiples of its own radius; it is solved back out of the radius, so it changes what joins and never how big a lone blob is. Blobs that reach nothing stay separate, and the note under the sliders says how many pieces that leaves.
Drawing sets the patch to what you drew, and the dots move with it so the curve keeps its shape; drag a dot outside the patch and the patch grows on release. The readout names the outline the model on screen was cut to, so the map and the model can never quietly disagree.
In search, clicking a result frames the patch there and leaves your settings alone; Border cuts the model to that place's real outline. Many cities are filed as a point with no border of their own — Cape Town, Athens, Copenhagen — and Border on one of those cuts to the administrative area it sits in, which the outline panel then names.
Each row says what its border is, which matters most for islands: a country’s administrative border is a maritime one, so Saint Lucia’s encloses 67 × 85 km of sea around an island of 22 × 45, and the island is usually a row of its own. Where there is no island row — an archipelago state has none — Keep only the land cuts at the shoreline instead.
All eight run through one outline solver, so tiles, keys, hollowing and engraving behave the same on every shape.
Exaggeration multiplies the vertical scale, up to 50×. Its slider is logarithmic, so the 1–3× range most models want is not crushed into the first few percent; the field beside it takes an exact number. The readout keeps showing the true horizontal ratio.
Curve reshapes the relief instead of scaling it — below 1 lifts the lowlands so valleys read, above 1 sharpens peaks, 1 is honest.
Datum sets where zero sits. Lowest ground means ground: sea level and below never sets it, whether the recess is on or off, or an island on real bathymetry — or one corrupt sample — would put the land in the top quarter of a very tall box. Water recess sinks everything at or below sea level so lakes and sea read as flat inset. Smoothing softens the 1 m steps in the source, which otherwise print as terracing. Detail, Smoothing, Curve and Datum sit in a drawer at the foot of Print; its lid lists them, and prints the value of any that is off its rest.
Keep only the land cuts the model at the shoreline instead, so an island prints as the island. The cut is the sea-level contour of the same grid the terrain comes from, so bays, lagoons, lochs and separate islands all come through at whatever the grid resolves, and a coast that runs off the patch simply closes against its edge. Islets under 0.8 mm across are left out and counted in the readout — a nozzle cannot lay two walls that close. The readout also says what fraction of the patch is land, which is the difference between an object and a flat sea with a bump in it.
Elevation bands cuts the model into stacked bodies at equal steps of elevation — the contour model, in solids. They come out as one 3MF, each body carrying its own color, stacked where they belong. A slicer keeps them in place; assign a filament to each.
Four bands is the ceiling because four is what a spool changer holds. Bands are also the cheap way to print color: color in horizontal layers costs one filament change per band, where color crossing every layer costs a change per layer — 3 changes against 153, on one published test.
Water and the boundary rib are parts on the same terms, on or off independently of the bands. Water lifts everything at or below sea level out as one body. The rib lofts the outline — raised, standing on the ground it follows, or inlaid through the whole depth so the boundary reads from underneath. Each is cut from the same field as the outline, so the parts meet the model flush instead of overlapping it.
The colors are what a slicer will show you, not what the plastic will be. Map each body to whatever is loaded.
The base slab is the plinth under the terrain; keys and engraving live inside it. Hollow removes the middle as a sealed cavity, so the piece still sits flat and slices watertight.
Splitting gives one STL per piece, each centered on its own origin. Tongue-and-groove keys sit below the lowest ground, and seam clearance is halved on each side — 0.2 mm suits most FDM printers.
Text goes on the underside, reading when you turn the piece over, or around the sides. It is cut into the same grid as the terrain, so it never breaks the mesh. Grid is the built-in 5x7 of solid cells, capitals only; the others are set by the browser at the model's own sample spacing and keep the case you type. Underside text can be turned to any angle and is refitted after turning, so it stays on the piece.
Drag the block by its dot on the map to place it. Dropped inside the outline it is cut into the underside where you left it; dropped on or beyond the outline it moves onto that wall, at the nearest point. The sides and the bottom are the only two places it goes — never the top — so no key is held down to choose between them, and the panel says which face it landed on.
Side text sits in the wall below the lowest ground, the only band where the outline has wall all the way round, and slides anywhere along it and up or down within it. It never runs across a corner: on a shape with faces it is fitted to the face it lands on, so a letter is never folded in half across an edge, and on a curve — where wrapping is the point — it wraps.
A tall skirt gives it more room; on flat ground that wall is the slab, so a thicker slab gives taller text. Ask for more than the patch or the face has and the text is shortened; the note under the controls says how tall it came out.
The text fills itself in from wherever you are on the map, and keeps following as you move, until you type your own — after which it stays put. Fill from the map hands it back.
J. Thatcher's Terrain2STL (jthatch.com/Terrain2STL) showed that a browser and public elevation data are enough to make a printable landscape, and is the reason this exists. It reads SRTM3 at about 90 m. LoAm is an independent implementation on the 30 m raster, and adds outlines other than a box, a relief curve, hollowing, keyed tiles and engraving.
By Phil Renato, written with Claude (Anthropic). More at renato.design.
Basemap, place search and boundaries: © OpenStreetMap contributors, under the Open Database License (ODbL) 1.0, via the OpenStreetMap Foundation tile and Nominatim usage policies.
Elevation: Terrain Tiles, an AWS Open Data set built by Mapzen/Tilezen, which requires this attribution in full:
Those sources carry their own terms: 3DEP, SRTM, GMTED2010 and ETOPO1 are public domain; LINZ is CC BY 3.0 NZ; the UK LIDAR composite is OGL v3; Austria's DGM is CC BY 3.0 AT; Kartverket and Geoscience Australia are CC BY 4.0; Canada's CDEM is under the Open Government Licence; Mexico's INEGI is under its free-use license; EU-DEM is Copernicus data; ArcticDEM is unrestricted.
Every export is a zip carrying ATTRIBUTION.txt beside the mesh with that block in full, so it cannot be separated from the model. The 80-byte STL header points at it.
LoAm itself is MIT.
Start over, beside the name at the top of the panel, returns everything to the opening state and forgets what was saved. It asks twice, because a drawn outline is worth more than one stray tap.
There are none. Every variant is on a visible control or on the drag itself.