Meshy 3D generation API — text-to-3D, image-to-3D, multi-image-to-3D, remesh, retexture, auto-rigging, animation, 3D printing, plus nano-banana-backed 2D gen. Activate when the user asks for 3D models, rigging, animations, 3D printing, or configures any node whose id starts with `meshy-`. Sourced directly from docs.meshy.ai on 2026-04-17 — every parameter, endpoint, and price quoted here came from the canonical API reference.
설치
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
Meshy 3D generation API — text-to-3D, image-to-3D, multi-image-to-3D, remesh, retexture, auto-rigging, animation, 3D printing, plus nano-banana-backed 2D gen. Activate when the user asks for 3D models, rigging, animations, 3D printing, or configures any node whose id starts with `meshy-`. Sourced directly from docs.meshy.ai on 2026-04-17 — every parameter, endpoint, and price quoted here came from the canonical API reference.
Meshy Skill
When to use
User asks for a 3D model (text description or image reference)
User wants to rig a character, animate a rigged character, or 3D-print a model
User wants to retexture or remesh an existing 3D model
User configures any meshy-* node
User asks about credit costs, rate limits, or which Meshy model to pick
Universal rules (all Meshy endpoints)
Every task is async. Submit returns {"result": "<task_id>"}. Poll GET /{endpoint}/{task_id} or subscribe to /stream for SSE. Task is done when status is SUCCEEDED, FAILED, or CANCELED.
Assets expire. Task responses include expires_at (ms since epoch). Download outputs promptly.
Base URL:https://api.meshy.ai/openapi/ — v1 for most endpoints, v2 for text-to-3d only.
Status values:PENDING → IN_PROGRESS → SUCCEEDED / FAILED / CANCELED.
Error codes:400 bad params · 401 auth · 402 insufficient credits · 404 not found · 422 pose estimation failed (rigging only) · 429 rate limit.
Task ID format: k-sortable UUID. Docs say "you should not make any assumptions about the format of the id" — treat as opaque.
Delete is irreversible.DELETE /{endpoint}/{task_id} permanently removes the task and all assets. As of 2026-06-05, a poll cancellation fires a best-effort DELETE /{endpoint}/{task_id} so the in-flight Meshy task stops upstream instead of running to completion.
Pick the right endpoint
User wants
Endpoint
Credits
Nebula node
3D model from text
/v2/text-to-3d (preview, then refine)
20 (meshy-6) + 10 refine, or 5 + 10 (older)
meshy-text-to-3d
3D model from single image
/v1/image-to-3d
20 (no tex) / 30 (with tex) on meshy-6, or 5/15 on older
meshy-image-to-3d
3D model from 2–4 images (same object, different angles)
/v1/multi-image-to-3d
same as image-to-3d
meshy-multi-image-to-3d
Convert format or reduce polycount on existing model
/v1/remesh
5
meshy-remesh
Re-texture existing 3D model with text or image
/v1/retexture
10
meshy-retexture
Auto-rig a humanoid character
/v1/rigging
5 (includes walking + running free)
meshy-rigging
Apply an animation from the library
/v1/animations
3
meshy-animate
Multi-color 3D print output (3MF)
/v1/print/multi-color
10
meshy-3d-print
2D image via nano-banana routed through Meshy
/v1/text-to-image or /v1/image-to-image
3 (nano-banana) / 9 (pro)
meshy-text-to-image, meshy-image-to-image
Full pricing and credit breakdown: reference/credits.md.
Core prompting principles
Meshy docs are sparse on prompting guidance. What they say explicitly:
Text-to-3D prompt limit: 600 characters
Description format: "a monster mask", "a futuristic robot warrior" — noun-phrase style, concrete objects. Works like Imagen/Nano Banana — narrative description beats keyword soup.
Image texturing limitation:"may not work optimally if there are substantial geometry differences" — keep the texture reference image close in form to the actual 3D model.
Multi-image-to-3D:"All images should depict the same object from different angles for best results" — 1 to 4 images, same subject, varied angles.
Workflow patterns
Full text-to-3D with textured output
POST /v2/text-to-3d with mode=preview, prompt, ai_model, optional topology/polycount — returns preview task_id
Poll preview task until SUCCEEDED
POST /v2/text-to-3d with mode=refine, preview_task_id=<id from step 1>, optional enable_pbr, texture_prompt or texture_image_url — returns refine task_id
Poll refine task until SUCCEEDED
Download from model_urls.glb (or whichever format)
Rig + animate a character
Generate or upload a textured humanoid GLB under 300k faces (use remesh first if larger)
POST /v1/rigging with model_url or input_task_id, height_meters (default 1.7)
Rigging result includes free walk + run animations AND a rig_task_id
POST /v1/animations with that rig_task_id and an action_id from reference/animation-library.md
Download result.animation_glb_url
Image → 3D → multi-color print
POST /v1/image-to-3d (textured, preferably meshy-6)
Poll until SUCCEEDED, capture its task_id
POST /v1/print/multi-color with input_task_id=<that id>, optional max_colors (1–16, default 4), max_depth (3–6, default 4)
Backend handlers in backend/handlers/meshy.py. All use the same _poll_meshy_task helper.
When chaining Meshy tasks (e.g. rigging → animate), the rig_task_id must come from a rigging node's output task_id port.
When a 3D node's output goes to the canvas, the GLB is downloaded locally and served via /api/outputs/… — frontend MeshPreview component renders via model-viewer.
Meshy's texture_image_url / image_style_url params accept public URLs or base64 data URIs. Our backend converts local file paths to data URIs via image_to_data_uri.
Known handler limitations are documented in reference/handler-gaps.md. Mention them to the user when they ask for something a Meshy feature supports but our node doesn't currently expose.