agentsclimarketplace

Meshy

Skill tdimino/claude-code-minoan/skills/design-media/meshy

Generate 3D models from text or images via 5 providers: Meshy (text-to-3D, texturing, batch), fal.ai Hunyuan3D Pro ($0.225, PBR), WaveSpeedAI Rapid ($0.0225, bulk), Trellis 2 (poly control), and Local Depth (free offline ONNX depth maps + mesh). Includes GLB viewer. Triggers on 3D model, image to 3D, GLB, depth map, text to 3D, texturing, 3D asset, Meshy, Hunyuan.From its SKILL.md

Install
npx -y skills add tdimino/claude-code-minoan --skill meshy

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

SKILL.md

8.7 KB, ~2.5k tokens by cl100k_base, as published. Nobody here has run it

3D Model Generation (Multi-Provider)

Generate 3D models from text prompts, images, or apply textures to existing models. Four providers with different cost/quality tradeoffs.

Provider Selection

ProviderScriptCostSpeedBest for
Meshy (default)meshy_text_to_3d.py, meshy_image_to_3d.py5-20 credits2-7 minText-to-3D, texturing, low-poly game assets, batch
fal.ai Hunyuan3Dfal_hunyuan3d.py$0.225~2 minHigh-fidelity image-to-3D with PBR, text-to-3D
WaveSpeedAI Rapidwavespeed_rapid.py$0.0225~1 minBulk iteration, concept validation (16x cheaper)
Trellis 2trellis2.py15-55 credits30s-4 minPrecise poly count control, geometry-only fast runs
Local Depthdepth_local.pyFree~5sOffline depth maps, local mesh gen, preprocessing

Decision guide:

  • Quick concept check → WaveSpeedAI ($0.02, fastest)
  • Production image-to-3D → fal.ai Hunyuan3D (best PBR quality)
  • Text-to-3D → Meshy (only provider with text prompt support + refine pipeline)
  • Specific poly budget → Trellis 2 (--decimation 5000 for low-poly)
  • Batch generation → Meshy (meshy_batch.py with manifest)
  • Free offline depth/mesh → Local Depth (zero API cost, ONNX on-device)
  • Depth map as preprocessing → Local Depth + any cloud provider for texturing

Prerequisites

# API key in environment (already in ~/.config/env/secrets.env)
export MESHY_API_KEY="msy_xxx"

Get your API key at: https://www.meshy.ai/settings/api

Quick Start

Test Connection

uv run ~/.claude/skills/meshy/scripts/test_meshy.py --quick

Generate a Model

uv run ~/.claude/skills/meshy/scripts/meshy_text_to_3d.py "a stealth fighter jet, delta wings" \
  --model-type lowpoly --format glb --output ./models

Check Balance

uv run ~/.claude/skills/meshy/scripts/meshy_tasks.py balance

Core Workflows

1. Text-to-3D Generation

Two-stage pipeline: Preview (geometry, ~2 min) then optional Refine (PBR textures, ~5 min).

# Full pipeline (preview + refine)
uv run ~/.claude/skills/meshy/scripts/meshy_text_to_3d.py \
  "a nuclear submarine, teardrop hull, conning tower" \
  --model-type lowpoly --filename submarine

# Preview only (saves credits)
uv run ~/.claude/skills/meshy/scripts/meshy_text_to_3d.py \
  "a red cube, game ready" --skip-refine --filename cube

2. Image-to-3D

# From local file
uv run ~/.claude/skills/meshy/scripts/meshy_image_to_3d.py ./reference.png --filename tank

# From URL
uv run ~/.claude/skills/meshy/scripts/meshy_image_to_3d.py https://example.com/photo.jpg

3. Text-to-Texture

uv run ~/.claude/skills/meshy/scripts/meshy_texture.py \
  https://cdn.meshy.ai/.../model.glb \
  --prompt "Military olive drab paint, worn metal, tactical" --enable-pbr

4. Batch Generation from Manifest

For generating multiple models (e.g., all 11 World War Watcher ordnance types):

# Generate all models from manifest
uv run ~/.claude/skills/meshy/scripts/meshy_batch.py manifest.json --output ./staging/

# Generate specific models only
uv run ~/.claude/skills/meshy/scripts/meshy_batch.py manifest.json --models fighter carrier

# Inspect manifest
uv run ~/.claude/skills/meshy/scripts/meshy_batch.py manifest.json --list
uv run ~/.claude/skills/meshy/scripts/meshy_batch.py manifest.json --dry-run

# Check status of last batch run
uv run ~/.claude/skills/meshy/scripts/meshy_batch.py manifest.json --status

5. Task Management

