Text/image → 3D across 8 AI providers, with disk caching and provenance. Calls external provider APIs — needs API keys and network, and never touches ground truth.
Euca’s asset pipeline (euca-asset) turns prompts into 3D content across 8 providers — models,
heightmaps, skyboxes, PBR textures, and full scenes. Results are cached on disk by prompt (so identical
prompts reuse the bake, keeping runs deterministic) and carry a provenance sidecar. Crucially, generated
appearance is decoupled from the world’s ground truth: an AI-made mesh changes how an entity looks,
never its exact state. That decoupling is what keeps Euca usable as a world-model
answer key.
Asset generation calls external provider APIs. It is not runnable on a bare headless server: it
needs network access and a provider API key (e.g. TRIPO_API_KEY, MESHY_API_KEY, …). GET /asset/providers reports which providers have a key configured (is_available). The default provider
is Tripo.
Each implements the AssetGenerator trait (name / is_available / generate / poll / download).
Generation runs on a blocking thread pool so it never stalls the simulation.
# Which providers are configured?curl -s http://localhost:3917/asset/providers# Kick off a Tripo model job, then poll itTASK=$(curl -s -X POST http://localhost:3917/asset/generate \ -H 'Content-Type: application/json' \ -d '{"prompt":"a mossy stone golem","provider":"tripo","quality":"standard"}' | jq -r .task_id)curl -s http://localhost:3917/asset/status/$TASK
Cache — before calling a provider, the service hashes the provider+prompt and checks
assets/generated/; a hit returns immediately. Identical prompts reuse the baked mesh.
Provenance — each generated asset gets a JSON sidecar recording provider, prompt, quality, and
timestamp.