{"id":"ffa74886-6001-468c-8876-0ab60ee0dda2","shortId":"teHVdP","kind":"skill","title":"meshy-3d-printing","tagline":"3D print models generated with Meshy AI. Handles slicer detection, white model printing, multi-color printing via API, and print-optimized download workflows. Use when the user mentions 3D printing, slicing, Bambu, OrcaSlicer, Prusa, Cura, Creality Print, Elegoo, Anycubic, multic","description":"# Meshy 3D Printing\n\nPrepare and send Meshy-generated 3D models to a slicer for 3D printing. Supports white model (single-color) and multicolor printing workflows with automatic slicer detection.\n\n**Prerequisite:** This skill reuses the utility functions (`create_task`, `poll_task`, `download`, `get_project_dir`, etc.) and environment setup from `meshy-3d-generation`. However, **when the user wants to 3D print, this skill controls the entire workflow** — including generation, format selection, downloading, and slicer integration. Do NOT run `meshy-3d-generation`'s workflow first and then hand off here — this skill must control parameters from the start (e.g. `target_formats` with `\"3mf\"` for multicolor).\n\n---\n\n## Intent Detection\n\nProactively suggest 3D printing when these keywords appear in the user's request:\n- **Direct**: print, 3d print, slicer, slice, bambu, orca, prusa, cura, multicolor, multi-color, 3mf\n- **Implied**: figurine, miniature, statue, physical model, desk toy, phone stand\n\nWhen detected, guide the user through the appropriate print pipeline below.\n\n---\n\n## Decision Tree: White Model vs Multicolor\n\n**IMPORTANT**: When the user wants to 3D print, follow this flow:\n\n1. **Detect installed slicers** first (see Slicer Detection Script below)\n2. **Ask the user**: \"Do you want a single-color (white) print or multicolor?\"\n3. If **white model** → follow White Model Pipeline\n4. If **multicolor**:\n   a. Check if a multicolor-capable slicer is installed\n   b. Supported multicolor slicers: **OrcaSlicer, Bambu Studio, Creality Print, Elegoo Slicer, Anycubic Slicer Next**\n   c. If no multicolor slicer detected, warn the user and suggest installing one\n   d. Ask: \"How many colors? (default: 4, max: 16)\" and \"Segmentation depth? (3=coarse, 6=fine, default: 4)\"\n   e. Confirm cost: generation (20) + texture (10) + multicolor (10) = **40 credits total** (+10 if repair is needed)\n   f. Follow Multicolor Pipeline\n5. **(Recommended)** Insert a **printability analysis** step (`POST /openapi/v1/print/analyze`, FREE) after generation in either pipeline. Run **`POST /openapi/v1/print/repair`** (10 credits) only if analyze flags errors.\n\n---\n\n## Slicer Detection Script\n\nAppend this to the reusable script template from `meshy-3d-generation`:\n\n```python\nimport subprocess, shutil, platform, os, glob as glob_mod\n\nSLICER_MAP = {\n    \"OrcaSlicer\":           {\"mac_app\": \"OrcaSlicer\",          \"win_exe\": \"orca-slicer.exe\",         \"win_dir\": \"OrcaSlicer\",          \"linux_exe\": \"orca-slicer\"},\n    \"Bambu Studio\":         {\"mac_app\": \"BambuStudio\",         \"win_exe\": \"bambu-studio.exe\",        \"win_dir\": \"BambuStudio\",         \"linux_exe\": \"bambu-studio\"},\n    \"Creality Print\":       {\"mac_app\": \"Creality Print\",      \"win_exe\": \"CrealityPrint.exe\",       \"win_dir\": \"Creality Print*\",     \"linux_exe\": None},\n    \"Elegoo Slicer\":        {\"mac_app\": \"ElegooSlicer\",        \"win_exe\": \"elegoo-slicer.exe\",       \"win_dir\": \"ElegooSlicer\",        \"linux_exe\": None},\n    \"Anycubic Slicer Next\": {\"mac_app\": \"AnycubicSlicerNext\",  \"win_exe\": \"AnycubicSlicerNext.exe\",  \"win_dir\": \"AnycubicSlicerNext\",  \"linux_exe\": None},\n    \"PrusaSlicer\":          {\"mac_app\": \"PrusaSlicer\",         \"win_exe\": \"prusa-slicer.exe\",        \"win_dir\": \"PrusaSlicer\",         \"linux_exe\": \"prusa-slicer\"},\n    \"UltiMaker Cura\":       {\"mac_app\": \"UltiMaker Cura\",      \"win_exe\": \"UltiMaker-Cura.exe\",     \"win_dir\": \"UltiMaker Cura*\",     \"linux_exe\": None},\n}\nMULTICOLOR_SLICERS = {\"OrcaSlicer\", \"Bambu Studio\", \"Creality Print\", \"Elegoo Slicer\", \"Anycubic Slicer Next\"}\n\ndef detect_slicers():\n    \"\"\"Detect installed slicer software. Returns list of {name, path, multicolor}.\"\"\"\n    found = []\n    system = platform.system()\n    for name, info in SLICER_MAP.items():\n        path = None\n        if system == \"Darwin\":\n            app = info.get(\"mac_app\")\n            if app and os.path.exists(f\"/Applications/{app}.app\"):\n                path = f\"/Applications/{app}.app\"\n        elif system == \"Windows\":\n            win_dir = info.get(\"win_dir\", \"\")\n            win_exe = info.get(\"win_exe\", \"\")\n            for base in [os.environ.get(\"ProgramFiles\", r\"C:\\Program Files\"),\n                         os.environ.get(\"ProgramFiles(x86)\", r\"C:\\Program Files (x86)\")]:\n                if \"*\" in win_dir:\n                    matches = glob_mod.glob(os.path.join(base, win_dir, win_exe))\n                    if matches:\n                        path = matches[0]\n                        break\n                else:\n                    candidate = os.path.join(base, win_dir, win_exe)\n                    if os.path.exists(candidate):\n                        path = candidate\n                        break\n        else:  # Linux\n            exe = info.get(\"linux_exe\")\n            if exe:\n                path = shutil.which(exe)\n        if path:\n            found.append({\"name\": name, \"path\": path, \"multicolor\": name in MULTICOLOR_SLICERS})\n    return found\n\ndef open_in_slicer(file_path, slicer_name):\n    \"\"\"Open a model file in the specified slicer.\"\"\"\n    info = SLICER_MAP.get(slicer_name, {})\n    system = platform.system()\n    abs_path = os.path.abspath(file_path)\n    if system == \"Darwin\":\n        app = info.get(\"mac_app\", slicer_name)\n        subprocess.run([\"open\", \"-a\", app, abs_path])\n    elif system == \"Windows\":\n        exe = info.get(\"win_exe\")\n        exe_path = shutil.which(exe) if exe else None\n        if exe_path:\n            subprocess.Popen([exe_path, abs_path])\n        else:\n            os.startfile(abs_path)\n    else:\n        exe = info.get(\"linux_exe\")\n        exe_path = shutil.which(exe) if exe else None\n        if exe_path:\n            subprocess.Popen([exe_path, abs_path])\n        else:\n            subprocess.run([\"xdg-open\", abs_path])\n    print(f\"Opened {abs_path} in {slicer_name}\")\n\n# --- Detect slicers ---\nslicers = detect_slicers()\nif slicers:\n    print(\"Installed slicers:\")\n    for s in slicers:\n        mc = \" [multicolor]\" if s[\"multicolor\"] else \"\"\n        print(f\"  - {s['name']}{mc}: {s['path']}\")\nelse:\n    print(\"No slicer software detected. Install one of: OrcaSlicer, Bambu Studio, PrusaSlicer, etc.\")\n```\n\n---\n\n## Printability Analysis & Repair (FREE → optional 10-credit fix)\n\nBefore downloading and printing, run the **automated printability check** to decide whether the mesh needs repair. The analyze step is FREE (0 credits), so there's no reason to skip it for production prints.\n\n### Analyze Script\n\n```python\n# Run after the generation/refine/retexture step that produced your printable mesh\nINPUT_TASK_ID = refine_id  # or whatever produced the textured / final mesh\n# IMPORTANT: input_task_id MUST refer to a task that used Meshy 6 or any Preview model.\n# For Meshy 4/5 outputs, pass `model_url` (the GLB download URL) instead.\n\nanalyze_id = create_task(\"/openapi/v1/print/analyze\", {\n    \"input_task_id\": INPUT_TASK_ID,\n    # OR: \"model_url\": \"https://example.com/model.glb\"\n})\n\nanalyze_task = poll_task(\"/openapi/v1/print/analyze\", analyze_id)\n\np = analyze_task.get(\"printability\") or {}\nmetrics = p.get(\"metrics\", {})\nstatus = p.get(\"status\", \"unknown\")\n\nprint(f\"Printability: {status} (issues: {p.get('issue_count', 0)} = \"\n      f\"errors {p.get('error_count', 0)} + warnings {p.get('warning_count', 0)})\")\nprint(f\"  watertight={metrics.get('is_watertight')}, \"\n      f\"volume={metrics.get('volume')} m³, \"\n      f\"non_manifold_edges={metrics.get('non_manifold_edges')}, \"\n      f\"degenerate_faces={metrics.get('degenerate_faces')}, \"\n      f\"holes={metrics.get('holes')}\")\n\nneeds_repair = status == \"error\"  # warning is optional; error means won't print well\n```\n\n**Status meanings**:\n- `healthy` — print as-is.\n- `warning` — degenerate faces or holes present. Repair is OPTIONAL but recommended for thin-feature prints.\n- `error` — non-watertight, non-positive volume, or non-manifold edges. **Recommend repair before printing.**\n- `unknown` — analyze couldn't process the model. Inspect manually or retry.\n\n### Repair Script (only if analyze flagged errors)\n\n```python\nif needs_repair:\n    repair_id = create_task(\"/openapi/v1/print/repair\", {\n        \"input_task_id\": INPUT_TASK_ID,    # output is GLB\n        # OR: \"model_url\": \"https://example.com/model.stl\"   # output is STL\n    })\n    repair_task = poll_task(\"/openapi/v1/print/repair\", repair_id)\n\n    # Output format mirrors input. Find the populated field:\n    repaired_url = next(\n        (url for url in repair_task[\"model_urls\"].values() if url),\n        None\n    )\n    # Use this repaired URL for downstream download / multicolor / slicer steps.\n```\n\n**Note**: repair preserves geometry only, not textures. If you need a textured + repaired model for multicolor printing, run `repair` first, then re-texture (or feed `repair`'s task_id to `multi-color` directly — the API handles re-texturing internally if applicable).\n\n---\n\n## White Model Print Pipeline\n\n| Step | Action | Credits | Notes |\n|------|--------|---------|-------|\n| 1 | Detect installed slicers | 0 | Run slicer detection script |\n| 2 | Generate untextured model | 5–20 | Text to 3D or Image to 3D (`should_texture: False`) |\n| 3 | Download OBJ | 0 | OBJ format for slicer compatibility |\n| 4 | Fix OBJ for printing | 0 | Coordinate conversion (see below) |\n| 5 | Open in slicer | 0 | `open_in_slicer(obj_path, slicer_name)` |\n\n### White Model Generation + Print Script\n\nUse the `create_task`/`poll_task`/`download`/`get_project_dir` helpers from `meshy-3d-generation`, then:\n\n```python\n# --- Step 2: Generate untextured model for printing ---\n# Text to 3D:\ntask_id = create_task(\"/openapi/v2/text-to-3d\", {\n    \"mode\": \"preview\",\n    \"prompt\": \"USER_PROMPT\",\n    \"ai_model\": \"latest\",\n    \"target_formats\": [\"obj\"],  # Only OBJ for white model printing\n})\n# OR Image to 3D:\n# task_id = create_task(\"/openapi/v1/image-to-3d\", {\n#     \"image_url\": \"IMAGE_URL\",\n#     \"should_texture\": False,          # White model — no texture\n#     \"target_formats\": [\"glb\", \"obj\"], # OBJ needed for slicer\n# })\n\ntask = poll_task(\"/openapi/v2/text-to-3d\", task_id)  # adjust endpoint for image-to-3d\nproject_dir = get_project_dir(task_id, task.get(\"prompt\", \"print\"))\n\n# --- Step 3-4: Download OBJ + fix for printing ---\nobj_url = task[\"model_urls\"].get(\"obj\")\nif not obj_url:\n    print(\"OBJ format not available. Available:\", list(task[\"model_urls\"].keys()))\n    print(\"Download GLB and import manually into your slicer.\")\n    obj_url = task[\"model_urls\"].get(\"glb\")\n\nobj_path = os.path.join(project_dir, \"model.obj\")\ndownload(obj_url, obj_path)\n\n# --- Post-process OBJ for slicer compatibility ---\ndef fix_obj_for_printing(input_path, output_path=None, target_height_mm=75.0):\n    \"\"\"\n    Fix OBJ coordinate system, scale, and position for 3D printing slicers.\n    - Rotates from glTF Y-up to slicer Z-up: (x, y, z) -> (x, -z, y)\n    - Scales model to target_height_mm (default 75mm)\n    - Centers model on XY plane\n    - Aligns model bottom to Z=0\n    \"\"\"\n    if output_path is None:\n        output_path = input_path\n\n    lines = open(input_path, \"r\").readlines()\n\n    rotated = []\n    min_x, max_x = float(\"inf\"), float(\"-inf\")\n    min_y, max_y = float(\"inf\"), float(\"-inf\")\n    min_z, max_z = float(\"inf\"), float(\"-inf\")\n    for line in lines:\n        if line.startswith(\"v \"):\n            parts = line.split()\n            x, y, z = float(parts[1]), float(parts[2]), float(parts[3])\n            rx, ry, rz = x, -z, y\n            min_x, max_x = min(min_x, rx), max(max_x, rx)\n            min_y, max_y = min(min_y, ry), max(max_y, ry)\n            min_z, max_z = min(min_z, rz), max(max_z, rz)\n            rotated.append((\"v\", rx, ry, rz, parts[4:]))\n        elif line.startswith(\"vn \"):\n            parts = line.split()\n            nx, ny, nz = float(parts[1]), float(parts[2]), float(parts[3])\n            rotated.append((\"vn\", nx, -nz, ny, []))\n        else:\n            rotated.append((\"line\", line))\n\n    model_height = max_z - min_z\n    scale = target_height_mm / model_height if model_height > 1e-6 else 1.0\n    x_offset = -(min_x + max_x) / 2.0 * scale\n    y_offset = -(min_y + max_y) / 2.0 * scale\n    z_offset = -(min_z * scale)\n\n    with open(output_path, \"w\") as f:\n        for item in rotated:\n            if item[0] == \"v\":\n                _, rx, ry, rz, extra = item\n                tx = rx * scale + x_offset\n                ty = ry * scale + y_offset\n                tz = rz * scale + z_offset\n                extra_str = \" \" + \" \".join(extra) if extra else \"\"\n                f.write(f\"v {tx:.6f} {ty:.6f} {tz:.6f}{extra_str}\\n\")\n            elif item[0] == \"vn\":\n                _, nx, ny, nz, _ = item\n                f.write(f\"vn {nx:.6f} {ny:.6f} {nz:.6f}\\n\")\n            else:\n                f.write(item[1])\n\n    print(f\"OBJ fixed: rotated Y-up→Z-up, scaled to {target_height_mm:.0f}mm, centered, bottom at Z=0\")\n    print(f\"Output: {os.path.abspath(output_path)}\")\n\nfix_obj_for_printing(obj_path, target_height_mm=75.0)\n\n# --- Open in slicer ---\nif slicers:\n    open_in_slicer(obj_path, slicers[0][\"name\"])\nelse:\n    print(f\"\\nModel ready: {os.path.abspath(obj_path)}\")\n    print(\"Open this file in your preferred slicer: File → Import / Open\")\n```\n\n> **Parameters:**\n> - `target_height_mm`: Default 75mm. Adjust based on user's request (e.g. \"print at 15cm\" → `150.0`).\n\n---\n\n## Multicolor Print Pipeline\n\n| Step | Action | Credits | Notes |\n|------|--------|---------|-------|\n| 1 | Detect slicers + check multicolor | 0 | Warn if no multicolor slicer |\n| 2 | Generate 3D model | 20 | Text to 3D or Image to 3D |\n| 3 | Add textures | 10 | Refine or Retexture (REQUIRED) |\n| 4 | Multi-color processing | 10 | POST /openapi/v1/print/multi-color |\n| 5 | Poll until SUCCEEDED | 0 | GET /openapi/v1/print/multi-color/{id} |\n| 6 | Download 3MF | 0 | From model_urls[\"3mf\"] |\n| 7 | Open in multicolor slicer | 0 | `open_in_slicer(path, slicer)` |\n| **Total** | | **40** | |\n\n### Multi-Color Full Script\n\nUse the `create_task`/`poll_task`/`download`/`get_project_dir` helpers from `meshy-3d-generation`:\n\n```python\n# --- Step 1: Check for multicolor slicer (already done above) ---\nmc_slicers = [s for s in slicers if s[\"multicolor\"]]\nif not mc_slicers:\n    print(\"WARNING: No multicolor-capable slicer detected.\")\n    print(\"Supported: OrcaSlicer, Bambu Studio, Creality Print, Elegoo Slicer, Anycubic Slicer Next\")\n    print(\"Install one before proceeding.\")\nelse:\n    print(f\"Multicolor slicer(s): {', '.join(s['name'] for s in mc_slicers)}\")\n\n# --- Step 2-3: Generate + texture (with 3mf in target_formats!) ---\n# Text to 3D preview:\npreview_id = create_task(\"/openapi/v2/text-to-3d\", {\n    \"mode\": \"preview\",\n    \"prompt\": \"USER_PROMPT\",\n    \"ai_model\": \"latest\",\n    # No target_formats needed — 3MF comes from the multi-color API, not from generate/refine\n})\npoll_task(\"/openapi/v2/text-to-3d\", preview_id)\n\n# Refine (add textures — REQUIRED for multicolor):\nrefine_id = create_task(\"/openapi/v2/text-to-3d\", {\n    \"mode\": \"refine\",\n    \"preview_task_id\": preview_id,\n    \"enable_pbr\": True,\n})\nrefine_task = poll_task(\"/openapi/v2/text-to-3d\", refine_id)\nproject_dir = get_project_dir(preview_id, \"multicolor-print\")\n\n# OR for Image to 3D with texture:\n# task_id = create_task(\"/openapi/v1/image-to-3d\", {\n#     \"image_url\": \"IMAGE_URL\",\n#     \"should_texture\": True,\n#     # No target_formats needed — 3MF comes from multi-color API\n# })\n# refine_task = poll_task(\"/openapi/v1/image-to-3d\", task_id)\n\nINPUT_TASK_ID = refine_id  # Use the textured task\nMAX_COLORS = 4   # 1-16, ask user\nMAX_DEPTH = 4    # 3-6, ask user\n\nmc_task_id = create_task(\"/openapi/v1/print/multi-color\", {\n    \"input_task_id\": INPUT_TASK_ID,\n    \"max_colors\": MAX_COLORS,\n    \"max_depth\": MAX_DEPTH,\n})\nprint(f\"Multi-color task created: {mc_task_id} (10 credits)\")\n\ntask = poll_task(\"/openapi/v1/print/multi-color\", mc_task_id)\n\n# --- Download 3MF ---\nthreemf_url = task[\"model_urls\"][\"3mf\"]\nthreemf_path = os.path.join(project_dir, \"multicolor.3mf\")\ndownload(threemf_url, threemf_path)\nprint(f\"3MF ready: {os.path.abspath(threemf_path)}\")\n\n# --- Open in multicolor slicer ---\nif mc_slicers:\n    open_in_slicer(threemf_path, mc_slicers[0][\"name\"])\nelse:\n    print(f\"Open {threemf_path} in a multicolor-capable slicer manually.\")\n```\n\n---\n\n## Manual Sanity Checks (in addition to the automated analyze API)\n\nThe analyze API covers geometric correctness (watertight, manifold edges, degenerate faces, holes). Some print-quality concerns still need a human eye in the slicer:\n\n| Check | Recommendation | Where to verify |\n|-------|---------------|-----------------|\n| Wall thickness | Minimum 1.2mm for FDM, 0.8mm for resin | Slicer (after import) |\n| Overhangs | Keep below 45° or add supports | Slicer support generation |\n| Minimum detail | At least 0.4mm for FDM, 0.05mm for resin | Visual inspection in slicer |\n| Base stability | Flat base or add brim/raft in slicer | Slicer plate adhesion |\n| Hollowing | Consider hollowing for figurines/miniatures | Slicer hollow tool (resin) |\n\nThe automated analyze API now handles: watertightness, volume, non-manifold edges, degenerate faces, holes — these no longer require manual inspection.\n\n---\n\n## Key Rules for Print Workflow\n\n- **Always detect slicer first** and report results to the user before proceeding\n- **Always run analyze (FREE)** for production / functional prints, miniatures with thin features, mechanical parts\n- **Repair is conditional**: only when analyze status = error, or warning if the user cares about quality\n- **White model**: Download OBJ format, apply `fix_obj_for_printing()` for coordinate conversion\n- **Multicolor**: The multi-color API outputs 3MF directly — no coordinate conversion needed (3MF uses Z-up natively)\n- **3MF for multicolor**: The Multi-Color Print API outputs 3MF directly — no need to request 3MF from generate/refine via `target_formats`. For non-print use cases that need 3MF, pass `\"3mf\"` in `target_formats` at generation time.\n- **For multicolor, verify slicer supports it** before proceeding with the (costly) pipeline\n- After opening in slicer, remind user to check print settings (layer height, infill, supports)\n- **If OBJ is not available**: Download GLB and guide user to import manually\n- **Repair caveat**: textures are NOT preserved. For a multicolor print on a model that needs repair, run repair first, then re-texture, then multicolor.\n\n---\n\n## Additional Resources\n\nFor the complete API endpoint reference, read [reference.md](reference.md).","tags":["meshy","printing","agent","meshy-dev","3d-generation","agent-skills","claude-code-skills","claude-skills","cursor-skills","image-to-3d","skill-md","text-to-3d"],"capabilities":["skill","source-meshy-dev","skill-meshy-3d-printing","topic-3d-generation","topic-agent-skills","topic-claude-code-skills","topic-claude-skills","topic-cursor-skills","topic-image-to-3d","topic-meshy","topic-skill-md","topic-text-to-3d"],"categories":["meshy-3d-agent"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/meshy-dev/meshy-3d-agent/meshy-3d-printing","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add meshy-dev/meshy-3d-agent","source_repo":"https://github.com/meshy-dev/meshy-3d-agent","install_from":"skills.sh"}},"qualityScore":"0.460","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 20 github stars · SKILL.md body (18,458 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:05:40.428Z","embedding":null,"createdAt":"2026-04-23T13:04:08.234Z","updatedAt":"2026-05-18T19:05:40.428Z","lastSeenAt":"2026-05-18T19:05:40.428Z","tsv":"'+10':325 '-16':2071 '-3':1938 '-4':1315 '-6':2078 '/applications':540,545 '/model.glb':893 '/model.stl':1055 '/openapi/v1/image-to-3d':1270,2032,2055 '/openapi/v1/print/analyze':342,881,898 '/openapi/v1/print/multi-color':1822,1829,2086,2116 '/openapi/v1/print/repair':351,1040,1063 '/openapi/v2/text-to-3d':1244,1293,1954,1980,1993,2008 '0':594,810,920,926,931,1155,1179,1190,1199,1437,1626,1669,1711,1739,1789,1827,1834,1844,2160 '0.05':2247 '0.4':2243 '0.8':2222 '0f':1705 '1':222,1151,1492,1558,1688,1784,1875,2070 '1.0':1591 '1.2':2218 '10':319,321,352,786,1810,1820,2111 '150.0':1776 '15cm':1775 '16':303 '1e-6':1589 '2':232,1160,1231,1495,1561,1795,1937 '2.0':1598,1606 '20':317,1165,1799 '3':247,307,1176,1314,1498,1564,1807,2077 '3d':3,5,35,48,56,62,100,108,129,158,171,217,372,1168,1172,1226,1239,1265,1302,1399,1797,1802,1806,1871,1948,2025 '3mf':151,183,1833,1838,1942,1967,2044,2121,2127,2141,2364,2370,2376,2386,2392,2406,2408 '4':255,301,312,1185,1547,1815,2069,2076 '4/5':867 '40':322,1851 '45':2232 '5':334,1164,1195,1823 '6':309,860,1831 '6f':1659,1661,1663,1679,1681,1683 '7':1839 '75.0':1390,1727 '75mm':1426,1765 'ab':657,675,698,702,723,730,735 'action':1148,1781 'add':1808,1984,2234,2260 'addit':2179,2479 'adhes':2266 'adjust':1296,1766 'ai':11,1250,1960 'align':1432 'alreadi':1880 'alway':2302,2314 'analysi':339,782 'analyz':356,806,823,877,894,899,1015,1029,2183,2186,2278,2316,2333 'analyze_task.get':902 'anycub':45,279,447,502,1914 'anycubicslicernext':452,458 'anycubicslicernext.exe':455 'api':23,1135,1974,2050,2184,2187,2279,2362,2384,2484 'app':388,404,420,436,451,464,480,531,534,536,541,542,546,547,665,668,674 'appear':163 'append':362 'appli':2349 'applic':1142 'appropri':201 'as-i':978 'ask':233,296,2072,2079 'autom':795,2182,2277 'automat':75 'avail':1336,1337,2445 'b':268 'bambu':38,175,273,401,415,496,777,1908 'bambu-studio':414 'bambu-studio.exe':408 'bambustudio':405,411 'base':562,585,599,1767,2255,2258 'bottom':1434,1708 'break':595,609 'brim/raft':2261 'c':282,567,574 'candid':597,606,608 'capabl':264,1902,2172 'care':2341 'case':2403 'caveat':2455 'center':1427,1707 'check':259,797,1787,1876,2177,2210,2434 'coars':308 'color':20,69,182,242,299,1132,1818,1854,1973,2049,2068,2094,2096,2105,2361,2382 'come':1968,2045 'compat':1184,1376 'complet':2483 'concern':2201 'condit':2330 'confirm':314 'consid':2268 'control':112,142 'convers':1192,2356,2368 'coordin':1191,1393,2355,2367 'correct':2190 'cost':315,2425 'couldn':1016 'count':919,925,930 'cover':2188 'crealiti':42,275,417,421,428,498,1910 'crealityprint.exe':425 'creat':85,879,1038,1214,1242,1268,1859,1952,1991,2030,2084,2107 'credit':323,353,787,811,1149,1782,2112 'cura':41,178,478,482,489 'd':295 'darwin':530,664 'decid':799 'decis':205 'def':505,635,1377 'default':300,311,1425,1764 'degener':952,955,982,2194,2288 'depth':306,2075,2098,2100 'desk':190 'detail':2240 'detect':14,77,155,195,223,229,287,360,506,508,740,743,772,1152,1158,1785,1904,2303 'dir':92,394,410,427,442,457,470,487,552,555,581,587,601,1221,1304,1307,1363,1866,2012,2015,2132 'direct':169,1133,2365,2387 'done':1881 'download':28,89,120,790,874,1095,1177,1218,1316,1344,1365,1832,1863,2120,2134,2346,2446 'downstream':1094 'e':313 'e.g':147,1772 'edg':946,950,1009,2193,2287 'either':347 'elegoo':44,277,433,500,1912 'elegoo-slicer.exe':440 'elegooslic':437,443 'elif':548,677,1548,1667 'els':596,610,690,700,704,715,725,759,767,1570,1590,1654,1685,1741,1922,2162 'enabl':2001 'endpoint':1297,2485 'entir':114 'environ':95 'error':358,922,924,964,968,997,1031,2335 'etc':93,780 'example.com':892,1054 'example.com/model.glb':891 'example.com/model.stl':1053 'exe':391,397,407,413,424,431,439,445,454,460,467,473,484,491,557,560,589,603,612,615,617,620,680,683,684,687,689,693,696,705,708,709,712,714,718,721 'extra':1631,1648,1651,1653,1664 'eye':2206 'f':330,539,544,733,761,913,921,933,938,943,951,957,1619,1656,1676,1690,1713,1743,1924,2102,2140,2164 'f.write':1655,1675,1686 'face':953,956,983,2195,2289 'fals':1175,1277 'fdm':2221,2246 'featur':995,2325 'feed':1124 'field':1073 'figurin':185 'figurines/miniatures':2271 'file':569,576,639,646,660,1752,1757 'final':846 'find':1070 'fine':310 'first':133,226,1118,2305,2472 'fix':788,1186,1318,1378,1391,1692,1718,2350 'flag':357,1030 'flat':2257 'float':1458,1460,1466,1468,1474,1476,1490,1493,1496,1556,1559,1562 'flow':221 'follow':219,251,331 'format':118,149,1067,1181,1254,1283,1334,1945,1965,2042,2348,2397,2411 'found':518,634 'found.append':623 'free':343,784,809,2317 'full':1855 'function':84,2320 'generat':8,55,101,117,130,316,345,373,1161,1209,1227,1232,1796,1872,1939,2238,2413 'generate/refine':1977,2394 'generation/refine/retexture':829 'geometr':2189 'geometri':1102 'get':90,1219,1305,1326,1357,1828,1864,2013 'glb':873,1049,1284,1345,1358,2447 'glob':380,382 'glob_mod.glob':583 'gltf':1404 'guid':196,2449 'hand':136 'handl':12,1136,2281 'healthi':976 'height':1388,1423,1575,1582,1585,1588,1703,1725,1762,2438 'helper':1222,1867 'hole':958,960,985,2196,2290 'hollow':2267,2269,2273 'howev':102 'human':2205 'id':838,840,851,878,884,887,900,1037,1043,1046,1065,1128,1241,1267,1295,1309,1830,1951,1982,1990,1998,2000,2010,2017,2029,2057,2060,2062,2083,2089,2092,2110,2119 'imag':1170,1263,1271,1273,1300,1804,2023,2033,2035 'image-to-3d':1299 'impli':184 'import':211,375,848,1347,1758,2228,2452 'includ':116 'inf':1459,1461,1467,1469,1475,1477 'infil':2439 'info':523,651 'info.get':532,553,558,613,666,681,706 'input':836,849,882,885,1041,1044,1069,1382,1445,1449,2058,2087,2090 'insert':336 'inspect':1021,2252,2296 'instal':224,267,293,509,748,773,1153,1918 'instead':876 'integr':123 'intent':154 'intern':1140 'issu':916,918 'item':1621,1625,1632,1668,1674,1687 'join':1650,1928 'keep':2230 'key':1342,2297 'keyword':162 'latest':1252,1962 'layer':2437 'least':2242 'line':1447,1479,1481,1572,1573 'line.split':1486,1552 'line.startswith':1483,1549 'linux':396,412,430,444,459,472,490,611,614,707 'list':513,1338 'longer':2293 'm':942 'mac':387,403,419,435,450,463,479,533,667 'mani':298 'manifold':945,949,1008,2192,2286 'manual':1022,1348,2174,2175,2295,2453 'map':385 'match':582,591,593 'max':302,1456,1464,1472,1507,1513,1514,1519,1525,1526,1531,1537,1538,1576,1596,1604,2067,2074,2093,2095,2097,2099 'mc':754,764,1883,1895,1934,2081,2108,2117,2151,2158 'mean':969,975 'mechan':2326 'mention':34 'mesh':802,835,847 'meshi':2,10,47,54,99,128,371,859,866,1225,1870 'meshy-3d-generation':98,127,370,1224,1869 'meshy-3d-printing':1 'meshy-gener':53 'metric':905,907 'metrics.get':935,940,947,954,959 'min':1454,1462,1470,1505,1509,1510,1517,1521,1522,1529,1533,1534,1578,1594,1602,1610 'miniatur':186,2322 'minimum':2217,2239 'mirror':1068 'mm':1389,1424,1583,1704,1706,1726,1763,2219,2223,2244,2248 'mod':383 'mode':1245,1955,1994 'model':7,16,57,66,189,208,250,253,645,864,870,889,1020,1051,1083,1112,1144,1163,1208,1234,1251,1260,1279,1324,1340,1355,1420,1428,1433,1574,1584,1587,1798,1836,1961,2125,2345,2466 'model.obj':1364 'multi':19,181,1131,1817,1853,1972,2048,2104,2360,2381 'multi-color':18,180,1130,1816,1852,1971,2047,2103,2359,2380 'multic':46 'multicolor':71,153,179,210,246,257,263,270,285,320,332,493,517,628,631,755,758,1096,1114,1777,1788,1793,1842,1878,1892,1901,1925,1988,2019,2148,2171,2357,2378,2416,2462,2478 'multicolor-cap':262,1900,2170 'multicolor-print':2018 'multicolor.3mf':2133 'must':141,852 'n':1666,1684 'name':515,522,624,625,629,642,654,670,739,763,1206,1740,1930,2161 'nativ':2375 'need':329,803,961,1034,1108,1287,1966,2043,2203,2369,2389,2405,2468 'next':281,449,504,1076,1916 'nmodel':1744 'non':944,948,999,1002,1007,2285,2400 'non-manifold':1006,2284 'non-posit':1001 'non-print':2399 'non-watertight':998 'none':432,446,461,492,527,691,716,1088,1386,1442 'note':1099,1150,1783 'nx':1553,1567,1671,1678 'ny':1554,1569,1672,1680 'nz':1555,1568,1673,1682 'obj':1178,1180,1187,1203,1255,1257,1285,1286,1317,1321,1327,1330,1333,1352,1359,1366,1368,1373,1379,1392,1691,1719,1722,1736,1747,2347,2351,2442 'offset':1593,1601,1609,1637,1642,1647 'one':294,774,1919 'open':636,643,672,729,734,1196,1200,1448,1614,1728,1733,1750,1759,1840,1845,2146,2153,2165,2428 'optim':27 'option':785,967,989 'orca':176,399 'orca-slic':398 'orca-slicer.exe':392 'orcaslic':39,272,386,389,395,495,776,1907 'os':379 'os.environ.get':564,570 'os.path.abspath':659,1715,1746,2143 'os.path.exists':538,605 'os.path.join':584,598,1361,2130 'os.startfile':701 'output':868,1047,1056,1066,1384,1439,1443,1615,1714,1716,2363,2385 'overhang':2229 'p':901 'p.get':906,909,917,923,928 'paramet':143,1760 'part':1485,1491,1494,1497,1546,1551,1557,1560,1563,2327 'pass':869,2407 'path':516,526,543,592,607,618,622,626,627,640,658,661,676,685,694,697,699,703,710,719,722,724,731,736,766,1204,1360,1369,1383,1385,1440,1444,1446,1450,1616,1717,1723,1737,1748,1848,2129,2138,2145,2157,2167 'pbr':2002 'phone':192 'physic':188 'pipelin':203,254,333,348,1146,1779,2426 'plane':1431 'plate':2265 'platform':378 'platform.system':520,656 'poll':87,896,1061,1216,1291,1824,1861,1978,2006,2053,2114 'popul':1072 'posit':1003,1397 'post':341,350,1371,1821 'post-process':1370 'prefer':1755 'prepar':50 'prerequisit':78 'present':986 'preserv':1101,2459 'preview':863,1246,1949,1950,1956,1981,1996,1999,2016 'print':4,6,17,21,26,36,43,49,63,72,109,159,170,172,202,218,244,276,418,422,429,499,732,747,760,768,792,822,912,932,972,977,996,1013,1115,1145,1189,1210,1236,1261,1312,1320,1332,1343,1381,1400,1689,1712,1721,1742,1749,1773,1778,1897,1905,1911,1917,1923,2020,2101,2139,2163,2199,2300,2321,2353,2383,2401,2435,2463 'print-optim':25 'print-qual':2198 'printabl':338,781,796,834,903,914 'proactiv':156 'proceed':1921,2313,2422 'process':1018,1372,1819 'produc':832,843 'product':821,2319 'program':568,575 'programfil':565,571 'project':91,1220,1303,1306,1362,1865,2011,2014,2131 'prompt':1247,1249,1311,1957,1959 'prusa':40,177,475 'prusa-slic':474 'prusa-slicer.exe':468 'prusaslic':462,465,471,779 'python':374,825,1032,1229,1873 'qualiti':2200,2343 'r':566,573,1451 're':1121,1138,2475 're-textur':1120,1137,2474 'read':2487 'readi':1745,2142 'readlin':1452 'reason':816 'recommend':335,991,1010,2211 'refer':853,2486 'reference.md':2488,2489 'refin':839,1811,1983,1989,1995,2004,2009,2051,2061 'remind':2431 'repair':327,783,804,962,987,1011,1025,1035,1036,1059,1064,1074,1081,1091,1100,1111,1117,1125,2328,2454,2469,2471 'report':2307 'request':168,1771,2391 'requir':1814,1986,2294 'resin':2225,2250,2275 'resourc':2480 'result':2308 'retextur':1813 'retri':1024 'return':512,633 'reus':81 'reusabl':366 'rotat':1402,1453,1623,1693 'rotated.append':1541,1565,1571 'rule':2298 'run':126,349,793,826,1116,1156,2315,2470 'rx':1499,1512,1516,1543,1628,1634 'ry':1500,1524,1528,1544,1629,1639 'rz':1501,1536,1540,1545,1630,1644 'saniti':2176 'scale':1395,1419,1580,1599,1607,1612,1635,1640,1645,1700 'script':230,361,367,824,1026,1159,1211,1856 'see':227,1193 'segment':305 'select':119 'send':52 'set':2436 'setup':96 'shutil':377 'shutil.which':619,686,711 'singl':68,241 'single-color':67,240 'skill':80,111,140 'skill-meshy-3d-printing' 'skip':818 'slice':37,174 'slicer':13,60,76,122,173,225,228,265,271,278,280,286,359,384,400,434,448,476,494,501,503,507,510,632,638,641,650,653,669,738,741,742,744,746,749,753,770,1097,1154,1157,1183,1198,1202,1205,1289,1351,1375,1401,1409,1730,1732,1735,1738,1756,1786,1794,1843,1847,1849,1879,1884,1889,1896,1903,1913,1915,1926,1935,2149,2152,2155,2159,2173,2209,2226,2236,2254,2263,2264,2272,2304,2418,2430 'slicer_map.get':652 'slicer_map.items':525 'softwar':511,771 'source-meshy-dev' 'specifi':649 'stabil':2256 'stand':193 'start':146 'statu':187 'status':908,910,915,963,974,2334 'step':340,807,830,1098,1147,1230,1313,1780,1874,1936 'still':2202 'stl':1058 'str':1649,1665 'studio':274,402,416,497,778,1909 'subprocess':376 'subprocess.popen':695,720 'subprocess.run':671,726 'succeed':1826 'suggest':157,292 'support':64,269,1906,2235,2237,2419,2440 'system':519,529,549,655,663,678,1394 'target':148,1253,1282,1387,1422,1581,1702,1724,1761,1944,1964,2041,2396,2410 'task':86,88,837,850,856,880,883,886,895,897,1039,1042,1045,1060,1062,1082,1127,1215,1217,1240,1243,1266,1269,1290,1292,1294,1308,1323,1339,1354,1860,1862,1953,1979,1992,1997,2005,2007,2028,2031,2052,2054,2056,2059,2066,2082,2085,2088,2091,2106,2109,2113,2115,2118,2124 'task.get':1310 'templat':368 'text':1166,1237,1800,1946 'textur':318,845,1105,1110,1122,1139,1174,1276,1281,1809,1940,1985,2027,2038,2065,2456,2476 'thick':2216 'thin':994,2324 'thin-featur':993 'threemf':2122,2128,2135,2137,2144,2156,2166 'time':2414 'tool':2274 'topic-3d-generation' 'topic-agent-skills' 'topic-claude-code-skills' 'topic-claude-skills' 'topic-cursor-skills' 'topic-image-to-3d' 'topic-meshy' 'topic-skill-md' 'topic-text-to-3d' 'total':324,1850 'toy':191 'tree':206 'true':2003,2039 'tx':1633,1658 'ty':1638,1660 'tz':1643,1662 'ultimak':477,481,488 'ultimaker-cura.exe':485 'unknown':911,1014 'untextur':1162,1233 'url':871,875,890,1052,1075,1077,1079,1084,1087,1092,1272,1274,1322,1325,1331,1341,1353,1356,1367,1837,2034,2036,2123,2126,2136 'use':30,858,1089,1212,1857,2063,2371,2402 'user':33,105,166,198,214,235,290,1248,1769,1958,2073,2080,2311,2340,2432,2450 'util':83 'v':1484,1542,1627,1657 'valu':1085 'verifi':2214,2417 'via':22,2395 'visual':2251 'vn':1550,1566,1670,1677 'volum':939,941,1004,2283 'vs':209 'w':1617 'wall':2215 'want':106,215,238 'warn':288,927,929,965,981,1790,1898,2337 'watertight':934,937,1000,2191,2282 'well':973 'whatev':842 'whether':800 'white':15,65,207,243,249,252,1143,1207,1259,1278,2344 'win':390,393,406,409,423,426,438,441,453,456,466,469,483,486,551,554,556,559,580,586,588,600,602,682 'window':550,679 'won':970 'workflow':29,73,115,132,2301 'x':1413,1416,1455,1457,1487,1502,1506,1508,1511,1515,1592,1595,1597,1636 'x86':572,577 'xdg':728 'xdg-open':727 'xy':1430 'y':1406,1414,1418,1463,1465,1488,1504,1518,1520,1523,1527,1600,1603,1605,1641,1695 'y-up':1405,1694 'z':1411,1415,1417,1436,1471,1473,1489,1503,1530,1532,1535,1539,1577,1579,1608,1611,1646,1698,1710,2373 'z-up':1410,1697,2372","prices":[{"id":"9de8cb38-7e8e-48c9-9d01-c829e156e182","listingId":"ffa74886-6001-468c-8876-0ab60ee0dda2","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"meshy-dev","category":"meshy-3d-agent","install_from":"skills.sh"},"createdAt":"2026-04-23T13:04:08.234Z"}],"sources":[{"listingId":"ffa74886-6001-468c-8876-0ab60ee0dda2","source":"github","sourceId":"meshy-dev/meshy-3d-agent/meshy-3d-printing","sourceUrl":"https://github.com/meshy-dev/meshy-3d-agent/tree/main/skills/meshy-3d-printing","isPrimary":false,"firstSeenAt":"2026-04-23T13:04:08.234Z","lastSeenAt":"2026-05-18T19:05:40.428Z"},{"listingId":"ffa74886-6001-468c-8876-0ab60ee0dda2","source":"skills_sh","sourceId":"meshy-dev/meshy-3d-agent/meshy-3d-printing","sourceUrl":"https://skills.sh/meshy-dev/meshy-3d-agent/meshy-3d-printing","isPrimary":true,"firstSeenAt":"2026-05-07T20:43:04.044Z","lastSeenAt":"2026-05-07T22:41:58.156Z"}],"details":{"listingId":"ffa74886-6001-468c-8876-0ab60ee0dda2","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"meshy-dev","slug":"meshy-3d-printing","github":{"repo":"meshy-dev/meshy-3d-agent","stars":20,"topics":["3d-generation","agent-skills","ai","claude-code-skills","claude-skills","cursor-skills","image-to-3d","meshy","skill-md","text-to-3d"],"license":"mit","html_url":"https://github.com/meshy-dev/meshy-3d-agent","pushed_at":"2026-05-09T03:16:20Z","description":"AI agent skills for Meshy AI 3D generation platform","skill_md_sha":"97f01c16b50e18604091783f82e15b60d33dfadb","skill_md_path":"skills/meshy-3d-printing/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/meshy-dev/meshy-3d-agent/tree/main/skills/meshy-3d-printing"},"layout":"multi","source":"github","category":"meshy-3d-agent","frontmatter":{"name":"meshy-3d-printing","license":"MIT","description":"3D print models generated with Meshy AI. Handles slicer detection, white model printing, multi-color printing via API, and print-optimized download workflows. Use when the user mentions 3D printing, slicing, Bambu, OrcaSlicer, Prusa, Cura, Creality Print, Elegoo, Anycubic, multicolor, multi-color, 3mf, or wants to print a figurine, miniature, or physical model.","compatibility":"Requires Python 3 with requests package. Depends on meshy-3d-generation skill. Works with Claude Code, Cursor, and all Agent Skills compatible tools."},"skills_sh_url":"https://skills.sh/meshy-dev/meshy-3d-agent/meshy-3d-printing"},"updatedAt":"2026-05-18T19:05:40.428Z"}}