Ludo AI Game Assets
Qué hace este MCP
Generates game assets including sprites, 3D models, animations, sound effects, music, and voice content.
Herramientas
Esquema de entrada
{'type': 'object', 'required': ['requestBody'], 'properties': {'requestBody': {'type': 'object', 'required': ['model', 'prompt'], 'properties': {'loop': {'type': 'boolean', 'example': True, 'description': 'Return to the initial pose: each clip plays forward then mirrors back to the rest pose for a seamless loop. Best for one-way motions (crouch, punch, wave); reads oddly for cyclic gaits like walking. Default: true.'}, 'mode': {'enum': ['rot_trans', 'rot_only'], 'type': 'string', 'example': 'rot_trans', 'description': 'Animation representation: rot_trans (per-bone rotation+translation, most faithful) or rot_only (rotation + root translation only, for retargeting). Default: "rot_trans".'}, 'model': {'type': 'string', 'example': '<url> OR data:model/gltf-binary;base64,...', 'description': 'The already-rigged 3D asset to animate, as a URL or base64-encoded GLB file (not an AI model name). Rig it first with rigModel if it has no skeleton.'}, 'prompt': {'type': 'string', 'description': 'Desired motion, e.g. "walking" or "swinging its axe".'}, 'request_id': {'type': 'string', 'description': '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.'}, 'num_variants': {'type': 'integer', 'example': 4, 'maximum': 8, 'minimum': 1, 'description': 'Number of candidate animations to generate; each returned as a standalone animation-only GLB with an mp4 preview. Default: 4.'}, 'augment_prompt': {'type': 'boolean', 'example': True, 'description': 'Rewrite the prompt into a detailed motion caption with an LLM (recommended). Default: true.'}}}}}
Esquema de entrada
{'type': 'object', 'required': ['requestBody'], 'properties': {'requestBody': {'type': 'object', 'required': ['model', 'preset_id'], 'properties': {'model': {'type': 'string', 'example': '<url> OR data:model/gltf-binary;base64,...', 'description': 'The already-rigged 3D asset, as a URL or base64-encoded GLB file (not an AI model name). Rig it with rigModel using rig_type humanoid_template or humanoid_template_hands first.'}, 'in_place': {'type': 'boolean', 'description': "Remove the animation's net travel so the character moves on the spot (engine-driven locomotion). Omit to keep the preset's own travel."}, 'crop_loop': {'type': 'boolean', 'description': "Trim the animation to the span that loops seamlessly. Omit to follow the preset's own loop flag. Ignored when no clean loop exists."}, 'preset_id': {'type': 'string', 'description': 'id of an animation preset from the presets list. Only presets that expose a clip_url can be applied to a 3D model.'}, 'request_id': {'type': 'string', 'description': '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.'}}}}}
Esquema de entrada
{'type': 'object', 'required': ['requestBody'], 'properties': {'requestBody': {'type': 'object', 'required': ['motion_prompt', 'initial_image'], 'properties': {'gif': {'type': 'boolean', 'example': False, 'description': 'When true, generates an animated GIF from the spritesheet and returns it in gif_url. Disabled by default to reduce response time. Default: false.'}, 'crop': {'type': 'boolean', 'example': True, 'description': 'Crop sprite frames to fit content. Results in smaller spritesheets but inconsistent frame sizes across different animations. Default: true.'}, 'loop': {'type': 'boolean', 'example': True, 'description': 'Trim the animation at the beginning or end to create a seamless loop. Not guaranteed to produce a perfect loop. Default: true.'}, 'model': {'enum': ['hydra', 'forge', 'forge-pixel', 'blitz', 'standard', 'eagle', 'eagle-audio'], 'type': 'string', 'example': 'hydra', 'description': 'Model to use. Available models:\n- "hydra" (Hydra): 3 credits/s, min charge 9 credits · Most capable all-around model, generates audio\n- "forge" (Forge): 1.5 credits/s, min charge 4 credits · Sharper detail, simpler motion. Best for simple body shapes and short actions; may need a few tries\n- "forge-pixel" (Forge Pixel): 1.5 credits/s, min charge 4 credits · Best for low-res pixel art animations\n- "blitz" (Blitz): 1.9 credits/s, min charge 4 credits · LEGACY - scheduled for removal, do not use for new work\n- "eagle" (Eagle): 2.6 credits/s, min charge 4 credits · LEGACY - scheduled for removal, do not use for new work\n- "eagle-audio" (Eagle with Audio): 3.1 credits/s, min charge 4 credits · LEGACY - scheduled for removal, do not use for new work\nLegacy aliases: "standard" → blitz.\nModels marked LEGACY still work for existing integrations but will be removed; pick a current model for anything new. Default: "hydra".'}, 'frames': {'type': 'number', 'format': 'integer', 'example': 36, 'description': 'Number of frames in the output spritesheet. Accepted values: 4, 9, 16, 25, 36, 49, 64. Default: 36.'}, 'duration': {'type': 'number', 'format': 'float', 'example': 3, 'description': 'Duration in seconds. Available values depend on the model:\n- hydra: 3, 3.5, 4, 4.5, 5\n- forge: 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5\n- forge-pixel: 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5\n- blitz: 1.2, 1.5, 2, 2.5, 3, 3.5, 4\n- eagle: 1, 2, 3, 4\n- eagle-audio: 1, 2, 3, 4 Default: 3.'}, 'frame_size': {'type': 'number', 'format': 'integer', 'example': 0, 'description': 'Size of each frame in pixels (width and height). 0 is for maximum resolution. -1 is for AI 1.5x upscaling. -9 is for matching the size and position of the input frame. Accepted values: 32, 64, 96, 128, 192, 256, 384, 0, -1, -9. Default: 0.'}, 'image_type': {'enum': ['sprite', 'sprite-vfx', 'item-icon', 'ui_asset', 'logo', 'sprite-tiling-horizontal', 'sprite-tiling-vertical', 'parallax_layer', 'tile', 'texture', 'portrait', 'card-art'], 'type': 'string', 'example': 'sprite', 'description': 'Type of sprite being animated. Affects generation parameters and styling. Default: "sprite".'}, 'request_id': {'type': 'string', 'description': '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.'}, 'final_image': {'type': 'string', 'example': '<url> OR data:image/png;base64,...', 'description': 'The url OR base64 of ending frame image. When provided, the animation will interpolate between the initial and final frames.'}, 'margin_ratio': {'type': 'number', 'format': 'float', 'deprecated': True, 'description': 'Deprecated: prefer margin_ratio_horizontal / margin_ratio_vertical. Amount of padding around the sprite as a ratio (0.0 to 1.0). Sets both axes to this value. A per-axis value, when also given, overrides this for that axis. Supplying any margin value selects margin_ratio_mode "manual" unless margin_ratio_mode is set explicitly.'}, 'initial_image': {'type': 'string', 'example': '<url> OR data:image/png;base64,...', 'description': 'The url OR base64 of the starting frame image to animate. This is the base sprite that will be brought to life.'}, 'motion_prompt': {'type': 'string', 'description': 'Text description of the desired animation, e.g. "walking", "idle breathing", "attack slash", "casting a fireball with both hands". Describe exactly and unambiguously what the character should do. Specific or complex actions are fine; there is no need to simplify them. Do not over-describe, though: too much detail can harm the animation, and an action the model already knows should be named, not decomposed into its steps ("walking", never "move the left foot forward, then the right foot"). Do not restate what initial_image already shows (the character, its appearance and equipment, the art style, the background, the lighting, the camera), and leave frame count and timing to the frames and duration fields. Negative phrasing ("no background", "do not move the camera", "without a weapon") works only on hydra. On forge, forge-pixel and the legacy models it backfires: naming something you do not want makes it more likely to appear, so "without a weapon" tends to produce a weapon. On those models never phrase anything negatively; state only what should happen, and control everything else through the image and the other fields.'}, 'augment_prompt': {'type': 'boolean', 'example': True, 'description': 'Augment the prompt behind the scenes. Disable to have more control. Incompatible with automatic framing: false requires margin_ratio_mode "manual" (with margin_ratio_horizontal and/or margin_ratio_vertical) or "none". Because margin_ratio_mode defaults to "auto", sending augment_prompt false on its own fails with HTTP 400. Default: true.'}, 'individual_frames': {'type': 'boolean', 'example': False, 'description': 'When true, extracts each frame from the spritesheet as an individual image and returns the URLs in individual_frame_urls. Default: false.'}, 'margin_ratio_mode': {'enum': ['auto', 'manual', 'none'], 'type': 'string', 'example': 'auto', 'description': 'Controls how margins are applied around the sprite. Omit it and send margin_ratio_horizontal / margin_ratio_vertical to get "manual" automatically. "manual" requires margin_ratio_horizontal and/or margin_ratio_vertical (or the legacy margin_ratio); sending "manual" with no margin value fails with HTTP 400. Sending "auto" or "none" explicitly together with a margin value fails with HTTP 400 (the value would be ignored). Default: "auto".'}, 'margin_ratio_vertical': {'type': 'number', 'format': 'float', 'description': 'Vertical padding around the sprite as a ratio (0.0 to 1.0). Useful for animations that extend up or down (e.g., jumps). Supplying a value selects margin_ratio_mode "manual" unless margin_ratio_mode is set explicitly; overrides the legacy margin_ratio on this axis.'}, 'margin_ratio_horizontal': {'type': 'number', 'format': 'float', 'description': 'Horizontal padding around the sprite as a ratio (0.0 to 1.0). Useful for animations that extend sideways (e.g., sword slashes, punches). Supplying a value selects margin_ratio_mode "manual" unless margin_ratio_mode is set explicitly; overrides the legacy margin_ratio on this axis.'}, 'spritesheet_with_background': {'type': 'boolean', 'example': False, 'description': 'When true, also returns the spritesheet with background intact (before background removal). Useful for manually fixing background removal issues. The with-background spritesheet URL will be in spritesheet_with_background_url. Default: false.'}}, 'description': 'Payload for generating an animated spritesheet from a static image. Input images can either be provided in base64 or URL. If the image was generated using Ludo, ideally it should be generated using the "sprite", "sprite-vfx" or "ui_asset" type.'}}}
Esquema de entrada
{'type': 'object', 'required': ['requestBody'], 'properties': {'requestBody': {'type': 'object', 'properties': {'gif': {'type': 'boolean', 'example': False, 'description': 'When true, generates an animated GIF from the spritesheet and returns it in gif_url. Disabled by default to reduce response time. Default: false.'}, 'crop': {'type': 'boolean', 'example': True, 'description': 'Crop sprite frames to fit content. Results in smaller spritesheets but inconsistent frame sizes across different animations. Default: true.'}, 'loop': {'type': 'boolean', 'example': True, 'description': 'Trim the animation at the beginning or end to create a seamless loop. Not guaranteed to produce a perfect loop. Default: true.'}, 'model': {'enum': ['hydra', 'forge', 'forge-pixel'], 'type': 'string', 'example': 'hydra', 'description': 'Model to use. Available models:\n- "hydra" (Hydra): 3 credits/s, min charge 9 credits · Most capable all-around model, generates audio\n- "forge" (Forge): 1.5 credits/s, min charge 4 credits · Sharper detail, simpler motion. Best for simple body shapes and short actions; may need a few tries\n- "forge-pixel" (Forge Pixel): 1.5 credits/s, min charge 4 credits · Best for low-res pixel art animations Default: "hydra".'}, 'frames': {'type': 'number', 'format': 'integer', 'example': 36, 'description': 'Number of frames in the output spritesheet. Accepted values: 4, 9, 16, 25, 36, 49, 64. Default: 36.'}, 'duration': {'type': 'number', 'format': 'float', 'example': 3, 'description': 'Duration in seconds. Available values depend on the model:\n- hydra: 3, 3.5, 4, 4.5, 5\n- forge: 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5\n- forge-pixel: 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5 Default: 3.'}, 'frame_size': {'type': 'number', 'format': 'integer', 'example': 0, 'description': 'Size of each frame in pixels (width and height). 0 is for maximum resolution. -1 is for AI 1.5x upscaling. -9 is for matching the size and position of the input frame. Accepted values: 32, 64, 96, 128, 192, 256, 384, 0, -1, -9. Default: 0.'}, 'image_type': {'enum': ['sprite', 'sprite-vfx', 'item-icon', 'ui_asset', 'logo', 'sprite-tiling-horizontal', 'sprite-tiling-vertical', 'parallax_layer', 'tile', 'texture', 'portrait', 'card-art'], 'type': 'string', 'example': 'sprite', 'description': 'Type of sprite being animated. Affects generation parameters and styling. Default: "sprite".'}, 'request_id': {'type': 'string', 'description': '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.'}, 'final_image': {'type': 'string', 'example': '<url> OR data:image/png;base64,...', 'description': 'The url OR base64 of the final keyframe. Requires an initial_image or middle_image to anchor the animation.'}, 'margin_ratio': {'type': 'number', 'format': 'float', 'deprecated': True, 'description': 'Deprecated: prefer margin_ratio_horizontal / margin_ratio_vertical. Amount of padding around the sprite as a ratio (0.0 to 1.0). Sets both axes to this value. A per-axis value, when also given, overrides this for that axis. Supplying any margin value selects margin_ratio_mode "manual" unless margin_ratio_mode is set explicitly.'}, 'middle_image': {'type': 'string', 'example': '<url> OR data:image/png;base64,...', 'description': 'The url OR base64 of the middle keyframe the animation passes through between the initial and final frames.'}, 'initial_image': {'type': 'string', 'example': '<url> OR data:image/png;base64,...', 'description': 'The url OR base64 of the first keyframe. Optional when a middle_image is provided.'}, 'motion_prompt': {'type': 'string', 'description': 'Optional text description of the desired animation, e.g. "walking", "attack slash". When omitted, the motion is derived purely from the keyframes. When provided, describe exactly and unambiguously what the character should do. Specific or complex actions are fine; there is no need to simplify them. Do not over-describe, though: too much detail can harm the animation, and an action the model already knows should be named, not decomposed into its steps ("walking", never "move the left foot forward, then the right foot"). Do not restate what the keyframes already show (the character, its appearance and equipment, the art style, the background, the lighting, the camera), and leave frame count and timing to the frames and duration fields. Negative phrasing ("no background", "do not move the camera", "without a weapon") works only on hydra. On forge and forge-pixel it backfires: naming something you do not want makes it more likely to appear, so "without a weapon" tends to produce a weapon. On those models never phrase anything negatively; state only what should happen, and control everything else through the keyframes and the other fields.'}, 'augment_prompt': {'type': 'boolean', 'example': True, 'description': 'Augment the prompt behind the scenes. Disable to have more control. Incompatible with automatic framing: false requires margin_ratio_mode "manual" (with margin_ratio_horizontal and/or margin_ratio_vertical) or "none". Because margin_ratio_mode defaults to "auto", sending augment_prompt false on its own fails with HTTP 400. Default: true.'}, 'individual_frames': {'type': 'boolean', 'example': False, 'description': 'When true, extracts each frame from the spritesheet as an individual image and returns the URLs in individual_frame_urls. Default: false.'}, 'margin_ratio_mode': {'enum': ['auto', 'manual', 'none'], 'type': 'string', 'example': 'auto', 'description': 'Controls how margins are applied around the sprite. Omit it and send margin_ratio_horizontal / margin_ratio_vertical to get "manual" automatically. "manual" requires margin_ratio_horizontal and/or margin_ratio_vertical (or the legacy margin_ratio); sending "manual" with no margin value fails with HTTP 400. Sending "auto" or "none" explicitly together with a margin value fails with HTTP 400 (the value would be ignored). Default: "auto".'}, 'margin_ratio_vertical': {'type': 'number', 'format': 'float', 'description': 'Vertical padding around the sprite as a ratio (0.0 to 1.0). Useful for animations that extend up or down (e.g., jumps). Supplying a value selects margin_ratio_mode "manual" unless margin_ratio_mode is set explicitly; overrides the legacy margin_ratio on this axis.'}, 'margin_ratio_horizontal': {'type': 'number', 'format': 'float', 'description': 'Horizontal padding around the sprite as a ratio (0.0 to 1.0). Useful for animations that extend sideways (e.g., sword slashes, punches). Supplying a value selects margin_ratio_mode "manual" unless margin_ratio_mode is set explicitly; overrides the legacy margin_ratio on this axis.'}, 'spritesheet_with_background': {'type': 'boolean', 'example': False, 'description': 'When true, also returns the spritesheet with background intact (before background removal). Useful for manually fixing background removal issues. The with-background spritesheet URL will be in spritesheet_with_background_url. Default: false.'}}, 'description': 'Payload for generating an animated spritesheet that interpolates through up to three fixed keyframes (initial / middle / final). Runs on hydra (default), forge or forge-pixel - the models supporting a middle keyframe. Input images can be provided in base64 or URL. At least one of initial_image or middle_image must be provided.'}}}
Esquema de entrada
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string'}}}
Esquema de entrada
{'type': 'object', 'required': ['requestBody'], 'properties': {'requestBody': {'type': 'object', 'required': ['image'], 'properties': {'image': {'type': 'string', 'example': '<url> OR data:image/png;base64,...', 'description': 'URL or base64-encoded image to convert to 3D, taken as the front view of the subject'}, 'back_image': {'type': 'string', 'example': '<url> OR data:image/png;base64,...', 'description': "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. No extra cost."}, 'request_id': {'type': 'string', 'description': '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.'}, 'texture_size': {'type': 'integer', 'example': 2048, 'description': 'Texture resolution in pixels Accepted values: 1024, 2048. Default: 2048.'}, 'texture_type': {'enum': ['pbr', 'simple', 'none'], 'type': 'string', 'example': 'pbr', 'description': 'Texture type Default: "pbr".'}, 'target_num_faces': {'type': 'integer', 'example': 50000, 'maximum': 200000, 'minimum': 1000, 'description': 'Maximum triangle count for the mesh (1000-200000) Default: 50000.'}}}}}
Esquema de entrada
{'type': 'object', 'required': ['requestBody'], 'properties': {'requestBody': {'type': 'object', 'required': ['description'], 'properties': {'loop': {'type': 'boolean', 'example': True, 'description': 'Generate an ambiance that loops seamlessly. Default: true.'}, 'duration': {'type': 'number', 'format': 'float', 'example': 0, 'maximum': 10, 'minimum': 0, 'description': 'Duration in seconds. Use 0 for automatic duration based on the description. Default: 0.'}, 'request_id': {'type': 'string', 'description': '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.'}, 'description': {'type': 'string', 'description': 'Text description of the ambiance to generate (e.g., "windy forest at dusk", "busy tavern interior").'}, 'augment_prompt': {'type': 'boolean', 'example': True, 'description': 'Augment the prompt behind the scenes. Disable to have more control. Default: true.'}}, 'description': 'Payload for generating a seamless looping ambiance soundscape from a text description'}}}
Esquema de entrada
{'type': 'object', 'required': ['requestBody'], 'properties': {'requestBody': {'type': 'object', 'required': ['sample', 'prompt'], 'properties': {'prompt': {'type': 'string', 'description': 'Text description guiding the remix (e.g., "make it sound like an 80s synthwave track", "turn this into a metal version").'}, 'sample': {'type': 'string', 'example': '<url> OR data:audio/mp3;base64,...', 'description': 'URL or base64-encoded source audio sample to remix (15MB max).'}, 'duration': {'type': 'integer', 'example': 0, 'description': 'Duration in seconds. Use 0 for automatic duration matching the source sample. Accepted values: 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180. Default: 0.'}, 'request_id': {'type': 'string', 'description': '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.'}, 'augment_prompt': {'type': 'boolean', 'example': True, 'description': 'Augment the prompt behind the scenes. Disable to have more control. Default: true.'}, 'modification_strength': {'type': 'number', 'format': 'float', 'example': 0.6, 'maximum': 1, 'minimum': 0, 'description': 'Controls how strongly the source sample is modified. 0 keeps it close to the original, 1 transforms it fully. Default: 0.6.'}}, 'description': 'Payload for remixing an audio sample (sound effect, ambiance or music) into a variation guided by a text prompt'}}}
Esquema de entrada
{'type': 'object', 'required': ['requestBody'], 'properties': {'requestBody': {'type': 'object', 'required': ['image_type', 'prompt'], 'properties': {'n': {'type': 'integer', 'format': 'integer', 'example': 1, 'maximum': 8, 'minimum': 1, 'description': 'Number of image variations to generate Default: 1.'}, 'prompt': {'type': 'string', 'description': 'Text description of the image to generate. The more detailed the prompt, the more accurate the image will be.'}, 'art_style': {'enum': ['Any style', 'Cel-Shaded', 'Inked Painterly', 'Illustration', 'Western Cartoon', 'Anime/Manga', 'Chibi', '8-Bit', '16-Bit', '32-Bit', 'Hi-Bit', 'Retro 2D', 'Hand-Painted', 'Digital Painting', 'Comic Book', 'Block Print', 'Sketch', 'Watercolor', 'Stylized 3D', 'Pixar Style', 'Low Poly', 'Photorealistic 3D', 'Voxel Art', 'Retro 3D', 'Flat Design', 'Minimalist', 'Silhouette', 'Noir', 'Neon', 'Glitch Art', 'Claymation', 'Paper Craft', 'Textile'], 'type': 'string', 'example': 'Any style', 'description': 'Visual art style for the sprite (e.g., "Pixel Art", "Cartoonish", "Realistic").'}, 'image_type': {'enum': ['generic', 'screenshot', 'art', 'asset', 'sprite', 'sprite-vfx', 'sprite-tiling-horizontal', 'sprite-tiling-vertical', 'icon', 'logo', 'ui_asset', 'fixed_background', 'side_scrolling_background', 'vertical_scrolling_background', 'parallax_layer', 'texture', 'tile', 'item-icon', 'portrait', 'card-art', 'splash', '3d'], 'type': 'string', 'example': 'generic', 'description': 'What kind of image to generate.'}, 'request_id': {'type': 'string', 'description': '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.'}, 'perspective': {'enum': ['Any perspective', 'Side-Scroll', 'Isometric', 'High Angle', 'Top-Down', '2.5D', 'First-Person', 'Third-Person', 'Over-the-Shoulder', 'Free Camera'], 'type': 'string', 'example': 'Any perspective', 'description': 'Camera angle/view for the sprite (e.g., "Side view", "Front view", "Isometric").'}, 'aspect_ratio': {'enum': ['default', 'ar_1_1', 'ar_4_3', 'ar_16_9', 'ar_19_9', 'ar_3_4', 'ar_9_16', 'ar_9_19'], 'type': 'string', 'example': 'default', 'description': 'Aspect ratio of the output image.'}, 'augment_prompt': {'type': 'boolean', 'example': True, 'description': 'Augment the prompt behind the scenes. Disable to have more control. Default: true.'}}, 'description': 'Payload for generating an image from text prompt'}}}
Esquema de entrada
{'type': 'object', 'required': ['requestBody'], 'properties': {'requestBody': {'type': 'object', 'required': ['description'], 'properties': {'lyrics': {'type': 'string', 'description': 'Optional lyrics to include in the generated music.'}, 'duration': {'type': 'integer', 'example': 0, 'description': 'Duration in seconds. Use 0 for automatic duration based on the description. Accepted values: 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180. Default: 0.'}, 'request_id': {'type': 'string', 'description': '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.'}, 'description': {'type': 'string', 'description': 'Text description of the music to generate (e.g., "epic orchestral battle theme", "calm piano melody").'}, 'augment_prompt': {'type': 'boolean', 'example': True, 'description': 'Augment the prompt behind the scenes. Disable to have more control. Default: true.'}}, 'description': 'Payload for generating music from a text description'}}}
Esquema de entrada
{'type': 'object', 'required': ['requestBody'], 'properties': {'requestBody': {'type': 'object', 'required': ['description'], 'properties': {'loop': {'type': 'boolean', 'example': False, 'description': 'Generate a sound effect that loops seamlessly. Default: false.'}, 'duration': {'type': 'number', 'format': 'float', 'example': 0, 'maximum': 10, 'minimum': 0, 'description': 'Duration in seconds. Use 0 for automatic duration based on the description. Default: 0.'}, 'request_id': {'type': 'string', 'description': '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.'}, 'description': {'type': 'string', 'description': 'Text description of the sound effect to generate (e.g., "laser gun firing", "footsteps on gravel").'}, 'augment_prompt': {'type': 'boolean', 'example': True, 'description': 'Augment the prompt behind the scenes. Disable to have more control. Default: true.'}}, 'description': 'Payload for generating a sound effect from a text description'}}}
Esquema de entrada
{'type': 'object', 'required': ['requestBody'], 'properties': {'requestBody': {'type': 'object', 'required': ['text', 'sample'], 'properties': {'text': {'type': 'string', 'maxLength': 1000, 'minLength': 1, 'description': 'Text to convert to speech (max 1000 characters).'}, 'sample': {'type': 'string', 'example': '<url> OR data:audio/mp3;base64,...', 'description': 'URL or base64-encoded audio sample for voice cloning.'}, 'request_id': {'type': 'string', 'description': '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.'}}, 'description': 'Payload for text-to-speech generation using voice cloning'}}}
Esquema de entrada
{'type': 'object', 'required': ['requestBody'], 'properties': {'requestBody': {'type': 'object', 'required': ['text', 'voice_preset_id'], 'properties': {'text': {'type': 'string', 'maxLength': 1000, 'description': 'Text to convert to speech (max 1000 characters).'}, 'emotion': {'enum': ['Default', 'Happy', 'Sad', 'Angry', 'Fearful', 'Disgusted', 'Surprised', 'Neutral'], 'type': 'string', 'example': 'Default', 'description': 'Emotion to apply to the speech.'}, 'language': {'enum': ['auto', 'English', 'Afrikaans', 'Arabic', 'Bulgarian', 'Catalan', 'Chinese', 'Chinese,Yue', 'Croatian', 'Czech', 'Danish', 'English', 'Filipino', 'Finnish', 'French', 'German', 'Greek', 'Hebrew', 'Hindi', 'Hungarian', 'Indonesian', 'Italian', 'Japanese', 'Korean', 'Malay', 'Norwegian', 'Nynorsk', 'Persian', 'Polish', 'Portuguese', 'Romanian', 'Russian', 'Slovak', 'Slovenian', 'Spanish', 'Swedish', 'Tamil', 'Thai', 'Turkish', 'Ukrainian', 'Vietnamese'], 'type': 'string', 'example': 'auto', 'description': 'Language code for the speech.'}, 'request_id': {'type': 'string', 'description': '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.'}, 'voice_preset_id': {'enum': ['Serious woman', 'Wise woman', 'Calm woman', 'Fast-paced woman', 'Calm young girl', 'Expressive teen girl', 'Calm teen girl', 'Sweet girl', 'Patient man', 'Determined man', 'Young elegant man', 'Teen boy', 'Friendly man', 'Deep voice man'], 'type': 'string', 'example': 'Serious woman', 'description': 'Voice preset identifier.'}}, 'description': 'Payload for text-to-speech generation using a voice preset'}}}
Esquema de entrada
{'type': 'object', 'required': ['requestBody'], 'properties': {'requestBody': {'type': 'object', 'required': ['spritesheet_video_url'], 'properties': {'prompt': {'type': 'string', 'description': 'Optional description of the sound to generate.'}, 'request_id': {'type': 'string', 'description': 'Optional client-provided identifier, unique per request. Re-sending the same request_id returns the existing job instead of generating again. It does not re-tag the spritesheet, which keeps the request_id it was generated with.'}, 'spritesheet_video_url': {'type': 'string', 'example': '<url>', 'description': 'The video_url of a spritesheet you generated in the last 7 days (returned by animateSprite, animateSpriteKeyframes, transferMotion, or editSpritesheet). External URLs are not accepted.'}}, 'description': 'Payload for generating audio for a previously generated spritesheet animation.'}}}
Esquema de entrada
{'type': 'object', 'required': ['requestBody'], 'properties': {'requestBody': {'type': 'object', 'required': ['image', 'prompt'], 'properties': {'image': {'type': 'string', 'example': '<url> OR data:image/png;base64,...', 'description': 'URL or base64-encoded source image (the starting frame for the video)'}, 'model': {'enum': ['griffin', 'griffin-hd', 'blitz', 'standard', 'eagle', 'eagle-audio'], 'type': 'string', 'example': 'griffin', 'description': 'Model to use. Available models:\n- "griffin" (Griffin): 1.5 credits/s, shortest duration 5s, so 7.5 credits minimum · Fast cinematic videos in any style, with audio, 480p\n- "griffin-hd" (Griffin HD): 2 credits/s, shortest duration 5s, so 10 credits minimum · Same as Griffin, but in 720p\n- "blitz" (Blitz): 1 credits/s, shortest duration 2s, so 2 credits minimum · LEGACY - scheduled for removal, do not use for new work\n- "eagle" (Eagle): 1.3 credits/s · LEGACY - scheduled for removal, do not use for new work\n- "eagle-audio" (Eagle with Audio): 1.8 credits/s · LEGACY - scheduled for removal, do not use for new work\nLegacy aliases: "standard" → blitz.\nModels marked LEGACY still work for existing integrations but will be removed; pick a current model for anything new. Default: "griffin".'}, 'prompt': {'type': 'string', 'description': 'Text description of the motion or action for the video (e.g., "walking forward", "waving hand", "camera zoom in")'}, 'duration': {'type': 'number', 'format': 'float', 'example': 5, 'description': 'Duration in seconds. Available values depend on the model:\n- griffin: 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15\n- griffin-hd: 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15\n- blitz: 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12\n- eagle: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15\n- eagle-audio: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 Default: 5.'}, 'request_id': {'type': 'string', 'description': '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.'}, 'final_image': {'type': 'string', 'example': '<url> OR data:image/png;base64,...', 'description': 'URL or base64-encoded end frame image. When provided, the video will interpolate between the initial and final frames.'}, 'augment_prompt': {'type': 'boolean', 'example': True, 'description': 'Augment the prompt behind the scenes. Disable to have more control. Default: true.'}}, 'description': 'Payload for generating a video from a source image and motion prompt'}}}
Esquema de entrada
{'type': 'object', 'required': ['requestBody'], 'properties': {'requestBody': {'type': 'object', 'required': ['prompt', 'images'], 'properties': {'model': {'enum': ['griffin', 'griffin-hd', 'eagle', 'eagle-audio'], 'type': 'string', 'example': 'griffin', 'description': 'Model to use. Available models:\n- "griffin" (Griffin): 2.5 credits/s, shortest duration 5s, so 12.5 credits minimum · Fast cinematic videos in any style, with audio, 480p\n- "griffin-hd" (Griffin HD): 4 credits/s, shortest duration 5s, so 20 credits minimum · Same as Griffin, but in 720p\n- "eagle" (Eagle): 1.5 credits/s · LEGACY - scheduled for removal, do not use for new work\n- "eagle-audio" (Eagle with Audio): 2 credits/s · LEGACY - scheduled for removal, do not use for new work\nModels marked LEGACY still work for existing integrations but will be removed; pick a current model for anything new. Default: "griffin".'}, 'images': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 5, 'minItems': 1, 'description': 'Reference images (1 to 5), each a URL or base64. The generated video borrows characters, objects, and style from them.'}, 'prompt': {'type': 'string', 'description': 'Text description of the video to generate.'}, 'duration': {'type': 'number', 'format': 'float', 'example': 5, 'description': 'Duration in seconds. Available values depend on the model:\n- griffin: 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15\n- griffin-hd: 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15\n- eagle: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15\n- eagle-audio: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 Default: 5.'}, 'request_id': {'type': 'string', 'description': '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.'}, 'aspect_ratio': {'enum': ['default', 'ar_1_1', 'ar_16_9', 'ar_9_16', 'ar_4_3', 'ar_3_4', 'ar_21_9'], 'type': 'string', 'example': 'default', 'description': 'Output aspect ratio. "default" lets the model choose. Default: "default".'}}, 'description': 'Payload for generating a video from 1-5 reference images and a text prompt.'}}}
Esquema de entrada
{'type': 'object', 'required': ['requestBody'], 'properties': {'requestBody': {'type': 'object', 'required': ['voice_description', 'text'], 'properties': {'text': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Text for the voice to speak (max 200 characters).'}, 'type': {'enum': ['human', 'non-human'], 'type': 'string', 'example': 'human', 'description': 'Type of voice to generate. Default: "human".'}, 'request_id': {'type': 'string', 'description': '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.'}, 'augment_prompt': {'type': 'boolean', 'example': True, 'description': 'Augment the prompt behind the scenes. Disable to have more control. Default: true.'}, 'voice_description': {'type': 'string', 'description': 'Text description of the voice character (e.g., "deep-voiced warrior", "cheerful young girl").'}}, 'description': 'Payload for generating a voice sample from a character description'}}}
Esquema de entrada
{'type': 'object', 'required': ['requestBody'], 'properties': {'requestBody': {'type': 'object', 'required': ['image', 'prompt'], 'properties': {'n': {'type': 'number', 'format': 'integer', 'example': 1, 'maximum': 4, 'minimum': 1, 'description': 'Number of edited variations to generate (1-4). Default: 1.'}, 'image': {'type': 'string', 'example': '<url> OR data:image/png;base64,...', 'description': 'URL or base64-encoded source image to edit.'}, 'prompt': {'type': 'string', 'description': 'Text description of the changes to make (e.g., "remove the background", "add clouds to the sky", "make it darker", "change the color scheme to warmer tones").'}, 'image_type': {'enum': ['generic', 'screenshot', 'art', 'asset', 'sprite', 'sprite-vfx', 'sprite-tiling-horizontal', 'sprite-tiling-vertical', 'icon', 'logo', 'ui_asset', 'fixed_background', 'side_scrolling_background', 'vertical_scrolling_background', 'parallax_layer', 'texture', 'tile', 'item-icon', 'portrait', 'card-art', 'splash', '3d'], 'type': 'string', 'example': 'sprite', 'description': 'What kind of image the source is (e.g. "sprite"). Not needed when `image` is the URL of an image you generated on Ludo in the last 30 days, which keeps its own type. Set it when you pass base64 or an external URL, so a sprite is edited as a sprite and keeps its transparent background.'}, 'request_id': {'type': 'string', 'description': '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.'}, 'augment_prompt': {'type': 'boolean', 'example': True, 'description': 'Augment the prompt behind the scenes. Disable to have more control. Default: true.'}, 'reference_image': {'type': 'string', 'example': '<url> OR data:image/png;base64,...', 'description': 'Optional URL or base64-encoded reference image for style or content guidance.'}}, 'description': 'Payload for editing an existing image based on text instructions'}}}
Esquema de entrada
{'type': 'object', 'required': ['requestBody'], 'properties': {'requestBody': {'type': 'object', 'required': ['spritesheet_url'], 'properties': {'gif': {'type': 'boolean', 'example': False, 'description': 'When true, generates an animated GIF from the spritesheet and returns it in gif_url. Disabled by default to reduce response time. Default: false.'}, 'crop': {'type': 'boolean', 'description': "Crop sprite frames to fit content (omit to keep the source spritesheet's setting). Results in smaller spritesheets but inconsistent frame sizes across different animations."}, 'loop': {'type': 'boolean', 'description': 'Trim the animation at the beginning or end to create a seamless loop. Default: true.'}, 'model': {'enum': ['hydra', 'forge', 'forge-pixel'], 'type': 'string', 'description': 'Model to use. Available models:\n- "hydra" (Hydra): 3 credits/s, min charge 9 credits · Most capable all-around model, generates audio\n- "forge" (Forge): 2 credits/s, min charge 4 credits · Sharper detail, simpler motion. Best for simple body shapes and short actions; may need a few tries\n- "forge-pixel" (Forge Pixel): 2 credits/s, min charge 4 credits · Best for low-res pixel art animations Default: "hydra".'}, 'frames': {'type': 'number', 'format': 'integer', 'description': "Number of frames in the output spritesheet. Omit to keep the source spritesheet's frame count. Accepted values: 4, 9, 16, 25, 36, 49, 64."}, 'images': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 5, 'description': 'Optional reference images (up to 5), each a URL or base64, to guide the edit.'}, 'prompt': {'type': 'string', 'description': 'Edit instruction. Required for edit_mode "prompt", optional for "outpaint", not accepted for "fix_loop".'}, 'duration': {'type': 'number', 'format': 'float', 'description': 'Duration in seconds. Available values depend on the model:\n- hydra: 3, 3.5, 4, 4.5, 5\n- forge: 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5\n- forge-pixel: 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5'}, 'edit_mode': {'enum': ['prompt', 'outpaint', 'fix_loop'], 'type': 'string', 'example': 'prompt', 'description': 'Edit operation to perform. Default: "prompt".'}, 'frame_size': {'type': 'number', 'format': 'integer', 'description': "Size of each frame in pixels (width and height). 0 is for maximum resolution. Omit to keep the source spritesheet's frame size. Accepted values: 32, 64, 96, 128, 192, 256, 384, 0."}, 'request_id': {'type': 'string', 'description': '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.'}, 'spritesheet_url': {'type': 'string', 'example': '<url>', 'description': 'URL of a spritesheet you generated in the last 7 days (returned by animateSprite, transferMotion, or a previous edit as spritesheet_url). External URLs are not accepted.'}, 'individual_frames': {'type': 'boolean', 'example': False, 'description': 'When true, extracts each frame from the spritesheet as an individual image and returns the URLs in individual_frame_urls. Default: false.'}, 'spritesheet_with_background': {'type': 'boolean', 'example': False, 'description': 'When true, also returns the spritesheet with background intact (before background removal). The with-background spritesheet URL will be in spritesheet_with_background_url. Default: false.'}}, 'description': 'Payload for editing a previously generated spritesheet. edit_mode selects the operation - prompt-driven edit (default), outpaint, or loop fixing.'}}}
Esquema de entrada
{'type': 'object', 'required': ['requestBody'], 'properties': {'requestBody': {'type': 'object', 'required': ['prompt', 'video'], 'properties': {'model': {'enum': ['griffin-hd', 'eagle'], 'type': 'string', 'example': 'griffin-hd', 'description': 'Model to use. Available models:\n- "griffin-hd" (Griffin HD): 2 credits/s, shortest duration 5s, so 10 credits minimum · Same as Griffin, but in 720p\n- "eagle" (Eagle): 2 credits/s · LEGACY - scheduled for removal, do not use for new work\nModels marked LEGACY still work for existing integrations but will be removed; pick a current model for anything new. Default: "griffin-hd".'}, 'video': {'type': 'string', 'description': 'URL of a video you generated in the last 7 days (returned by createVideo, createVideoFromReferences, or a previous edit). External URLs are not accepted.'}, 'images': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 5, 'description': 'Optional reference images (up to 5), each a URL or base64, to guide the edit.'}, 'prompt': {'type': 'string', 'description': 'Edit instruction describing the desired change.'}, 'duration': {'type': 'number', 'format': 'float', 'description': 'Duration in seconds. Available values depend on the model:\n- griffin-hd: 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15\n- eagle: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15'}, 'request_id': {'type': 'string', 'description': '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.'}}, 'description': 'Payload for editing a previously generated video with a text prompt and optional reference images.'}}}
Esquema de entrada
{'type': 'object', 'required': ['requestBody'], 'properties': {'requestBody': {'type': 'object', 'required': ['image', 'pose'], 'properties': {'n': {'type': 'number', 'format': 'integer', 'example': 1, 'maximum': 4, 'minimum': 1, 'description': 'Number of pose variations to generate (1-4). Default: 1.'}, 'pose': {'enum': ['Idle (Front)', 'Idle (Back)', 'Idle (Left Facing)', 'Idle (Right Facing)', 'Walk (Left)', 'Walk (Right)', 'Walk (Towards the camera)', 'Walk (Away from the camera)', 'Run (Left)', 'Run (Right)', 'Run (Towards the camera)', 'Run (Away from the camera)', 'Crouching', 'Crawling', 'Sitting', 'Defending / Blocking', 'Attack Ready', 'Jump Preparation', 'Sleeping', 'Flying', 'Other'], 'type': 'string', 'example': 'Idle (Front)', 'description': 'Target pose for the sprite. Use the value "Other" to generate other poses not listed in the accepted values, and fill the field description accordingly.'}, 'image': {'type': 'string', 'example': '<url> OR data:image/png;base64,...', 'description': 'URL or base64-encoded source sprite image to generate a new pose from.'}, 'request_id': {'type': 'string', 'description': '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.'}, 'description': {'type': 'string', 'description': 'Optional additional instructions or description to guide the pose generation.'}, 'augment_prompt': {'type': 'boolean', 'example': True, 'description': 'Augment the prompt behind the scenes. Disable to have more control. Default: true.'}}, 'description': 'Payload for generating a new pose for an existing sprite'}}}
Esquema de entrada
{'type': 'object', 'required': ['requestBody'], 'properties': {'requestBody': {'type': 'object', 'required': ['style_image', 'prompt'], 'properties': {'n': {'type': 'number', 'format': 'integer', 'example': 1, 'maximum': 4, 'minimum': 1, 'description': 'Number of variations to generate (1-4). Default: 1.'}, 'prompt': {'type': 'string', 'description': 'Text description of what to generate (e.g., "a warrior character", "a forest background", "a treasure chest").'}, 'image_type': {'enum': ['generic', 'screenshot', 'art', 'asset', 'sprite', 'sprite-vfx', 'sprite-tiling-horizontal', 'sprite-tiling-vertical', 'icon', 'logo', 'ui_asset', 'fixed_background', 'side_scrolling_background', 'vertical_scrolling_background', 'parallax_layer', 'texture', 'tile', 'item-icon', 'portrait', 'card-art', 'splash', '3d'], 'type': 'string', 'example': 'sprite', 'description': 'What kind of image to generate. Default: "sprite".'}, 'request_id': {'type': 'string', 'description': '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.'}, 'style_image': {'type': 'string', 'example': '<url> OR data:image/png;base64,...', 'description': 'URL or base64-encoded reference image whose visual style should be matched.'}, 'augment_prompt': {'type': 'boolean', 'example': True, 'description': 'Augment the prompt behind the scenes. Disable to have more control. Default: true.'}}, 'description': 'Payload for generating new content while maintaining the visual style of a reference image'}}}
Esquema de entrada
{'type': 'object', 'required': [], 'properties': {}}
Esquema de entrada
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'The job id returned by a generation call (its `id` in the 202 response).'}, 'wait': {'type': 'integer', 'format': 'int32', 'description': 'Seconds to long-poll for a terminal state (0-60). Defaults to 0 (return immediately).'}}}
Esquema de entrada
{'type': 'object', 'required': [], 'properties': {'doc': {'enum': ['assistant', 'game-ideator', 'image-generator', 'project', 'account', 'faq', '3d-generator', 'video-generator', 'sprite-generator', 'audio-generator', 'api-mcp', 'game-asset-generation'], 'type': 'string', 'description': 'Which document to read, by id (the table of contents returned by the no-parameter call lists them). Omit to receive the table of contents.'}, 'sections': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Section titles to return from `doc`, copied from the table of contents (an array of titles; over plain REST, a comma-separated string, where a title that itself contains a comma is still matched whole). Matching ignores case, spacing and punctuation; titles that match nothing are reported back in `unmatched_sections` rather than guessed at. Only valid together with `doc`. Omit to return every section of the document.'}}}
Esquema de entrada
{'type': 'object', 'required': [], 'properties': {}}
Esquema de entrada
{'type': 'object', 'required': [], 'properties': {'limit': {'type': 'integer', 'format': 'int32', 'description': 'Maximum number of jobs to return. Defaults to 50, capped at 100.'}, 'status': {'type': 'string', 'description': 'Comma-separated statuses to include (queued, running, succeeded, failed, canceled). Defaults to all.'}}}
Esquema de entrada
{'type': 'object', 'required': ['type'], 'properties': {'type': {'enum': ['image', 'spritesheet', 'video', 'audio', '3d'], 'type': 'string', 'description': 'Which kind of generation to list'}, 'search': {'type': 'string', 'description': 'Free-text search. Every whitespace-separated term must match (case-insensitive substring) the item\'s tags or one of its text fields (prompt, hints, style, label, ...), so "dwarf axe" narrows to items matching both.'}, 'source': {'enum': ['api', 'web', 'all'], 'type': 'string', 'description': 'Which surface the items were generated from: api (your API/MCP generations, last 7 days only), web (your Ludo web studio generations, no time limit), or all (default, both) Default: "all".'}, 'date_to': {'type': 'integer', 'description': 'Only return items generated at or before this time (unix seconds)'}, 'date_from': {'type': 'integer', 'description': 'Only return items generated at or after this time (unix seconds)'}, 'page_size': {'type': 'integer', 'description': 'Items per page (1-100) Default: 20.'}, 'request_id': {'type': 'string', 'description': 'Only return items tagged with this request_id when you generated them'}, 'page_number': {'type': 'integer', 'description': '1-based page number Default: 1.'}}}
Esquema de entrada
{'type': 'object', 'required': ['requestBody'], 'properties': {'requestBody': {'type': 'object', 'required': ['image'], 'properties': {'crop': {'type': 'boolean', 'example': False, 'description': 'Whether to crop/trim the result to fit the content. Default: false.'}, 'image': {'type': 'string', 'example': '<url> OR data:image/png;base64,...', 'description': 'URL or base64-encoded image to remove the background from.'}, 'request_id': {'type': 'string', 'description': '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.'}, 'creative_edit': {'type': 'boolean', 'example': True, 'description': 'Higher quality results but the image will not be exactly the same as the input. Default: true.'}}, 'description': 'Payload for removing the background of an image'}}}
Esquema de entrada
{'type': 'object', 'required': ['requestBody'], 'properties': {'requestBody': {'type': 'object', 'required': ['model'], 'properties': {'model': {'type': 'string', 'example': '<url> OR data:model/gltf-binary;base64,...', 'description': 'The 3D asset to rig, as a URL or base64-encoded GLB file (not an AI model name).'}, 'rig_type': {'enum': ['general', 'humanoid', 'game', 'humanoid_template', 'humanoid_template_hands'], 'type': 'string', 'example': 'general', 'description': 'Which skeleton to build. Pick humanoid_template (or humanoid_template_hands) if you intend to use animate3DModelPreset later - the default general rig cannot take presets. general (any asset), humanoid (anime-style characters), game (classic game-character rigs), or the pinned humanoid templates with named joints required for the animation preset library - humanoid_template (22 joints) / humanoid_template_hands (52, five fingers per hand). Templates only suit two-armed, two-legged characters. Default: "general".'}, 'request_id': {'type': 'string', 'description': '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.'}, 'joint_naming': {'enum': ['smpl', 'mixamo', 'humanik', 'unreal', 'godot', 'rigify', 'vroid'], 'type': 'string', 'example': 'smpl', 'description': 'Bone naming convention for the identified joints: smpl (default), mixamo (Unity\'s humanoid auto-mapper), humanik (same names unprefixed - Maya/MotionBuilder/FBX), unreal (UE mannequin), godot (SkeletonProfileHumanoid), rigify (Blender) or vroid (VRM). Purely a relabel - the skeleton is identical. Default: "smpl".'}}}}}
Esquema de entrada
{'type': 'object', 'required': ['requestBody'], 'properties': {'requestBody': {'type': 'object', 'required': ['image', 'camera_rotation'], 'properties': {'n': {'type': 'number', 'format': 'integer', 'example': 1, 'maximum': 4, 'minimum': 1, 'description': 'Number of variations to generate (1-4). Default: 1.'}, 'image': {'type': 'string', 'example': '<url> OR data:image/png;base64,...', 'description': 'URL or base64-encoded source sprite image to rotate.'}, 'request_id': {'type': 'string', 'description': '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.'}, 'augment_prompt': {'type': 'boolean', 'example': True, 'description': 'Augment the prompt behind the scenes. Disable to have more control. Default: true.'}, 'camera_rotation': {'type': 'integer', 'example': 0, 'description': 'Camera azimuth angle in degrees. 0 = front, 45 = front-right, 90 = right side, 135 = back-right, 180 = back, -135 = back-left, -90 = left side, -45 = front-left. Accepted values: 0, 45, 90, 135, 180, -135, -90, -45.'}, 'camera_elevation': {'type': 'integer', 'example': 0, 'description': "Optional camera elevation/tilt in degrees. 0 = eye-level, 30 = elevated, 60 = high-angle. Omit to keep the sprite's current elevation. Accepted values: 0, 30, 60."}}, 'description': 'Payload for rotating the camera view of an existing sprite'}}}
Esquema de entrada
{'type': 'object', 'required': ['query'], 'properties': {'n': {'type': 'integer', 'format': 'int32', 'maximum': 10, 'minimum': 1, 'description': 'Maximum number of sections to return. Defaults to 3.'}, 'query': {'type': 'string', 'maxLength': 500, 'minLength': 1, 'description': 'What you want to know, in plain language, e.g. "how do I keep a sprite animation\'s colors consistent" or "what does a 3D model cost".'}}}
Esquema de entrada
{'type': 'object', 'required': ['requestBody'], 'properties': {'requestBody': {'type': 'object', 'required': ['category', 'message'], 'properties': {'agent': {'type': 'string', 'maxLength': 100, 'description': 'The agent or app sending it, e.g. Claude Code.'}, 'job_id': {'type': 'string', 'maxLength': 64, 'description': 'The job the feedback is about, when there is one.'}, 'message': {'type': 'string', 'maxLength': 4000, 'minLength': 1, 'description': 'What you were trying to do, what happened, and what would have helped.'}, 'category': {'enum': ['limitation', 'bug', 'feature_request', 'praise', 'other'], 'type': 'string', 'example': 'limitation', 'description': 'bug - the API errored, a job failed or got stuck, or a response did not match the documentation; limitation - the API does not support a parameter, operation or format you needed; feature_request - a new API capability you would like; praise - something that worked well; other - any other API issue. Generated content that looks wrong or does not match the prompt is a model limitation, not a bug: do not report it.'}, 'operation': {'type': 'string', 'maxLength': 100, 'description': 'The operation the feedback is about, e.g. animateSprite.'}}}}}
Esquema de entrada
{'type': 'object', 'required': ['requestBody'], 'properties': {'requestBody': {'type': 'object', 'required': ['image'], 'properties': {'gif': {'type': 'boolean', 'example': False, 'description': 'When true, generates an animated GIF from the spritesheet and returns it in gif_url. Disabled by default to reduce response time. Default: false.'}, 'crop': {'type': 'boolean', 'example': True, 'description': 'Crop sprite frames to fit content. Results in smaller spritesheets but inconsistent frame sizes across different animations. Default: true.'}, 'loop': {'type': 'boolean', 'example': True, 'description': 'Trim the animation at the beginning or end to create a seamless loop. Default: true.'}, 'image': {'type': 'string', 'example': '<url> OR data:image/png;base64,...', 'description': 'The static sprite to animate, as a URL or base64 image. Ideally an image generated with the "sprite", "sprite-vfx" or "ui_asset" image type.'}, 'model': {'enum': ['hydra', 'forge', 'forge-pixel', 'tango'], 'type': 'string', 'example': 'hydra', 'description': 'Model to use. Available models:\n- "hydra" (Hydra): 3 credits/s, min charge 9 credits · Most capable all-around model, generates audio\n- "forge" (Forge): 2 credits/s, min charge 4 credits · Sharper detail, simpler motion. Best for simple body shapes and short actions; may need a few tries\n- "forge-pixel" (Forge Pixel): 2 credits/s, min charge 4 credits · Best for low-res pixel art animations\n- "tango" (Tango): 4 credits/s, min charge 4 credits · LEGACY - scheduled for removal, do not use for new work\nModels marked LEGACY still work for existing integrations but will be removed; pick a current model for anything new. Default: "hydra".'}, 'video': {'type': 'string', 'description': 'URL of the video to use as motion source - the `video_url` of a spritesheet from animateSprite, or your own clip. Videos up to 4 seconds work best. Either `video` or `preset_id` + `perspective` + `direction` must be provided; when both are sent the video is used.'}, 'frames': {'type': 'number', 'format': 'integer', 'example': 36, 'description': 'Number of frames in the output spritesheet. Accepted values: 4, 9, 16, 25, 36, 49, 64. Default: 36.'}, 'prompt': {'type': 'string', 'description': 'Optional extra instructions for the motion transfer (e.g. "keep the cape still"), added to the model\'s own prompt.'}, 'duration': {'type': 'number', 'format': 'float', 'example': 1.5, 'description': 'Duration in seconds. If the reference video is longer, it will be compressed to this duration. Available values depend on the model:\n- hydra: 3, 3.5, 4, 4.5, 5\n- forge: 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5\n- forge-pixel: 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5\n- tango: 1, 1.5, 2, 2.5, 3, 3.5, 4 Default: 1.5.'}, 'direction': {'enum': ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'], 'type': 'string', 'example': 'N', 'description': 'Direction for the animation preset. When using a preset, `direction` is required.'}, 'preset_id': {'type': 'string', 'description': 'ID of an animation preset to use instead of a video URL. Use listAnimationPresets to list available presets. When using a preset, `perspective` and `direction` are required.'}, 'frame_size': {'type': 'number', 'format': 'integer', 'example': 0, 'description': 'Size of each frame in pixels (width and height). 0 is for maximum resolution. Accepted values: 32, 64, 96, 128, 192, 256, 384, 0. Default: 0.'}, 'request_id': {'type': 'string', 'description': '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.'}, 'perspective': {'enum': ['high', 'horizon', 'isometric', 'low', 'top'], 'type': 'string', 'example': 'high', 'description': 'Camera perspective of the preset clip, by id (the `perspectives` list of listAnimationPresets, the same set for every preset): high = tactical steep top-down, horizon = side view at eye level, isometric = diagonal top-down with depth, low = hero low angle, top = directly overhead. Required when using a preset. Unrelated to the `perspective` of createImage, which is a free-text art direction.'}, 'margin_ratio': {'type': 'number', 'format': 'float', 'deprecated': True, 'description': 'Deprecated: prefer margin_ratio_horizontal / margin_ratio_vertical. Amount of padding around the sprite as a ratio (0.0 to 1.0). Sets both axes to this value. A per-axis value, when also given, overrides this for that axis. Defaults to 0.15 when no margin value is given at all.'}, 'individual_frames': {'type': 'boolean', 'example': False, 'description': 'When true, extracts each frame from the spritesheet as an individual image and returns the URLs in individual_frame_urls. Default: false.'}, 'margin_ratio_mode': {'enum': ['manual', 'none'], 'type': 'string', 'example': 'manual', 'description': 'Controls how margins are applied around the sprite. Defaults to "manual". Sending "none" explicitly together with a margin value fails with HTTP 400 (the value would be ignored). Default: "manual".'}, 'margin_ratio_vertical': {'type': 'number', 'format': 'float', 'description': 'Vertical padding around the sprite as a ratio (0.0 to 1.0). Useful for animations that extend up or down (e.g., jumps). Overrides the legacy margin_ratio on this axis.'}, 'margin_ratio_horizontal': {'type': 'number', 'format': 'float', 'description': 'Horizontal padding around the sprite as a ratio (0.0 to 1.0). Useful for animations that extend sideways (e.g., sword slashes, punches). Overrides the legacy margin_ratio on this axis.'}, 'spritesheet_with_background': {'type': 'boolean', 'example': False, 'description': 'When true, also returns the spritesheet with background intact (before background removal). Useful for manually fixing background removal issues. The with-background spritesheet URL will be in spritesheet_with_background_url. Default: false.'}}, 'description': 'Payload for transferring motion from a video onto a static sprite image, producing an animated spritesheet.'}}}
Esquema de entrada
{'type': 'object', 'required': ['requestBody'], 'properties': {'requestBody': {'type': 'object', 'required': ['video'], 'properties': {'video': {'type': 'string', 'description': 'URL of a video you generated in the last 7 days (returned by createVideo, createVideoFromReferences, or editVideo). External URLs are not accepted. Both dimensions must be under 960 pixels (griffin 480p output qualifies; griffin-hd 720p output does not, except square).'}, 'request_id': {'type': 'string', 'description': '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.'}}, 'description': 'Payload for upscaling a previously generated video to twice its resolution.'}}}
Esquema de entrada
{'type': 'object', 'required': [], 'properties': {}}
Cambios recientes en herramientas
Servidores MCP similares
GripForge
Generates, rigs, animates, analyzes, and packages game characters, weapons, armor, effects, environments, and engine-ready assets.
spriteship
Generates and manages 2D game characters, assets, animations, tilesets, UI packs, maps, and engine-ready exports for multiple gam…
Retro Diffusion Pixel Art
Generates pixel-art sprites, animations, and tilesets.
3DAssets.dev
Searches and delivers free CC0 GLB models and game asset packs, with licensing details, CDN links, scene layouts, and loader usag…
AXIS Avatar Foundry
Generates, repairs, rigs, validates, retargets, compares, and exports production-ready 3D avatars and meshes for game platforms.
Polyfork low-poly 3D assets
Searches, previews and composes low-poly 3D assets and kits for three.js and game engines, including terrain, variants, scene pre…
Spritesheet Forge
Converts, trims, splits, assembles, and animates PNG, GIF, and spritesheet assets for game development.
Portamora
Allows users to discover published atmospheric 3D worlds, inspect world metadata and guides, and obtain starter materials for bui…