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:
provider defaults to tripo; quality is low / medium (default) / high:
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:
task_id:
Behavior and gotchas
The things you only find out by running it:- No keys → no jobs. On a bare server,
/asset/generatereturns{"error":"API key not configured","ok":false}and/asset/providersshows 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 toavailable:true. Some providers also need a paid plan. /asset/providerslists four, not eight. The endpoint reports only the 3D-model providers (tripo,meshy,rodin,hunyuan). The widereuca-assettaxonomy 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/generatereturns atask_idimmediately;/asset/status/{id}is what reportsprogress, the finalfile_path, or anerror. An unknown id returnsunknown 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_blockingbecause 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.