---
title: "Enqueue 3D-to-sprite stills: the model as it is, one large styled image per view asked for (directions), rendered together so they line up. The job's result is the list of images, saved as generated images. One RENDER_SPRITE_3D_STILL charge per image (Roles: user)."
method: POST
path: "/jobs/render-sprite-3d-still"
tags: ["Jobs"]
---

# Enqueue 3D-to-sprite stills: the model as it is, one large styled image per view asked for (directions), rendered together so they line up. The job's result is the list of images, saved as generated images. One RENDER_SPRITE_3D_STILL charge per image (Roles: user).

`POST /jobs/render-sprite-3d-still`

## Request

- Base URL: `https://api.ludo.ai/api`
- URL: `https://api.ludo.ai/api/jobs/render-sprite-3d-still`
- Auth: API key in header `Authorization`

## Request body

- RenderSprite3DStillPayload
  - `request_id` string
  - `generated_model` ThreeDModelInput
    - `tags` string[]
    - `asset` AssetGeneration
      - `id` string
      - `rigged` boolean: True once the model carries a skeleton and skin weights (set by rig-model). Gates the animation flow and the re-rig guard.
      - `animatable` boolean: The ML's humanoid check on the model's rig, as reported with the model: true when it passed, false when it failed or there is no rig. Gates the animation presets (retargeting needs a humanoid). Absent when unknown: on models rigged before the ML saved the check, and whenever the ML reports null (Prometheus responses drop nulls). Never null: swagger-tools ignores x-nullable, so a null here fails request validation.
      - `seed` integer
      - `images_b64` string[]
      - `params_encrypted` string
      - `request_id` string
      - `video_b64` string
      - `mesh_video_b64` string
      - `snapshots_b64` string[]
      - `model_b64` string
      - `binary_data_b64` string
      - `voxels_b64` string
      - `mask_snapshots_b64` string[]
      - `depth_snapshots_b64` string[]
      - `normal_snapshots_b64` string[]
      - `textured` boolean: Whether the ML generated a texture for the model.
      - `view_azimuths` number[]: Camera azimuths, in degrees, of the input views the ML built the model from: [0] for a front view alone, [0, 180] with a back view.
      - `generation_parameters` ThreeDGenerationParameters
        - `model` 'prop' | 'hero': Image-to-3D model (THREE_D_MODELS in credits.js): prop (default) or hero, which bills GENERATE_3D_MODEL_HERO. Ignored by the other 3D operations.
        - `rig` boolean: Image-to-3D only: also rig the model (skeleton + skin weights) in the same call, as rig-model would. Bills RIG_3D_MODEL on top of the model when the model comes back rigged. Ignored by the other 3D operations.
        - `rig_type` 'general' | 'humanoid' | 'game' | 'humanoid_template' | 'humanoid_template_hands': The rig a model rigged in this call got. Always general: any other value sent is overridden (MediaGeneration.imageTo3D). Kept in the enum so an older client sending one is not refused, and so models rigged before the change keep their recorded type.
        - `joint_naming` 'smpl' | 'mixamo' | 'humanik' | 'unreal' | 'godot' | 'rigify' | 'vroid': With rig, the bone naming convention (as RigModelPayload.joint_naming).
        - `target_num_faces` integer
        - `dynamic_simplification` number, float
        - `remeshing` string
        - `texture_size` integer
        - `texture_type` string
        - `render_format` string
        - `render_video` boolean
    - `image` GameImage
      - `tags` string[]
      - `id` string
      - `image_id` string
      - `url` string
      - `type` string
      - `final_score` number, float
      - `nsfw_prob` number, float
      - `similarity` number, float
      - `width` integer
      - `height` integer
      - `game_id` string
      - `hosted_filename` string
      - `icon` boolean
      - `targetSize` integer
      - `seed` integer
      - `embedded` boolean
      - `analysed` boolean
      - `image` string
      - `image_type` string
      - `prompt` string
      - `motion_prompt` string
      - `request_id` string
      - `hints` string[]
      - `selected_genres` string[]
      - `selected_colors` string[]
      - `selected_style` string
      - `selected_perspective` string
      - `is_safe` boolean
      - `platform` string
      - `loading` boolean
      - `original_hints` string[]
      - `genres` string[]
      - `edit_mask` string
      - `edit_mode` string
      - `camera_rotation` integer
      - `camera_elevation` integer
      - `edit_mask_pil_image` PILImage
        - `format` string
        - `format_description` string
      - `pil_image` PILImage
        - `format` string
        - `format_description` string
      - `nsfw` number, float
      - `pose` SpritePose
        - `animation_prompt` string: Animation description for the sprite pose
        - `margin_ratio` number, float: Margin ratio for the sprite animation
        - `margin_ratio_mode` string
        - `name` string: Name of the sprite pose
        - `prompt` string: Prompt description for the sprite pose
      - `render_3d` Sprite3DRender
        - `style_id` string
        - `style_version` integer
        - `style_params` object: Every setting of the style as rendered, by name.
        - `params` object: The renderer's own parameters (e.g. renderer, version).
        - `perspective` string
        - `direction` string
        - `animation_name` string
        - `fps` number, float
        - `keep_horizontal_travel` boolean
        - `keep_vertical_travel` boolean
        - `pixel_block` integer
        - `generated_model` object: The model that was rendered (its id, file urls and, from render, history_id - the three_d_asset history entry it came from).
      - `pixel_grid` integer[], nullable: Pixel-art grid dimensions [width, height] the ML detected in (or gave) the image, as on GeneratedVideo. The ML reports it on every image generation; absent when no grid was found and on images saved before it was recorded.
      - `pixel_size` number, float: Pixel art conversion only: the size of one pixel-art pixel, in the source image's pixels (the caller's, or the detected one).
      - `model` string: Id of the model the ML reports for the image (klimt, frida, ...). Absent on images saved before it was kept.
    - `back_image` GameImage
      - `tags` string[]
      - `id` string
      - `image_id` string
      - `url` string
      - `type` string
      - `final_score` number, float
      - `nsfw_prob` number, float
      - `similarity` number, float
      - `width` integer
      - `height` integer
      - `game_id` string
      - `hosted_filename` string
      - `icon` boolean
      - `targetSize` integer
      - `seed` integer
      - `embedded` boolean
      - `analysed` boolean
      - `image` string
      - `image_type` string
      - `prompt` string
      - `motion_prompt` string
      - `request_id` string
      - `hints` string[]
      - `selected_genres` string[]
      - `selected_colors` string[]
      - `selected_style` string
      - `selected_perspective` string
      - `is_safe` boolean
      - `platform` string
      - `loading` boolean
      - `original_hints` string[]
      - `genres` string[]
      - `edit_mask` string
      - `edit_mode` string
      - `camera_rotation` integer
      - `camera_elevation` integer
      - `edit_mask_pil_image` PILImage
        - `format` string
        - `format_description` string
      - `pil_image` PILImage
        - `format` string
        - `format_description` string
      - `nsfw` number, float
      - `pose` SpritePose
        - `animation_prompt` string: Animation description for the sprite pose
        - `margin_ratio` number, float: Margin ratio for the sprite animation
        - `margin_ratio_mode` string
        - `name` string: Name of the sprite pose
        - `prompt` string: Prompt description for the sprite pose
      - `render_3d` Sprite3DRender
        - `style_id` string
        - `style_version` integer
        - `style_params` object: Every setting of the style as rendered, by name.
        - `params` object: The renderer's own parameters (e.g. renderer, version).
        - `perspective` string
        - `direction` string
        - `animation_name` string
        - `fps` number, float
        - `keep_horizontal_travel` boolean
        - `keep_vertical_travel` boolean
        - `pixel_block` integer
        - `generated_model` object: The model that was rendered (its id, file urls and, from render, history_id - the three_d_asset history entry it came from).
      - `pixel_grid` integer[], nullable: Pixel-art grid dimensions [width, height] the ML detected in (or gave) the image, as on GeneratedVideo. The ML reports it on every image generation; absent when no grid was found and on images saved before it was recorded.
      - `pixel_size` number, float: Pixel art conversion only: the size of one pixel-art pixel, in the source image's pixels (the caller's, or the detected one).
      - `model` string: Id of the model the ML reports for the image (klimt, frida, ...). Absent on images saved before it was kept.
  - `user_model` string: URL of an uploaded GLB. Provide this OR generated_model.
  - `user_model_file_type` 'glb'
  - `perspective` 'horizon' | 'low' | 'isometric' | 'high' | 'top', required
  - `directions` string[]: Where the camera stands around a character facing S, each view at most once. One still per view, in this order, rendered together on the same frame, scale and floor, so the views line up.
  - `style_id` string, required: id of a style from /utils/sprite3d-styles
  - `style_version` integer: Version of the style; omit for its current one.
  - `style_params` object: Overrides of the style's settings, by name, each one of its listed choices (or true/false, or a colour for a colour setting).

## Response `202`

Accepted

- JobAcceptedResponse
  - `jobId` string, required
  - `status` 'queued' | 'running' | 'succeeded' | 'failed' | 'canceled', required
  - `queue_position` integer

## Other responses

- `400`: Error
- `402`: Insufficient credits

## Changes

- **2026-10-11** `8a65afefcc7a`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/ludo/apis/ludo-ai-api/changes/jobs/render-sprite-3d-still/post.md)

---

[API](https://skmtc.dev/ludo/apis/ludo-ai-api.md) - [All operations](https://skmtc.dev/ludo/apis/ludo-ai-api/llms.txt) - [OpenAPI document](https://skmtc.dev/ludo/apis/ludo-ai-api/revisions/4efeb12a23c9?raw)
