Skip to main content
Glama

rotate_pixel_art

Rotate a pixel-art sprite by any angle and keep it pixel art, like the Pixel Art Rotate tool on voidless.dev/tools. RotSprite method: the sprite is scaled up 8x with Scale2x (EPX) three times so diagonals stay smooth, rotated with nearest neighbour, and scaled back down taking each 8x8 block's most common colour, so lines don't break into stairs and no new colours appear (the result's palette is a subset of the sprite's, with hard alpha). Quarter turns are exact. The canvas grows to fit. Angles are degrees, clockwise. Give directions (e.g. 8 or 16) for a sweep starting at angle: every frame on one canvas size, returned as a GIF and a sprite sheet plus the angle list. It turns the picture in the plane (a top-down car, ship or turret heading 16 ways, a swinging sword, a tilted prop); to draw a character from its other sides (front, back, side views), use rotate_sprite instead. Sprites up to 512x512; sprite pixels x directions up to 1048576 (a 256x256 sprite in 16 directions). Images up to 2048x2048, 256 frames, 32 MB of input per call. Free: no credits.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "image": "<image>"
    },
    "name": "rotate_pixel_art"
  }
}

Input Schema

NameRequiredDescriptionDefault
fpsNoSweep GIF frame rate
saveNoAlso save the result to your Voidless library (free, private) and return its asset id and cdn.voidless.dev URL, for passing to the next tool without base64
angleNoDegrees clockwise; with directions, the first angle of the sweep
imageYesAn image: an https URL (e.g. a cdn.voidless.dev link from get_asset or a saved result), a library image key (assets/…png, as get_asset lists it), a data: URI, or base64 PNG/GIF.
scaleNoScale the returned images up (nearest neighbour)
expandNoGrow the canvas so the rotated sprite is never cut off (false keeps the sprite's size)
methodNorotsprite = Scale2x x3 then rotate (clean lines); nearest = plain nearest-neighbour rotationrotsprite
columnsNoSweep sheet: frames per row (default all in one row up to 16)
directionsNo1 = one rotation; N = a sweep of N angles 360/N apart (8 or 16 for a top-down game)
downsampleNorotsprite: each output pixel is its 8x8 block's most common colour (mode) or its centre sample (nearest)mode

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare non-read-only, non-idempotent, open-world, non-destructive; the description goes far beyond that with the Scale2x/EPX upscale-then-downsample pipeline, the palette-subset guarantee with hard alpha, exact quarter turns, and free/no-credit cost. It does not say what happens on failure or how long a 256-frame sweep takes, which keeps it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then algorithm, then constraints, then the sibling routing — a sensible order with no filler sentences. It is dense, though: the Scale2x and mode-downsample explanation is fairly heavy prose for something the method/downsample enums already partially convey.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description compensates by naming both return shapes (single rotated image vs. GIF + sprite sheet + angle list) and the save-path asset id and cdn.voidless.dev URL. Combined with the size and cost limits, an agent has what it needs to call this correctly on the first try.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds meaning the schema does not: directions produces a sweep 'every frame on one canvas size, returned as a GIF and a sprite sheet plus the angle list', and angle is clarified as the sweep's first angle. It leaves downscale/columns/fps mechanics entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource ('Rotate a pixel-art sprite by any angle') plus the distinguishing constraint ('keep it pixel art'). It also names the sibling it is not ('to draw a character from its other sides ... use rotate_sprite instead'), so an agent can separate the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the positive case (in-plane rotation of a car, ship, turret, swinging sword, tilted prop), the negative case (multi-view character drawing, routed to rotate_sprite), and the sizing envelope (512x512 sprites, 2048x2048 images, 256 frames, 32 MB). Nothing about tool selection is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources