remix-add-sprite
Add Sprite to Game Workflow
Overview
This skill guides you through generating sprite sheets for canvas-based games on the Remix platform.
Prerequisites
- The game HTML file must already exist (follow the game-creation workflow first if starting from scratch).
- A game must be created on the Remix platform (you need a game ID).
- The
REMIX_API_KEYenvironment variable must be set.
Steps
1. Check for Existing Game ID
Use gameId from task context or prior tool results when available.
Otherwise, read the nearest .remix-cli.json. Older projects may still use
.remix-mcp.json. If either contains a gameId, reuse it.
Only if none of those sources contain a gameId should you follow the
upload-game workflow to create one.
2. Generate the Sprite Sheet
Prefer MCP generateSpriteSheet:
generateSpriteSheet({
gameId: "<your-game-id>",
prompt: "a pixel-art knight walking, side view, 2D game character",
gridSize: 4
})
The response includes hosted spriteUrl, transparentSpriteUrl, grid metadata,
and any warnings. If you need to write REST calls instead, confirm the exact
schema from the OpenAPI spec first.
3. Integrate the Sprite Sheet into the Game
Use the returned URL with canvas drawImage to render individual frames:
const sprite = new Image();
sprite.src = "https://returned-sprite-url.png";
const frameWidth = 64; // width of a single frame
const frameHeight = 64; // height of a single frame
const totalFrames = 4;
let currentFrame = 0;
sprite.onload = () => {
function animate() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
// Draw the current frame from the sprite sheet
ctx.drawImage(
sprite,
currentFrame * frameWidth, 0, // source x, y in the sprite sheet
frameWidth, frameHeight, // source width, height
player.x, player.y, // destination x, y on canvas
frameWidth, frameHeight // destination width, height
);
currentFrame = (currentFrame + 1) % totalFrames;
requestAnimationFrame(animate);
}
animate();
};
Use transparentSpriteUrl when you need the sprite rendered over other
game elements without a background.
Tips
- Be specific about frame count and action. "4-frame walk cycle" is better than "walking character".
- Specify art style. Include "pixel-art", "hand-drawn", "flat vector", etc. in your prompt.
- Frame layout follows the returned grid metadata. Do not assume a single
horizontal strip; compute frame width and height from the generated sheet and
requested
gridSize. - Use
transparentSpriteUrlfor in-game sprites that need to overlay backgrounds or other elements. - Preload before gameplay. Wait for
onloadbefore starting the game loop.
More from farworld-labs/remix-skills
phaser-2d-arcade
Build mobile-first 2D browser games with Phaser 3 Arcade Physics
37remix-agent-publish
Build and publish Remix games with the current Remix toolchain. Use when work touches the official Remix CLI, MCP server, REST publishing APIs, or the @remix-gg/sdk game runtime.
37threejs-lite
Build lightweight mobile-friendly 3D browser games with Three.js
33remix-game-best-practices
Mobile-first game creation best practices for Remix
31remix-glossary
Glossary of terms used in Remix agent publishing flows
30remix-open-game
Open a game in the Remix Studio browser for preview and editing
30