# Meshy T2.5 Image to 3D

> Meshy T2.5 is Meshy's latest Smart Topology model. It converts a single image into a clean, triangle-only 3D mesh with natively separated parts, with a target polycount of up to 30,000 triangles (default 15,000). Compared with Meshy T2, it produces sharper detail and keeps shape and proportions closer to the input image, at the cost of longer generation times; optional textures, PBR maps and humanoid rigging are supported.


## Overview

- **Endpoint**: `https://fal.run/meshy/t2.5/image-to-3d`
- **Model ID**: `meshy/t2.5/image-to-3d`
- **Category**: image-to-3d
- **Kind**: inference
**Tags**: 3d, image-to-3d, smart-topology, low-poly, textures, pbr



## Pricing

Billing is calculated per generation. An untextured mesh costs **$0.20**, and a textured mesh costs **$0.60**; PBR maps and the choice of texture model are included at no extra charge. Optional auto-rigging adds **$0.20**, and animation adds **$0.12** per call. A textured model with auto-rigging and animation costs **$0.92**. Failed requests are not billed. For **$10** you can generate **50** untextured meshes or **16** textured meshes.

For more details, see [fal.ai pricing](https://fal.ai/pricing).

## API Information

This model can be used via our HTTP API or more conveniently via our client libraries.
See the input and output schema below, as well as the usage examples.


### Input Schema

The API accepts the following input parameters:


- **`image_url`** (`string`, _required_):
  Image URL or base64 data URI for 3D model creation. Supports .jpg, .jpeg, and .png formats. Also supports AVIF and HEIF formats which will be automatically converted.
  - Examples: "https://v3b.fal.media/files/b/zebra/3osHJDI8IZ2wl6sGtEUeB_image.png"

- **`target_polycount`** (`integer`, _optional_):
  Target number of triangles in the generated model. Smart Topology output is triangle-only. Default value: `15000`
  - Default: `15000`
  - Range: `100` to `30000`

- **`should_texture`** (`boolean`, _optional_):
  Whether to generate textures Default value: `true`
  - Default: `true`

- **`texture_model`** (`TextureModelEnum`, _optional_):
  Model that textures the generated mesh, in the same task. 'default' uses Meshy's default texture model for T2/T2.5 (Meshy 7). Ignored when should_texture is false. meshy-n1 makes a 2K base color texture from reference images only: it rejects texture_prompt and enable_pbr. With meshy-n1, texture_image_url is used as the front view, or the input image when it is unset. Default value: `"default"`
  - Default: `"default"`
  - Options: `"default"`, `"meshy-7"`, `"meshy-n1"`, `"meshy-6-lite"`

- **`enable_pbr`** (`boolean`, _optional_):
  Generate PBR Maps (metallic, roughness, normal) in addition to base color
  - Default: `false`

- **`pose_mode`** (`PoseModeEnum`, _optional_):
  Pose mode for the generated model. 'a-pose' generates an A-pose, 't-pose' generates a T-pose, empty string for no specific pose. Default value: `""`
  - Default: `""`
  - Options: `"a-pose"`, `"t-pose"`, `""`

- **`texture_prompt`** (`string`, _optional_):
  Text prompt to guide the texturing process. Maximum 800 characters.

- **`texture_image_url`** (`string`, _optional_):
  2D image to guide the texturing process

- **`enable_rigging`** (`boolean`, _optional_):
  Automatically rig the generated model as a humanoid character. Includes basic walking and running animations. Best results with humanoid characters that have clearly defined limbs.
  - Default: `false`

- **`rigging_height_meters`** (`float`, _optional_):
  Approximate height of the character in meters. Only used when enable_rigging is true. Default value: `1.7`
  - Default: `1.7`

- **`enable_animation`** (`boolean`, _optional_):
  Apply an animation preset to the rigged model. Requires enable_rigging to be true.
  - Default: `false`

- **`animation_action_id`** (`integer`, _optional_):
  Animation preset ID from Meshy's library. Only used when enable_animation is true; in that case it must be in [0, 696]. See https://docs.meshy.ai/en/api/animation-library for available action IDs. Default value: `92`
  - Default: `92`
  - Examples: 92

- **`enable_safety_checker`** (`boolean`, _optional_):
  If set to true, input data will be checked for safety before processing. Default value: `true`
  - Default: `true`



**Required Parameters Example**:

```json
{
  "image_url": "https://v3b.fal.media/files/b/zebra/3osHJDI8IZ2wl6sGtEUeB_image.png"
}
```

**Full Example**:

```json
{
  "image_url": "https://v3b.fal.media/files/b/zebra/3osHJDI8IZ2wl6sGtEUeB_image.png",
  "target_polycount": 15000,
  "should_texture": true,
  "texture_model": "default",
  "rigging_height_meters": 1.7,
  "animation_action_id": 92,
  "enable_safety_checker": true
}
```


### Output Schema

The API returns the following output format:

- **`animation_glb`** (`File`, _optional_):
  Animated 3D model in GLB format. Only present when enable_animation is true.

- **`animation_fbx`** (`File`, _optional_):
  Animated 3D model in FBX format. Only present when enable_animation is true.

- **`model_glb`** (`File`, _required_):
  Generated 3D object in GLB format.
  - Examples: {"file_name":"model.glb","content_type":"model/gltf-binary","file_size":9242744,"url":"https://v3b.fal.media/files/b/zebra/OXF1e1bO3JddPTaugv0eL_model.glb"}

- **`thumbnail`** (`File`, _optional_):
  Preview thumbnail of the generated model
  - Examples: {"file_name":"preview.png","content_type":"image/png","file_size":54279,"url":"https://v3b.fal.media/files/b/penguin/rfnS6ClmeEWgDXp_oD5tN_preview.png"}

- **`model_urls`** (`ModelUrls`, _required_):
  URLs for different 3D model formats
  - Examples: {"glb":{"file_name":"model.glb","content_type":"model/gltf-binary","file_size":9242744,"url":"https://v3b.fal.media/files/b/zebra/OXF1e1bO3JddPTaugv0eL_model.glb"},"fbx":{"file_name":"model.fbx","content_type":"application/octet-stream","file_size":5427052,"url":"https://v3b.fal.media/files/b/kangaroo/4Q2qdpTvfLVdzAKH1-72v_model.fbx"},"obj":{"file_name":"model.obj","content_type":"model/obj","file_size":2744413,"url":"https://v3b.fal.media/files/b/koala/_Vg0d084-hd3EdpIJDf7U_model.obj"},"usdz":{"file_name":"model.usdz","content_type":"model/vnd.usdz+zip","file_size":9991969,"url":"https://v3b.fal.media/files/b/lion/RgJG9EBQ_GAHMVWV3wCis_model.usdz"}}

- **`texture_urls`** (`list<TextureFiles>`, _optional_):
  Array of texture file objects, matching Meshy API structure
  - Array of TextureFiles
  - Examples: [{"base_color":{"file_name":"texture_0.png","content_type":"image/png","file_size":4328755,"url":"https://v3b.fal.media/files/b/tiger/NkgxcEom_42V4_8UUXiRR_texture_0.png"}}]

- **`seed`** (`integer`, _optional_):
  The seed used for generation (if available)
  - Examples: 2009275957

- **`rigged_character_glb`** (`File`, _optional_):
  Rigged character in GLB format. Only present when enable_rigging is true.

- **`rigged_character_fbx`** (`File`, _optional_):
  Rigged character in FBX format. Only present when enable_rigging is true.

- **`basic_animations`** (`BasicAnimations`, _optional_):
  Basic walking and running animations. Only present when enable_rigging is true.

- **`rig_task_id`** (`string`, _optional_):
  Rigging task ID. Only present when enable_rigging is true.



**Example Response**:

```json
{
  "model_glb": {
    "file_name": "model.glb",
    "content_type": "model/gltf-binary",
    "file_size": 9242744,
    "url": "https://v3b.fal.media/files/b/zebra/OXF1e1bO3JddPTaugv0eL_model.glb"
  },
  "thumbnail": {
    "file_name": "preview.png",
    "content_type": "image/png",
    "file_size": 54279,
    "url": "https://v3b.fal.media/files/b/penguin/rfnS6ClmeEWgDXp_oD5tN_preview.png"
  },
  "model_urls": {
    "glb": {
      "file_name": "model.glb",
      "content_type": "model/gltf-binary",
      "file_size": 9242744,
      "url": "https://v3b.fal.media/files/b/zebra/OXF1e1bO3JddPTaugv0eL_model.glb"
    },
    "fbx": {
      "file_name": "model.fbx",
      "content_type": "application/octet-stream",
      "file_size": 5427052,
      "url": "https://v3b.fal.media/files/b/kangaroo/4Q2qdpTvfLVdzAKH1-72v_model.fbx"
    },
    "obj": {
      "file_name": "model.obj",
      "content_type": "model/obj",
      "file_size": 2744413,
      "url": "https://v3b.fal.media/files/b/koala/_Vg0d084-hd3EdpIJDf7U_model.obj"
    },
    "usdz": {
      "file_name": "model.usdz",
      "content_type": "model/vnd.usdz+zip",
      "file_size": 9991969,
      "url": "https://v3b.fal.media/files/b/lion/RgJG9EBQ_GAHMVWV3wCis_model.usdz"
    }
  },
  "texture_urls": [
    {
      "base_color": {
        "file_name": "texture_0.png",
        "content_type": "image/png",
        "file_size": 4328755,
        "url": "https://v3b.fal.media/files/b/tiger/NkgxcEom_42V4_8UUXiRR_texture_0.png"
      }
    }
  ],
  "seed": 2009275957
}
```


## Usage Examples

### cURL

```bash
curl --request POST \
  --url https://fal.run/meshy/t2.5/image-to-3d \
  --header "Authorization: Key $FAL_KEY" \
  --header "Content-Type: application/json" \
  --data '{
     "image_url": "https://v3b.fal.media/files/b/zebra/3osHJDI8IZ2wl6sGtEUeB_image.png"
   }'
```

### Python

Ensure you have the Python client installed:

```bash
pip install fal-client
```

Then use the API client to make requests:

```python
import fal_client

def on_queue_update(update):
    if isinstance(update, fal_client.InProgress):
        for log in update.logs:
           print(log["message"])

result = fal_client.subscribe(
    "meshy/t2.5/image-to-3d",
    arguments={
        "image_url": "https://v3b.fal.media/files/b/zebra/3osHJDI8IZ2wl6sGtEUeB_image.png"
    },
    with_logs=True,
    on_queue_update=on_queue_update,
)
print(result)
```

### JavaScript

Ensure you have the JavaScript client installed:

```bash
npm install --save @fal-ai/client
```

Then use the API client to make requests:

```javascript
import { fal } from "@fal-ai/client";

const result = await fal.subscribe("meshy/t2.5/image-to-3d", {
  input: {
    image_url: "https://v3b.fal.media/files/b/zebra/3osHJDI8IZ2wl6sGtEUeB_image.png"
  },
  logs: true,
  onQueueUpdate: (update) => {
    if (update.status === "IN_PROGRESS") {
      update.logs.map((log) => log.message).forEach(console.log);
    }
  },
});
console.log(result.data);
console.log(result.requestId);
```


## Deploy your own model

To run your own weights, a fine-tune or a custom pipeline on the GPUs that serve this API, deploy it on fal Serverless. GPUs from H100 (80GB) to B300 (288GB), billed per second; an H100 is $4.50/h list, as low as $2.49/h. Prices, GPU specs and deploy steps: [fal Serverless](https://fal.ai/serverless.md).

## Additional Resources

### Documentation

- [Model Playground](https://fal.ai/models/meshy/t2.5/image-to-3d)
- [API Documentation](https://fal.ai/models/meshy/t2.5/image-to-3d/api)
- [OpenAPI Schema](https://fal.ai/api/openapi/queue/openapi.json?endpoint_id=meshy/t2.5/image-to-3d)

### fal.ai Platform

- [Platform Documentation](https://fal.ai/docs/documentation)
- [Python Client](https://fal.ai/docs/api-reference/client-libraries/python)
- [JavaScript Client](https://fal.ai/docs/api-reference/client-libraries/javascript)

### Other agent-readable surfaces

This file covers one model. To find anything else:

- [Platform overview](https://fal.ai/llms.txt): Entry points and representative endpoint IDs
- [Documentation index](https://fal.ai/docs/llms.txt): Every documentation page
- [Full documentation text](https://fal.ai/docs/llms-full.txt): The whole documentation inlined
- [Pricing](https://fal.ai/pricing.md): Model API and Serverless GPU prices
- [fal Serverless](https://fal.ai/serverless.md): Deploy your own models: GPU prices, specs and steps
- Any other model: `https://fal.ai/models/<endpoint-id>/llms.txt`
