{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://ludo.ai/schemas/ludo-ai/game-asset.json", "title": "Ludo.ai Game Asset", "description": "Schema representing game assets generated by the Ludo.ai platform, including images, spritesheets, 3D models, videos, and audio files.", "type": "object", "required": ["asset_type", "url", "created_at"], "properties": { "asset_type": { "type": "string", "description": "The category of generated game asset.", "enum": [ "image", "spritesheet", "video", "3d_model", "sound_effect", "music", "voice", "speech" ] }, "url": { "type": "string", "format": "uri", "description": "URL of the generated asset. Temporary and expires after 7 days." }, "request_id": { "type": "string", "description": "Client-provided identifier for tracking and retrieving the asset asynchronously." }, "created_at": { "type": "string", "format": "date-time", "description": "Timestamp when the asset was generated." }, "credits_consumed": { "type": "number", "description": "Number of credits consumed to generate this asset.", "minimum": 0 }, "image_details": { "$ref": "#/$defs/ImageDetails" }, "spritesheet_details": { "$ref": "#/$defs/SpritesheetDetails" }, "model_3d_details": { "$ref": "#/$defs/Model3DDetails" }, "video_details": { "$ref": "#/$defs/VideoDetails" }, "audio_details": { "$ref": "#/$defs/AudioDetails" } }, "$defs": { "ImageDetails": { "type": "object", "description": "Details specific to generated image assets.", "properties": { "image_type": { "type": "string", "description": "The type of game image asset.", "enum": [ "sprite", "icon", "screenshot", "art", "asset", "sprite-vfx", "ui_asset", "fixed_background", "texture", "3d", "generic" ] }, "art_style": { "type": "string", "description": "The art style used for generation.", "enum": [ "Pixel Art (16-Bit)", "Pixel Art (8-Bit)", "Low Poly", "Cartoonish", "Stylized 3D", "Flat Design", "Anime/Manga", "Voxel Art" ] }, "perspective": { "type": "string", "description": "The camera perspective used for the image.", "enum": [ "Side-Scroll", "Top-Down", "Isometric", "First-Person", "Third-Person", "2.5D" ] }, "aspect_ratio": { "type": "string", "description": "The aspect ratio of the generated image.", "enum": ["default", "ar_1_1", "ar_4_3", "ar_16_9", "ar_9_16"] }, "prompt": { "type": "string", "description": "The text prompt used to generate the image." } } }, "SpritesheetDetails": { "type": "object", "description": "Details specific to generated spritesheet animation assets.", "properties": { "spritesheet_url": { "type": "string", "format": "uri", "description": "URL of the spritesheet image." }, "video_url": { "type": "string", "format": "uri", "description": "URL of the animation as a video file." }, "gif_url": { "type": "string", "format": "uri", "description": "URL of the animated GIF version." }, "individual_frame_urls": { "type": "array", "description": "URLs of individual animation frames.", "items": { "type": "string", "format": "uri" } }, "num_frames": { "type": "integer", "description": "Total number of frames in the spritesheet.", "minimum": 4, "maximum": 64 }, "num_cols": { "type": "integer", "description": "Number of columns in the spritesheet grid.", "minimum": 1 }, "num_rows": { "type": "integer", "description": "Number of rows in the spritesheet grid.", "minimum": 1 }, "frame_size": { "type": "integer", "description": "Size of each frame in pixels.", "enum": [64, 128, 256, 0] }, "loop": { "type": "boolean", "description": "Whether the animation is a seamless loop." }, "motion_prompt": { "type": "string", "description": "The motion prompt used to generate the animation." } } }, "Model3DDetails": { "type": "object", "description": "Details specific to generated 3D model assets.", "properties": { "model_url": { "type": "string", "format": "uri", "description": "URL of the GLB 3D model file." }, "snapshots": { "type": "array", "description": "Snapshot images of the 3D model from four different angles.", "items": { "type": "string", "format": "uri" }, "minItems": 4, "maxItems": 4 }, "texture_type": { "type": "string", "description": "Type of texture applied to the model.", "enum": ["pbr", "simple", "none"] }, "texture_size": { "type": "integer", "description": "Texture resolution in pixels.", "enum": [1024, 2048, 4096] }, "target_num_faces": { "type": "integer", "description": "Target triangle count for the mesh.", "minimum": 1000, "maximum": 100000 } } }, "VideoDetails": { "type": "object", "description": "Details specific to generated video assets.", "properties": { "duration": { "type": "integer", "description": "Duration of the video in seconds.", "enum": [3, 5, 8, 10] }, "prompt": { "type": "string", "description": "The motion prompt used to generate the video." }, "model": { "type": "string", "description": "The video generation model used.", "enum": ["standard", "new"] } } }, "AudioDetails": { "type": "object", "description": "Details specific to generated audio assets.", "properties": { "audio_type": { "type": "string", "description": "The type of audio asset generated.", "enum": ["sound_effect", "music", "voice", "speech", "speech_preset"] }, "description": { "type": "string", "description": "The text description or prompt used to generate the audio." }, "duration": { "type": "number", "description": "Duration of the audio in seconds.", "minimum": 0, "maximum": 10 }, "voice_preset_id": { "type": "string", "description": "The voice preset character used for speech generation.", "enum": [ "Serious woman", "Wise woman", "Calm woman", "Patient man", "Determined man", "Deep voice man", "Teen boy", "Sweet girl" ] }, "emotion": { "type": "string", "description": "The emotion applied to speech delivery.", "enum": ["Default", "Happy", "Sad", "Angry", "Fearful", "Surprised", "Neutral"] }, "language": { "type": "string", "description": "Language used for speech output.", "enum": ["auto", "English", "Spanish", "French", "German", "Japanese", "Korean"] } } } } }