{"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**\n   f. Follow Multicolor Pipeline\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## 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## Printability Checklist (Manual Review)\n\n> **Note:** Automated printability analysis API is coming soon. For now, manually review the checklist below before printing.\n\n| Check | Recommendation |\n|-------|---------------|\n| Wall thickness | Minimum 1.2mm for FDM, 0.8mm for resin |\n| Overhangs | Keep below 45° or add supports |\n| Manifold mesh | Ensure watertight with no holes |\n| Minimum detail | At least 0.4mm for FDM, 0.05mm for resin |\n| Base stability | Flat base or add brim/raft in slicer |\n| Floating parts | All parts connected or printed separately |\n\n**Recommendations**: Import into your slicer to check for mesh errors. Use the slicer's built-in repair tool if needed. Consider hollowing figurines to save material.\n\n---\n\n## Key Rules for Print Workflow\n\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- **Always detect slicer first** and report results to the user before proceeding\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\n---\n\n## Coming Soon\n\n- **Printability Analysis & Fix API** — Automated mesh analysis and repair (non-manifold edges, thin walls, floating parts)\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.455","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 10 github stars · SKILL.md body (15,118 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-04-24T07:03:26.412Z","embedding":null,"createdAt":"2026-04-23T13:04:08.234Z","updatedAt":"2026-04-24T07:03:26.412Z","lastSeenAt":"2026-04-24T07:03:26.412Z","tsv":"'-16':1679 '-3':1546 '-4':923 '-6':1686 '/applications':510,515 '/openapi/v1/image-to-3d':878,1640,1663 '/openapi/v1/print/multi-color':1430,1437,1694,1724 '/openapi/v2/text-to-3d':852,901,1562,1588,1601,1616 '0':564,763,787,798,807,1045,1234,1277,1319,1347,1397,1435,1442,1452,1768 '0.05':1839 '0.4':1835 '0.8':1813 '0f':1313 '1':222,759,1100,1166,1296,1392,1483,1678 '1.0':1199 '1.2':1809 '10':319,321,1418,1428,1719 '150.0':1384 '15cm':1383 '16':303 '1e-6':1197 '2':232,768,839,1103,1169,1403,1545 '2.0':1206,1214 '20':317,773,1407 '3':247,307,784,922,1106,1172,1415,1685 '3d':3,5,35,48,56,62,100,108,129,158,171,217,342,776,780,834,847,873,910,1007,1405,1410,1414,1479,1556,1633 '3mf':151,183,1441,1446,1550,1575,1652,1729,1735,1749,1912,1918,1924,1934,1940,1954,1956 '4':255,301,312,793,1155,1423,1677,1684 '40':322,1459 '45':1820 '5':772,803,1431 '6':309,1439 '6f':1267,1269,1271,1287,1289,1291 '7':1447 '75.0':998,1335 '75mm':1034,1373 'ab':627,645,668,672,693,700,705 'action':756,1389 'add':1416,1592,1822,1848 'addit':2033 'adjust':904,1374 'ai':11,858,1568 'align':1040 'alreadi':1488 'alway':1963 'analysi':1790,2017,2022 'anycub':45,279,417,472,1522 'anycubicslicernext':422,428 'anycubicslicernext.exe':425 'api':23,1582,1658,1791,1910,1932,2019,2038 'app':358,374,390,406,421,434,450,501,504,506,511,512,516,517,635,638,644 'appear':163 'append':332 'appli':1897 'appropri':201 'ask':233,296,1680,1687 'autom':1788,2020 'automat':75 'avail':944,945,2005 'b':268 'bambu':38,175,273,371,385,466,747,1516 'bambu-studio':384 'bambu-studio.exe':378 'bambustudio':375,381 'base':532,555,569,1375,1843,1846 'bottom':1042,1316 'break':565,579 'brim/raft':1849 'built':1875 'built-in':1874 'c':282,537,544 'candid':567,576,578 'capabl':264,1510,1780 'case':1951 'center':1035,1315 'check':259,1395,1484,1804,1866,1994 'checklist':1784,1800 'coars':308 'color':20,69,182,242,299,1426,1462,1581,1657,1676,1702,1704,1713,1909,1930 'come':1576,1653,1793,2014 'compat':792,984 'complet':2037 'confirm':314 'connect':1856 'consid':1881 'control':112,142 'convers':800,1904,1916 'coordin':799,1001,1903,1915 'cost':315,1985 'crealiti':42,275,387,391,398,468,1518 'crealityprint.exe':395 'creat':85,822,850,876,1467,1560,1599,1638,1692,1715 'credit':323,757,1390,1720 'cura':41,178,448,452,459 'd':295 'darwin':500,634 'decis':205 'def':475,605,985 'default':300,311,1033,1372 'depth':306,1683,1706,1708 'desk':190 'detail':1832 'detect':14,77,155,195,223,229,287,330,476,478,710,713,742,760,766,1393,1512,1964 'dir':92,364,380,397,412,427,440,457,522,525,551,557,571,829,912,915,971,1474,1620,1623,1740 'direct':169,1913,1935 'done':1489 'download':28,89,120,785,826,924,952,973,1440,1471,1728,1742,1894,2006 'e':313 'e.g':147,1380 'edg':2028 'elegoo':44,277,403,470,1520 'elegoo-slicer.exe':410 'elegooslic':407,413 'elif':518,647,1156,1275 'els':566,580,660,670,674,685,695,729,737,1178,1198,1262,1293,1349,1530,1770 'enabl':1609 'endpoint':905,2039 'ensur':1826 'entir':114 'environ':95 'error':1869 'etc':93,750 'exe':361,367,377,383,394,401,409,415,424,430,437,443,454,461,527,530,559,573,582,585,587,590,650,653,654,657,659,663,666,675,678,679,682,684,688,691 'extra':1239,1256,1259,1261,1272 'f':325,509,514,703,731,1227,1264,1284,1298,1321,1351,1532,1710,1748,1772 'f.write':1263,1283,1294 'fals':783,885 'fdm':1812,1838 'figurin':185,1883 'file':539,546,609,616,630,1360,1365 'fine':310 'first':133,226,1966 'fix':794,926,986,999,1300,1326,1898,2018 'flat':1845 'float':1066,1068,1074,1076,1082,1084,1098,1101,1104,1164,1167,1170,1852,2031 'flow':221 'follow':219,251,326 'format':118,149,789,862,891,942,1553,1573,1650,1896,1945,1959 'found':488,604 'found.append':593 'full':1463 'function':84 'generat':8,55,101,117,130,316,343,769,817,835,840,1404,1480,1547,1961 'generate/refine':1585,1942 'get':90,827,913,934,965,1436,1472,1621 'glb':892,953,966,2007 'glob':350,352 'glob_mod.glob':553 'gltf':1012 'guid':196,2009 'hand':136 'handl':12 'height':996,1031,1183,1190,1193,1196,1311,1333,1370,1998 'helper':830,1475 'hole':1830 'hollow':1882 'howev':102 'id':849,875,903,917,1438,1559,1590,1598,1606,1608,1618,1625,1637,1665,1668,1670,1691,1697,1700,1718,1727 'imag':778,871,879,881,908,1412,1631,1641,1643 'image-to-3d':907 'impli':184 'import':211,345,955,1366,1861,2012 'includ':116 'inf':1067,1069,1075,1077,1083,1085 'infil':1999 'info':493,621 'info.get':502,523,528,583,636,651,676 'input':990,1053,1057,1666,1695,1698 'instal':224,267,293,479,718,743,761,1526 'integr':123 'intent':154 'item':1229,1233,1240,1276,1282,1295 'join':1258,1536 'keep':1818 'key':950,1887 'keyword':162 'latest':860,1570 'layer':1997 'least':1834 'line':1055,1087,1089,1180,1181 'line.split':1094,1160 'line.startswith':1091,1157 'linux':366,382,400,414,429,442,460,581,584,677 'list':483,946 'mac':357,373,389,405,420,433,449,503,637 'mani':298 'manifold':1824,2027 'manual':956,1782,1785,1797,2013 'map':355 'match':552,561,563 'materi':1886 'max':302,1064,1072,1080,1115,1121,1122,1127,1133,1134,1139,1145,1146,1184,1204,1212,1675,1682,1701,1703,1705,1707 'mc':724,734,1491,1503,1542,1689,1716,1725,1759,1766 'mention':34 'mesh':1825,1868,2021 'meshi':2,10,47,54,99,128,341,833,1478 'meshy-3d-generation':98,127,340,832,1477 'meshy-3d-printing':1 'meshy-gener':53 'min':1062,1070,1078,1113,1117,1118,1125,1129,1130,1137,1141,1142,1186,1202,1210,1218 'miniatur':186 'minimum':1808,1831 'mm':997,1032,1191,1312,1314,1334,1371,1810,1814,1836,1840 'mod':353 'mode':853,1563,1602 'model':7,16,57,66,189,208,250,253,615,752,771,816,842,859,868,887,932,948,963,1028,1036,1041,1182,1192,1195,1406,1444,1569,1733,1893 'model.obj':972 'multi':19,181,1425,1461,1580,1656,1712,1908,1929 'multi-color':18,180,1424,1460,1579,1655,1711,1907,1928 'multic':46 'multicolor':71,153,179,210,246,257,263,270,285,320,327,463,487,598,601,725,728,1385,1396,1401,1450,1486,1500,1509,1533,1596,1627,1756,1779,1905,1926,1976 'multicolor-cap':262,1508,1778 'multicolor-print':1626 'multicolor.3mf':1741 'must':141 'n':1274,1292 'name':485,492,594,595,599,612,624,640,709,733,814,1348,1538,1769 'nativ':1923 'need':895,1574,1651,1880,1917,1937,1953 'next':281,419,474,1524 'nmodel':1352 'non':1948,2026 'non-manifold':2025 'non-print':1947 'none':402,416,431,462,497,661,686,994,1050 'note':758,1391,1787 'nx':1161,1175,1279,1286 'ny':1162,1177,1280,1288 'nz':1163,1176,1281,1290 'obj':786,788,795,811,863,865,893,894,925,929,935,938,941,960,967,974,976,981,987,1000,1299,1327,1330,1344,1355,1895,1899,2002 'offset':1201,1209,1217,1245,1250,1255 'one':294,744,1527 'open':606,613,642,699,704,804,808,1056,1222,1336,1341,1358,1367,1448,1453,1754,1761,1773,1988 'optim':27 'orca':176,369 'orca-slic':368 'orca-slicer.exe':362 'orcaslic':39,272,356,359,365,465,746,1515 'os':349 'os.environ.get':534,540 'os.path.abspath':629,1323,1354,1751 'os.path.exists':508,575 'os.path.join':554,568,969,1738 'os.startfile':671 'output':992,1047,1051,1223,1322,1324,1911,1933 'overhang':1817 'paramet':143,1368 'part':1093,1099,1102,1105,1154,1159,1165,1168,1171,1853,1855,2032 'pass':1955 'path':486,496,513,562,577,588,592,596,597,610,628,631,646,655,664,667,669,673,680,689,692,694,701,706,736,812,968,977,991,993,1048,1052,1054,1058,1224,1325,1331,1345,1356,1456,1737,1746,1753,1765,1775 'pbr':1610 'phone':192 'physic':188 'pipelin':203,254,328,754,1387,1986 'plane':1039 'platform':348 'platform.system':490,626 'poll':87,824,899,1432,1469,1586,1614,1661,1722 'posit':1005 'post':979,1429 'post-process':978 'prefer':1363 'prepar':50 'prerequisit':78 'preview':854,1557,1558,1564,1589,1604,1607,1624 'print':4,6,17,21,26,36,43,49,63,72,109,159,170,172,202,218,244,276,388,392,399,469,702,717,730,738,753,797,818,844,869,920,928,940,951,989,1008,1297,1320,1329,1350,1357,1381,1386,1505,1513,1519,1525,1531,1628,1709,1747,1771,1803,1858,1890,1901,1931,1949,1995 'print-optim':25 'printabl':1783,1789,2016 'proactiv':156 'proceed':1529,1974,1982 'process':980,1427 'program':538,545 'programfil':535,541 'project':91,828,911,914,970,1473,1619,1622,1739 'prompt':855,857,919,1565,1567 'prusa':40,177,445 'prusa-slic':444 'prusa-slicer.exe':438 'prusaslic':432,435,441,749 'python':344,837,1481 'r':536,543,1059 'read':2041 'readi':1353,1750 'readlin':1060 'recommend':1805,1860 'refer':2040 'reference.md':2042,2043 'refin':1419,1591,1597,1603,1612,1617,1659,1669 'remind':1991 'repair':1877,2024 'report':1968 'request':168,1379,1939 'requir':1422,1594 'resin':1816,1842 'resourc':2034 'result':1969 'retextur':1421 'return':482,603 'reus':81 'reusabl':336 'review':1786,1798 'rotat':1010,1061,1231,1301 'rotated.append':1149,1173,1179 'rule':1888 'run':126,764 'rx':1107,1120,1124,1151,1236,1242 'ry':1108,1132,1136,1152,1237,1247 'rz':1109,1144,1148,1153,1238,1252 'save':1885 'scale':1003,1027,1188,1207,1215,1220,1243,1248,1253,1308 'script':230,331,337,767,819,1464 'see':227,801 'segment':305 'select':119 'send':52 'separ':1859 'set':1996 'setup':96 'shutil':347 'shutil.which':589,656,681 'singl':68,241 'single-color':67,240 'skill':80,111,140 'skill-meshy-3d-printing' 'slice':37,174 'slicer':13,60,76,122,173,225,228,265,271,278,280,286,329,354,370,404,418,446,464,471,473,477,480,602,608,611,620,623,639,708,711,712,714,716,719,723,740,762,765,791,806,810,813,897,959,983,1009,1017,1338,1340,1343,1346,1364,1394,1402,1451,1455,1457,1487,1492,1497,1504,1511,1521,1523,1534,1543,1757,1760,1763,1767,1781,1851,1864,1872,1965,1978,1990 'slicer_map.get':622 'slicer_map.items':495 'softwar':481,741 'soon':1794,2015 'source-meshy-dev' 'specifi':619 'stabil':1844 'stand':193 'start':146 'statu':187 'step':755,838,921,1388,1482,1544 'str':1257,1273 'studio':274,372,386,467,748,1517 'subprocess':346 'subprocess.popen':665,690 'subprocess.run':641,696 'succeed':1434 'suggest':157,292 'support':64,269,1514,1823,1979,2000 'system':489,499,519,625,633,648,1002 'target':148,861,890,995,1030,1189,1310,1332,1369,1552,1572,1649,1944,1958 'task':86,88,823,825,848,851,874,877,898,900,902,916,931,947,962,1468,1470,1561,1587,1600,1605,1613,1615,1636,1639,1660,1662,1664,1667,1674,1690,1693,1696,1699,1714,1717,1721,1723,1726,1732 'task.get':918 'templat':338 'text':774,845,1408,1554 'textur':318,782,884,889,1417,1548,1593,1635,1646,1673 'thick':1807 'thin':2029 'threemf':1730,1736,1743,1745,1752,1764,1774 'time':1962 'tool':1878 '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,1458 'toy':191 'tree':206 'true':1611,1647 'tx':1241,1266 'ty':1246,1268 'tz':1251,1270 'ultimak':447,451,458 'ultimaker-cura.exe':455 'untextur':770,841 'url':880,882,930,933,939,949,961,964,975,1445,1642,1644,1731,1734,1744 'use':30,820,1465,1671,1870,1919,1950 'user':33,105,166,198,214,235,290,856,1377,1566,1681,1688,1972,1992,2010 'util':83 'v':1092,1150,1235,1265 'verifi':1977 'via':22,1943 'vn':1158,1174,1278,1285 'vs':209 'w':1225 'wall':1806,2030 'want':106,215,238 'warn':288,1398,1506 'watertight':1827 'white':15,65,207,243,249,252,751,815,867,886,1892 'win':360,363,376,379,393,396,408,411,423,426,436,439,453,456,521,524,526,529,550,556,558,570,572,652 'window':520,649 'workflow':29,73,115,132,1891 'x':1021,1024,1063,1065,1095,1110,1114,1116,1119,1123,1200,1203,1205,1244 'x86':542,547 'xdg':698 'xdg-open':697 'xy':1038 'y':1014,1022,1026,1071,1073,1096,1112,1126,1128,1131,1135,1208,1211,1213,1249,1303 'y-up':1013,1302 'z':1019,1023,1025,1044,1079,1081,1097,1111,1138,1140,1143,1147,1185,1187,1216,1219,1254,1306,1318,1921 'z-up':1018,1305,1920","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-04-24T07:03:26.412Z"}],"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":10,"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-04-03T13:58:05Z","description":"AI agent skills for Meshy AI 3D generation platform","skill_md_sha":"deb602797c31fec520710d491598720ddb87504e","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-04-24T07:03:26.412Z"}}