Cut List Optimizer: How It Works, From Kerf to Layout

By Andy Greenstreet
Posted: October 29, 2026

Key takeaways

  • A cut list optimizer validates your parts list, nests parts across sheets, and reports per-sheet layouts with a waste figure.
  • Kerf width, grain-locked rotation, sheet trim, and cut method are the inputs that most change the resulting layout.
  • Free generators like Boxes.py and MakerCase produce cut-ready parts fast but do not nest arbitrary parts lists; paid optimizers do.
  • Manual planning still wins for one or two sheets, grain-matched panels, and broken offcut sheets.
  • Expect meaningful waste reduction on multi-sheet jobs and little to none on single-sheet projects.

A cut list optimizer takes your parts list and a sheet size, then arranges the parts on those sheets to waste as little material as possible, accounting for kerf, grain direction, and blade width. This article walks through the inputs, the nesting logic, a real 6-part shelf unit run end to end, and where free tools beat paid ones.

What does a cut list optimizer actually do with your parts list?

A cut list optimizer takes two things you already have, a list of part dimensions and the sheet sizes you buy, and arranges those parts onto sheets so you throw away as little material as possible. You feed it parts, it hands back cutting layouts you can follow or send straight to the machine.

The three stages: validate, arrange, report

Validate. The software checks each part against your sheet size and kerf. A part wider than the sheet, or a dimension entered as inches into a millimeters field, gets flagged before you cut anything.

Arrange. This is the nesting step. The optimizer tries placements, rotations, and sheet assignments to pack parts tightly. Whether a part can rotate matters a lot here, especially with grain direction in play, which is why settings like part rotation rules change the output.

Report. You get per-sheet layouts, a parts list, and a waste figure per project.

Free tools like Boxes.py do the same job for boxes specifically, and the project is free and open-source, which is why it shows up in every forum thread about box generators.

What inputs and settings (kerf, grain direction, blade width) change the result?

An optimizer is only as good as the numbers you feed it. Five inputs move the layout: kerf width, grain-locked rotation, part quantity, sheet oversize trim, and cut method. Get any of them wrong and the layout looks great while the parts come out wrong.

Kerf vs blade width on a saw vs laser

Kerf is the material your cut removes. A table saw with a 1/8" blade eats twice as much as a 1/16" laser pass, so the same parts list produces a different sheet layout for each machine. Set kerf too small and every finger joint runs loose; set it too large and parts come back undersized. If your laser cuts differently on X than Y, enter separate values per axis rather than one compromise number.

Grain direction and rotation locks

