Image→3D input rules — read BEFORE any submit

These rules prevent the two most expensive failure classes: garbage geometry from bad reference images, and wrong polycount paths. Every image→3D submit must pass this preflight — whether through the native 3D CLI path (higgsfield generate create, preferred) or the raw fallback API; the same engine reconstructs the mesh either way. (Param behavior re-checked against docs.meshy.ai 2026-06-11.)

Rule 1 — ONE figure per input image (character sheets)

Meshy reconstructs everything in the frame as a single object. A character sheet with 4 views becomes "a statuette of 4 fused figures".

Mandatory preflight on every user-provided reference:

  1. Vision check: "how many separate figures/views are in this image?"
  2. If more than one figure → crop. Two valid paths: - One best view (front or 3/4) → regular image-to-3d. - Each view as its own filemulti-image-to-3d (1–4 images) — better geometry, but ONLY if the pose is identical on all panels. Different poses across panels ⇒ fall back to the single-view path.
  3. Cropping in the sandbox: use ffmpeg (ffmpeg -i sheet.png -vf "crop=w:h:x:y" view.png) — PIL is not in the system python.

Rule 2 — pose normalization

Add "pose_mode": "t-pose" (or "a-pose"): Meshy straightens the character regardless of the reference pose. This repairs "awkward" references before auto-rig and matches donor skeletons in the local rig-transfer path.

Rule 3 — framing

Rule 4 — low-poly: two MUTUALLY EXCLUSIVE paths

Do not mix them:

Goal Params Caveat
Stylized faceted low-poly LOOK "model_type": "lowpoly" Meshy IGNORES topology, target_polycount, should_remesh, ai_model in this mode — no precise budget control
Precise polygon BUDGET "should_remesh": true, "topology": "triangle", "target_polycount": N normal high-detail look, decimated

Polycount budgets (game-ready guidance):

Asset class target_polycount
Hero / player character 15 000 – 30 000
NPC 5 000 – 15 000
Mob / prop 1 000 – 5 000
Background filler 300 – 1 500

Valid API range: 100 – 300 000.

Hard rig limit: models > 300 000 faces are rejected by /rigging — if the mesh came out heavier, run POST /openapi/v1/remesh before rigging.

Rule 5 — economy / QC params

Payload templates

Game humanoid, exact budget (recommended default):

{
  "image_url": "<cropped single-figure reference>",
  "pose_mode": "t-pose",
  "should_remesh": true,
  "topology": "triangle",
  "target_polycount": 20000,
  "should_texture": true,
  "enable_pbr": false,
  "target_formats": ["glb"],
  "multi_view_thumbnails": true
}

Stylized faceted low-poly look:

{
  "image_url": "<cropped single-figure reference>",
  "model_type": "lowpoly",
  "pose_mode": "t-pose",
  "should_texture": true,
  "enable_pbr": false,
  "target_formats": ["glb"],
  "multi_view_thumbnails": true
}

Multi-view (character sheet split into same-pose panels):

{
  "image_urls": ["front.png", "side.png", "back.png"],
  "should_remesh": true,
  "topology": "triangle",
  "target_polycount": 20000,
  "should_texture": true,
  "target_formats": ["glb"]
}

(endpoint: POST /openapi/v1/multi-image-to-3d)

Preflight checklist (run through it verbatim)