Server definition
- Hash
- sha256:32331510db7ce3999c1b965e4382a7450f144137bf6d986b164edc70f2b05201
- What it is
- What a remote MCP server returned when asked what it offers: 33 tools
The blob, as servednamed by its sha256
{
"instructions": "Authenticate first by calling authenticate(api_key), or pass rd_api_key directly on each tool call. For the highest quality stills prefer RD Pro styles (rd_pro__*); they support per-inference reference_images (up to 9) for character/style consistency, and most (rd_pro__default, painterly, fantasy, horror, scifi, simple, isometric, topdown, platformer) go as small as 12x12 px for tiny sprites and icons, and rd_pro__pixelate converts an input_image down to 16x16 px — check list_available_styles for each style's exact limits. To animate an existing sprite prefer the advanced animation styles (rd_advanced_animation__walking/idle/jump/crouch/attack/destroy/custom_action/subtle_motion) started via start_inference_job and polled with get_inference_job — animations are long-running. rd_advanced_animation__rotate turns one sprite into its 8 directional views instead of motion (prompt optional, frames_duration ignored; GIF by default, return_spritesheet=true for the 3x3 direction sheet). Use fix_pixel_art on enlarged, softened, or AI-rendered pixel art to recover its native pixel grid. Post-process results with run_edit_tool: background_remover, color_style_transfer are $0.01; color_reducer, palette_converter, pixel_correction, k_centroid_downscale, rotate are free; image_edit, inpainting, outpainting, seam_tiling are premium. Before create_inference, use list_available_styles or get_style_usage(prompt_style) to confirm whether you should send input_image, per-inference reference_images, or style_reference_images. create_inference returns hosted output_urls and a request_id; if delivery is pending, call get_inference_result(request_id) and never repeat the paid generation automatically. estimate_inference_cost and estimate_edit_tool_cost are always free — check prices before spending. For 3D, use the Low-Poly tools: start_lowpoly_generate builds a low-poly model with pixel-art textures (sizes 16-256 or auto; $0.25-$3.00), then poll get_lowpoly_job; start_lowpoly_revise changes it (new version), start_lowpoly_animate adds motion (the first animation rigs it for free), start_lowpoly_split breaks a scene into separate models (one per object, animations included), and export_lowpoly_model returns .glb/.bbmodel/Minecraft/OBJ/GIF download URLs. 3D jobs take minutes, so never restart one that is still running.",
"tools": [
{
"description": "Authenticate this MCP session with a RetroDiffusion public API key.",
"inputSchema": {
"properties": {
"api_key": {
"description": "RetroDiffusion API key (rdpk-...), created free at https://retrodiffusion.ai/app/devtools.",
"type": "string"
}
},
"required": [
"api_key"
],
"type": "object"
},
"name": "authenticate",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Generate images using the public /v2/inferences endpoint.\n\nFor the highest quality prefer RD Pro styles (rd_pro__*); they support reference_images for\ncharacter/style consistency, and most go as small as 12x12 px (check list_available_styles\nfor each style's limits) — a small target size is never a reason to switch to a cheaper\nmodel family. Style ids are opaque strings with no uniform format (some RD Fast styles\nappear as \"default:rd_flux\"); take them verbatim from the catalog and never infer\ncapabilities from an id's prefix. For animation styles prefer start_inference_job +\nget_inference_job instead — animations are long-running, and a failed animation is worth\none retry with identical parameters (failures auto-refund).\n\nField-tested workflow rules: N distinct items = N individually usable images (separate\ncalls or num_images=N), never one sheet/grid image unless a sheet IS the deliverable.\nVariants of ONE image (seasons, day/night, palettes) = generate the base once, then derive\neach variant with the image_edit tool (\"... keep the exact same composition\") — independent\ngenerations of the \"same\" scene come out unrelated. Converting an existing image INTO pixel\nart is rd_pro__pixelate with input_image (16-256 px output, batch<=16);\nreference_images-based generation re-imagines rather than converts. To animate an image you already have, use rd_advanced_animation__*\nwith input_image (fixed-format rd_animation__* styles generate their own subject from the\nprompt instead). To get the other directional views of a sprite you already have, use\nrd_advanced_animation__rotate with input_image (same 8-direction layout as rd_animation__8_dir_rotation).\n\nUse `input_image` for the main source image, `reference_images` for extra per-inference\nguidance, and `style_reference_images` only on create_user_style/update_user_style.\nThe response excludes raw base64 image payloads to keep MCP outputs compact.",
"inputSchema": {
"properties": {
"bypass_prompt_expansion": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Skip the automatic LLM prompt enrichment and use the prompt verbatim."
},
"extra_input_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Second base64 input image for styles that use one (e.g. the second texture in rd_tile__tileset_advanced)."
},
"extra_prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Secondary prompt for styles that use one (e.g. the transition texture in advanced tilesets)."
},
"frames_duration": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Animation frame count for animation styles: 4, 6, 8, 10, 12, or 16. Pick deliberately: 8 is the sweet spot for loops (walking, idle), 6 for a snappy single action, 10-12 for flowing ambient motion. Ignored by rd_advanced_animation__rotate (always 8 views)."
},
"height": {
"description": "Output height in pixels. Each style enforces its own limits; check list_available_styles or get_style_usage.",
"type": "integer"
},
"include_downloadable_data": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Include extra structured assets when available (e.g. tileset atlas JSON, animation frame data)."
},
"input_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Base64 PNG used as the main source image for edits, variations, tilesets, animations, or styles that require a starting frame. Raw base64 or a data URL. Send the NATIVE-resolution image: an upscaled display copy (e.g. a 96px sprite exported at 4x = 384px) exceeds style ranges and gets rejected — downscale to the true pixel grid first. For advanced animations the frame's dimensions must equal width/height, and sprites whose opaque pixels touch the canvas edge animate badly (pad onto a larger transparent canvas first, e.g. 48x48 content onto 64x64)."
},
"input_palette": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Base64 image of a color palette; output colors are constrained to it."
},
"num_images": {
"default": 1,
"description": "How many images to generate in one batch; a batch produces varied takes of one prompt (the right way to get N distinct items as individually usable images — never pack N items into a single sheet/grid image unless a sheet IS the deliverable). Style-specific maximums apply.",
"type": "integer"
},
"prompt": {
"description": "Describe the SUBJECT only, richly and concretely ('a squat round flask of glowing crimson liquid, cork stopper, bright highlight on the upper-left rim' beats 'a potion'). Never write 'pixel art' — the selected style handles all rendering. For standalone assets, state a flat background color that contrasts the subject (default 'on a plain white background') and pair with remove_bg=true; never write 'transparent background' (that is remove_bg's job), and never leave the background unstated (it drifts to drab dark gray). Scenes instead describe their real environment. For rd_advanced_animation__rotate the prompt is only an optional hint describing the uploaded subject — a few words or an empty string.",
"type": "string"
},
"prompt_style": {
"description": "Style id from list_available_styles (e.g. 'rd_fast__default', 'rd_pro__isometric', or a custom 'user__...' style).",
"type": "string"
},
"rd_api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "RetroDiffusion API key (rdpk-...) for this call only; overrides session or header auth."
},
"reference_images": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Extra per-inference guidance images (base64), only for styles where supports_reference_images is true. Not for defining custom styles."
},
"remove_bg": {
"default": false,
"description": "Remove the background for transparent output. Use true for standalone assets and pair it with a stated contrasting background in the prompt ('on a plain white background') — removal works best on flat contrasting backdrops. Animations inherit the start frame's transparency automatically.",
"type": "boolean"
},
"return_non_bg_removed": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Also return the render from before background removal was applied."
},
"return_pre_palette": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Also return the render from before palette constraints were applied."
},
"return_spritesheet": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "For animation styles: return a PNG sprite sheet instead of a GIF (for rd_advanced_animation__rotate, the 3x3 direction sheet whose views face the center)."
},
"seed": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Seed for reproducible results; reuse the same seed to iterate on one composition."
},
"strength": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "How strongly to change input_image, 0-1 (default 0.75). Lower values keep more of the original."
},
"tile_x": {
"default": false,
"description": "Make the result tile seamlessly on the horizontal axis.",
"type": "boolean"
},
"tile_y": {
"default": false,
"description": "Make the result tile seamlessly on the vertical axis.",
"type": "boolean"
},
"timeout_seconds": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Read-timeout override in seconds for this call; increase for animations or large batches."
},
"upload_outputs": {
"default": true,
"description": "Host outputs and return URLs in output_urls (recommended for MCP clients) instead of only base64 payloads.",
"type": "boolean"
},
"upscale_output_factor": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Integer upscale factor for the output image; 1 returns the native pixel size."
},
"width": {
"description": "Output width in pixels. Each style enforces its own limits; check list_available_styles or get_style_usage. Genre-native sizes per item: Minecraft 16; items/icons/props 32-64; character sprites 16-48 retro or 96-128 showcase; tiles 16-32; portraits 96-128; full scenes 256 (RD Pro's max; 16:9 scenes = 256x144 — pixel art integer-upscales losslessly).",
"type": "integer"
}
},
"required": [
"prompt",
"prompt_style",
"width",
"height"
],
"type": "object"
},
"name": "create_inference",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Create a user style from the public RD Pro template using /v2/styles.\n\nUse `style_reference_images` and `style_reference_caption` for style-level references.\nThese are baked into the custom style and are not the same as per-inference `reference_images`.",
"inputSchema": {
"properties": {
"apply_prompt_fixer": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Let the API tidy prompts automatically for this style (default true)."
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Short description of the custom style."
},
"expanded_llm_instructions": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Extended instructions for the prompt-expansion LLM."
},
"force_bg_removal": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Always remove backgrounds for this style."
},
"force_palette": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Always apply palette constraining for this style."
},
"llm_instructions": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Instructions for the prompt-expansion LLM when this style is used."
},
"min_height": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Force a fixed height (96-256); must be provided together with min_width."
},
"min_width": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Force a fixed width (96-256); must be provided together with min_height."
},
"name": {
"description": "Display name for the custom style.",
"type": "string"
},
"rd_api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "RetroDiffusion API key (rdpk-...) for this call only; overrides session or header auth."
},
"reference_caption": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Alias for style_reference_caption on this tool; prefer style_reference_caption and never provide both."
},
"reference_images": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Alias for style_reference_images on this tool; prefer style_reference_images and never provide both."
},
"style_icon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Icon name for the style (e.g. 'sparkles')."
},
"style_reference_caption": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Caption describing the style reference image(s)."
},
"style_reference_images": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Style-level reference image(s), base64, baked into the custom style (max 1 via the public API)."
},
"user_prompt_template": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Prompt template for the style; must contain the {prompt} token."
}
},
"required": [
"name"
],
"type": "object"
},
"name": "create_user_style",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Delete one animation from a Low-Poly model's version (free) and return the model. The rig stays, so animating\nagain needs no new rig. This cannot be undone.",
"inputSchema": {
"properties": {
"animation": {
"description": "The animation's name, as listed on the version.",
"type": "string"
},
"asset_id": {
"description": "asset_id returned by start_lowpoly_generate or get_lowpoly_job.",
"type": "string"
},
"rd_api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "RetroDiffusion API key (rdpk-...) for this call only; overrides session or header auth."
},
"version": {
"description": "The version the animation belongs to.",
"type": "integer"
}
},
"required": [
"asset_id",
"version",
"animation"
],
"type": "object"
},
"name": "delete_lowpoly_animation",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Delete a user style using /v2/styles/{style_id}.\nstyle_id can be either internal id or prompt_style/public_id.",
"inputSchema": {
"properties": {
"rd_api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "RetroDiffusion API key (rdpk-...) for this call only; overrides session or header auth."
},
"style_id": {
"description": "Style id — the internal id or the prompt_style/public id (e.g. user__mystyle_ab12).",
"type": "string"
}
},
"required": [
"style_id"
],
"type": "object"
},
"name": "delete_user_style",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Validate an edit-tool request and estimate its cost and duration without running it. Always free.",
"inputSchema": {
"properties": {
"color_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "color_reducer: target number of colors."
},
"dither_mode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "color_reducer/palette_converter: dithering mode."
},
"dither_strength": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "color_reducer/palette_converter: dithering strength, 0-10 (0 disables, default 5)."
},
"expand_bottom": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Outpainting: pixels to add on the bottom edge."
},
"expand_left": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Outpainting: pixels to add on the left edge."
},
"expand_right": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Outpainting: pixels to add on the right edge."
},
"expand_top": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Outpainting: pixels to add on the top edge."
},
"extra_input_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Second base64 input image for styles that use one (e.g. the second texture in rd_tile__tileset_advanced)."
},
"force_solid_pixels": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "background_remover: force fully solid or fully transparent pixels (tool default applies when omitted)."
},
"height": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "k_centroid_downscale: target height in pixels (required for that tool)."
},
"input_image": {
"description": "Base64 PNG of the image to edit (raw base64 or a data URL). Required by every edit tool.",
"type": "string"
},
"input_palette": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Base64 image of a color palette; output colors are constrained to it."
},
"mask_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Base64 mask for inpainting: white pixels are regenerated, black pixels are kept."
},
"prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "What to generate or change (required by image_edit and inpainting; optional for outpainting)."
},
"rd_api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "RetroDiffusion API key (rdpk-...) for this call only; overrides session or header auth."
},
"repair_window_size": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "seam_tiling: size of the repair window."
},
"rotation_degrees": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "rotate: rotation angle in degrees (clean-edge pixel rotation)."
},
"seam_width": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "seam_tiling: width in pixels of the seam band to repair."
},
"soft_inpaint": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Inpainting/outpainting: blend edits softly with the surrounding pixels."
},
"tile_x": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "seam_tiling: repair the horizontal seam (tool default applies when omitted)."
},
"tile_y": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "seam_tiling: repair the vertical seam (tool default applies when omitted)."
},
"timeout_seconds": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Read-timeout override in seconds for this call; increase for animations or large batches."
},
"tool_id": {
"description": "Edit tool id. One of: image_edit, inpainting, outpainting, seam_tiling, background_remover, color_style_transfer, color_reducer, palette_converter, pixel_correction, k_centroid_downscale, rotate. Use list_edit_tools for authoritative fields, costs, and limits.",
"type": "string"
},
"transparency_threshold": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "background_remover: alpha threshold for treating pixels as transparent."
},
"width": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "k_centroid_downscale: target width in pixels (required for that tool)."
}
},
"required": [
"tool_id",
"input_image"
],
"type": "object"
},
"name": "estimate_edit_tool_cost",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Estimate generation cost using the public /v2/inferences endpoint with check_cost=true.\n\nUse `input_image` for the main source image, `reference_images` for extra per-inference guidance,\nand `style_reference_images` only on create_user_style/update_user_style.",
"inputSchema": {
"properties": {
"bypass_prompt_expansion": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Skip the automatic LLM prompt enrichment and use the prompt verbatim."
},
"extra_input_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Second base64 input image for styles that use one (e.g. the second texture in rd_tile__tileset_advanced)."
},
"extra_prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Secondary prompt for styles that use one (e.g. the transition texture in advanced tilesets)."
},
"frames_duration": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Animation frame count for animation styles: 4, 6, 8, 10, 12, or 16. Pick deliberately: 8 is the sweet spot for loops (walking, idle), 6 for a snappy single action, 10-12 for flowing ambient motion. Ignored by rd_advanced_animation__rotate (always 8 views)."
},
"height": {
"description": "Output height in pixels. Each style enforces its own limits; check list_available_styles or get_style_usage.",
"type": "integer"
},
"include_downloadable_data": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Include extra structured assets when available (e.g. tileset atlas JSON, animation frame data)."
},
"input_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Base64 PNG used as the main source image for edits, variations, tilesets, animations, or styles that require a starting frame. Raw base64 or a data URL. Send the NATIVE-resolution image: an upscaled display copy (e.g. a 96px sprite exported at 4x = 384px) exceeds style ranges and gets rejected — downscale to the true pixel grid first. For advanced animations the frame's dimensions must equal width/height, and sprites whose opaque pixels touch the canvas edge animate badly (pad onto a larger transparent canvas first, e.g. 48x48 content onto 64x64)."
},
"input_palette": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Base64 image of a color palette; output colors are constrained to it."
},
"num_images": {
"default": 1,
"description": "How many images to generate in one batch; a batch produces varied takes of one prompt (the right way to get N distinct items as individually usable images — never pack N items into a single sheet/grid image unless a sheet IS the deliverable). Style-specific maximums apply.",
"type": "integer"
},
"prompt": {
"description": "Describe the SUBJECT only, richly and concretely ('a squat round flask of glowing crimson liquid, cork stopper, bright highlight on the upper-left rim' beats 'a potion'). Never write 'pixel art' — the selected style handles all rendering. For standalone assets, state a flat background color that contrasts the subject (default 'on a plain white background') and pair with remove_bg=true; never write 'transparent background' (that is remove_bg's job), and never leave the background unstated (it drifts to drab dark gray). Scenes instead describe their real environment. For rd_advanced_animation__rotate the prompt is only an optional hint describing the uploaded subject — a few words or an empty string.",
"type": "string"
},
"prompt_style": {
"description": "Style id from list_available_styles (e.g. 'rd_fast__default', 'rd_pro__isometric', or a custom 'user__...' style).",
"type": "string"
},
"rd_api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "RetroDiffusion API key (rdpk-...) for this call only; overrides session or header auth."
},
"reference_images": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Extra per-inference guidance images (base64), only for styles where supports_reference_images is true. Not for defining custom styles."
},
"return_non_bg_removed": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Also return the render from before background removal was applied."
},
"return_pre_palette": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Also return the render from before palette constraints were applied."
},
"return_spritesheet": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "For animation styles: return a PNG sprite sheet instead of a GIF (for rd_advanced_animation__rotate, the 3x3 direction sheet whose views face the center)."
},
"strength": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "How strongly to change input_image, 0-1 (default 0.75). Lower values keep more of the original."
},
"timeout_seconds": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Read-timeout override in seconds for this call; increase for animations or large batches."
},
"upscale_output_factor": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Integer upscale factor for the output image; 1 returns the native pixel size."
},
"width": {
"description": "Output width in pixels. Each style enforces its own limits; check list_available_styles or get_style_usage. Genre-native sizes per item: Minecraft 16; items/icons/props 32-64; character sprites 16-48 retro or 96-128 showcase; tiles 16-32; portraits 96-128; full scenes 256 (RD Pro's max; 16:9 scenes = 256x144 — pixel art integer-upscales losslessly).",
"type": "integer"
}
},
"required": [
"prompt",
"prompt_style",
"width",
"height"
],
"type": "object"
},
"name": "estimate_inference_cost",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Price a Low-Poly job without starting it (free). For generate with size auto, returns the size auto would pick.\nstyle prices a generate in that style (Lite styles cost less); other operations use the model's own style.",
"inputSchema": {
"properties": {
"asset_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Required for revise, animate, split and rerig."
},
"operation": {
"default": "generate",
"description": "generate, revise, animate, split or rerig.",
"type": "string"
},
"prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "What to build or change, up to 250 characters."
},
"rd_api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "RetroDiffusion API key (rdpk-...) for this call only; overrides session or header auth."
},
"size": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Cube size in texels: \"16\", \"32\", \"64\", \"128\", \"256\", or \"auto\" (default). Auto reads the prompt; reference-image-only requests default to 64. Bigger sizes cost more (see get_lowpoly_pricing)."
},
"style": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Low-Poly style id: rd_lowpoly__detailed (default, free-form shapes), rd_lowpoly__blocky (boxes only, tilted where needed, Minecraft-like), their Lite versions rd_lowpoly__detailed_lite / rd_lowpoly__blocky_lite (a lighter model: simpler results for much less, and Lite prices for everything done to the model later), or another style listed by get_lowpoly_pricing (each style lists its prices)."
}
},
"type": "object"
},
"name": "estimate_lowpoly_cost",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Export a Low-Poly model for an engine or tool and return a hosted download URL (free).\nEngines (Godot, Unity, Unreal, three.js) and Blender get .glb; Blockbench gets .bbmodel; Minecraft gets a\nresource pack; .glb and .bbmodel include every animation. Animated GIFs, sprite sheets and MP4 videos need an\nanimation name from the model.",
"inputSchema": {
"properties": {
"animation": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Animation name for the gif, sheet and mp4 targets. Omit it for gif or sheet to get every animation in one zip."
},
"asset_id": {
"description": "asset_id returned by start_lowpoly_generate or get_lowpoly_job.",
"type": "string"
},
"rd_api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "RetroDiffusion API key (rdpk-...) for this call only; overrides session or header auth."
},
"target": {
"description": "godot, unity, unreal, web, blender (all .glb), blockbench (.bbmodel), obj (zip), minecraft (resource pack zip), atlas (png), turntable (png), axis_views (zip of 6 pixel-exact PNGs, one per axis direction), gif, sheet or mp4 (1024px video) (need an animation). The .glb and .bbmodel files include every animation.",
"type": "string"
},
"version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Version number to work on (default: the newest). Revisions create versions; animations do not."
}
},
"required": [
"asset_id",
"target"
],
"type": "object"
},
"name": "export_lowpoly_model",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Recover the native pixel grid from enlarged, softened, AI-rendered, or compressed pixel art.\n\nStandard uses the native Rust detector. Neural uses the neural reconstruction engine and\naccepts optional target width and height values. This repairs existing art—it does not generate\na new image. Both engines are free and share a limit of 10 requests per minute per API token.\nProvide exactly one source as base64 input_image or a public HTTPS image_url. URL input avoids\nthe ALB request-body limit. Decoded images may contain up to 16 megapixels. Successful response\nJSON is limited to 850,000 bytes for AWS ALB compatibility.",
"inputSchema": {
"properties": {
"engine": {
"default": "standard",
"description": "Fixer engine. Standard uses the native Rust detector; neural uses the neural reconstruction engine.",
"enum": [
"standard",
"neural"
],
"type": "string"
},
"height": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional neural target dimension in pixels. Accepted only with engine='neural'."
},
"image_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Public HTTPS PNG or JPEG URL to reconstruct. Provide this or input_image, not both. URL downloads may contain up to 20 MB and bypass the API request-body limit."
},
"input_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Base64 PNG or JPEG to reconstruct at its native pixel grid. Raw base64 or a data URL; provide this or image_url, not both. Decoded input may contain up to 16 megapixels, and complete base64 request JSON must stay within 900,000 bytes."
},
"rd_api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "RetroDiffusion API key (rdpk-...) for this call only; overrides session or header auth."
},
"timeout_seconds": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Read-timeout override in seconds for this call; increase for animations or large batches."
},
"width": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional neural target dimension in pixels. Accepted only with engine='neural'."
}
},
"type": "object"
},
"name": "fix_pixel_art",
"outputSchema": {
"additionalProperties": {
"items": {
"type": "string"
},
"type": "array"
},
"type": "object"
}
},
{
"description": "Get credits/balance using the public /v2/inferences/credits endpoint.",
"inputSchema": {
"properties": {
"rd_api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "RetroDiffusion API key (rdpk-...) for this call only; overrides session or header auth."
}
},
"type": "object"
},
"name": "get_balance",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Check the status of an async generation started with start_inference_job.\n\nStatuses: pending, running, succeeded, failed. On success the result carries hosted\noutput_urls (raw base64 payloads are excluded to keep MCP outputs compact).",
"inputSchema": {
"properties": {
"rd_api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "RetroDiffusion API key (rdpk-...) for this call only; overrides session or header auth."
},
"task_id": {
"description": "Async job id returned by start_inference_job.",
"type": "string"
}
},
"required": [
"task_id"
],
"type": "object"
},
"name": "get_inference_job",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Retrieve retained outputs for a synchronous generation.\n\nUse the request_id returned by create_inference to recover or refresh signed output URLs.\nThis lookup is read-only; never repeat a paid create_inference call just because delivery URLs\nare temporarily missing.",
"inputSchema": {
"properties": {
"rd_api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "RetroDiffusion API key (rdpk-...) for this call only; overrides session or header auth."
},
"request_id": {
"description": "Inference request id returned by create_inference.",
"type": "string"
}
},
"required": [
"request_id"
],
"type": "object"
},
"name": "get_inference_result",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Status of a Low-Poly job: pending, running, succeeded or failed. On success, the model with its versions,\nrender URLs and animations. Poll every 10-20 seconds; jobs take minutes.",
"inputSchema": {
"properties": {
"rd_api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "RetroDiffusion API key (rdpk-...) for this call only; overrides session or header auth."
},
"task_id": {
"description": "Async job id returned by start_inference_job.",
"type": "string"
}
},
"required": [
"task_id"
],
"type": "object"
},
"name": "get_lowpoly_job",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "A Low-Poly model: status, versions (render URLs, animations) and any running job.",
"inputSchema": {
"properties": {
"asset_id": {
"description": "asset_id returned by start_lowpoly_generate or get_lowpoly_job.",
"type": "string"
},
"rd_api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "RetroDiffusion API key (rdpk-...) for this call only; overrides session or header auth."
}
},
"required": [
"asset_id"
],
"type": "object"
},
"name": "get_lowpoly_model",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Low-Poly (3D) sizes, prices per operation (generate / revise / animate), styles, limits and export targets. Free.",
"inputSchema": {
"properties": {
"rd_api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "RetroDiffusion API key (rdpk-...) for this call only; overrides session or header auth."
}
},
"type": "object"
},
"name": "get_lowpoly_pricing",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Check RetroDiffusion subsystem health (/v2/status, no auth). Useful before bulk generation runs.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "get_service_status",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Explain how to use a public prompt_style from the RetroDiffusion API.\n\nUse this before create_inference if you are unsure whether a style expects `input_image`,\nsupports per-inference `reference_images`, or whether you meant style-level `style_reference_images`.",
"inputSchema": {
"properties": {
"prompt_style": {
"description": "Style id from list_available_styles (e.g. 'rd_fast__default', 'rd_pro__isometric', or a custom 'user__...' style).",
"type": "string"
},
"rd_api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "RetroDiffusion API key (rdpk-...) for this call only; overrides session or header auth."
}
},
"required": [
"prompt_style"
],
"type": "object"
},
"name": "get_style_usage",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Return unique public model identifiers available in /v2/styles/selector.",
"inputSchema": {
"properties": {
"rd_api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "RetroDiffusion API key (rdpk-...) for this call only; overrides session or header auth."
}
},
"type": "object"
},
"name": "list_available_models",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "List publicly available styles from /v2/styles/selector.\nUse this to discover valid prompt_style values plus style metadata such as require_input_image and supports_reference_images.",
"inputSchema": {
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter styles by model: rd_fast, rd_plus, rd_pro, or rd_mini."
},
"rd_api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "RetroDiffusion API key (rdpk-...) for this call only; overrides session or header auth."
},
"tab": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter styles by tab: tab:image, tab:animation, tab:advanced-animation, or tab:tileset."
}
},
"type": "object"
},
"name": "list_available_styles",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "List the enabled canvas edit tools from /v2/edit/tools with their fields, costs, and limits.\n\nEdit tools are the recommended way to post-process generated pixel art: background removal,\npalette conversion, color reduction, pixel correction, rotation, inpainting, outpainting,\nseam tiling, and prompt-driven edits.",
"inputSchema": {
"properties": {
"rd_api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "RetroDiffusion API key (rdpk-...) for this call only; overrides session or header auth."
}
},
"type": "object"
},
"name": "list_edit_tools",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "List your most recent async jobs, newest first (GET /v2/inferences/tasks).\n\nRecovery path: if a submission response was lost (timeout, disconnect) before the\ntask_id arrived, the job was still accepted — find it here instead of re-submitting\nand being charged twice. Then poll it with get_inference_job.",
"inputSchema": {
"properties": {
"limit": {
"default": 20,
"description": "Maximum number of recent jobs to return (1-100, default 20).",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"rd_api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "RetroDiffusion API key (rdpk-...) for this call only; overrides session or header auth."
},
"status": {
"anyOf": [
{
"enum": [
"pending",
"running",
"succeeded",
"failed"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional: only return jobs with this status."
}
},
"type": "object"
},
"name": "list_inference_jobs",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "The account's Low-Poly models, newest first.",
"inputSchema": {
"properties": {
"limit": {
"default": 20,
"description": "How many models to return (newest first).",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"rd_api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "RetroDiffusion API key (rdpk-...) for this call only; overrides session or header auth."
}
},
"type": "object"
},
"name": "list_lowpoly_models",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Clear the authenticated RetroDiffusion API key for this MCP session.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "logout",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Recolor a Low-Poly model's textures with the image color tools and save the result as a new version\n(returns the model). Color Reducer and Palette Converter are free; Color Style Transfer costs $0.01.\nLater revisions and animations keep the new colors.",
"inputSchema": {
"properties": {
"asset_id": {
"description": "asset_id returned by start_lowpoly_generate or get_lowpoly_job.",
"type": "string"
},
"color_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "color_reducer: how many colors, 2-256 (omit for automatic)."
},
"dither_mode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "none | bayer_2x2 | bayer_4x4 | bayer_8x8 (color_reducer, palette_converter)."
},
"dither_strength": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Dithering strength, 0-10 (default 5)."
},
"palette_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Base64 image of a color palette; output colors are constrained to it."
},
"rd_api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "RetroDiffusion API key (rdpk-...) for this call only; overrides session or header auth."
},
"reference_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "color_style_transfer: base64 reference image."
},
"tool": {
"description": "color_reducer (limit the colors), palette_converter (convert to a palette image) or color_style_transfer (take a reference image's color style).",
"type": "string"
},
"version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Version number to work on (default: the newest). Revisions create versions; animations do not."
}
},
"required": [
"asset_id",
"tool"
],
"type": "object"
},
"name": "recolor_lowpoly_model",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Run a canvas edit tool on an image via /v2/edit/tools/{tool_id}.\n\nFree tools: color_reducer, palette_converter, pixel_correction, k_centroid_downscale, rotate.\n$0.01 tools: background_remover, color_style_transfer. Premium ($0.18): image_edit, inpainting,\noutpainting, seam_tiling. Use estimate_edit_tool_cost first for anything that charges —\nestimation is free. The edited image is returned in base64_images.",
"inputSchema": {
"properties": {
"color_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "color_reducer: target number of colors."
},
"dither_mode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "color_reducer/palette_converter: dithering mode."
},
"dither_strength": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "color_reducer/palette_converter: dithering strength, 0-10 (0 disables, default 5)."
},
"expand_bottom": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Outpainting: pixels to add on the bottom edge."
},
"expand_left": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Outpainting: pixels to add on the left edge."
},
"expand_right": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Outpainting: pixels to add on the right edge."
},
"expand_top": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Outpainting: pixels to add on the top edge."
},
"extra_input_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Second base64 input image for styles that use one (e.g. the second texture in rd_tile__tileset_advanced)."
},
"force_solid_pixels": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "background_remover: force fully solid or fully transparent pixels (tool default applies when omitted)."
},
"height": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "k_centroid_downscale: target height in pixels (required for that tool)."
},
"input_image": {
"description": "Base64 PNG of the image to edit (raw base64 or a data URL). Required by every edit tool.",
"type": "string"
},
"input_palette": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Base64 image of a color palette; output colors are constrained to it."
},
"mask_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Base64 mask for inpainting: white pixels are regenerated, black pixels are kept."
},
"prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "What to generate or change (required by image_edit and inpainting; optional for outpainting)."
},
"rd_api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "RetroDiffusion API key (rdpk-...) for this call only; overrides session or header auth."
},
"repair_window_size": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "seam_tiling: size of the repair window."
},
"rotation_degrees": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "rotate: rotation angle in degrees (clean-edge pixel rotation)."
},
"seam_width": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "seam_tiling: width in pixels of the seam band to repair."
},
"seed": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Seed for reproducible results; reuse the same seed to iterate on one composition."
},
"soft_inpaint": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Inpainting/outpainting: blend edits softly with the surrounding pixels."
},
"tile_x": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "seam_tiling: repair the horizontal seam (tool default applies when omitted)."
},
"tile_y": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "seam_tiling: repair the vertical seam (tool default applies when omitted)."
},
"timeout_seconds": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Read-timeout override in seconds for this call; increase for animations or large batches."
},
"tool_id": {
"description": "Edit tool id. One of: image_edit, inpainting, outpainting, seam_tiling, background_remover, color_style_transfer, color_reducer, palette_converter, pixel_correction, k_centroid_downscale, rotate. Use list_edit_tools for authoritative fields, costs, and limits.",
"type": "string"
},
"transparency_threshold": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "background_remover: alpha threshold for treating pixels as transparent."
},
"width": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "k_centroid_downscale: target width in pixels (required for that tool)."
}
},
"required": [
"tool_id",
"input_image"
],
"type": "object"
},
"name": "run_edit_tool",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Start a generation as an async job (POST /v2/inferences with async=true) and return a task_id.\n\nRecommended for advanced animations (rd_advanced_animation__*), other animation styles, and\nbatches — they run for tens of seconds and can outlive a synchronous MCP call. Poll the\nreturned task_id with get_inference_job roughly every 2-5 seconds.",
"inputSchema": {
"properties": {
"bypass_prompt_expansion": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Skip the automatic LLM prompt enrichment and use the prompt verbatim."
},
"extra_input_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Second base64 input image for styles that use one (e.g. the second texture in rd_tile__tileset_advanced)."
},
"extra_prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Secondary prompt for styles that use one (e.g. the transition texture in advanced tilesets)."
},
"frames_duration": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Animation frame count for animation styles: 4, 6, 8, 10, 12, or 16. Pick deliberately: 8 is the sweet spot for loops (walking, idle), 6 for a snappy single action, 10-12 for flowing ambient motion. Ignored by rd_advanced_animation__rotate (always 8 views)."
},
"height": {
"description": "Output height in pixels. Each style enforces its own limits; check list_available_styles or get_style_usage.",
"type": "integer"
},
"include_downloadable_data": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Include extra structured assets when available (e.g. tileset atlas JSON, animation frame data)."
},
"input_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Base64 PNG used as the main source image for edits, variations, tilesets, animations, or styles that require a starting frame. Raw base64 or a data URL. Send the NATIVE-resolution image: an upscaled display copy (e.g. a 96px sprite exported at 4x = 384px) exceeds style ranges and gets rejected — downscale to the true pixel grid first. For advanced animations the frame's dimensions must equal width/height, and sprites whose opaque pixels touch the canvas edge animate badly (pad onto a larger transparent canvas first, e.g. 48x48 content onto 64x64)."
},
"input_palette": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Base64 image of a color palette; output colors are constrained to it."
},
"num_images": {
"default": 1,
"description": "How many images to generate in one batch; a batch produces varied takes of one prompt (the right way to get N distinct items as individually usable images — never pack N items into a single sheet/grid image unless a sheet IS the deliverable). Style-specific maximums apply.",
"type": "integer"
},
"prompt": {
"description": "Describe the SUBJECT only, richly and concretely ('a squat round flask of glowing crimson liquid, cork stopper, bright highlight on the upper-left rim' beats 'a potion'). Never write 'pixel art' — the selected style handles all rendering. For standalone assets, state a flat background color that contrasts the subject (default 'on a plain white background') and pair with remove_bg=true; never write 'transparent background' (that is remove_bg's job), and never leave the background unstated (it drifts to drab dark gray). Scenes instead describe their real environment. For rd_advanced_animation__rotate the prompt is only an optional hint describing the uploaded subject — a few words or an empty string.",
"type": "string"
},
"prompt_style": {
"description": "Style id from list_available_styles (e.g. 'rd_fast__default', 'rd_pro__isometric', or a custom 'user__...' style).",
"type": "string"
},
"rd_api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "RetroDiffusion API key (rdpk-...) for this call only; overrides session or header auth."
},
"reference_images": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Extra per-inference guidance images (base64), only for styles where supports_reference_images is true. Not for defining custom styles."
},
"remove_bg": {
"default": false,
"description": "Remove the background for transparent output. Use true for standalone assets and pair it with a stated contrasting background in the prompt ('on a plain white background') — removal works best on flat contrasting backdrops. Animations inherit the start frame's transparency automatically.",
"type": "boolean"
},
"return_non_bg_removed": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Also return the render from before background removal was applied."
},
"return_pre_palette": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Also return the render from before palette constraints were applied."
},
"return_spritesheet": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "For animation styles: return a PNG sprite sheet instead of a GIF (for rd_advanced_animation__rotate, the 3x3 direction sheet whose views face the center)."
},
"seed": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Seed for reproducible results; reuse the same seed to iterate on one composition."
},
"strength": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "How strongly to change input_image, 0-1 (default 0.75). Lower values keep more of the original."
},
"tile_x": {
"default": false,
"description": "Make the result tile seamlessly on the horizontal axis.",
"type": "boolean"
},
"tile_y": {
"default": false,
"description": "Make the result tile seamlessly on the vertical axis.",
"type": "boolean"
},
"timeout_seconds": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Read-timeout override in seconds for this call; increase for animations or large batches."
},
"upload_outputs": {
"default": true,
"description": "Host outputs and return URLs in output_urls (recommended for MCP clients) instead of only base64 payloads.",
"type": "boolean"
},
"upscale_output_factor": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Integer upscale factor for the output image; 1 returns the native pixel size."
},
"width": {
"description": "Output width in pixels. Each style enforces its own limits; check list_available_styles or get_style_usage. Genre-native sizes per item: Minecraft 16; items/icons/props 32-64; character sprites 16-48 retro or 96-128 showcase; tiles 16-32; portraits 96-128; full scenes 256 (RD Pro's max; 16:9 scenes = 256x144 — pixel art integer-upscales losslessly).",
"type": "integer"
}
},
"required": [
"prompt",
"prompt_style",
"width",
"height"
],
"type": "object"
},
"name": "start_inference_job",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Add an animation to a Low-Poly model version, or change an existing one by passing its name as animation\n(paid, priced by size). The first animation rigs the model for free. Animations attach to the version; they do\nnot create a new version. Poll get_lowpoly_job(task_id).",
"inputSchema": {
"properties": {
"animation": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of an existing animation on the version to change instead of adding a new one (it keeps its name). Omit to add a new animation."
},
"asset_id": {
"description": "asset_id returned by start_lowpoly_generate or get_lowpoly_job.",
"type": "string"
},
"idempotency_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional retry key: repeating a start call with the same key returns the same job instead of charging again."
},
"mode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Omit (auto) to let the service pick: quality, or fast for simple requests. \"quality\" or \"fast\" to choose. Same price."
},
"prompt": {
"description": "The motion, e.g. 'a bouncy walk cycle' or 'swing the sword overhead'. With animation: what should change about it.",
"type": "string"
},
"rd_api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "RetroDiffusion API key (rdpk-...) for this call only; overrides session or header auth."
},
"version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Version number to work on (default: the newest). Revisions create versions; animations do not."
}
},
"required": [
"asset_id",
"prompt"
],
"type": "object"
},
"name": "start_lowpoly_animate",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Start building a low-poly 3D model with pixel-art textures from a prompt and/or reference images (paid).\nreference_models puts your existing models (by asset_id) into it exactly, e.g. \"a tavern with my table\".\nOptional input_palette (a palette image, as for create_inference): the model uses only its colors, and\nrevisions and animations keep them.\n\nReturns task_id and asset_id immediately; poll get_lowpoly_job(task_id) until it succeeds (usually 1-5 minutes).\nThen use export_lowpoly_model for .glb/.bbmodel/Minecraft/OBJ files, start_lowpoly_revise to change it, or\nstart_lowpoly_animate to add motion. Failed jobs are refunded automatically; never restart a running job.",
"inputSchema": {
"properties": {
"idempotency_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional retry key: repeating a start call with the same key returns the same job instead of charging again."
},
"input_palette": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Base64 image of a color palette; output colors are constrained to it."
},
"mode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Omit (auto) to let the service pick: quality, or fast for simple requests. \"quality\" or \"fast\" to choose. Same price."
},
"prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "What to build or change, up to 250 characters."
},
"rd_api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "RetroDiffusion API key (rdpk-...) for this call only; overrides session or header auth."
},
"reference_images": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Up to 4 base64 reference images (PNG/JPEG/WEBP) of the object, e.g. front and side views."
},
"reference_models": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "asset_ids of your own finished Low-Poly models to build in: each is placed exactly (same shapes and textures) where the prompt puts it, or adapted. Images and models together: at most 4."
},
"size": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Cube size in texels: \"16\", \"32\", \"64\", \"128\", \"256\", or \"auto\" (default). Auto reads the prompt; reference-image-only requests default to 64. Bigger sizes cost more (see get_lowpoly_pricing)."
},
"style": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Low-Poly style id: rd_lowpoly__detailed (default, free-form shapes), rd_lowpoly__blocky (boxes only, tilted where needed, Minecraft-like), their Lite versions rd_lowpoly__detailed_lite / rd_lowpoly__blocky_lite (a lighter model: simpler results for much less, and Lite prices for everything done to the model later), or another style listed by get_lowpoly_pricing (each style lists its prices)."
}
},
"type": "object"
},
"name": "start_lowpoly_generate",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Rebuild the skeleton of a rigged Low-Poly model version (paid, priced by size), e.g. to move a pivot or add\nbones. The version is updated in place; animations whose bones the new rig still has are kept. Versions without\na rig are rigged for free by their first animation instead. Poll get_lowpoly_job(task_id).",
"inputSchema": {
"properties": {
"asset_id": {
"description": "asset_id returned by start_lowpoly_generate or get_lowpoly_job.",
"type": "string"
},
"idempotency_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional retry key: repeating a start call with the same key returns the same job instead of charging again."
},
"prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "What to change about the rig, e.g. 'give the tail three bones' (up to 250 characters). Omit for a fresh rig."
},
"rd_api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "RetroDiffusion API key (rdpk-...) for this call only; overrides session or header auth."
},
"version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Version number to work on (default: the newest). Revisions create versions; animations do not."
}
},
"required": [
"asset_id"
],
"type": "object"
},
"name": "start_lowpoly_rerig",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Change an existing Low-Poly model (paid, priced by its size). The result is saved as a new version.\nPoll get_lowpoly_job(task_id). One job per model at a time.",
"inputSchema": {
"properties": {
"asset_id": {
"description": "asset_id returned by start_lowpoly_generate or get_lowpoly_job.",
"type": "string"
},
"idempotency_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional retry key: repeating a start call with the same key returns the same job instead of charging again."
},
"mode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Omit (auto) to let the service pick: quality, or fast for simple requests. \"quality\" or \"fast\" to choose. Same price."
},
"prompt": {
"description": "What should change, up to 250 characters.",
"type": "string"
},
"rd_api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "RetroDiffusion API key (rdpk-...) for this call only; overrides session or header auth."
},
"reference_images": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Up to 4 base64 reference images (PNG/JPEG/WEBP) of the object, e.g. front and side views."
},
"version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Version number to work on (default: the newest). Revisions create versions; animations do not."
}
},
"required": [
"asset_id",
"prompt"
],
"type": "object"
},
"name": "start_lowpoly_revise",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Break a Low-Poly model into separate models (paid, priced by its size): a desk scene becomes the desk, a\ncandle, each book, and so on. Each piece is a new model (and history item) facing the front, with its own\ntextures, rig and animations; the original is unchanged. Poll get_lowpoly_job(task_id); its pieces list the\nnew models.",
"inputSchema": {
"properties": {
"asset_id": {
"description": "asset_id returned by start_lowpoly_generate or get_lowpoly_job.",
"type": "string"
},
"idempotency_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional retry key: repeating a start call with the same key returns the same job instead of charging again."
},
"prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "How to split, e.g. 'only the books' or 'each drawer too' (up to 250 characters). Omit to split off every separate object that makes sense."
},
"rd_api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "RetroDiffusion API key (rdpk-...) for this call only; overrides session or header auth."
},
"version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Version number to work on (default: the newest). Revisions create versions; animations do not."
}
},
"required": [
"asset_id"
],
"type": "object"
},
"name": "start_lowpoly_split",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Update a public RD Pro user style using /v2/styles/{style_id}.\n\nUse `style_reference_images` and `style_reference_caption` for style-level references.\nThese are baked into the custom style and are not the same as per-inference `reference_images`.",
"inputSchema": {
"properties": {
"apply_prompt_fixer": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Let the API tidy prompts automatically for this style (default true)."
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Short description of the custom style."
},
"expanded_llm_instructions": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Extended instructions for the prompt-expansion LLM."
},
"force_bg_removal": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Always remove backgrounds for this style."
},
"force_palette": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Always apply palette constraining for this style."
},
"llm_instructions": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Instructions for the prompt-expansion LLM when this style is used."
},
"min_height": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Force a fixed height (96-256); must be provided together with min_width."
},
"min_width": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Force a fixed width (96-256); must be provided together with min_height."
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "New display name for the custom style."
},
"rd_api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "RetroDiffusion API key (rdpk-...) for this call only; overrides session or header auth."
},
"reference_caption": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Alias for style_reference_caption on this tool; prefer style_reference_caption and never provide both."
},
"reference_images": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Alias for style_reference_images on this tool; prefer style_reference_images and never provide both."
},
"reset_forced_dimensions": {
"default": false,
"description": "Clear previously forced dimensions; do not combine with min_width/min_height.",
"type": "boolean"
},
"style_icon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Icon name for the style (e.g. 'sparkles')."
},
"style_id": {
"description": "Style id — the internal id or the prompt_style/public id (e.g. user__mystyle_ab12).",
"type": "string"
},
"style_reference_caption": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Caption describing the style reference image(s)."
},
"style_reference_images": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Style-level reference image(s), base64, baked into the custom style (max 1 via the public API)."
},
"user_prompt_template": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Prompt template for the style; must contain the {prompt} token."
}
},
"required": [
"style_id"
],
"type": "object"
},
"name": "update_user_style",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:32331510db7ce3999c1b965e4382a7450f144137bf6d986b164edc70f2b05201 | sha256sum