uv run ~/.claude/skills/meshy/scripts/meshy_tasks.py list                     # recent tasks
uv run ~/.claude/skills/meshy/scripts/meshy_tasks.py get TASK_ID              # task detail
uv run ~/.claude/skills/meshy/scripts/meshy_tasks.py get TASK_ID --watch      # poll until done
uv run ~/.claude/skills/meshy/scripts/meshy_tasks.py download TASK_ID         # download GLB
uv run ~/.claude/skills/meshy/scripts/meshy_tasks.py balance                  # credit balance

Script Reference

meshy_text_to_3d.py

FlagDefaultDescription
PROMPTrequiredText description of 3D model
--negative-prompt""What to avoid
--model-typelowpolystandard / lowpoly / ai_model
--skip-refineFalsePreview only (saves credits)
--enable-pbr / --no-pbrTruePBR textures in refine
--formatglbglb / gltf / usdz / fbx
--output./outputOutput directory
--filenamederivedOutput filename (no extension)
--api-keyenvOverride MESHY_API_KEY
--poll-interval5Seconds between polls
--timeout600Max wait seconds
--quiet / --json—Output modes

meshy_image_to_3d.py

Same flags minus --negative-prompt, --skip-refine, --enable-pbr. Accepts local path (auto base64-encodes) or URL.

meshy_texture.py

FlagDefaultDescription
MODEL_URLrequiredURL of existing 3D model
--promptrequiredTexture description
--negative-prompt""What to avoid
--art-style""Art style hint
--enable-pbr / --no-pbrTruePBR textures

meshy_tasks.py

Subcommands: list, get, download, balance. All accept --json.

meshy_batch.py

FlagDefaultDescription
MANIFESTrequiredPath to JSON manifest file
--modelsallGenerate specific model IDs only
--list—List IDs and prompts
--dry-run—Preview without API calls
--status—Check last batch run status
--skip-refineFalseOverride: preview only for all
--outputmanifestOverride output directory

Batch Manifest Format

{
  "version": 1,
  "defaults": {
    "model_type": "lowpoly",
    "skip_refine": false,
    "format": "glb",
    "enable_pbr": true,
    "output_dir": "./output"
  },
  "models": [
    {
      "id": "fighter",
      "prompt": "a modern stealth fighter jet, delta wings...",
      "negative_prompt": "organic, blurry...",
      "output_name": "fighter.glb"
    }
  ]
}

Per-model fields override defaults. Required per-model: id, prompt.

Credit Costs

OperationCredits
Text-to-3D Preview~5
Text-to-3D Refine~10
Image-to-3D~10
Text-to-Texture~10

DRACO Post-Processing

For web deployment, DRACO-compress GLBs to reduce file size 80-90%:

npx gltf-pipeline -i model.glb -o model-draco.glb -d --draco.compressionLevel 7

World War Watcher's scripts/prepare-models.sh automates this for all staged models.

Troubleshooting

IssueSolution
401 UnauthorizedCheck MESHY_API_KEY is set and valid
429 Rate LimitedIncrease --poll-interval, wait between batch models
Insufficient creditsCheck meshy_tasks.py balance, top up at meshy.ai
Task FAILEDCheck task error via meshy_tasks.py get TASK_ID
TimeoutIncrease --timeout (refine can take 10+ min)
No GLB URLTask may not be complete, or format unavailable

Alternative Providers

For full flags, API contracts, and credit costs, see the corresponding reference file:

  • fal.ai Hunyuan3D → references/fal-hunyuan3d.md (credential: FAL_KEY)
  • WaveSpeedAI Rapid → references/wavespeed-rapid.md (credential: WAVESPEED_API_KEY)
  • Trellis 2 → references/trellis2.md (credential: THREEDAI_API_KEY)
  • Local Depth → references/depth-local.md (no credential needed — free, local ONNX inference)

All three accept local file paths (auto base64-encoded) or URLs. Run any script with --help for flags.

GLB Viewer

Museum-quality standalone Three.js viewer for previewing generated .glb models. Open in browser — no server needed.

# Open with a model URL
open ~/.claude/skills/meshy/assets/glb-viewer.html?glb=https://cdn.example.com/model.glb

# Or drag-and-drop a local .glb file onto the page
open ~/.claude/skills/meshy/assets/glb-viewer.html

Features: 7-light PBR gallery rig, bloom/vignette post-processing, SMAA, auto-rotate with graceful pause, ground plane with shadow catcher.

Keyboard: D download, R toggle rotation, F fullscreen.

API Reference

See references/api-reference.md for full Meshy v2 endpoint documentation.

What ships with it: 20 files

160.6 KB alongside SKILL.md, 13 of them executable

assets/

scripts/

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.