Lamina GitHub

Turn a 3D model into flat parts you can cut.

Lamina slices, unfolds and nests a model into parts for paper, cardboard, plywood, acrylic or sheet metal — then checks that the result actually holds together, and hands you the cut files for a laser, a CNC router, a plasma table or a vinyl cutter.

A free replacement for Autodesk's discontinued Slicer for Fusion 360 (and 123D Make before it) — every construction technique of the original, plus sheet-metal ribs, connecting strips and per-slice edits it never had. Runs on your own machine; your models never leave it.

A quick word about the word “slicer”, because it trips almost everyone up: this is not the 3D-printing kind. Lamina works out the flat pieces — layers, stacked slices, egg-crate slots, ribs, a whole surface unfolded flat — that you cut from a sheet and put back together into the shape.

Try it in your browser Run it locally Source on GitHub ♥ Support on Ko-fi

Free software under the AGPL-3.0 · early alpha, and bug reports are very welcome

The browser version is the whole program running on your own machine's CPU: a bundled model slices in seconds, a detailed scan in under half a minute, with a progress bar while it works. The local and Docker versions are the same code and a little faster still.

The Lamina interface: parameters on the left, a 3D preview of a radially sliced head in the middle, cut sheets below.
The 3D preview and the cut sheets are always the same plan.
5construction techniques
13folded-panel joints
6cut and 3D formats
0.2–9 mmpaper to plywood

Four steps, one screen

Load a model, choose how to build it, fix what will not work, export the sheets. There is no render step: change a number and the 3D preview and the cut sheets rebuild together — instantly on a slice job, a few seconds on a detailed folded one.

Orbit, zoom and pan the assembled result. The original model stays as a ghost behind the parts.
  • Load — STL, OBJ, 3MF, PLY, OFF or GLB; STEP and BREP with the optional CAD extra.
  • Prepare — turn it upright, scale it or give a target size, round off details too small to cut, smooth noise, hollow it out or thicken thin walls.
  • Build — pick a technique and its parameters; move, tilt or delete individual slices by hand.
  • Material — 21 of them, from paper, greyboard and EVA foam through plywood, basswood and acrylic to steel, stainless, brass and copper, each with the thicknesses it is sold in (gauges, fractions of an inch, ounces of copper), the sheet sizes, a density for the weight, and only the machines that can cut it — and PLA and PETG to 3D-print the parts at full size, nested plate by plate on your printer's bed and downloaded as one 3MF per plate. Not on the list? Keep your own, with its own density.
  • Check and export — physical checks with one-click fixes, then cut files, a solid, or a scaled 3D-printable prototype.
The model tab with rotation rings around the model
Drag a coloured ring to turn the model, or use quarter-turn buttons. Round, smooth, hollow or thicken it first — the same remesh that repairs meshes that are not watertight, and a curve stays a curve.

Five ways to build a model

Each technique on a shape that suits it. Switching technique keeps your material and sheet settings, and remembers the parameters you had for each one.

Stacked slices

Parallel sections along one axis, touching or with an empty space between them — the topographic look. Hold them with dowel rods (round, square, hexagonal, cross or slot holes), flat pegs cut from the same sheet, or tabbed spacers that keep the gap. Connection points can repeat through the whole stack, be random per pair of slices, or follow 3D lines you draw; alt-click a slice to place one by hand. The outline can also follow the surface across the slice's thickness, which is what Autodesk's Slicer called 3D Slices — cut it, then sand down to the shape.

In the clip: a 260 mm porcelain horse rearing on its base (the bundled horse_statue), in 3 mm cardboard: side profiles across its width with a 4 mm gap, on 2 mm dowels at random points; then the holes round, hexagonal, cross-shaped and back to square. Across the width, each layer is a whole side view of the horse; layered up its height instead, the body would sit over the slanted hind legs with nothing to hold it. Every dowel keeps a 2 mm wall to the outline.

Parameters: axis · spacing or count · gap · outline mid / outer / inner · connector type, size and hole shape · placement · points per island · per-slice offset, tilt, roll and thickness.

