Skip to main content
Glama

ingest

Convert frames, sprite sheets, or videos into clean pixel-art animations by removing backgrounds, snapping to a palette and pixel grid, and aligning frames for Aseprite.

Instructions

Turn frames from anything (diffusion/image models, video, hand-drawn) into clean pixel-art animation: removes background, pulls colors to a palette, snaps to the pixel grid (block majority), drops specks, aligns frames, adds a tag. Appends to path if it exists (one tag per call). Source: frames (image paths, gif ok) | sheet{path,cols,rows,count?} | video{path,fps?,start?,duration?} (needs ffmpeg). Size: height (art px) | scale (source px per art px) | reference sprite (matches its height, palette, canvas, feet). align: sequence (shared transform, keeps source motion; video) | feet (per frame: independent poses) | center.

Input Schema

NameRequiredDescriptionDefault
tagNo
pathYes
alignNo
layerNo
scaleNo
sheetNo
videoNo
canvasNo[w,h]
framesNo
heightNo
paletteNohex list | preset | "reference" | {extract:n}
previewNoreturn preview image
referenceNo
toleranceNobackground Lab tolerance, default 12
backgroundNo"auto" (default) | "none" | color
durationMsNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv2.3.0

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose key traits: the run appends to path if it already exists (an additive write, one tag per call), background removal is applied, and video input requires ffmpeg. What it omits is return behavior (no output schema exists) and any failure/overwrite semantics when path conditions differ.

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?

The purpose is front-loaded in the first clause and the pipe-delimited shorthand for source/size/align variants is an efficient compression of what would otherwise be verbose prose. The telegraphic style ('| sheet{path,cols,rows,count?}') is borderline cryptic and slightly hurts first-pass comprehension, but nothing is wasted.

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

Completeness3/5

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

For a 16-parameter tool with nested objects, no annotations and no output schema, the description covers sources, sizing, alignment, and append behavior, but it never states what the call returns (a tag, a path, a preview?) and leaves layer, durationMs, and preview undocumented. An agent could likely invoke it, but not predict its result confidently.

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?

At 31% schema coverage across 16 parameters, compensation is required and the description largely delivers: it gives the shape of the three source variants (frames | sheet{path,cols,rows,count?} | video{path,fps?,start?,duration?}), explains the three sizing strategies (height | scale | reference sprite, with how reference matches height/palette/canvas/feet), and defines each align enum value. Remaining gaps (layer, tag beyond 'one per call', durationMs, preview) keep it off a 5.

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

Purpose4/5

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

States a specific verb and resource: turning frames from images/video/sheets into a cleaned pixel-art animation, enumerating the pipeline steps (background removal, palette pull, grid snap, speck drop, alignment, tagging). This clearly separates it from siblings like create_sprite, generate, and animate, which start from other inputs. It stops short of 5 because the name 'ingest' itself carries no meaning and the sentence is dense enough to require a second read.

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

Usage Guidelines3/5

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

Source options (frames vs sheet vs video) and the ffmpeg requirement imply when the tool applies, but there is no explicit 'use this instead of X' routing against siblings such as create_sprite, generate, or frames. The align modes are named but the conditions under which an agent should prefer one are only suggestively described ('keeps source motion; video').

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