Detailer & Texture
Detailer + texture endpoints — high-resolution mesh refinement and retexturing.
The Detailer takes a completed submission as the source mesh and produces a high-resolution textured model. You can also retexture an existing result without regenerating from scratch.
Just want fewer triangles?
Remesh the result you already have - it re-decimates the existing mesh and keeps its texture, so it's quicker and cheaper than a second Detailer pass, and you get the same model rather than a new one.
This page covers the detail + texture endpoints:
/api/v1/detailer/submit— full detail + texture pass./api/v1/texture/*— texture-only operations on an existing mesh (generate, rebake).
Which one should I use?
The Detailer rebuilds the mesh, so it can change the shape you gave it. The texture endpoints never touch geometry. Pick by what you need to keep:
| What you need | Use | What you get |
|---|---|---|
| The geometry exactly as it is, every part and name intact | POST /api/v1/texture/generate | Guaranteed. Geometry is untouched; only materials are regenerated |
| Added geometric detail on a precision or hard-surface model | POST /api/v1/detailer/submit with adherence_level: 12 | Best effort. Far more parts survive than at the default, but very small ones can still be lost |
| A genuine re-sculpt of an organic or sculptural subject | POST /api/v1/detailer/submit (default adherence_level: 9) | The silhouette is expected to be reinterpreted |
If the shape is already right, do not detail it
Retexturing costs the same as a detail pass and cannot damage what you have. The Detailer is
for when you want the shape itself to gain detail. Measured on one 78-part quadcopter
blockout with preserve_parts: true, same seed and same reference image: at the default
adherence_level: 9, 28 parts came back and one of the four propellers was missing entirely;
at adherence_level: 12, 35 parts came back and all four propellers survived at full size.
The Detailer is strongest on organic and sculptural subjects (creatures, characters, cloth, plants, rock). It is weaker on precise manufactured geometry: an exactly round cylinder, torus or wheel is re-approximated rather than refined, so it returns measurably less round while carrying many times the triangles.
Proportions matter too. A model whose bounding box is far from a cube — a building, a roof, a floor plane, anything long and thin — comes back noticeably worse from both the Detailer and the Sculptor, because the object occupies only a small part of the working volume. For buildings, prefer the texture endpoints.
Detail and texture a model
POST /api/v1/detailer/submit
Requires API key.
Generate a high-resolution textured mesh from a parent submission. A reference image and prompt guide the texture style; if omitted, they are auto-generated from the parent.
Request Body
| Name | Type | Description |
|---|---|---|
parent_submission_id | string (required) | ID of the submission to detail. |
image | string | Reference image (base64 or HTTPS URL). Auto-generated if omitted. |
mesh | string | Override source mesh (base64 or URL). Defaults to the parent's GLB. |
prompt | string | Text description of the desired appearance. |
seed | integer | RNG seed. 0-999,999. Omit for a random seed each run (the default). Pin it only to reproduce a previous result: the same seed with the same inputs reproduces it. |
texture_size | integer | Output texture resolution. Values: 2048, 4096. Default: 2048. |
decimation_target | integer | Target triangle count after decimation. 10,000–250,000. Default: 80000. To lighten a model you already have, Remesh is quicker and cheaper. |
adherence_level | integer | How closely the output adheres to the source mesh geometry. 0–12. 0 follows the reference image most freely (most creative); 12 returns the source mesh geometry itself, so the pass only adds texture. Default: 9, which stays close to the mesh while still letting the reference image inform detail. Previously named coherence_level, which is still accepted. |
preserve_parts | boolean | Experimental. Keep the input mesh's separate parts in the output. When false, returns a single merged mesh. Omit to let the server choose: on at adherence_level 9 or above, off below it, where keeping the parts split through a reshaped silhouette produces artifacts. |
project_id | string | Assign to a project. |
Example Request
curl -X POST https://api.thrixel.com/api/v1/detailer/submit \
-H "Authorization: Bearer sk-thrixel-<YOUR_KEY>" \
-H "Content-Type: application/json" \
-d '{
"parent_submission_id": "a1b2c3d4-...",
"prompt": "weathered bronze, green patina",
"texture_size": 2048
}'Example Response
Generate textures for an existing mesh
POST /api/v1/texture/generate
Requires API key.
Produce fresh PBR textures from a reference image. Geometry is preserved; only materials change. Works on any completed submission, not just Detailer output. Image priority: user-supplied → cached parent input → auto-generated from the GLB.
Request Body
| Name | Type | Description |
|---|---|---|
parent_submission_id | string (required) | ID of a completed submission to retexture. |
texture_size | integer | Output texture resolution. Values: 2048, 4096. Default: 2048. |
image | string | Reference image (base64 data URI). Auto-generated from the GLB if omitted. |
seed | integer | RNG seed. 0-999,999. Omit for a random seed each run (the default). Pin it only to reproduce a previous result: the same seed with the same inputs reproduces it. |
apply_to_node_names | string[] | Restrict texturing to specific mesh nodes. Empty = whole mesh. |
project_id | string | Assign to a project. |
Example Request
curl -X POST https://api.thrixel.com/api/v1/texture/generate \
-H "Authorization: Bearer sk-thrixel-<YOUR_KEY>" \
-H "Content-Type: application/json" \
-d '{
"parent_submission_id": "e5f6a7b8-...",
"texture_size": 2048
}'Rebake textures at a new resolution
POST /api/v1/texture/rebake
Requires API key.
Re-bake the existing texture at a different resolution. Picks the fastest available method automatically.
Request Body
| Name | Type | Description |
|---|---|---|
parent_submission_id | string (required) | ID of a completed submission. |
texture_size | integer | Output texture resolution. Values: 1024, 2048, 4096. Default: 2048. |
project_id | string | Assign to a project. |
Example Request
curl -X POST https://api.thrixel.com/api/v1/texture/rebake \
-H "Authorization: Bearer sk-thrixel-<YOUR_KEY>" \
-H "Content-Type: application/json" \
-d '{
"parent_submission_id": "e5f6a7b8-...",
"texture_size": 2048
}'Fetch reference image
GET /api/v1/detailer/reference/{submission_id}
Public.
Returns the user-provided or auto-generated reference image used to guide the detailing. PNG.
Path Parameters
| Name | Type | Description |
|---|---|---|
submission_id | string (required) | UUID of a Detailer submission. |
Example Request
curl -L -o reference.png https://api.thrixel.com/api/v1/detailer/reference/e5f6a7b8-...