---
title: "Supported formats"
description: "Which 3D file formats Rigyd accepts, what triggers preprocessing, and how to package multi-file inputs as a ZIP."
---

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

## Input formats — 3D

| Extension | Preprocessing? | Notes                                                |
| --------- | -------------- | ---------------------------------------------------- |
| `.glb`    | No (fastest)   | Direct path to the SimReady pipeline.                |
| `.gltf`   | Yes            | Send as `.zip` if it has external `.bin` / textures. |
| `.fbx`    | Yes            | Single-file binary FBX.                              |
| `.obj`    | Yes            | Send as `.zip` to include the `.mtl` and textures.   |
| `.stl`    | Yes            | Geometry only — no materials.                        |
| `.ply`    | Yes            | Geometry only.                                       |
| `.usd`    | Yes            | Single-file USD.                                     |
| `.usda`   | Yes            | ASCII USD.                                           |
| `.usdc`   | Yes            | Crate-binary USD.                                    |
| `.usdz`   | Yes            | USD-zipped (Pixar standard).                         |
| `.zip`    | Yes            | Multi-file bundle. See [ZIP packaging](#zip-packaging) below. |

When preprocessing runs, Rigyd uses Blender to convert the file to a clean GLB before submitting it to the SimReady pipeline. You don't have to do anything — the API picks the right path based on the extension.

## Input formats — images (Generate)

`.jpg`, `.jpeg`, `.png`, `.webp`. Max 10 MB per image. Up to 4 images per request.

## ZIP packaging

Use `.zip` when your model has companion files that must travel together:

| Primary file | What goes in the ZIP                        |
| ------------ | ------------------------------------------- |
| `*.obj`      | The `.obj` + its `.mtl` + every texture it references |
| `*.gltf`     | The `.gltf` + its `.bin` + every texture |
| `*.usd[a]`   | The `.usd` + every file referenced via `@./...@` |

Rules:

- The archive must contain **exactly one** primary file (`.obj` / `.gltf` / `.usd[a]`).
- Texture / mesh references must be **relative** (`./diffuse.png`, not absolute paths).
- The API validates the archive on upload — invalid layouts fail at `400` before any credit is reserved.

<Aside type="note">
  When you send a ZIP, the response payload includes `input.metadata` describing the detected primary file, the texture set, and the file tree. See [`GET /api/conversions/:id`](/jobs/retrieve).
</Aside>

## File size limits

500 MB per upload (server-side nginx limit). For larger assets, decimate locally first.