Most optimizers will happily rotate parts to squeeze them together. That is fine for a drawer divider, wrong for a tabletop. Lock rotation on any visible face so the grain stays vertical, and let the optimizer spin the hidden parts freely. GCrafter carries grain direction through from the design itself, so the parts list arrives pre-locked where it matters (see how a part is defined: https://gcrafter.com/learn/project-items/animation).

A worked example: one shelf unit's parts list through a cut list optimizer

The parts list and sheet setup

Take a 36in-wide, 48in-tall, 12in-deep Baltic birch shelf unit: two sides, four shelves, a top and a bottom, all 3/4in stock. The CSV-style input is six lines: part name, quantity, length, width, and a grain flag. Sides get grain locked along the 48in axis so the edge veneer reads consistently; shelves can rotate. Kerf is set to 0.125in to match a standard saw blade, and the optimizer adds that to every cut, which is why two 12in shelves never fit side by side on a 24in strip the way the raw math suggests. Sheets are set to 60in x 48in blanks, the half-sheet size most shops handle on a table saw.

Reading the resulting layout

The output is two sheets: sheet one holds both sides plus the top and bottom, grain-aligned, at roughly 80% utilization; sheet two carries the four shelves with room left for a future parts run. The numbers to check are utilization, the cut count, and whether any part shows as rotated against its grain flag. A free generator like MakerCase handles the box-and-panel stage of this same job, but a general cut list optimizer is what stacks six parts across multiple sheets and reports the waste. Tools like GCrafter take the opposite entry point: you define the shelf unit parametrically and it produces the parts, so the list feeding the optimizer is generated rather than typed.

How do free cut list optimizer tools compare to paid cut list software?

Free tools win on speed, paid tools win on yield. Boxes.py and MakerCase generate cut-ready parts in seconds, but they work from fixed recipes: box types, tray types, a handful of parameters. If your design fits their mold, you're done in two minutes. If it doesn't, you're exporting DXFs and fixing them by hand.

Paid optimization software earns its price on the parts list side: it nests arbitrary parts, rotates around grain direction, and prints labels so a 4x8 sheet doesn't become a guessing game. Free generators don't nest at all — you place parts yourself in LightBurn or your CAM tool.

  Boxes.py / MakerCase GCrafter Paid optimizers
Input Fixed box/tray recipes Parametric joints you design Arbitrary parts list
Nesting None None Automatic, grain-aware
Kerf Per-axis on some models Set per joint Set per sheet/machine
Labels No No Yes
Cost Free Free to design, you cut the parts Subscription or license

Honest limits: GCrafter handles the joint and part geometry — see the component lab at https://gcrafter.com/learn/components-part-lab/component-action — but it won't nest your sheets or label parts. Pair it with a dedicated optimizer for that step.

How do you read and act on the cutting layout an optimizer produces?

The layout screen tells you four things: utilization percentage, part labels, grain arrows, and the offcut map. Utilization above 80% on a 4x8 sheet of Baltic birch is a good result; below 70%, check whether a part could rotate or a sheet could run landscape. Part labels should match your spreadsheet names exactly, because a mislabeled "shelf" cut as a "side" wastes a full panel.

Before you hit cut, run three checks. First, confirm grain arrows point the way you want on every part, since most optimizers will rotate parts for fit unless you lock them. Second, verify trim allowance is set so the saw's ragged first pass gets removed. Third, eyeball the kerf gap between adjacent parts; if two parts touch, your kerf setting is wrong, not the layout. GCrafter's layout view (https://gcrafter.com/learn/layout-view/layout-overview) shows all of these on one screen.

Offcuts worth keeping vs offcuts worth tossing

Keep any offcut bigger than your smallest recurring part, typically a drawer divider or shelf pin strip. Mark dimensions on it with pencil and stack it by thickness. Toss anything under roughly 6 inches wide; it costs more to store and re-nest than to buy fresh sheet goods.

When is manual planning still better than cut list optimization software?

For one or two sheets, sketching the layout on paper or directly on the sheet often beats any tool. You already know where the offcuts are, and setup time exceeds the savings. Finish matching is the second case: if a tabletop and its aprons must come from the same sheet for grain and color, you place those parts by hand first and let the optimizer fill around them. Broken-sheet odd lots, half-consumed with weird notches, also defeat most tools; they assume clean rectangles. Even paid optimizers like PanelOrca work best on full, predictable sheets, so hand-layout remains the right call for scrap-bin projects.

How do you import an existing spreadsheet into a cut list optimizer?

Most optimizers accept a CSV with one row per part and columns for name, quantity, length, width, and thickness. Export from Excel or Google Sheets, keep the header row, and check the tool's expected column names before uploading.

Three mistakes cause most failed imports. First, units: a spreadsheet built in inches will read as millimeters if the optimizer defaults to metric, so set units on both sides. Second, swapped dimensions: pick a convention, length along grain first, and stick to it across every row. Third, formulas: paste values, not live formulas, because the export can carry errors or zeros.

If your parts come from a design tool instead, export the cut list it generates and clean it the same way before import.

What material savings should you realistically expect from optimization?

It depends on your part mix and sheet size, and honest numbers come from running your own list, not from a vendor claim. A single-sheet project may save nothing: the optimizer just confirms what you already knew, that everything fits. Multi-sheet jobs are where the fraction shows up, because nesting can consolidate offcuts that would otherwise become scrap.

Kerf matters more than people expect. Even a small blade or laser kerf (see Grain and figure in wood) eats width on every cut, and if your optimizer ignores it, layouts that look tight on screen will not fit. The realistic expectation: a meaningful reduction in waste on multi-sheet runs, little to none on single-sheet ones.

Where does GCrafter fit, and where does it stop?

GCrafter sits upstream of a cut list optimizer. You design the object and the joints parametrically, so changing a cabinet width regenerates every finger, tab, and slot at the new dimension. The parts list and the joints come out together, and the Layout View arranges parts on a sheet so you can check grain and kerf before cutting.

It stops short of full multi-sheet optimization. For a bulk panel job across many 4x8 sheets, you will still want dedicated optimization software on top of the exported parts.

Run it through the same honest criteria as MakerCase, PanelOrca, boxes.py, Fusion, and SketchList 3D: it wins on parametric joints, loses on bulk nesting, and exports a cut-ready sheet either way.

FAQ

Is there a genuinely free cut list optimizer worth using for a small shop?

Yes, with caveats. Boxes.py and MakerCase are free and produce cut-ready parts quickly, but they work from fixed box and tray recipes rather than nesting an arbitrary parts list. If your project fits their mold, they are excellent. If not, you will place parts yourself in your CAM tool or move up to paid nesting software.

What kerf setting should I use for plywood on a table saw vs a laser?

Match the setting to your blade or beam. A standard 1/8" table saw blade removes twice the material of a 1/16" laser pass, so enter 0.125in for the saw and roughly 0.0625in for the laser. If your laser cuts differently on X than Y, enter separate per-axis values instead of one compromise number.

Can a cut list optimizer handle grain-matched parts?

Most optimizers rotate parts freely to tighten the layout, which is fine for hidden parts and wrong for visible faces. Lock rotation on any grain-critical part so the grain stays vertical, and let everything else spin. Some tools, like GCrafter, carry grain direction through from the design so those parts arrive pre-locked in the list.

Why does my optimizer show wasted space even at high utilization?

Usually one of three things: a grain lock prevents rotation that would close the gaps, kerf is added between every adjacent part so tight-looking pairs never touch, or the sheet has a trim allowance removing the ragged first pass. Check utilization against whether any part could rotate or the sheet could run landscape.

Do I need cut list software if my CAD already exports a cut list?

For one or two sheets, probably not. The question is nesting: a cut list tells you what to cut, an optimizer arranges those parts across sheets to minimize waste, handles kerf, and prints labels. If your job spans multiple 4x8 sheets, export the list from CAD into a dedicated optimizer and let it do the packing.