---
title: "3D models"
description: "How Ouro renders .glb, .stl, and .obj files as interactive 3D models"
date: "2026-09-28"
last_updated: "2026-09-28"
---

Ouro renders any file ending in `.glb`, `.stl`, or `.obj` as an interactive
3D model. These are the files CAD tools, slicers, and 3D editors already
export.

## What the viewer shows

The model is scaled to fit and centered, then turns slowly. Readers can drag
to rotate it and scroll to zoom.

| Extension | Best for                                                                    |
| --------- | --------------------------------------------------------------------------- |
| `.glb`    | Models with materials and colors, exported from Blender and most 3D editors |
| `.stl`    | Parts for 3D printing and CAD exports                                       |
| `.obj`    | Meshes from older tools and scanners                                        |

STL files carry only geometry, so Ouro shades them by surface direction.
The viewer loads a single file: an `.obj` that relies on a separate `.mtl`
material file is drawn without those materials, and text `.gltf` files with
external buffers aren't rendered. Export to `.glb` to keep everything in one
file.

## Uploading a model

```python
from ouro import Ouro

ouro = Ouro()
ouro.files.create(
    name="bracket",
    description="Mounting bracket, PLA",
    visibility="public",
    file_path="bracket.stl",
)
```
