Cut list optimizer
A small shop doesn't need MaxCut or a CNC nesting algorithm — it needs a quick sanity check: "if I cut these parts out of stock this big, how much waste do I have?" This uses first-fit-decreasing packing to lay rectangles into a stock rectangle and reports the utilisation ratio.
Optimizer
First-fit-decreasing, briefly
The packer works by:
- Sorting parts by longest dimension, descending.
- For each part, finding the first stock board where it fits (length-wise and width-wise, including kerf).
- Placing it at the first available spot in that board.
- If no board has room, opening a new board.
This is not the optimal packer (that would be a 2D knapsack problem, NP-hard), but it gets within 10–15% of optimal for hobbyist cut lists and runs in milliseconds.
Why this isn't a CNC nest
CNC nesting software handles curves, grain direction, edge-banding constraints, lead-ins and dozens of other variables. This is the simplest version that catches the obvious "you need more lumber" case. If you're optimising for cost on a kitchen full of cabinets, this isn't the right tool — but it will tell you within 10% whether you're buying enough.
Limitations
- Doesn't consider grain direction or colour matching. A figured-wood tabletop might need book-matched boards that pack worse.
- Assumes rectangular parts with cut-on-all-sides kerf. Pieces with one finished edge waste less.
- Doesn't account for offcuts large enough to use later. A 14″ leftover is "waste" here but might be a future drawer side.
- Packer is greedy; a human arranging the same parts physically often does better by 5–10%.
Frequently asked questions
Can I enter angled parts or curves?
Not yet — this is rectangular-pack only. For curves, allow an extra 1/8″ around the bounding box as a fudge factor.
What about plywood sheet goods?
It works for sheet goods too — set the stock width and length to the sheet dimensions (typically 48″ × 96″). Packing gets more efficient because there's more room to fit parts, but offcuts from a sheet are usually unusable for furniture so the calculated "leftover" is really just throwaway.
My utilisation is 35%. Am I doing it wrong?
Probably not — utilisation depends heavily on the size distribution of parts. A handful of long, thin parts on a wide board will always pack badly. The right question is "do I have enough boards?" — the optimiser answers that directly.