# Cut list optimizer

- Human page: https://happytails.ai/en/calculators/cut-list-optimizer/
- Markdown: https://happytails.ai/en/calculators/cut-list-optimizer.md
- Structured JSON: https://happytails.ai/agents/en/calculators/cut-list-optimizer/index.json
- Visibility: public

## Tool capabilities

| Property | Value |
| --- | --- |
| Tool ID | `cut-list-optimizer` |
| Category | calculators |
| Implementation | Registered implementation. Registration alone is not a production-quality guarantee. |
| Browser execution | Use the visible action or interactive controls. |
| Browser processing | Browser; see tool notes for network behavior. |
| HTTP API | Not callable through HTTP. |
| Browser-agent interface | run_current_tool |

### Implementation notes

Use one measurement unit and one stock length throughout. Up to 200 pieces, with three decimal places. End allowance reserves material at both ends. Each piece uses one saw kerf unless it ends exactly at the usable stock end. Plans for up to 24 pieces use a bounded exact search; larger plans use a heuristic. Optimality is only claimed when proved. Grain, defects and clamping clearances are not modelled. The diagram is not a print-at-scale template. Your input stays on your device.

### Inputs and settings

Text input: Required cuts.

Example or placeholder shown in the interface (not a validated fixture):

```text
label,length,quantity
Rails,1000,2
Supports,600,2
Braces,350,2
```

Use the CSV columns label, length and quantity. Lengths use a decimal point. Quantities are whole numbers. Use the selected measurement unit for every dimension. Up to 100,000 characters. Review the settings before running.

| Setting | Meaning | Control type | Default | Constraints |
| --- | --- | --- | --- | --- |
| `stockLength` | Stock length | number | 2400 | min=0.001 max=1000000 step=0.001 |
| `kerf` | Saw kerf | number | 3 | min=0 max=1000000 step=0.001 |
| `endTrim` | Allowance at each end | number | 0 | min=0 max=1000000 step=0.001 |
| `stockQuantity` | Stock lengths available | number | 200 | min=1 max=200 step=1 |
| `unit` | Measurement unit | select | "mm" | Allowed: mm, cm, m, in, ft |

### Browser-agent workflow

1. Open the human page in a browser that supports WebMCP.
2. Discover the interface exposed by that page; use its actual schema.
3. Select files on the page first when the tool requires files.
4. Call `run_current_tool` with valid input and settings.
5. Inspect the returned result or error and the displayed output. Retrieve files from the displayed download links.

Calls do not automatically copy or download results. Browser permissions still apply. Interface availability alone is not proof of successful execution.

### Planning specification

Plans use equal-length stock in one unit. Up to 200 pieces and 100,000 input characters; dimensions up to 1,000,000 with three decimal places. Each piece reserves one kerf unless it ends exactly at the usable stock end. End allowances reserve material at both ends, not additional saw cuts. Up to 24 pieces use a search capped at 250,000 nodes; larger jobs use first-fit decreasing. Optimality is only stated when proved. A plan requiring more stock remains visible, clearly marked. Grain, defects, clamps and blade tolerances are not modelled. All processing is local.

This describes intended requirements. Use the implementation notes, interface schema and observed output to determine current support.

### Complete machine-readable capability record

