---
title: "2D → SimReady"
description: "Send 1 image (single-view) or 2-4 images (multiview) and Rigyd reconstructs a SimReady asset. 3 credits."
---

import { Tabs, TabItem, Aside } from '@astrojs/starlight/components';

Send one or more images of an object and Rigyd reconstructs it as a SimReady USD asset.

| | |
|---|---|
| **Method** | `POST` |
| **Path**   | `/api/conversions/generate` |
| **Content-type** | `multipart/form-data` |
| **Job type** | `image_to_simready` (1 image) · `multiview_to_simready` (2-4 images) |
| **Credits** | 3 |

The same endpoint handles single-view and multiview based on the number of `images[]` you send. Provide multiple angles of the same object for sharper geometry.

## Request fields

| Field             | Type             | Required | Notes                                                                |
| ----------------- | ---------------- | -------- | -------------------------------------------------------------------- |
| `images[]`        | file (1-4)       | yes      | `.jpg`, `.jpeg`, `.png`, `.webp`. Max 10 MB each.                    |
| `face_limit`      | int              | no       | Cap output mesh face count.                                          |
| `model_version`   | string           | no       | Override generation model (advanced).                                |
| `threshold`       | float            | no       | CoACD concavity threshold (advanced).                                |
| `llm_provider`    | string           | no       | Override material-identification LLM (advanced).                     |
| `skip_validation` | boolean          | no       | Skip USD schema validation. Default `false`.                         |

<Aside type="caution">
  Do not send a `prompt` field on the same request — that triggers a `422`. Use [Text → SimReady](/conversions/text-to-simready) for prompt-only generation.
</Aside>

## Examples

### Single image

<Tabs syncKey="lang">
  <TabItem label="curl">
  ```bash
  curl -X POST https://api.rigyd.com/api/conversions/generate \
    -H "Authorization: Bearer rgyd_live_..." \
    -F "images[]=@./toolbox-front.jpg"
  ```
  </TabItem>
  <TabItem label="JavaScript">
  ```js
  import fs from 'node:fs';

  const form = new FormData();
  form.append('images[]', new Blob([fs.readFileSync('./toolbox-front.jpg')]), 'toolbox-front.jpg');

  const res = await fetch('https://api.rigyd.com/api/conversions/generate', {
    method: 'POST',
    headers: { Authorization: `Bearer ${process.env.RIGYD_API_KEY}` },
    body: form,
  });
  const { data } = await res.json();
  ```
  </TabItem>
  <TabItem label="Python">
  ```python
  import os, requests

  with open("toolbox-front.jpg", "rb") as f:
      res = requests.post(
          "https://api.rigyd.com/api/conversions/generate",
          headers={"Authorization": f"Bearer {os.environ['RIGYD_API_KEY']}"},
          files={"images[]": ("toolbox-front.jpg", f, "image/jpeg")},
      )
  job = res.json()["data"]
  ```
  </TabItem>
</Tabs>

### Multiview (2-4 images)

<Tabs syncKey="lang">
  <TabItem label="curl">
  ```bash
  curl -X POST https://api.rigyd.com/api/conversions/generate \
    -H "Authorization: Bearer rgyd_live_..." \
    -F "images[]=@./front.jpg" \
    -F "images[]=@./side.jpg" \
    -F "images[]=@./back.jpg"
  ```
  </TabItem>
  <TabItem label="JavaScript">
  ```js
  import fs from 'node:fs';

  const form = new FormData();
  for (const name of ['front.jpg', 'side.jpg', 'back.jpg']) {
    form.append('images[]', new Blob([fs.readFileSync(name)]), name);
  }

  const res = await fetch('https://api.rigyd.com/api/conversions/generate', {
    method: 'POST',
    headers: { Authorization: `Bearer ${process.env.RIGYD_API_KEY}` },
    body: form,
  });
  ```
  </TabItem>
  <TabItem label="Python">
  ```python
  import os, requests

  files = [
      ("images[]", (name, open(name, "rb"), "image/jpeg"))
      for name in ["front.jpg", "side.jpg", "back.jpg"]
  ]
  res = requests.post(
      "https://api.rigyd.com/api/conversions/generate",
      headers={"Authorization": f"Bearer {os.environ['RIGYD_API_KEY']}"},
      files=files,
  )
  ```
  </TabItem>
</Tabs>

## Response — `202 Accepted`

```json
{
  "data": {
    "id": "abc123...",
    "status": "queued",
    "filename": "toolbox-front.jpg",
    "progress": 0,
    "job_type": "multiview_to_simready",
    "credits_charged": 3,
    "createdAt": "2026-05-06T12:00:00.000Z"
  }
}
```

`job_type` is `image_to_simready` for a single image and `multiview_to_simready` for 2-4 images. Both cost 3 credits.

## Tips

- **More views = sharper geometry.** Three to four images covering front / side / back / top yield noticeably better reconstructions than a single hero shot.
- **Plain backgrounds help** — the generation model isolates the object before reconstruction.
- **One object per call.** If your image contains multiple objects, the result is undefined.

## Next: [poll the job](/jobs/retrieve) → [download the USD](/jobs/download).