Interlocked slices

Two perpendicular families of slices that slot together egg-crate style, one family inserted from above, the other from below. The slot depth is computed per crossing by casting the intersection line against the mesh, so hollow and asymmetric shapes notch correctly where the earlier tools left them loose. Notch ratio, mouth flare and dog-bone relief for routers are all there, and the checks add a crossing slice wherever a region would float.

In the clip: the torus in 3 mm cardboard, 9 by 7 slices; then 6 by 5, 12 by 9 and back to 9 by 7. The denser it gets, the more of the surface the edges describe — and the more slots to cut. A torus because every vertical line meets its tube once: the head's ears sit above its skull on the same lines, and the insertion check rightly refuses that.

Parameters: assembly axis · count or spacing per family · grid rotation · extra slices at chosen positions · notch ratio, flare and relief · slot offset for a press or a loose fit.

Radial slices

Half-slices fanning out from an axis you can move and turn, locked by horizontal ring slices with radial slots. Made for shapes with a centre line — vases, heads, figures, lamps. Lamina works out the smallest core the slices can share around the axis and refuses a smaller one instead of letting them collide there.

A shape with several centres — a dumbbell's two balls, a snowman's three, a head above a body — takes an axis each. Neighbouring lobes are parted by a flat plane between their axes — placed at the waist for you, and shown as a translucent sheet you click and move or tilt like any slice — so the fans never run into each other, and a spine — one full plane cut in one piece through every axis, slotted into every ring — is what holds one lobe to the next. It is automatic and comes from how the axes lie: on one line, as many as you like; on one plane, exactly one, with every fan turned to start on it; on no plane at all, Lamina says so and names the fix rather than letting the lobes come apart. Every axis is drawn in the 3D view where it passes through the model: drag it whole or by either end — it stays on the plane the others share, so the spine survives the drag — alt-click the model for a parallel axis through that point, split one in two for a snowman, alt-click an axis to remove it. The bundled dumbbell — two spheres on a neck — opens this way: an axis through each ball, the lobes meeting at the neck, one spine through both; the snowman opens with a vertical axis through each of its three balls and one spine up the leaning stack.

In the first clip: the scanned head about one axis, 10 half-slices and 6 rings in 3 mm cardboard; then 6, 14 and 10 slices, and 3, 9 and 6 rings. More rings lock it stiffer, more slices smooth the silhouette.

In the second: the dumbbell, an axis through each ball at right angles to the other — across the lower ball, up the upper one — and the plane between them at the neck; then one axis through both — the fan cuts across both balls, which is what an axis each is for — back to two, and the neck plane raised 30 mm and tilted 15°, like any other slice.

Parameters: axis and centre · slice count · fan angle · core diameter · ring count or spacing · centre hole for a rod.

Curve — ribs

Ribs perpendicular to a curve you draw through the model, so they follow a bend instead of staying parallel: the vertebrae of an animal, the frames of a hull, the arch of a bridge. Spine slices in the curve's plane lock the ribs together. The turn between neighbouring ribs is limited so they never meet inside the model; the note tells you when a gentler curve or fewer ribs would keep them square to it.

A leg, an arm or a tail takes a branch: a straight line from where it leaves the body to its tip, with ribs square to it and a spine of its own that reaches back into the body and slots into the body's ribs. A horse then stands on legs that are held, not sliced across by ribs meant for its back, and the body ribs can turn further, because the legs no longer count toward how far the material reaches. Shift+alt-click a hoof to add a branch, drag its ends to move it, alt-click it to remove it. A branch that starts past the body's ribs would hang loose, so Lamina says so and tells you where to move it. The bundled horse opens this way: its curve from tail to muzzle and a branch down each leg.

In the clip: the horse with 20 ribs along a ten-point curve that runs down the back and climbs the neck to the head, locked by one spine, and a branch down each leg — 55 parts and no errors (the orange line and blue dots are the curve — drag a dot to move it, alt-click the model to add one, alt-click a dot to remove it; the rods down the legs are the branches, drag an end to move it); then 8, 12 and 20 ribs, and the head control point lifted and put back.