```json
{
  "id": "cut-list-optimizer",
  "category": "calculators",
  "built": true,
  "requirements": "Plans use equal-length stock in one unit. Up to 200 pieces and 100,000 input characters; dimensions up to 1,000,000 with three decimal places. Each piece reserves one kerf unless it ends exactly at the usable stock end. End allowances reserve material at both ends, not additional saw cuts. Up to 24 pieces use a search capped at 250,000 nodes; larger jobs use first-fit decreasing. Optimality is only stated when proved. A plan requiring more stock remains visible, clearly marked. Grain, defects, clamps and blade tolerances are not modelled. All processing is local.",
  "implementation": {
    "fields": [
      {
        "key": "stockLength",
        "label": "Stock length",
        "value": 2400,
        "type": "number",
        "min": 0.001,
        "max": 1000000,
        "step": 0.001
      },
      {
        "key": "kerf",
        "label": "Saw kerf",
        "value": 3,
        "type": "number",
        "min": 0,
        "max": 1000000,
        "step": 0.001
      },
      {
        "key": "endTrim",
        "label": "Allowance at each end",
        "value": 0,
        "type": "number",
        "min": 0,
        "max": 1000000,
        "step": 0.001
      },
      {
        "key": "stockQuantity",
        "label": "Stock lengths available",
        "value": 200,
        "type": "number",
        "min": 1,
        "max": 200,
        "step": 1
      },
      {
        "key": "unit",
        "label": "Measurement unit",
        "value": "mm",
        "type": "select",
        "values": [
          "mm",
          "cm",
          "m",
          "in",
          "ft"
        ]
      }
    ],
    "presentation": "metrics",
    "inputMaxLength": 100000,
    "inputErrorCode": "CUT_SIZE",
    "note": "Use one measurement unit and one stock length throughout. Up to 200 pieces, with three decimal places. End allowance reserves material at both ends. Each piece uses one saw kerf unless it ends exactly at the usable stock end. Plans for up to 24 pieces use a bounded exact search; larger plans use a heuristic. Optimality is only claimed when proved. Grain, defects and clamping clearances are not modelled. The diagram is not a print-at-scale template. Your input stays on your device.",
    "experience": {
      "automatic": false,
      "single": false,
      "inputMaxLength": 100000,
      "inputMode": "text",
      "label": "Required cuts",
      "placeholder": "label,length,quantity\nRails,1000,2\nSupports,600,2\nBraces,350,2",
      "help": "Use the CSV columns label, length and quantity. Lengths use a decimal point. Quantities are whole numbers. Use the selected measurement unit for every dimension. Up to 100,000 characters. Review the settings before running.",
      "action": null
    },
    "mode": "explicit",
    "interactive": false
  },
  "execution": "Browser interface",
  "api": null,
  "browser_agent": {
    "supported": true,
    "name": "run_current_tool",
    "discovery": "WebMCP on the human page in a supporting browser",
    "verification": "See audit/API-AUDIT.md; availability is not verification"
  }
}
```

## Page guide

Fit your required cuts into stock lengths with saw kerf and end allowances. See each cut position, offcuts and whether the minimum stock count is proved.

How can we improve this tool?

Report a problem or share an idea.

Please leave out private information. Your message and the tool name go to our team via PostHog.

### How to use Cut list optimizer

1. List each required cut length and quantity in the CSV, then set your stock length and saw kerf.
2. Review stock availability, the cut positions and offcuts. Check whether the minimum stock count is proved or the result is a bounded-search estimate.
3. Download the full cut list, stock summary and diagram. Check your physical stock and machine clearances before cutting.

## Useful next steps

- [Length](https://happytails.ai/en/unit-converters/length/) ([Markdown](https://happytails.ai/en/unit-converters/length.md))

- [Lumber board foot calculator](https://happytails.ai/en/calculators/lumber-board-foot-calculator/) ([Markdown](https://happytails.ai/en/calculators/lumber-board-foot-calculator.md))

- [Quilt fabric calculator](https://happytails.ai/en/calculators/quilt-fabric-calculator/) ([Markdown](https://happytails.ai/en/calculators/quilt-fabric-calculator.md))

## Include the material the blade removes

Kerf is the width removed by the blade. A 6-unit piece and a 3-unit piece fit exactly into 10 units of stock with a 1-unit kerf between them. Two separate short pieces can also need a final cut, so their total reserved kerf may be larger than the gap between them.

### An honest optimization result

The starting plan packs larger pieces first. Small jobs also use a bounded exact search to look for better combinations. If the plan meets a proven lower bound, or the complete search rules out a better one, it is marked optimal. Otherwise it is a useful plan without a claim that no better arrangement exists.

### Every piece stays traceable

Exports include the original row, copy number, stock number, start and end positions and kerf after each piece. The diagram is an overview, not a print-at-scale template. Keep one measurement unit throughout and allow separately for defects, grain and machine requirements.
