# Meshy T2 Text to 3D

> Meshy T2 is Meshy's faster Smart Topology model. It generates a clean, triangle-only 3D mesh with natively separated parts from a text prompt, with a target polycount of up to 15,000 triangles (default 4,000). Preview mode returns the untextured mesh, and full mode textures it with Meshy 7.1; it generates faster than Meshy T2.5, which suits low-poly assets.


## Overview

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



## Pricing

Billing is calculated per generation. Preview mode, which returns the untextured mesh, costs **$0.20**, and full mode, which also textures it, 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 full-mode model with auto-rigging and animation costs **$0.92**. Failed requests are not billed. For **$10** you can generate **50** preview 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:


- **`prompt`** (`string`, _required_):
  Describe what kind of object the 3D model is. Maximum 600 characters.
  - Examples: "A rustic, antique wooden treasure chest with a curved, domed lid, reinforced with dark iron bands and a large circular lock plate on the front."

- **`mode`** (`ModeEnum`, _optional_):
  Generation mode. 'preview' returns untextured Smart Topology geometry only, 'full' also textures it (preview + refine). Default value: `"full"`
  - Default: `"full"`
  - Options: `"preview"`, `"full"`

- **`seed`** (`integer`, _optional_):
  Seed for reproducible results. Same prompt and seed usually generate the same result.

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

- **`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"`, `""`

- **`enable_prompt_expansion`** (`boolean`, _optional_):
  Whether to enable prompt expansion. This will use a large language model to expand the prompt with additional details while maintaining the original meaning.
  - Default: `false`

- **`texture_prompt`** (`string`, _optional_):
  Additional text prompt to guide the texturing process (only used in 'full' mode). Maximum 800 characters.

- **`texture_image_url`** (`string`, _optional_):
  2D image to guide the texturing process (only used in 'full' mode)

- **`texture_model`** (`TextureModelEnum`, _optional_):
  Model for the texturing (refine) step, only used in 'full' mode. meshy-n1 makes a 2K base color texture from texture_image_url, which it requires; it rejects texture_prompt and enable_pbr. Default value: `"meshy-7.1"`
  - Default: `"meshy-7.1"`
  - Options: `"meshy-7.1"`, `"meshy-n1"`

- **`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
{
  "prompt": "A rustic, antique wooden treasure chest with a curved, domed lid, reinforced with dark iron bands and a large circular lock plate on the front."
}
```

**Full Example**:

```json
{
  "prompt": "A rustic, antique wooden treasure chest with a curved, domed lid, reinforced with dark iron bands and a large circular lock plate on the front.",
  "mode": "full",
  "target_polycount": 4000,
  "texture_model": "meshy-7.1",
  "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":9314028,"url":"https://v3b.fal.media/files/b/penguin/DId89qXLu6BXu09RFAwAV_model.glb"}

- **`thumbnail`** (`File`, _optional_):
  Preview thumbnail of the generated model
  - Examples: {"file_name":"preview.png","content_type":"image/png","file_size":173792,"url":"https://v3b.fal.media/files/b/koala/6LJISu4ilkZXcdOETwl_d_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":9314028,"url":"https://v3b.fal.media/files/b/penguin/DId89qXLu6BXu09RFAwAV_model.glb"},"fbx":{"file_name":"model.fbx","content_type":"application/octet-stream","file_size":5444380,"url":"https://v3b.fal.media/files/b/kangaroo/7nUUw5dHN9a0DKlOpAKbP_model.fbx"},"obj":{"file_name":"model.obj","content_type":"model/obj","file_size":2755145,"url":"https://v3b.fal.media/files/b/monkey/cCNMHqUbKSNtDN1iGmiYm_model.obj"},"usdz":{"file_name":"model.usdz","content_type":"model/vnd.usdz+zip","file_size":9834246,"url":"https://v3b.fal.media/files/b/panda/XcC-mIJywUvH7coyrzENU_model.usdz"}}

- **`texture_urls`** (`list<TextureFiles>`, _optional_):
  Array of texture file objects
  - Array of TextureFiles
  - Examples: [{"base_color":{"file_name":"texture_0.png","content_type":"image/png","file_size":4254502,"url":"https://v3b.fal.media/files/b/panda/DoPKAuZY0tTjnr6C9ee-Q_texture_0.png"}}]

- **`seed`** (`integer`, _optional_):
  The seed used for generation
  - Examples: 4002110719

- **`prompt`** (`string`, _required_):
  The text prompt used for generation
  - Examples: "A rustic, antique wooden treasure chest with a curved, domed lid, constructed from weathered, dark brown planks exhibiting prominent wood grain and subtle distress. It's heavily reinforced with broad, dark grey, oxidized metal bands secured by numerous circular rivets. Ornate, dark iron decorative elements featuring swirling foliate patterns and dragon motifs adorn the corners and lid. A prominent, circular, intricately carved metal lock plate with a central keyhole dominates the front, flanked by two large, dark metallic pull rings."

- **`actual_prompt`** (`string`, _optional_):
  The actual prompt used if prompt expansion was enabled

- **`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": 9314028,
    "url": "https://v3b.fal.media/files/b/penguin/DId89qXLu6BXu09RFAwAV_model.glb"
  },
  "thumbnail": {
    "file_name": "preview.png",
    "content_type": "image/png",
    "file_size": 173792,
    "url": "https://v3b.fal.media/files/b/koala/6LJISu4ilkZXcdOETwl_d_preview.png"
  },
  "model_urls": {
    "glb": {
      "file_name": "model.glb",
      "content_type": "model/gltf-binary",
      "file_size": 9314028,
      "url": "https://v3b.fal.media/files/b/penguin/DId89qXLu6BXu09RFAwAV_model.glb"
    },
    "fbx": {
      "file_name": "model.fbx",
      "content_type": "application/octet-stream",
      "file_size": 5444380,
      "url": "https://v3b.fal.media/files/b/kangaroo/7nUUw5dHN9a0DKlOpAKbP_model.fbx"
    },
    "obj": {
      "file_name": "model.obj",
      "content_type": "model/obj",
      "file_size": 2755145,
      "url": "https://v3b.fal.media/files/b/monkey/cCNMHqUbKSNtDN1iGmiYm_model.obj"
    },
    "usdz": {
      "file_name": "model.usdz",
      "content_type": "model/vnd.usdz+zip",
      "file_size": 9834246,
      "url": "https://v3b.fal.media/files/b/panda/XcC-mIJywUvH7coyrzENU_model.usdz"
    }
  },
  "texture_urls": [
    {
      "base_color": {
        "file_name": "texture_0.png",
        "content_type": "image/png",
        "file_size": 4254502,
        "url": "https://v3b.fal.media/files/b/panda/DoPKAuZY0tTjnr6C9ee-Q_texture_0.png"
      }
    }
  ],
  "seed": 4002110719,
  "prompt": "A rustic, antique wooden treasure chest with a curved, domed lid, constructed from weathered, dark brown planks exhibiting prominent wood grain and subtle distress. It's heavily reinforced with broad, dark grey, oxidized metal bands secured by numerous circular rivets. Ornate, dark iron decorative elements featuring swirling foliate patterns and dragon motifs adorn the corners and lid. A prominent, circular, intricately carved metal lock plate with a central keyhole dominates the front, flanked by two large, dark metallic pull rings."
}
```


## Usage Examples

### cURL

```bash
curl --request POST \
  --url https://fal.run/meshy/t2/text-to-3d \
  --header "Authorization: Key $FAL_KEY" \
  --header "Content-Type: application/json" \
  --data '{
     "prompt": "A rustic, antique wooden treasure chest with a curved, domed lid, reinforced with dark iron bands and a large circular lock plate on the front."
   }'
```

### 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/text-to-3d",
    arguments={
        "prompt": "A rustic, antique wooden treasure chest with a curved, domed lid, reinforced with dark iron bands and a large circular lock plate on the front."
    },
    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/text-to-3d", {
  input: {
    prompt: "A rustic, antique wooden treasure chest with a curved, domed lid, reinforced with dark iron bands and a large circular lock plate on the front."
  },
  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/text-to-3d)
- [API Documentation](https://fal.ai/models/meshy/t2/text-to-3d/api)
- [OpenAPI Schema](https://fal.ai/api/openapi/queue/openapi.json?endpoint_id=meshy/t2/text-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`
