# OBJ Vertices to CSV

Extract every vertex of a Wavefront OBJ mesh into an x,y,z CSV or plain XYZ point cloud — with unit scaling, Y-up/Z-up conversion, rounding, dedupe and object filters.

## Run it

- **CLI:** `gizza tool obj-vertices-to-csv "# cube corner
v 0.0 0.0 0.0
v 1.0 0.0 0.0
v 0.0 1.0 0.0
f 1 2 3"`
- **Web:** https://gizza.ai/tools/obj-vertices-to-csv/
- **Agents:** machine-readable descriptor (parameters JSON Schema) at https://gizza.ai/tools/obj-vertices-to-csv/tool.json

## Inputs

- `obj` — Wavefront OBJ _(field)_
- `columns` — Columns _(field)_
- `color` — Vertex colour columns _(field)_
- `up_axis` — Up axis _(field)_
- `scale` — Scale _(field)_
- `precision` — Decimal places _(field)_
- `dedupe` — Repeated positions _(field)_
- `objects` — Only these objects/groups _(field)_
- `delimiter` — Delimiter _(field)_
- `header` — Include header row _(field)_

## Output

- Vertex CSV (text)

## Query parameters

Open the tool pre-filled and auto-run via URL:

- `obj` — Wavefront OBJ
- `columns` — Columns
- `color` — Vertex colour columns
- `up_axis` — Up axis
- `scale` — Scale
- `precision` — Decimal places
- `dedupe` — Repeated positions
- `objects` — Only these objects/groups
- `delimiter` — Delimiter
- `header` — Include header row

Example: `https://gizza.ai/tools/obj-vertices-to-csv/?obj=%23%20cube%20corner%0Av%200.0%200.0%200.0%0Av%201.0%200.0%200.0%0Av%200.0%201.0%200.0%0Af%201%202%203&columns=xyz&color=auto&up_axis=keep&dedupe=none&objects=wheels%2Cchassis%20%E2%80%94%20blank%20keeps%20every%20vertex&delimiter=comma&header=true`

---

## About this tool

OBJ Vertices to CSV extracts the stored vertex positions from Wavefront OBJ text. Every `v x y z` line that passes the filters becomes one output row, in file order. Faces, texture coordinates, normals, curves, material libraries, and mesh topology are not resampled or converted; this is a vertex-table extractor, not a mesh renderer.

The defaults produce a simple `x,y,z` CSV. Use the options to add the original 1-based OBJ vertex index, object/group/material context, per-vertex colour columns, Y-up/Z-up conversion, unit scaling, fixed decimal precision, repeated-position dedupe, object or group filters, and spreadsheet-friendly delimiter choices. Choose `delimiter=space` with `header=false` when you need a plain XYZ/ASC point-cloud text file.

### Worked example

Input OBJ:

```obj
# triangle
v 0.0 0.0 0.0
v 1.0 0.0 0.0
v 0.0 1.0 0.0
vt 0.0 0.0
vn 0.0 0.0 1.0
f 1/1/1 2/1/1 3/1/1
```

With the default options, the output is:

```csv
x,y,z
0.0,0.0,0.0
1.0,0.0,0.0
0.0,1.0,0.0
```

For a point-cloud export, set Delimiter to `space` and turn Include header row off.

## FAQ

<details>
<summary>Does this convert OBJ faces or sample points across mesh surfaces?</summary>

No. The output rows come only from stored OBJ `v` vertex lines. Face records (`f`) are ignored, so triangles are not expanded, resampled, triangulated, or densified. Use a mesh or point-cloud conversion tool if you need sampled surface points.

</details>

<details>
<summary>Why does the index column skip numbers after filtering?</summary>

`columns=indexed` writes the original 1-based OBJ vertex index, which is the number face records reference. If you filter by object/group or dedupe repeated positions, skipped vertices keep their original numbers out of the output, so remaining rows may jump from index 2 to index 9.

</details>

<details>
<summary>Can the tool keep per-vertex colours?</summary>

Yes, for OBJ files that use the common extended `v x y z r g b` form. The default `color=auto` adds `red,green,blue` columns when at least one vertex has colour values. Colour tokens are copied as written and are not rounded with the coordinate precision option.

</details>

<details>
<summary>How should I export a plain XYZ or ASC point-cloud file?</summary>

Set Delimiter to `space` and uncheck Include header row. That produces rows like `0.0 1.0 2.0`, one vertex per line. If your target expects a fixed number of decimal places, set Decimal places to a value from 0 to 15.

</details>

<details>
<summary>What are the limits and unsupported inputs?</summary>

The tool accepts Wavefront OBJ text up to 16 MiB and emits up to 500,000 vertex rows. It does not read binary formats, zipped models, STL, PLY, glTF/GLB, FBX, or referenced `.mtl` files. It parses and ignores a fourth OBJ `w` value on vertex lines, and it reports malformed vertex lines with their source line number.

</details>

## Related tools

- [PLY to OBJ Converter](https://gizza.ai/tools/ply-to-obj/): Convert a Stanford PLY mesh or point cloud to Wavefront OBJ. Reads ascii and binary PLY, keeps vertex colors, normals and UVs, scales and reorients axes.
- [OBJ ↔ STL Mesh Converter](https://gizza.ai/tools/mesh-convert/): Convert pasted OBJ or ASCII STL meshes to OBJ, ASCII STL, or binary STL data URLs. Supports scaling, Y-up/Z-up axis swaps, and triangulation.
- [STL Vertices to CSV](https://gizza.ai/tools/stl-vertices-to-csv/): Extract triangle vertex coordinates from ASCII or binary STL into CSV or plain XYZ text — with triangle rows, normals, axis conversion, scale, rounding and dedupe.
- [Absolute value, sign, or negation for a whole column](https://gizza.ai/tools/absolute-value-transformer/): Paste a column of numbers and apply absolute value, sign extraction (-1/0/1), sign flipping, or force-negative to every value at once, with rounding and an audit table.
- [Adjacency Matrix Converter](https://gizza.ai/tools/adjacency-matrix-converter/): Convert a graph between edge list, adjacency matrix, and incidence matrix — directed or undirected, weighted or not. Free, private, runs in your browser.
