# Run log: Snake game assets

Raw, chronological record of every TaskFuel call made to build the "after"
Snake game. Written as the calls happened. Prices are what the gateway
charged. Every file linked below is exactly what the game and the post use.

## The brief

A human chose the direction. The agent made everything else.

- Theme: a Chinese dragon as the snake, chasing a flaming pearl.
- Music: two instrumental Suno tracks, one for play and one for the try-again screen (different, not sad). Style: chiptune with erhu and guzheng, Chinese pentatonic, inspired by classic games like Mega Man.
- Sound effects: start, every turn, eat, game over. Retro 8-bit mixed with gong, woodblock and guzheng.
- Game flow: click to start, a 3, 2, 1 countdown, music that pauses with the game.

- Agent: Claude Code (claude-opus-5), using the TaskFuel MCP tools
- Started: 2026-09-21
- Balance before: $10.537098

## 06:04 UTC. Music, Suno (`POST https://suno.mpp.paywithlocus.com/suno/generate-music`)

Two async tasks submitted. Both returned a `taskId` immediately. The audio is
fetched later with `get-music-status` ($0.005 per poll).

| # | Track | Body | Charged | Request id | Suno taskId |
|---|---|---|---|---|---|
| 1 | In-game | `{"customMode":true,"instrumental":true,"model":"V5_5","title":"Dragon Stage","style":"chiptune with erhu and guzheng, Chinese pentatonic lead, driving 8-bit drums, energetic action stage, 145 bpm, loopable","negativeTags":"vocals, sad, slow ballad"}` | $0.105 | 043e2c01-6b84-4821-9a31-ae0da7042bfb | 569f5d2f98415682f49420882cd53d7a |
| 2 | Try again | `{"customMode":true,"instrumental":true,"model":"V5_5","title":"Dragon Rest","style":"guzheng and soft chiptune, pentatonic, relaxed upbeat, warm, 100 bpm, loopable","negativeTags":"vocals, sad, slow ballad"}` | $0.105 | 609e7242-1169-4ebc-95d8-c097de1e344b | 435774588ea7ea901c860b47f23d6e91 |

## 06:05 UTC. Sound effects, ElevenLabs via BlockRun (`POST https://blockrun.ai/api/v1/audio/sound-effects`)

Synchronous. Each returned an MP3 URL within a few seconds. Quoted $0.0535
(dry run), charged $0.053501.

| # | Sound | text | duration_seconds | Charged | Request id | Result |
|---|---|---|---|---|---|---|
| 3 | start | A bright small gong hit followed by a quick rising 8-bit arpeggio, retro game start | 1.5 | $0.053501 | 4ff532ce-8f90-4c1d-99e8-9577661697ae | 1.52 s, peak -2.5 dB. [start.mp3](/audio/blog/snake-game-assets-for-ai-agents/start.mp3) |
| 4 | turn | A single short soft wooden block tick with a tiny 8-bit blip, for a retro game turn | 0.5 | $0.053501 | 5de6e13f-62e1-43a3-b0d9-ada423659c90 | **Unusable: effectively silent** (peak -68.7 dB). Charged anyway. File discarded. |
| 5 | eat | A single bright guzheng pluck layered with an 8-bit coin chime, retro game pickup | 0.7 | $0.053501 | 353f8fbc-8952-4f21-be92-fc7c349116f2 | 0.73 s, quiet (peak -12.5 dB), normalise locally. [eat.mp3](/audio/blog/snake-game-assets-for-ai-agents/eat.mp3) |
| 6 | game over | A low gong hit with a short descending 8-bit phrase, playful rather than sad, retro game over | 2 | $0.053501 | 3608eb55-4f98-42da-bff5-8f224e555a6e | 2.04 s, peak -0.7 dB. [gameover.mp3](/audio/blog/snake-game-assets-for-ai-agents/gameover.mp3) |

What went wrong with #4: the brief asked for something "soft" and "tiny" in
half a second, and the model took it literally. The call succeeded, returned
200, and was charged, but the file is silence to the ear. Paid and
delivered, but not useful. Fix: suspect the brief, not the endpoint. Retry drops
"soft" and "tiny", asks for "clearly audible", and allows a little more time.