Parameters: curve plane · control points · rib count or spacing along the curve · spines · branches.

Folded panels

Papercraft nets, as Pepakura makes them, and more: the surface simplified to the facet size you choose, unfolded into flat panels with score lines, and joined at the seams with any of thirteen joints — glue tabs for paper and card, laces and rivets for leather and cloth, strips for cardboard, slotted angle ribs for sheet metal. Panels grow until they would overlap themselves or run off the sheet. Works on closed shapes and on open surfaces such as a mask or a clothing pattern; separate mode cuts every triangle alone for shapes with deep cavities. A sheet too thick to fold, like plywood or acrylic, is caught before it is cut: one click joins every face with ribs instead.

In the clip: the cow at a 15 mm facet in 1 mm card, 19 panels with tabs; then laced, a coarser 25 mm facet, ribs at that facet, tabs again, and back to 15 mm.

Parameters: facet size · growth strategy and faces per panel · joint · hole, inset, spacing and tab sizes · rib width and material · perforated folds · seam numbers on both panels.

Folded panels, thirteen ways to join them

Glue tabs for paper, laces and rivets for leather and cloth, connecting strips for cardboard, slotted angle ribs for sheet metal. Joint sizes adapt to the triangle they sit in, and a hole or slot never crosses a fold line.

The cut sheet of a cube net with the seam joint on every seam
seam — plain edge, glue or sew it. Every picture is the same 90 mm cube net; pick a joint above.
A pyramid's folded panels pulled apart with the explode slider, the angle ribs floating at their seams
A pyramid pulled apart with the explode slider: the angle ribs sit at the seams, one per cut edge. Each rib is cut at the real fold angle and carries that angle as its label.
  • Every face on its own — separate mode cuts each triangle alone and laces it to its neighbours, which works on any shape, however many cavities and undercuts it has.
  • Panels that fit — panels grow until they would overlap themselves or run off the sheet, with three growth strategies and an automatic mode that tries all of them, up to 800 faces, and keeps the fewest, most compact panels.
  • Detail you choose — set the average triangle edge in millimetres, not an abstract count.
  • Numbered seams — the same number is engraved beside the joint on both panels, so mating edges are easy to find on the cut sheet.
  • Different material for the ribs — ribs can be thicker than the panels; the slots follow.

The unfolding follows the papercraft literature — minimum-angle spanning trees, strip-based approximation, overlap-driven cuts. The algorithm notes list what was taken from which paper.

Move a slice, watch everything follow

Click a part in the 3D view to select it. Drag the yellow arrow to slide it along its normal, shift-drag to tilt, ctrl-drag to roll, or use the sliders.

The selected part is highlighted on the cut sheet — and clicking a part on the sheet selects it in 3D. Clicking any warning does the same.
Step through the assembly part by part, then explode it — the same order you would build it in.
  • Alt-click a slice to place a dowel or peg exactly where you want it, to add a control point to the curve, or to add a radial axis through that point — then drag the point or the axis where you want it. Shift+alt-click a hoof to give the curve a branch down that leg.
  • Per-slice edits — position, tilt, roll and thickness, so you can mix materials in one model.
  • Material look — cardboard, paper, plywood, steel or plastic, to judge the result before cutting.
  • Panel transparency to see the connectors inside a folded shell.
The plane between two lobes of a radial job is a part like any other: select it, slide it up the waist, tilt it — the fans on either side follow, and every step still slices clean.

Draw the spacing

Even spacing wastes slices where the shape barely changes and starves it where it does. Tick vary the spacing and a graph appears under the 3D view: the distance between neighbouring slices against the position along the model. Drag its points and the model re-slices as you let go.

