Sprite tools
Sprite tools: Turn an animation video or GIF (from Kling, Veo, Sora or a capture) into a sprite sheet: frames at your fps, background removed, every frame aligned to one box and pivot so it does not jitter, the best loop point, TexturePacker JSON, Godot SpriteFrames and a GIF preview. Full schema: https://rengi.dev/v1/sprite-tools/schema
Answeringour last check, 2026-10-21
1 of 1checks answered this week
905 msmedian answer time
$0.15listed price per call
$0.15price it asked us
Paid test badge: not yet. The checks above are free: we call the tool without paying and read the payment request it sends back. The Verified badge needs paid calls whose answers match the promised output, and nobody can buy a badge.
Endpoint
POST https://rengi.dev/v1/sprite-tools/video-to-sheet
| Category | Image and media |
|---|---|
| Provider host | rengi.dev |
| Networks | eip155:8453, solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp |
| Payment schemes | exact |
| Self-reported calls, 30 days | 1 from 1 payers (the provider's figure, not ours) |
Our checks, last 30 days
| Day | Result | HTTP | Asked | Time |
|---|---|---|---|---|
| 2026-10-21 | valid payment request | 402 | $0.15 | 905 ms |
Example input (from the provider)
{
"body": {
"fps": 12,
"videoUrl": "https://rengi.dev/samples/slime-jump.mp4"
},
"bodyType": "json",
"method": "POST",
"type": "http"
}
Promised output schema (from the provider)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"additionalProperties": false,
"properties": {
"body": {
"additionalProperties": false,
"properties": {
"background": {
"default": "auto",
"description": "auto: keep the video's own transparency, key a one-color background, or use AI (max 24 frames).",
"enum": [
"auto",
"keep",
"flat",
"ai"
],
"type": "string"
},
"columns": {
"maximum": 64,
"minimum": 1,
"type": "integer"
},
"end": {
"exclusiveMinimum": 0,
"type": "number"
},
"fps": {
"default": 12,
"maximum": 60,
"minimum": 1,
"type": "number"
},
"frameSize": {
"default": 256,
"description": "Longest side of one frame.",
"maximum": 1024,
"minimum": 16,
"type": "integer"
},
"maxFrames": {
"default": 48,
"maximum": 120,
"minimum": 1,
"type": "integer"
},
"pixelArt": {
"default": false,
"description": "Scale with nearest neighbour.",
"type": "boolean"
},
"start": {
"default": 0,
"minimum": 0,
"type": "number"
},
"video": {
"description": "Base64 MP4, WebM, MOV or GIF.",
"type": "string"
},
"videoUrl": {
"format": "uri",
"type": "string"
}
},
"type": "object"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"type": {
"const": "http",
"type": "string"
}
},
"required": [
"type",
"method",
"bodyType",
"body"
],
"type": "object"
},
"output": {
"properties": {
"example": {
"additionalProperties": false,
"properties": {
"background": {
"enum": [
"keep",
"flat",
"ai"
],
"type": "string"
},
"columns": {
"type": "number"
},
"fps": {
"type": "number"
},
"frameCount": {
"type": "number"
},
"frameHeight": {
"type": "number"
},
"frameWidth": {
"type": "number"
},
"frames": {
"type": "string"
},
"godot": {
"type": "string"
},
"loop": {
"additionalProperties": false,
"description": "Frames 0..frames-1 make the cleanest loop; difference 0 = identical.",
"properties": {
"difference": {
"type": "number"
},
"frames": {
"type": "number"
}
},
"required": [
"frames",
"difference"
],
"type": "object"
},
"pivot": {
"additionalProperties": false,
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
},
"required": [
"x",
"y"
],
"type": "object"
},
"preview": {
"type": "string"
},
"sheet": {
"type": "string"
},
"texturepacker": {
"type": "string"
},
"warnings": {
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"preview",
"sheet",
"frames",
"texturepacker",
"godot",
"frameCount",
"frameWidth",
"frameHeight",
"columns",
"fps",
"background",
"pivot",
"loop",
"warnings"
],
"type": "object"
},
"type": {
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
}
},
"required": [
"input"
],
"type": "object"
}