Skip to content

2D Asset Pipeline

A pixel art asset creation pipeline. Trigger it with a text description to generate game-ready sprites and animated GIFs — fully transparent background, exact pixel dimensions, and no manual cleanup.

Two workflows:

  • Single asset — describe a sprite and get a sized, transparent PNG ready to drop into a game project
  • Animation frames — describe a sprite and an animation, get a looping GIF with frame-accurate timing

Both workflows save directly to ~/game_assets by default.


2d-asset-pipeline output

Setup

1. Download Friday

  1. Go to hellofriday.ai and download the macOS installer
  2. Open the DMG and drag Friday to your Applications folder
  3. Launch Friday and complete the initial setup

2. Import the workspace

  1. Open Friday and go to Discover Spaces
  2. Find this workspace and click it
  3. Click Add Space

3. Install dependencies

The pipeline uses ImageMagick to convert and resize images and Pillow for spritesheet processing. Both must be available in your PATH.

ImageMagick

brew install imagemagick

Pillow (installed automatically by the Friday SDK Python environment — no manual action needed)

4. That's it

No API keys, no external services, no email address to configure. The workspace runs entirely locally.

How it works

Single asset pipeline

single asset pipeline

Component Role
create-pixel-asset signal HTTP trigger at /create-pixel-asset accepting description, size, style
create-pixel-asset-job Five-state FSM: idle → generate → save → remove background → resize → done
pixel-asset-generator Atlas image-generation agent; produces a neon-green-background PNG at requested canvas size
file-saver Python user agent; fetches the artifact from the Friday API and writes it to disk
background-remover LLM agent (Claude Haiku); runs two-pass ImageMagick chroma key to remove neon green and make the sprite transparent
image-resizer LLM agent (Claude Haiku); runs ImageMagick nearest-neighbour resize to exact target dimensions

Animation pipeline

animation pipeline

Component Role
create-animation-frames signal HTTP trigger at /create-animation-frames
create-animation-frames-job Eight-state FSM with a retry loop: idle → generate spritesheet → save → normalize → check → route → assemble GIF → resize → done
animation-frame-generator Atlas image-generation agent; produces a horizontal spritesheet with all frames side by side
file-saver Python user agent; saves the raw spritesheet PNG to disk
spritesheet-normalizer Python user agent; detects background color from corners, slices frames to exact dimensions using NEAREST resampling, and returns regenerate: true if the canvas is malformed
check-normalize-result Inline LLM step (Claude Haiku); reads normalizer output and emits REGENERATE or OK
route-after-normalize Inline LLM step (Claude Haiku); routes the FSM to retry generation or proceed to assembly
gif-assembler LLM agent (Claude Opus); runs a Python/Pillow script to slice frames and produce the final looping GIF
image-resizer LLM agent (Claude Haiku); final nearest-neighbour resize
filesystem MCP server Provides the bash tool used by gif-assembler, image-resizer, and background-remover

The animation job includes a regeneration loop: if the spritesheet normalizer cannot parse frame boundaries (canvas dimensions wrong and no clean column separators detected), it sets regenerate: true and the FSM routes back to generate-frames to try again.

Get Friday Studio

Download now  Supports macOS