The vase: dense at the foot, the shoulder and the lip, sparse up the straight sides. The ticks under the graph are where the slices went. Keep the count and the drawn spacings scale to span the model, or keep the spacings and the count follows.
  • Every technique — stacked and curve along their length, interlocked with a graph per family, radial as the angle between planes round the axis, periodic so the fan closes on itself. The curve never overshoots its points. Four bundled examples open with one: the vase, a rippled slab, a berry and a hook.
  • Shift the stack — move every stacked slice plane along the axis by the same amount, so one slice lands on a rim, a shoulder or the middle of a hole instead of wherever the even spacing put the nearest one.

It tells you what will not work — and offers the fix

Lamina checks the plan as a physical object, not just as geometry. Every message says what is wrong and what to do about it, and most carry buttons that apply the change.

The checks tab listing errors with one-click fix buttons
Errors mean it will not work, warnings mean look at it. Auto-fix adds crossing slices, rings or spines where pieces float, and lists everything it did. It never deletes a piece of your model: what nothing can hold stays, with its error and the fixes to click.

Held together

Each region must reach the main body through a slot, a connector or glued contact. A head joined to nothing is reported as a separate group.

Cuttable

Parts too small or too thin to handle, bridges that snap, tips and slivers too thin for too long (the point of a radial slice, the wall left beside a slot — trimmed off blunt at a click), slots that sever a part, holes too close to an outline, two cuts overlapping.

Buildable

Slices of one family that collide, radial slices meeting at the axis, slots opening away from the insertion direction, parts larger than the sheet.

A coverage figure tells you how much of the model the parts actually represent, so a leg or an ear that no slice reaches does not slip through unnoticed. A boxy model sitting a few degrees off square, a rotation left at 85 or a CAD export that came out tilted, would cut every straight edge as a staircase: Lamina says how far off it is, and square it up turns it true in one click.

A cube left 8° off square: every layer steps out from the one below. The Model tab says how far off it sits, and one click stands it straight.

Nesting, labels and cut files

Two cut sheets with nested parts, labels beside each part
Parts are rotated and packed against each other's outlines, not their bounding boxes, and small parts go into the hollows of big ones — above 150 parts a rectangle packer takes over to keep the preview live. A layer that falls apart into separate pieces is cut as separate parts, each nested on its own. A label goes on its part wherever the whole of it fits on the material, clear of holes, numbers and arrows; otherwise beside it in free space with a leader line, never over another part.
A cut sheet close up: part names in a single-stroke font, a number beside every dowel hole, two small arrows at the middle of each part
Everything engraved is drawn in a single-stroke font: a few open lines per letter, which the laser runs in one pass in every format. Dowel Z-3a joins Z-3 to Z-4, and 3a is engraved beside its hole on both — read a slice's holes by their numbers and the stack goes together without the key. Two small arrows at each part's middle say which way is up and which face is the front.
  • SVG and DXF with separate layers for outer cuts, inner cuts, score lines and labels, with or without the labels, in millimetres, centimetres or inches. The SVG opens directly in LightBurn, the Glowforge app and xTool Creative Space.
  • PDF as one page per sheet, and EPS per sheet.
  • One file per piece when your cutter wants them separately — identical pieces once, named design, part, material, thickness and quantity (egg_v1.0 R-1a plywood x2.svg), and a cut list with each part's size. Every file starts with the design's name, so two designs' files never mix in one folder.
  • The model's name on every part, as a code of up to four letters — BUNN Z-3 beside EGG Z-3, so parts of two models cut on the same day never get mixed up; type your own short name if the derived one is not to your taste.
  • Each part is one group in the SVG — its cuts, fold lines, numbers, arrows, label and leader line together, so a part dragged elsewhere in Inkscape or Illustrator takes its labels with it.
  • What it weighs — the parts as cut, holes and slots taken out, each at its own thickness; the sheets you buy and lift onto the machine; and the dowels, for what the finished model weighs. Grams and kilograms, or ounces and pounds when you work in inches. It matters most for big pieces and for metal, where it adds up fast: when the model has to hang, you can bring the weight down before cutting anything, with a thinner sheet, another material or a change to the model.
  • An assembly key — what this technique's labels mean, then every part with its centre, what it slots onto, and the order the 3D view builds them in. The same legend sits in the export tab, so the scheme is clear before the cut rather than guessed after it; a tickbox leaves the file out of the zip.
  • Puzzle mode — every part engraved with a short code instead of its position, and the per-piece files named after it, so nothing on the parts says where they go. The app still shows the real labels, the key maps them back, and leaving it out of the zip keeps the puzzle a puzzle.
  • An assembly video — the build order played and recorded in the page itself as a .webm, so you can send someone the film of it going together. Nothing is uploaded.
  • One thickness per sheet — change a part's thickness and it is cut from other stock, so it gets sheets of its own. Every sheet says the stock it needs, and the file names carry it as soon as a job mixes them.
  • STL of the assembled result, or of a single part.
  • 3MF prototype — every part flat and scaled, thickness raised to something printable, its label engraved into the surface, as separate named objects your slicer can arrange.
  • Kerf and fit — kerf compensation when your machine does not do its own (off by default), a fit offset on every slot, dog-bone relief for routers, and a 10 cm or 4 in scale-check bar on every export.
