> For the complete documentation index, see [llms.txt](https://docs.projectsim.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.projectsim.ai/creating-assets/assets-measured/measured-capture.md).

# Capturing an asset

`POST /v1/assets/measured` produces an asset that is **up to mm accurate**. The scale stage measures the object against a printed **ChArUco board** of known size, so the quality of your capture sets the quality of the measurement. Follow this guide carefully.

The capture goes in `inputs.capture` as **one video clip** (MP4 or MOV, up to 500 MB), by HTTPS URL or inline as base64 `data`. It's required on `/measured` and rejected on `/standard`.

**Example capture.** See how to move your phone around the object and what the recorded footage should look like:

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWnQtI3aVPkZHPVyrjjFG%2Fuploads%2Fgit-blob-aaabaad8f16dd6ccfded1a2f9b8fbc6dd1dd90ad%2Fcapture-side-by-side.mp4?alt=media>" %}
Left: phone motion around the object and ChArUco board. Right: the corresponding camera footage.
{% endembed %}

## 1. Print the ChArUco board

* **Download the board** (Letter size, 8.5 × 11): [print PDF](https://drive.google.com/file/d/1G4L7M5YqSxSGUPyu0mkHm1_hgKncTF8H/view).
* **Print at 100% scale — turn off "fit to page".** Fit-to-page silently rescales the board, and every measurement we derive inherits that error.
* **Verify the 50 mm scale line** printed on the board with a ruler. If it isn't exactly 50 mm, the print is wrong — reprint before capturing anything.
* **Tape it flat** to the same surface the object sits on. No curl, no bubbles, no bowing.

## 2. Filming the capture

Record **one continuous video** orbiting the object, with the board taped to the same flat surface. If you can, **open on the board alone** (no object on it) — a clean view of the board is valuable ground truth.

* **Start low and rise as you complete a full orbit.** Begin almost level with the object, about **20° up**, and slowly raise the camera through roughly **20° → 45° → 75°** as you circle. Each band up resolves height.
* **Circle the whole object**, passing those elevations around the full 360° (think views spaced \~120° apart in azimuth). This resolves width.
* Starting from above, or staying high throughout, means height can't be recovered even if the rest of the capture is good.
* **Move slowly** to avoid motion blur.
* Keep **as much of the board visible as you can**. Partial occlusion is fine — the object ideally sits right next to the board, not on it. More board is better.
* On a phone, **disable video stabilization (EIS) and autofocus (AF)** if you can — they cost up to \~2% accuracy.

{% columns %}
{% column %}

<figure><img src="https://70818391-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWnQtI3aVPkZHPVyrjjFG%2Fuploads%2Fgit-blob-7dbb489eb26022bfca6c5cfe01c6ceeb256a211d%2Fcapture-azimuth.png?alt=media" alt="Camera positions around a stationary object" width="360"><figcaption><p>Circle the object through a full 360°.</p></figcaption></figure>
{% endcolumn %}

{% column %}

<figure><img src="https://70818391-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWnQtI3aVPkZHPVyrjjFG%2Fuploads%2Fgit-blob-8500de6d980daa2958e46e2e86c0a3b6a1ec8997%2Fcapture-camera-positions.png?alt=media" alt="Camera rising through three elevations around the object" width="360"><figcaption><p>Raise the camera as you orbit; keep the object still.</p></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

**The framings your orbit should pass through**, as a phone camera would see them (simulated at roughly 0.5 m). Match these as closely as your space allows.

{% columns %}
{% column %}

<figure><img src="https://70818391-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWnQtI3aVPkZHPVyrjjFG%2Fuploads%2Fgit-blob-b6c1a3720a39e0c0c74a32b88bd5f195034ce751%2Fframing-20-front.png?alt=media" alt="Low front view of the object and board" width="240"><figcaption><p>20° · Low front view</p></figcaption></figure>
{% endcolumn %}

{% column %}

<figure><img src="https://70818391-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWnQtI3aVPkZHPVyrjjFG%2Fuploads%2Fgit-blob-c336dde1b878aec106458321694aa2cf22b7ec70%2Fframing-45-three-quarter.png?alt=media" alt="Three-quarter view of the object and board" width="240"><figcaption><p>45° · Three-quarter view</p></figcaption></figure>
{% endcolumn %}

{% column %}

<figure><img src="https://70818391-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWnQtI3aVPkZHPVyrjjFG%2Fuploads%2Fgit-blob-f89d9a88893d3a5153befdb59009b753384a4dd3%2Fframing-75-side.png?alt=media" alt="High side view of the object and board" width="240"><figcaption><p>75° · High side view</p></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

## 3. Framing & focus

* **Shoot from roughly 0.5 m** from the object — this distance gives the best results.
* **The object stays completely still; only the camera moves.**
  * Do not rotate, nudge, lift or re-place the object during the capture, not even slightly. Every view must show the same object in the same position relative to the board.
  * Every measurement comes from triangulating across views. If the object has moved, the views describe different scenes and the estimate is invalid.
  * If you need to reposition anything, treat it as a new capture and start over.
* **Keep the entire object in frame the whole time.** If any part is cropped out, that footage is unusable. Leave a few cm of margin around the object on all sides — better to stand back than to fill the frame.
* **Keep everything in focus.** If the camera forces a choice — locking onto one subject or depth — focus on the **ChArUco board** rather than the object; it guides ground truth.
* **Keep cables, wires, straps and thin protrusions out of frame** (coil them, or tape them clearly away from the object's footprint). A trailing cable next to the base gets read as part of the object and throws off the dimensions.

## 4. Contrast & background

* The object must **contrast** the surface it sits on. A dark object on a dark surface has no recoverable silhouette — often you can't tell where the edge is either.
  * Dark objects → light surface. Light or white objects → darker surface.
* **Avoid glossy or reflective surfaces, and busy patterns** — behind the object in frame as well as underneath it.
* Use **even, diffuse lighting**. No hard shadows pooling against the base of the object: the shadow edge gets read as the object edge.

## 5. Common mistakes to avoid

Keep the whole scene in focus and tape the board down securely. Avoid these four capture errors:

{% columns %}
{% column %}

<figure><img src="https://70818391-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWnQtI3aVPkZHPVyrjjFG%2Fuploads%2Fgit-blob-33d1efef9da9d59c1b0d42aa0ef9e266bac68021%2Fmistake-uneven-surface.png?alt=media" alt="Object and board on an uneven surface" width="345"><figcaption><p>Use a flat surface.</p></figcaption></figure>
{% endcolumn %}

{% column %}

<figure><img src="https://70818391-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWnQtI3aVPkZHPVyrjjFG%2Fuploads%2Fgit-blob-52e62dbe6c466919c1252b38ddd1526ed8ff45eb%2Fmistake-object-on-board.png?alt=media" alt="Object placed on top of the ChArUco board" width="152"><figcaption><p>Place the object beside the board, not on it.</p></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}

<figure><img src="https://70818391-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWnQtI3aVPkZHPVyrjjFG%2Fuploads%2Fgit-blob-459b5a6a512768b37a7c365783d0c47c397cda95%2Fmistake-cropped-subject.png?alt=media" alt="Object partly cropped out of the camera frame" width="313"><figcaption><p>Keep the entire object in frame.</p></figcaption></figure>
{% endcolumn %}

{% column %}

<figure><img src="https://70818391-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWnQtI3aVPkZHPVyrjjFG%2Fuploads%2Fgit-blob-6c1599d786525a1f8aedfa1a7d02979abdf81b33%2Fmistake-different-planes.png?alt=media" alt="Object and board on different height planes" width="301"><figcaption><p>Keep the object and board on the same plane.</p></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

## Before you send

Send the **original camera file**. Don't screenshot, crop, resize, or route it through any app that recompresses — that strips the metadata the scale stage relies on. Upload it somewhere reachable by HTTPS URL and pass that URL in `inputs.capture`, or send the file inline as base64 `data` — base64 adds about a third to the request, which is capped at 832 MB, so prefer a URL for a large clip.

## Example request

```json
{
  "name": "ceramic pitcher",
  "inputs": {
    "images": [{ "url": "https://example.com/pitcher_front.png" }],
    "capture": [{ "url": "https://example.com/pitcher_charuco.mov" }]
  },
  "params": { "physics": { "simulator": "mujoco" } }
}
```

See [Measured asset](/creating-assets/assets-measured.md) for the rest of the request.