| 7 | turn (retry) | One crisp, clearly audible wooden block knock with a short bright 8-bit blip, retro video game menu click | 0.6, `prompt_influence` 0.7 | $0.053501 | fec627ac-fba4-4dae-ac01-e565daf5bbea | 0.63 s, peak -0.4 dB. Usable. [turn.mp3](/audio/blog/snake-game-assets-for-ai-agents/turn.mp3) |

## 06:06 UTC. Music results, Suno (`POST https://suno.mpp.paywithlocus.com/suno/get-music-status`)

One poll per task, about 90 seconds after submitting. Both were already
`SUCCESS`. Each task returned **two takes**, so the two $0.105 calls produced
four tracks. All are full songs, not short loops, so the game loops the whole
track.

| # | Poll for | Charged | Request id |
|---|---|---|---|
| 8 | In-game (569f5d2f…) | $0.005 | 07f11354-087e-4ee0-a0ec-7a95b54aa05e |
| 9 | Try again (43577458…) | $0.005 | f3d37915-1325-460d-9984-6dff6307c08c |

| Take | Suno's own tags for what it made | Length | File |
|---|---|---|---|
| In-game A | Chiptune instrumental, driving 145 BPM action-stage groove, Chinese pentatonic lead on erhu and guzheng, tight 8-bit drums, looping arrangement with crisp pixel-square bass and arcade-style transitions | 2:12 | [music.mp3](/audio/blog/snake-game-assets-for-ai-agents/music.mp3) |
| In-game B | Chiptune instrumental, erhu and guzheng carrying a Chinese pentatonic lead, clipped 8-bit drums and square-wave bass, driving 145 BPM action-stage groove, tight loopable arrangement with crisp digital transients | 2:24 | [music-take-b.mp3](/audio/blog/snake-game-assets-for-ai-agents/music-take-b.mp3) |
| Try again A | Pentatonic, relaxed upbeat instrumental at 100 bpm, warm short room reverb, softly plucked guzheng with gentle chiptune synth tones and a seamless loopable arrangement | 1:04 | [gameover-music.mp3](/audio/blog/snake-game-assets-for-ai-agents/gameover-music.mp3) |
| Try again B | Pentatonic, relaxed upbeat instrumental at 100 bpm; plucked guzheng melodies and soft chiptune synth pulses; soft bitcrushed transients, warm rounded mix, seamless loopable arrangement | 2:27 | [gameover-music-take-b.mp3](/audio/blog/snake-game-assets-for-ai-agents/gameover-music-take-b.mp3) |

Suno's audio links are temporary (`tempfile.aiquickdraw.com`), so the files
were downloaded straight away. The files linked here are re-encoded to
96 kbps MP3 for the web.

## 06:07 UTC. Images, gpt-image-2 via BlockRun (`POST https://blockrun.ai/api/v1/images/generations`)

Discovery: `image generation` returned this endpoint first. It is synchronous
for gpt-image-2 (answered in 20 to 50 seconds), where the stablestudio.dev
gpt-image-2 endpoints return an async job. Dry runs: `openai/gpt-image-2` at
1024x1024 quoted $0.064, `google/nano-banana-pro` $0.106. Picked gpt-image-2.
The endpoint has no transparent-background option, so sprites were asked for
on flat magenta and cut out locally.

Shared style sentence, reused in every game-art prompt: "Bold flat 2D game art
with thick dark outlines, a limited palette of vermilion red, imperial gold,
jade green and cream, a subtle Chinese papercut feel."

| # | Asset | Charged | Request id | Result |
|---|---|---|---|---|
| 10 | Sprite sheet: head, round body segment, tail, flaming pearl in a 2x2 grid on #FF00FF | $0.064 | af2be37c-2cfb-4574-b931-145bdc9ce80d | First try, usable. Head faces right, tail points left, body segment has its spine across, which is the orientation the engine rotates from. Shown in the post. |
| 11 | Board background: dark jade silk, cloud pattern, "20 by 20" checkerboard | $0.064 | 17cdd51c-aa1f-45eb-a0c4-f1bd6137832f | **Looks good, wrong grid.** Drew about 14 squares across, not 20, so it would not line up with the game grid. Shown in the post. |
| 12 | Menu / title screen: dragon chasing the pearl, calm lower third, no text | $0.064 | b5425632-9aae-4f89-ae94-58e2b85c4d31 | First try, usable. Shown in the post. |