The export tab with what the job weighs, download links and prototyping options
The export tab: what the job weighs, the downloads, and the prototyping set for test-printing a design before cutting it.

Made with Lamina

What people have cut with it. Made something yourself? Send a photo — by email, no account needed — and it goes up here, credited the way you ask. Or post it on Instagram or X with #lamina3dapp, or in #show-what-you-made on the Lamina Discord; I look there too, and ask before adding anything.

Where it stands

Early days. Lamina is very new — an alpha, free under the AGPL-3.0 and written in the open by one person. Every construction technique of the original Slicer is in and the physical checks go further than it did, but expect things that do not work the way you expect yet. Please go and find them, and tell me what broke — every report makes the next person's cut come out better, and nothing is too small to mention. While it is this young, read the checks and test-cut before committing expensive material.

The button below takes a sentence and fills in the rest, then opens either a prefilled email or the prefilled issue form for you to send — email needs no account anywhere, and an issue is public where an email is not. From inside the app it also gathers the technique, every setting and what the checks said, and saves the model ready to attach unless you untick that box, which is what makes a report reproducible. It shows you what it has gathered before anything goes anywhere. By hand works just as well: lamina.3d.app@gmail.com or the GitHub issue form. A question, an idea, or stuck on a build? Ask on the Lamina Discord, where other people cutting with it can answer too.

Report a problem Report it from the app, with the model

Not there yet

Seams are chosen automatically — you cannot click an edge to add or remove one. Insertion is simulated as a straight slide along each crossing line — a part that would have to turn or flex on its way in is not caught.

Where it gets rough

Nesting is greedy: each part takes the lowest, leftmost spot its no-fit polygons leave, so two concave shapes that would need to slide into each other pack looser than they could. A detailed folded model takes a few seconds per change.

What you need

Python 3.11 to 3.14 (uv fetches it), uv, and a browser with WebGL — or just Docker. Several people can share one server, each browser tab with its own session, but Lamina has no login of its own: put it behind your proxy's authentication before it faces the internet.

The parity notes compare Lamina option by option with the original Slicer and say what is still missing. Issues and pull requests are welcome — a new construction technique is one file in core/modes/, about 70 lines; checks, nesting and export are shared.

Run it

Three ways in, and the first one needs nothing at all. Whichever you pick, your models stay on your own machine: Lamina has no accounts, no uploads and no cloud.

1 · In this browser — nothing to install

Open the app and use it. The whole program, Python and all, is downloaded into the page the first time (about 60 MB, cached afterwards) and runs inside the tab. Best for trying it and for everyday models — a few hundred thousand triangles slice in seconds to half a minute. Past roughly 50 MB of mesh it warns you: that size takes minutes in a tab, and can run the tab out of memory. It is not a ceiling Lamina sets, it is what a browser tab is; the two options below have neither limit.

2 · On your computer — double-click, no commands

