Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
ar9av avatar

Tile Artist

  • 1 installs
  • 1 repo stars
  • Updated August 3, 2026
  • ar9av/game-exa

tile-artist is a game-build pipeline skill that generates a tileset PNG and manifest metadata from a GDD tile palette, using GPT Image 2 by default and procedural flat-color cells as a fallback.

About

This skill generates a tileset PNG and its manifest metadata from a game design document's tilesetPalette. By default it calls GPT Image 2 once per tile type (512x512 downscaled to 32x32) for real pixel-art textures, and falls back to procedural flat-color cells when FAL_KEY is absent. A developer runs it after the game-designer stage, in parallel with sprite and background art generation.

  • Generates tiles.png via GPT Image 2 (one call per tile) with a procedural flat-color fallback when FAL_KEY is absent
  • Writes tile ids and passable flags into manifest.json
  • Transparent SKY chroma-key trick lets a parallax background show through

Tile Artist by the numbers

  • 1 all-time installs (skills.sh)
  • Ranked #218 of 247 Game Development skills by installs in the Skillselion catalog
  • Data as of Aug 4, 2026 (Skillselion catalog sync)
At a glance

tile-artist capabilities & compatibility

Free in procedural fallback; GPT Image 2 mode needs FAL_KEY and costs ~$0.01-0.05 per tile.

Capabilities
audio composer · palette enforcer · image generation
Works with
openai
Use cases
image generation
Pricing
Bring your own API key
From the docs

What tile-artist says it does

Generates a tileset PNG from the GDD's tilesetPalette.
SKILL.md
Falls back to procedural flat-color cells if FAL_KEY is absent.
SKILL.md
npx skills add https://github.com/ar9av/game-exa --skill tile-artist

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs1
repo stars1
Last updatedAugust 3, 2026
Repositoryar9av/game-exa

What it does

Generate a coherent tileset and manifest metadata for a generated 2D game from its tile palette.

Who is it for?

Producing pixel-art tilesets for an AI-generated 2D game.

Skip if: Non-game art or non-tile-based graphics.

When should I use this skill?

After game-designer produces a GDD with tilesetPalette; runs in parallel with sprite-artist and bg-artist.

What you get

tiles.png plus manifest tile ids and passable flags for the game to consume.

  • public/assets/tiles.png
  • manifest tiles entry

By the numbers

  • GPT Image 2 cost ~$0.01-0.05 per tile at low quality
  • tiles generated 512x512 then downscaled to 32x32

Files

SKILL.mdMarkdownGitHub ↗

Tile Artist

Generates tiles.png and tile metadata. GPT Image 2 is the default — one API call per non-SKY tile, each generated at 512×512 then downscaled to 32×32. Falls back to procedural flat-color cells when FAL_KEY is unavailable.

Two modes

ModeWhenCostOutput
GPT Image 2 (default)FAL_KEY present~$0.01–0.05 per tile at low qualityReal pixel-art textures (cobblestone, brick mortar, grass blades, etc.)
Procedural fallbackNo API keyFreeFlat-colored cells with a subtle 1-pixel darker border

Both produce identical manifest entries — downstream Preload and Game.js are unaware which was used.

When to use

After game-designer produces a GDD with tilesetPalette. Runs in parallel with sprite-artist and bg-artist.

GDD palette format

Each entry in gdd.tilesetPalette:

{
  "id": "STONE",          // used as tile key in levels and manifest.ids
  "color": "#607070",     // fallback color if GPT call fails
  "passable": false,      // false = solid collision, true = walk-through
  "desc": "gray cobblestone dungeon floor, beveled stone blocks with mortar cracks"
  // ↑ optional but strongly recommended — used as the GPT Image 2 prompt
}

If desc is omitted, the skill falls back to a built-in description map keyed on id (covers common ids: STONE, BRICK, SPIKE, LADDER, PIPE, FLOOR, ACID, GROUND, WALL, PROP, GRASS, WATER, FLOWER, TREE). If the id is not in the map, it constructs a generic prompt from the id and color.

How GPT generation works

For each palette entry (skipping SKY / #FF00FF tiles):

1. Build a prompt: "Pixel art game tile, flat seamlessly tileable surface texture: {desc}. {genre} game aesthetic. Seamlessly tileable, 16-bit retro pixel art, chunky well-defined pixels, clean sharp edges. No text, no characters, no HUD elements, no border frame." 2. Call fal.run/openai/gpt-image-2 at image_size: { width: 512, height: 512 }, quality: low (configurable). 3. Downscale the 512×512 result to tileSize × tileSize (default 32) using sharp. 4. Copy into position i * tileSize in the horizontal output strip. 5. If the call fails, paint the solid color value for that tile (no crash).

SKY tiles are filled with solid magenta (#FF00FF) — Game.js hides them via setAlpha(0) so the parallax background shows through.

Output

  • public/assets/tiles.png — horizontal strip: (tileSize × numTiles) × tileSize pixels, one tile per palette entry.
  • Manifest entry under tiles:
{
  "tiles": {
    "relSheet": "assets/tiles.png",
    "tileSize": 32,
    "ids":      ["SKY", "STONE", "BRICK", "SPIKE", "LADDER"],
    "passable": [true, false, false, true, true]
  }
}

ids[i] and passable[i] both correspond to tile index i in any level's tiles[][] array.

Implementation

The core function is generateTilesetGPT() in src/lib/sprites.js. It is called by scripts/gen_game.mjs for all example games. For agent-driven pipeline use, invoke it from codesmith or a custom orchestration script:

import { generateTilesetGPT } from '../src/lib/sprites.js';

const tileset = await generateTilesetGPT({
  palette:  gdd.tilesetPalette,   // array of { id, color, passable, desc? }
  outPath:  'public/assets/tiles.png',
  tileSize: 32,
  genre:    gdd.genre,            // added to each tile prompt for style coherence
  tagline:  gdd.tagline,          // added to each tile prompt
  quality:  'low',                // low | medium | high
  log:      console.log,
});
// → { sheet, tileSize, ids }

Fallback scripts (kept for reference / standalone use):

  • scripts/paint_tiles.mjs <project-dir> — procedural flat-color strip, no API key needed.
  • scripts/generate_tiles_gpt.mjs <project-dir> [--quality low] — thin CLI wrapper around generateTilesetGPT.

Dependencies

  • sharp — raw RGBA buffer → PNG, resize.
  • FAL_KEY in env or ~/.all-skills/.env — for GPT Image 2 calls. Falls back gracefully if missing.

Why GPT tiles look better than procedural

Procedural tiles are obviously synthetic — flat green for grass, flat brown for dirt. GPT Image 2 produces texture variation: grass blades, dirt speckles, brick mortar lines, pipe rivets. At 32×32 the detail reads clearly. Combined with bg-artist's parallax background, the visual quality jumps from "tech demo" to "real game".

Transparent SKY trick

For platformers and action games, the first palette entry is { id: "SKY", color: "#FF00FF", passable: true }. The tile artist fills it with solid magenta. In Game.js:

const skyIdx = manifest.tiles.ids.indexOf('SKY');
if (skyIdx >= 0) {
  this._tileLayer.forEachTile(t => { if (t.index === skyIdx) t.setAlpha(0); });
}

This makes the sky tile invisible, letting the bg-artist background show through — no extra draw calls, no extra texture.

Related skills

FAQ

What if FAL_KEY is missing?

It falls back to procedural flat-colored cells with a subtle 1-pixel darker border, at no cost.

How is the SKY tile handled?

SKY tiles are filled with solid magenta and hidden at runtime via setAlpha(0) so the parallax background shows through.

Game Developmentfrontendintegrations

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.