{
  "id": "2026-10-17-bench",
  "title": "PhotoSTL photo → printable 3D draft bench",
  "testedAt": "2026-10-17T09:45:40.511Z",
  "finishedAt": "2026-10-17T09:51:05.466Z",
  "product": "PhotoSTL (photostl.com) — browser-only image to 3D for makers",
  "pipeline": "Same production image-to-3D path used when you click Generate on photostl.com (offline runner; no account debit).",
  "method": {
    "runner": "scripts/bench-image-to-3d.mjs",
    "pollIntervalMs": 2500,
    "maxWaitMs": 240000,
    "successDefinition": "Generation completed with a downloadable GLB whose first 4 bytes are glTF magic",
    "sampleFocus": "Figurines, toys, craft models, product forms, mechanical parts, and electronics — scenes makers often bring toward a slicer",
    "notTested": [
      "Google sign-in / on-site draft debit",
      "In-app STL download button",
      "Slicer manifold / wall / support checks",
      "Physical 3D printing",
      "Competitor same-input comparison"
    ],
    "costNote": "Offline runner bills the generation backend directly; your PhotoSTL free/paid draft balance is unchanged."
  },
  "counts": {
    "samples": 8,
    "generationOk": 8,
    "generationFailed": 0,
    "glbMagicOk": 8
  },
  "timingSec": {
    "min": 25.5,
    "max": 67.7,
    "mean": 35.3,
    "n": 8
  },
  "samples": [
    {
      "id": "s01-figurine",
      "category": "figurine",
      "title": "Resin-style figurine pair on a miniature bench (collectible / 手办)",
      "license": "Pexels License (free stock photo)",
      "sourcePage": "https://www.pexels.com/photo/1767434/",
      "inputRel": "inputs/s01-figurine.jpg",
      "outputRel": "outputs/s01-figurine.glb",
      "startedAt": "2026-10-17T09:45:40.530Z",
      "finishedAt": "2026-10-17T09:46:07.417Z",
      "durationSec": 26.9,
      "jobId": "01a14940-c287-7733-903d-9ef3d25d43e9",
      "generationOk": true,
      "error": null,
      "inputBytes": 32502,
      "glbBytes": 1542448,
      "glbMagicOk": true,
      "debitNote": "Bench used the same image-to-3D pipeline as production. PhotoSTL account drafts were not debited by this offline runner.",
      "slicerCheck": "not_run",
      "physicalPrint": "not_run"
    },
    {
      "id": "s02-toy-figures",
      "category": "toy_model",
      "title": "Plastic character toy figures outdoors (toy / model print reference)",
      "license": "Pexels License (free stock photo)",
      "sourcePage": "https://www.pexels.com/photo/163036/",
      "inputRel": "inputs/s02-toy-figures.jpg",
      "outputRel": "outputs/s02-toy-figures.glb",
      "startedAt": "2026-10-17T09:46:12.945Z",
      "finishedAt": "2026-10-17T09:46:39.204Z",
      "durationSec": 26.3,
      "jobId": "01a14941-3eff-7f80-9f2d-40453739e940",
      "generationOk": true,
      "error": null,
      "inputBytes": 32312,
      "glbBytes": 1744888,
      "glbMagicOk": true,
      "debitNote": "Bench used the same image-to-3D pipeline as production. PhotoSTL account drafts were not debited by this offline runner.",
      "slicerCheck": "not_run",
      "physicalPrint": "not_run"
    },
    {
      "id": "s03-chess-piece",
      "category": "craft_model",
      "title": "Wooden chess king with miniature crown (craft / tabletop model)",
      "license": "Pexels License (free stock photo)",
      "sourcePage": "https://www.pexels.com/photo/260024/",
      "inputRel": "inputs/s03-chess-piece.jpg",
      "outputRel": "outputs/s03-chess-piece.glb",
      "startedAt": "2026-10-17T09:46:45.712Z",
      "finishedAt": "2026-10-17T09:47:13.000Z",
      "durationSec": 27.3,
      "jobId": "01a14941-bf52-7d43-b9cc-8a84f057abc6",
      "generationOk": true,
      "error": null,
      "inputBytes": 31630,
      "glbBytes": 1646116,
      "glbMagicOk": true,
      "debitNote": "Bench used the same image-to-3D pipeline as production. PhotoSTL account drafts were not debited by this offline runner.",
      "slicerCheck": "not_run",
      "physicalPrint": "not_run"
    },
    {
      "id": "s04-camera",
      "category": "product_model",
      "title": "DSLR camera product shot on plain background (product form study)",
      "license": "Pexels License (free stock photo)",
      "sourcePage": "https://www.pexels.com/photo/51383/",
      "inputRel": "inputs/s04-camera.jpg",
      "outputRel": "outputs/s04-camera.glb",
      "startedAt": "2026-10-17T09:47:17.457Z",
      "finishedAt": "2026-10-17T09:47:42.908Z",
      "durationSec": 25.5,
      "jobId": "01a14942-3a29-7e51-a7e1-62bbbaa82781",
      "generationOk": true,
      "error": null,
      "inputBytes": 26953,
      "glbBytes": 1555208,
      "glbMagicOk": true,
      "debitNote": "Bench used the same image-to-3D pipeline as production. PhotoSTL account drafts were not debited by this offline runner.",
      "slicerCheck": "not_run",
      "physicalPrint": "not_run"
    },
    {
      "id": "s05-gears",
      "category": "mechanical_part",
      "title": "Interlocking metal gears (mechanical part / maker hardware)",
      "license": "Pexels License (free stock photo)",
      "sourcePage": "https://www.pexels.com/photo/159298/",
      "inputRel": "inputs/s05-gears.jpg",
      "outputRel": "outputs/s05-gears.glb",
      "startedAt": "2026-10-17T09:47:47.589Z",
      "finishedAt": "2026-10-17T09:48:17.705Z",
      "durationSec": 30.1,
      "jobId": "01a14942-b558-74f0-9151-c0f61caa0099",
      "generationOk": true,
      "error": null,
      "inputBytes": 54788,
      "glbBytes": 1578104,
      "glbMagicOk": true,
      "debitNote": "Bench used the same image-to-3D pipeline as production. PhotoSTL account drafts were not debited by this offline runner.",
      "slicerCheck": "not_run",
      "physicalPrint": "not_run"
    },
    {
      "id": "s06-motherboard",
      "category": "electronics",
      "title": "PC motherboard with open CPU socket (electronics / 元器件)",
      "license": "Pexels License (free stock photo)",
      "sourcePage": "https://www.pexels.com/photo/2582937/",
      "inputRel": "inputs/s06-motherboard.jpg",
      "outputRel": "outputs/s06-motherboard.glb",
      "startedAt": "2026-10-17T09:48:23.802Z",
      "finishedAt": "2026-10-17T09:48:57.287Z",
      "durationSec": 33.5,
      "jobId": "01a14943-3fa4-7eb1-aa83-98631212c5d1",
      "generationOk": true,
      "error": null,
      "inputBytes": 107205,
      "glbBytes": 1871904,
      "glbMagicOk": true,
      "debitNote": "Bench used the same image-to-3D pipeline as production. PhotoSTL account drafts were not debited by this offline runner.",
      "slicerCheck": "not_run",
      "physicalPrint": "not_run"
    },
    {
      "id": "s07-robot-model",
      "category": "model",
      "title": "Humanoid robot model bust (display model / prop reference)",
      "license": "Pexels License (free stock photo)",
      "sourcePage": "https://www.pexels.com/photo/2599244/",
      "inputRel": "inputs/s07-robot-model.jpg",
      "outputRel": "outputs/s07-robot-model.glb",
      "startedAt": "2026-10-17T09:49:02.841Z",
      "finishedAt": "2026-10-17T09:49:47.988Z",
      "durationSec": 45.1,
      "jobId": "01a14943-d6f7-7e00-9793-efedb7b0649b",
      "generationOk": true,
      "error": null,
      "inputBytes": 28128,
      "glbBytes": 1730852,
      "glbMagicOk": true,
      "debitNote": "Bench used the same image-to-3D pipeline as production. PhotoSTL account drafts were not debited by this offline runner.",
      "slicerCheck": "not_run",
      "physicalPrint": "not_run"
    },
    {
      "id": "s08-watch",
      "category": "small_object",
      "title": "Metal chronograph watch (small object / jewelry-scale detail)",
      "license": "Pexels License (free stock photo)",
      "sourcePage": "https://www.pexels.com/photo/190819/",
      "inputRel": "inputs/s08-watch.jpg",
      "outputRel": "outputs/s08-watch.glb",
      "startedAt": "2026-10-17T09:49:52.244Z",
      "finishedAt": "2026-10-17T09:50:59.926Z",
      "durationSec": 67.7,
      "jobId": "01a14944-96e3-7382-aba9-5f5890ac052f",
      "generationOk": true,
      "error": null,
      "inputBytes": 45307,
      "glbBytes": 1689784,
      "glbMagicOk": true,
      "debitNote": "Bench used the same image-to-3D pipeline as production. PhotoSTL account drafts were not debited by this offline runner.",
      "slicerCheck": "not_run",
      "physicalPrint": "not_run"
    }
  ]
}