3D Models

Convert a source image into a textured 3D model (image-to-3D). The job result is a downloadable GLB model_url plus an array of snapshot image URLs rendered from different angles (handy for previews). model picks the generator: prop (default) is low-cost and suits everyday props and environment pieces; hero is far more detailed and accurate, for close-up assets, but slower and more expensive. image is the front view; with prop, pass an optional back_image (the same subject seen from behind) so the back of the model follows it instead of being invented - hero takes the front image only and rejects a back_image with HTTP 400. The image is converted as it is: to make a character image for it first, from a prompt or by redrawing your own image as a 3D render, use create3DModelImage. Accepts optional mesh controls: target_num_faces (max triangle count, 1000-200000, default 50000), texture_size (1024 or 2048, default 2048), and texture_type ("pbr", "simple", or "none", default "pbr"). Pass rig true to also rig the model in the same call, with the general rig (joint_naming as in rigModel), ready for animate3DModelPreset or createDirectionalSprites; that adds the rigModel price, charged only when the result comes back rigged. Credits are held when the job is accepted and refunded if it fails or is cancelled. Pass an optional request_id to tag the result so you can locate it later via listGenerations (type 3d). Requires an API key (user scope). The call returns 202 with a job id - poll getApiJob (pass wait 30 to long-poll) honouring poll_after_ms, until status is succeeded; its result field is exactly the response documented for this operation. Synchronous responses are deprecated but still supported: pass `async: false` to block until the result is ready and receive it as the response body. Synchronous calls run on the same queue: the response carries an X-Ludo-Job-Id header, and a job still running after 15 minutes comes back as 202 with the job instead of an error. Each account may have up to 50 generations queued or running at once via the API; a request beyond that returns 429 (code PENDING_JOBS_LIMIT).

Changed on
post/assets/3d-model

Request

  • Base URL
    https://api.ludo.ai/api
  • Auth
    API key in header Authorization

Request body

imagestring required

URL or base64-encoded image to convert to 3D, taken as the front view of the subject

model'prop' | 'hero'

Image-to-3D model: prop (default) or hero. The public specs rewrite this from THREE_D_MODELS in credits.js (scripts/generate-public-swagger.js).

back_imagestring

Optional URL or base64-encoded image of the SAME subject seen from behind (rotated 180 degrees from image). The model's back then follows it instead of being invented from the front view alone. It must show the same subject, at the same scale and in the same pose and style as image. Only a back view is supported: a side or three-quarter view here produces a distorted model. Prop model only: hero rejects it with HTTP 400. No extra cost.

target_num_facesinteger

Maximum triangle count for the mesh (1000-200000)

texture_size1024 | 2048

Texture resolution in pixels

texture_type'pbr' | 'simple' | 'none'

Texture type

rigboolean

Also rig the model (skeleton and skin weights) in the same call, so it can be animated or rendered with createDirectionalSprites. It gets the general rig, which suits any shape; there is no rig type to pick here (rigModel offers the others). Adds the rigModel price, charged only when the model comes back rigged (the result's rigged).

joint_naming'smpl' | 'mixamo' | 'humanik' | 'unreal' | 'godot' | 'rigify' | 'vroid'

With rig, the bone naming convention (as rigModel's joint_naming). Purely a relabel - the skeleton is identical.

request_idstring

Optional client-provided identifier, unique per request. Re-sending the same request_id returns the existing job instead of generating again. Also usable as the request_id filter of listGenerations.

asyncboolean

Defaults to true: the call returns 202 immediately with a job id to poll with getApiJob. Set false for a synchronous response (deprecated but supported): the call then blocks until the result is ready.

Response

Success

model_urlstring

URL to the generated 3D model file

snapshotsstring[]

URLs to snapshot images from different angles (useful for previews and MCP agents)

riggedboolean

True when the model carries a skeleton (asked for with rig).

Changes