Skip to main content
Euca turns a text prompt into 3D content through euca-asset: you POST /asset/generate with a prompt and a provider, get a task_id, and poll /asset/status/{id} until it’s complete with a file on disk. Results are cached on disk by a provider+prompt hash (identical prompts reuse the bake, keeping runs deterministic) and carry a JSON provenance sidecar. The generated appearance is decoupled from the world’s ground truth — an AI mesh changes how an entity looks, never its exact state, which is what keeps Euca usable as a world-model answer key. The mental model to hold: generation calls an external provider API, so it needs a key and network — without one, the job fails immediately, and this page shows that real failure alongside the working shape.

Kick off a job and poll it

First check which providers your server can actually use. /asset/providers returns exactly the four 3D-model providers the handler tracks, each with an available flag set by whether a key is configured:
Now start a job. provider defaults to tripo; quality is low / medium (default) / high:
That API key not configured is the real response from a server with no provider key — the service constructs the provider, fails its key check, and never queues a task. With a key present, the same call returns a task_id to poll: {"task_id":"gen_1","status":"pending"}. You then poll until it’s done:
/asset/generated lists every task the service knows about:
Asking for the status of a task that doesn’t exist returns a plain error — useful when you typo a task_id:

Behavior and gotchas

The things you only find out by running it:
  • No keys → no jobs. On a bare server, /asset/generate returns {"error":"API key not configured","ok":false} and /asset/providers shows all four as "available":false. Set the matching env var (TRIPO_API_KEY, MESHY_API_KEY, RODIN_API_KEY, HUNYUAN_API_KEY) on the host, and that provider flips to available:true. Some providers also need a paid plan.
  • /asset/providers lists four, not eight. The endpoint reports only the 3D-model providers (tripo, meshy, rodin, hunyuan). The wider euca-asset taxonomy also covers heightmaps, skyboxes, PBR textures, and full scenes through other providers — but those aren’t what this endpoint enumerates.
  • Generation is async — generate then poll. /asset/generate returns a task_id immediately; /asset/status/{id} is what reports progress, the final file_path, or an error. An unknown id returns unknown task: {id}.
  • Caching is by provider+prompt hash. Before calling a provider, the service hashes provider+prompt and checks assets/generated/; a hit returns the existing bake immediately, so identical prompts are deterministic and free.
  • Provenance ships with every asset — a JSON sidecar records provider, prompt, quality, and timestamp.
  • Provider I/O runs off the simulation thread. Handlers use spawn_blocking because the provider clients are blocking, so generation never stalls a tick.

Endpoints

Status

  • Shipped — the four-provider 3D-model pipeline (plus heightmap/skybox/texture/scene providers in the crate), task lifecycle, prompt-hash caching, provenance sidecars, and offline baking.
  • Requires — a provider API key and network access; no key ships by default, and some providers need a paid plan. Generated appearance never touches ground truth.

Asset endpoints

Generate, status, list, and providers endpoints, with request and response schemas.