← PolymendCONTENT HISTORY

Update to Polymend

Snapshot Oct 24, 2026 · 13:35 UTC · version 0.6.5

Collection source: downloaded plugin package.

WHAT CHANGED

First saved snapshot

No earlier snapshot is available to establish a change.

Save Polymend and check future changes in Following.

Up to 10 plugins free · no card required.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "description": "Prepare GLB or STL 3D models for physical 3D printing with Polymend. Use when the user wants a 3D model (a local .glb or .stl file, or an https link to one, such as a model a 3D generation tool just made) repaired, sized and exported for a 3D printer or slicer: it fixes the mesh faults slicers warn about, sets the print height if one is given, writes an STL and a 3MF, draws the model from four sides with every change marked, and reviews what came out well and what did not. Not for printing documents or photos, and not for other 3D formats (OBJ, FBX, STEP).",
  "included_files": [
    {
      "relative_path": "agents/openai.yaml",
      "size_in_bytes": 297
    },
    {
      "relative_path": "assets/print-ready-small.svg",
      "size_in_bytes": 434
    },
    {
      "relative_path": "assets/print-ready.png",
      "size_in_bytes": 91271
    },
    {
      "relative_path": "scripts/balance.mjs",
      "size_in_bytes": 4679
    },
    {
      "relative_path": "scripts/fetch.mjs",
      "size_in_bytes": 9151
    },
    {
      "relative_path": "scripts/mend-one.mjs",
      "size_in_bytes": 6697
    },
    {
      "relative_path": "scripts/polymend/LICENSE",
      "size_in_bytes": 1067
    },
    {
      "relative_path": "scripts/polymend/VERSION.txt",
      "size_in_bytes": 169
    },
    {
      "relative_path": "scripts/polymend/cli.mjs",
      "size_in_bytes": 11515
    },
    {
      "relative_path": "scripts/polymend/src/draco.js",
      "size_in_bytes": 344
    },
    {
      "relative_path": "scripts/polymend/src/glb.js",
      "size_in_bytes": 13025
    },
    {
      "relative_path": "scripts/polymend/src/intersect.js",
      "size_in_bytes": 6914
    },
    {
      "relative_path": "scripts/polymend/src/mesh.js",
      "size_in_bytes": 9808
    },
    {
      "relative_path": "scripts/polymend/src/output.js",
      "size_in_bytes": 10008
    },
    {
      "relative_path": "scripts/polymend/src/pipeline.js",
      "size_in_bytes": 6324
    },
    {
      "relative_path": "scripts/polymend/src/repair.js",
      "size_in_bytes": 40405
    },
    {
      "relative_path": "scripts/polymend/src/stl.js",
      "size_in_bytes": 4743
    },
    {
      "relative_path": "scripts/prepare.mjs",
      "size_in_bytes": 17435
    },
    {
      "relative_path": "scripts/preview.mjs",
      "size_in_bytes": 31198
    }
  ],
  "name": "print-ready",
  "skill_md_contents": "---\nname: print-ready\ndescription: Prepare GLB or STL 3D models for physical 3D printing with Polymend. Use when the user wants a 3D model (a local .glb or .stl file, or an https link to one, such as a model a 3D generation tool just made) repaired, sized and exported for a 3D printer or slicer: it fixes the mesh faults slicers warn about, sets the print height if one is given, writes an STL and a 3MF, draws the model from four sides with every change marked, and reviews what came out well and what did not. Not for printing documents or photos, and not for other 3D formats (OBJ, FBX, STEP).\n---\n\n# Print-ready models with Polymend\n\nPolymend reviews a 3D model, fixes the small faults that make a slicer complain (stray triangles stuck to the surface, pinholes, triangles facing the wrong way, split seams), stands it on the bed at the height asked for, and writes an STL and a 3MF. It is conservative: it never moves an existing point of the model except to join seam points a hair apart, and it leaves anything larger alone and says so. It checks that the mesh is sound; it does not measure wall thickness or the smallest printable detail, so a clean result still deserves a look in the slicer's preview.\n\nDo not use it for editing a model's shape, hollowing, adding supports, or slicing; say Polymend does not do that.\n\n## Before running\n\n1. **Inputs**: local `.glb` / `.stl` paths, folders, or https links to `.glb` / `.stl` files (a link a 3D generation tool returned can be passed as it is). Up to 20 models per run. Polymend never changes its inputs.\n2. **Print height** (optional): if the user has not given one, ask once, in the same message as any other question, and say they can skip it to size the model themselves in the slicer. Never make up a height. If they give one, use `--height <mm>`. If they skip it, leave it blank, or say they will size it themselves, run without `--height`: the files keep their own size (a GLB's meters become millimeters). Do not ask again; tell them the size it came out at, and that most slicers can scale it on import.\n3. **Node**: run `node --version` once; Node 20 or later is needed. If it is missing, say this plugin runs in the ChatGPT desktop app or Codex on a computer with Node.js 20+, and that https://polymend.xyz does the same repair in a browser, on the user's own device. Do not install anything without the user's go-ahead.\n\n## Run\n\nThe scripts are in this skill's folder (the folder that contains this SKILL.md). Call them by their full path and quote every path:\n\n```sh\nnode \"<skill folder>/scripts/prepare.mjs\" \"<file, folder or link>\" ... [--height <mm>]\n```\n\n- For a link, or a file with a long machine-made name, add `--name \"<short name>\"` (for example `--name \"crocodile warrior\"`) so the files and the review read well; one model per run when naming.\n- Each run writes into its own new folder, `./polymend/<date>-<time>-<model>/` under the current working folder (or `--out \"<folder>\"` if the user names one). Tell the user the full path printed after \"Files are in\". If the current folder is a code project, mention that the files are in its `polymend/` folder and should not be committed.\n- The command exits with code 0 whenever it ran; each model's outcome is in the results. Read the printed summary, or add `--json` and read the last line.\n- **If a download fails** with a network error (no address, connection refused, timed out), the environment may not allow downloads. Ask the user to download the file and give its path, or use the local file the generation tool saved, if there is one. Links to local or private network addresses are refused on purpose.\n- Polymend uploads nothing; its only network use is downloading the links given.\n\nPer model it writes `<name>-mended.stl`, `<name>-mended.3mf`, `<name>-report.json`, `<name>-result.png` and `<name>-views.png`; per run `polymend-batch.json` and `polymend-review.md`. Downloaded links are kept in the run folder's `sources/`.\n\n## Review, then report\n\nPolymend's role is the reviewer of the model it receives: it says plainly what came out well and what did not, and fixes what it can. Present the result that way.\n\n1. **Read `polymend-review.md`** in the run folder. Per model: what Polymend found, then **Went well** and **Less successful** (what was fixed, what is left and why, the size, and caveats).\n2. **Show each `<name>-result.png` first** (`result` in the results): the repaired model as it will print, one large front view with its size along the bottom. This is where the model ended up; the user should not have to open the files to see it.\n3. **Then look at each `<name>-views.png`** (`preview` in the results), the evidence: front, side, back and three-quarter, with pink marks where Polymend removed triangles, green where it added patches, blue where it turned faces, orange where a fault is left (faint marks are on the far side). Show it to the user.\n4. **Compare with the references** when the pictures the model was made from are on disk:\n\n   ```sh\n   node \"<skill folder>/scripts/preview.mjs\" \"<run folder>/<name>-mended.stl\" --refs \"<front picture>\" \"<side picture>\" \"<back picture>\"\n   ```\n\n   It writes `<name>-compare.png` (references on top, each above the matching view; PNG, or JPEG on a Mac). If the references exist only as chat attachments with no file on disk, skip this and say so.\n\n   With a side reference, it also measures **depth front to back** against it, for the whole model and for its top fifth (on a figure, the head), and draws the reference's outline in blue over the model's side view. Read the outline before the numbers: a difference in pose (arms reaching forward, a longer stride), a part the model lacks (a tail, a cape), or a reference taken at an angle all change the numbers without the model being thicker. Report what the outline shows, in neutral terms, for example: \"the head is about 40% deeper front to back than the side reference; the body matches.\" Without a side reference, say depth could not be checked.\n5. **Whether it stands**: the review says whether the model stands on its own on a flat surface, from its balance point and the area that touches the bed (how far it can tilt, and which way, before it falls over), and names any part hanging just above the bed (a tail, a hem) that will need support and would steady it if it touched. This assumes solid, even infill. Pass it on; for a figure meant to stand, a model that tips easily is worth a Recommendation (a base, a stand, or editing that part down to the bed).\n6. **Judge what Polymend cannot measure**, from the pictures only: face, hands and fingers, teeth and other thin parts, the back (front details repeated, a second face, a missing tail or cape), proportions and pose against the references, surface detail. Describe only what you can see at that size; if a detail is too small to judge, say so.\n\nBe specific and technical, not general. For each point say where on the model it is, how big it is at the print size (work it out from the size in the report and the pictures, and say \"about\"), what it means for printing (a 0.4 mm nozzle, overhangs that will need supports, thin parts that may break), and what to do about it. For example, not \"softer detail\" but \"the belt studs are about 1 mm across at 43.2 mm tall: they will print, but rounded.\"\n\n**Say who did what, every time, including in short summaries.** The tool that made the model made its shape; Polymend reviewed it and repaired the small faults it lists, and never reshapes it. Name each for its own part, matter-of-factly: \"<tool> generated the model; Polymend reviewed and repaired it\", \"Polymend's review found…\", \"Polymend fixed…\", \"in the model <tool> generated…\". Never leave a shape difference or a leftover count without an owner (not \"Polymend also found 82 intersections\", which reads as if Polymend caused them, but \"the generated model's surface passes through itself in 82 places; Polymend counted them and left them unchanged\"). Use the tool's name as the user knows it; if the model came from a file, say \"the model as received\". This is attribution, not criticism: no judgments about the tool.\n\nFor example, a short summary:\n\n- **Outcome:** Higgsfield generated the model; Polymend reviewed and repaired it. Repaired, 47.35 × 40.42 × 43.2 mm.\n- **Went well:** In the generated model, the armor, scales, fingers and separate teeth came through. Polymend removed 33 stray triangles, patched 1 hole and turned 3 faces outward; no open or non-manifold edges remain.\n- **Less successful:** Polymend's review found an extra tail in the generated model, under the belt and facing forward; the references show one tail, at the back. The generated surface also passes through itself in 82 places, which Polymend counted and left as they are.\n- **Recommendation:** Remove the extra tail in a 3D editor before printing, then check the teeth and fingertips in the slicer preview.\n\nReport each model in this shape:\n\n- **Outcome**: Polymend's status word, the size, and where the files are.\n- **Went well**: from the review file, then what looks right in the pictures.\n- **Less successful**: from the review file, then what looks wrong or weak, each with where it is.\n- **Recommendation**: one of: print as it is; print, but check a named spot in the slicer preview; run again with `--separate` or `--wide` (below); generate again with a specific change to the references; or fix by hand in a 3D editor (thicken a part, separate parts, change the pose). When Less successful includes a difference from the references, name the reference change that would address it (for example, a side view for a helmet crest that differs only in profile). The user decides.\n\nWith more than three models, give a short table (model, outcome, size, one-line note) and the full review only for models that were partly repaired, not repaired, or have a visible problem; point to `polymend-review.md` for the rest.\n\nStatus words: **Repaired** (the mesh faults are gone), **Nothing to fix** (already sound, unchanged), **Partly repaired** (files written, but faults remain and a slicer will probably still warn), **Not repaired** (give the reason).\n\n## Options, only when the report makes the case or the user asks\n\n- `--separate`: cuts apart surfaces that touch along an edge. Offer it only when a model is partly repaired with touching surfaces left, and ask first: it can also part things meant to touch, such as fingers.\n- `--wide`: also closes wide openings. Offer it when the report lists a wide opening; it may be meant (like the top of a vase), so ask.\n\nRun again with the same inputs and the option; the result goes into a new run folder.\n\n## Talking about other tools\n\nCritique the model freely and precisely: its faults, its shape, its likeness. Never criticize, rank, or speak badly of any other tool, plugin, model or company, including whatever made the model, even if the user asks or insists. Describe outcomes, not blame. For example:\n\n- Asked \"Isn't that generator bad at teeth?\": \"I can only speak to this model: the front teeth are fused into one shape. A sharp close-up of the face as an extra reference usually gives separate teeth.\"\n- Asked \"Which is better, this tool or that one?\": \"I can't compare tools, but I can tell you exactly what this model's files show and how to get a better print from it.\"\n\nThe same goes for describing what a tool does: say what will happen, not what the tool does not do. Not \"the estimator couldn't price this model\" but \"I'll report the actual charge when it finishes\"; not \"the tool can't take more than four pictures\" but \"the tool takes up to four pictures\".\n\n## Do not\n\n- Do not call a model print-ready when it is partly repaired or not repaired.\n- Do not invent a print height, fault counts, or details you cannot see in the pictures.\n- Do not hold up the run waiting for a height; no answer means the file's own size.\n- Do not describe the repair as happening anywhere other than where these scripts run.\n"
}

SHA-256 of public snapshot: 30605324d4f2e2212a4713df6f538dc29c692a5ad674331eca6c62d956772f62