The fastest version, no size limit, works with no internet after the first run. You do not need to know what a terminal is; a window with scrolling text is part of it, and you can ignore it.

  1. Download Lamina: lamina-main.zip (about 30 MB).
  2. Unzip it — double-click the file on Windows or macOS — and open the folder that appears. Put it somewhere you will find again, like Documents.
  3. Double-click the starter for your computer, right there in the folder: Start Lamina (Windows).bat · Start Lamina (Mac).command · Start Lamina (Linux).sh.
  4. The first run asks once whether it may install uv — a small tool that fetches Python and the libraries into your own user folder, nowhere else. Answer y. It then downloads them, which takes a few minutes and happens only once.
  5. Your browser opens at http://localhost:8000 and Lamina is running on your machine. Leave the text window open while you work; closing it stops Lamina. Next time it starts in seconds.
  6. Updates come by themselves: each start checks for a new version of Lamina and fetches it when there is one. Offline, it starts the one you have.

If macOS refuses to open the file ("cannot be opened because it is from an unidentified developer"): right-click it → Open → Open. That is macOS asking whether you trust a file you downloaded; you only have to do it once. On Windows, SmartScreen may ask the same way: More info → Run anyway. On Linux, if double-clicking does nothing, mark it executable (Properties → Permissions, or chmod +x) and choose "Run in Terminal".

Is there a normal installer — a .dmg, a .exe? Not yet. An installed app has to be signed by Apple and by Microsoft or their systems block it, which costs money every year and is not something I can promise to keep paying for a free tool. The starter above is the same thing without the signature: one double-click, and nothing installed outside your own user folder. If you would rather work from a terminal, the commands are below.

3 · As a server, with Docker

For a workshop machine, a NAS or a maker space: one image with everything in it, each browser tab with its own session, idle ones cleaned up after a day. Lamina has no login of its own — put it behind your proxy's authentication before it faces the internet.

docker run -d -p 8000:8000 -v lamina-jobs:/app/working-files ghcr.io/marcelfarres/lamina:latest

docker-compose.yml is the same thing as a stack for Portainer, Dockge or Komodo. To update: docker pull ghcr.io/marcelfarres/lamina:latest and start it again (docker compose pull && docker compose up -d).

From a terminal

If you have uv already, the starters are only wrapping these:

uv tool install --python 3.14 lamina3d     # "lamina3d[cad]" adds STEP and BREP import
lamina3d                                   # opens http://localhost:8000
uv tool upgrade lamina3d                   # when a new version is out

If lamina3d is not found, run uv tool update-shell and open a new terminal, or start it with uv tool run lamina3d.

The Model tab opens on a bundled example, and the examples folder holds 24 in all — geometric shapes, a scanned head and animals; the dumbbell and the snowman open with a radial axis per ball and a spine through them all, the horse with its ribs along a curve and a branch down each leg, and the horse statue in stacked side profiles. From a clone of the repository (git clone https://github.com/marcelfarres/lamina.git, then uv sync) the same pipeline runs headless, so it can be scripted or put in a build:

uv run python -m core.plan examples/egg.stl --mode interlocked --set nx=5 ny=4 --out out/egg
uv run python -m core.export out/egg.json --out out/egg_cut --fmt svg dxf pdf --labels
uv run python -m core.solid out/egg.json --proto out/egg_proto --scale 0.4 --labels groove
uv run python -m core.plan examples/egg.stl --list-params

Support, if you would like to

Lamina is free and always will be: AGPL-3.0, no account, no upsell, no paid tier waiting quietly in the wings. None of that depends on anyone giving me anything.

If you like this or any of my other projects and you want to support the work, a donation is very welcome — only if you can comfortably afford it, and with no pressure at all.

♥ Support on Ko-fi Send a bug report

There are other ways to help that are worth just as much: tell someone who cuts sheet material that this exists, show me what you made with it, or open an issue when something goes wrong. Honestly, a good bug report is worth more to me than a coffee, and writing one takes a sentence: the report adds the settings, what the checks said and every step since you loaded the model, and shows you all of it before anything is sent.