Sprite prompt (#10), verbatim:

> A 2x2 grid of four separate video game sprites on a completely flat, solid pure magenta background (#FF00FF). Each sprite sits centred in its own quarter of the image with generous magenta space around it, and nothing touches or overlaps. All four are seen from directly above (top-down view), for a Snake game where a Chinese dragon is the snake.
>
> Top left: the Chinese dragon's head, facing right, seen from above: red face, gold horns swept back, long whiskers, small fierce eyes, snout pointing to the right edge.
> Top right: one round body segment of the same dragon seen from above: a circular disc of red scales with a gold ridge of spines across the middle, so many of these in a row form the dragon's body.
> Bottom left: the dragon's tail tip, seen from above, pointing left: tapering red scales ending in a gold flame-shaped fin.
> Bottom right: a glowing flaming pearl: a pale gold-white orb wrapped in small red and orange flame curls.
>
> Style for all four: bold flat 2D game art with thick dark outlines, a limited palette of vermilion red, imperial gold, jade green and cream, a subtle Chinese papercut feel, crisp and readable when shrunk to a small tile. No shadows on the background, no text, no labels, no grid lines, no borders.

Background prompt (#11), verbatim:

> A square top-down video game floor texture that fills the entire frame edge to edge: deep dark jade green silk with a faint tone-on-tone pattern of Chinese auspicious clouds, and a very subtle darker checkerboard of 20 by 20 even squares so a player can read a grid. Low contrast and dark overall, so red and gold game pieces placed on top stand out clearly. Flat, evenly lit, no vignette, no border, no frame, no objects, no characters, no text. Bold flat 2D game art style with a subtle Chinese papercut feel.

Menu prompt (#12), verbatim:

> A square title-screen illustration for a retro arcade game: a long red and gold Chinese dragon coils through swirling stylised clouds, chasing a glowing flaming pearl near the top of the frame. Deep dark jade green night sky behind. The lower third of the image is calmer and darker, with only soft clouds, leaving room for a start button. Bold flat 2D game art with thick dark outlines, a limited palette of vermilion red, imperial gold, jade green and cream, a subtle Chinese papercut feel, inspired by classic 16-bit game title screens. No text, no letters, no logo, no border.

What went wrong with #11: image models do not count reliably. "20 by 20"
came back as roughly 14. Fix: stop asking the picture to carry the grid.
Retry asks for texture only, and the game draws its own faint 20x20 grid on
top, so the grid always matches the rules.

| 13 | Board background, retry: clouds only, "no squares, no tiles, no checkerboard, no grid" | $0.064 | 1cbbbad3-f625-4bcc-b0d1-27e8d504cd5e | Usable. Even dark jade silk with tone-on-tone clouds. Shown in the post. |

Background retry prompt (#13), verbatim:

> A square top-down video game floor texture that fills the entire frame edge to edge: deep dark jade green silk with a faint tone-on-tone pattern of scattered Chinese auspicious clouds. One continuous surface with no squares, no tiles, no checkerboard, no grid and no lines dividing it. Low contrast and dark overall, so red and gold game pieces placed on top stand out clearly. Flat, evenly lit, no vignette, no border, no frame, no objects, no characters, no text. Bold flat 2D game art style with a subtle Chinese papercut feel.

## 06:10 UTC. Local post-processing (no paid calls)

Done by the agent with scripts, not by hand. Tools: sharp and ffmpeg.

- **Sprites.** Keyed out the magenta: alpha from how magenta a pixel is,
  then unmixed the edge colours so no purple fringe is left. Found the four
  sprites from the empty gaps between them. A fixed 2x2 cut clipped the
  head's whiskers, which cross the centre line. Trimmed each, centred it in a
  square, and resized to 128px (Lanczos 3). A 256-colour palette failed the
  visual-error check on all four, so they ship as lossless PNG.
- **Background.** 800x800 WebP, the canvas's own resolution.
- **Menu image.** 880x880 WebP, about 2x its on-page size.
- **Music.** Take A of each track, re-encoded to 96 kbps MP3. The games load
  music only when a game starts, not with the page.
- **Sound effects.** Re-encoded to 96 kbps MP3. The eat sound was raised by
  11 dB to match the others.
- **Game engine changes to fit the art.** Canvas doubled to 800x800 so the
  sprites stay sharp. The head, tail and pearl draw larger than one grid cell.
  The dragon draws tail first, so the head sits on top. The body segment is
  round, so turns need no corner sprite. The game draws its own faint 20x20
  grid over the background.

## Assets shipped

The files the game loads:

| Role | File | From call | Size |
|---|---|---|---|
| head | [head.png](/blog/snake-game-assets/head.png) | #10 | 26 KB |
| body | [body.png](/blog/snake-game-assets/body.png) | #10 | 38 KB |
| tail | [tail.png](/blog/snake-game-assets/tail.png) | #10 | 18 KB |
| food (pearl) | [food.png](/blog/snake-game-assets/food.png) | #10 | 33 KB |
| background | [background.webp](/blog/snake-game-assets/background.webp) | #13 | 22 KB |
| menu image | [menu.webp](/blog/snake-game-assets/menu.webp) | #12 | 141 KB |
| start sound | [start.mp3](/audio/blog/snake-game-assets-for-ai-agents/start.mp3) | #3 | 19 KB |
| turn sound | [turn.mp3](/audio/blog/snake-game-assets-for-ai-agents/turn.mp3) | #7 | 8 KB |
| eat sound | [eat.mp3](/audio/blog/snake-game-assets-for-ai-agents/eat.mp3) | #5 | 9 KB |
| game-over sound | [gameover.mp3](/audio/blog/snake-game-assets-for-ai-agents/gameover.mp3) | #6 | 25 KB |
| in-game music | [music.mp3](/audio/blog/snake-game-assets-for-ai-agents/music.mp3) | #1, take A | 1.6 MB |
| try-again music | [gameover-music.mp3](/audio/blog/snake-game-assets-for-ai-agents/gameover-music.mp3) | #2, take A | 774 KB |

Not used in the game: take B of each track. Both are playable in the post.

## Totals

| | Calls | Charged |
|---|---|---|
| Music (Suno) | 2 | $0.21 |
| Music status polls (Suno) | 2 | $0.01 |
| Sound effects (ElevenLabs via BlockRun) | 5 | $0.267505 |
| Images (gpt-image-2 via BlockRun) | 4 | $0.256 |
| **Total** | **13** | **$0.743505** |

- Balance before: $10.537098. Balance after: $9.793593. The difference is
  $0.743505, which matches the sum of the charges.
- Two of the 13 calls were paid for but not used: the silent turn sound (#4,
  $0.053501) and the background with the wrong grid (#11, $0.064). Both were
  fixed by rewording the brief, not by changing endpoint.
- Every asset in the finished game was the first try except those two.
- Dry-run quotes along the way were free and are not counted.

Endpoints rated up after use: Suno generate and status, BlockRun sound
effects (with a note about the silent result), BlockRun image generation.

## 07:05 UTC. Blog cover (not part of the game, not in the totals above)

`POST https://stablestudio.dev/api/generate/gpt-image-2/edit`, 1536x1024,
high quality, with four published TaskFuel blog covers as style references.
Quoted $0.17 (dry run), charged $0.17. Async job `cmuawhdr0000104jj67z4whpm`,
complete after about 80 seconds. Status polls were free. Request id
d7af0a77-b809-485c-b003-2bbb00abc80d.

First candidate accepted: a retro handheld console showing a block snake,
with a cassette tape, a paintbrush and a blank price tag. Framed to the
artwork plus an even margin and reduced to 256 colours.

