WAVEFORM RUNNER Play the game

How this was made.
Most of the songs were thrown away.

Waveform Runner is a one-button rhythm game. An AI model (Claude Fable 5.2, in one long Claude Code conversation) generated the songs on fal, measured each song with Python scripts, rejected most of them, built a level from the drum hits of each song it kept, wrote the game, and wrote bots that test each level.

This page shows the records of that work: what was kept, what was thrown away and why, and what was not checked. Each number comes from a file in the project.

THE NUMBERSFrom 264 calls to 25 levels

No person listened to the songs. The model wrote scripts that measure each song, and the scripts made the selection. The first test is the tempo: a rhythm game needs a beat that stays on one constant grid.

Selection steps

Reasons for rejection, from the selection files

By music model

Cost is the fal list price multiplied by the billing units. It is not an invoice.

THE REJECT PILEAll generated songs. Listen to them.

Each card is one generated song with a 20-second preview, in the order of generation. A rejected song shows the reason from the selection records. There are three kinds of reason:

Tempo grid The song failed a tempo test: wrong tempo, a beat that drifts, drums off the grid, or too much silence.
Chart check The song got a level, and the level failed a test.
Rank The song passed the tests, but other songs had a better rank. For these songs the records give only scores and a rank, so the card states only that.

HOW A LEVEL IS BUILTThe notes are the drum hits

A second paid call separates the drums from each song. A script finds each kick and snare hit in the drum part. In the first 12 levels a note is on a beat only if a drum hit is there. In the 13 later levels the notes follow the kick and snare hits, on or off the beat, and the strongest hits win. Each drawing shows 8 seconds of the real level file.

IT TESTS ITS OWN GAMEBots play each level

The bots are scripts that the model wrote. The model does not play the game live. The playtest bot knows the note times and presses on the audio clock, through the same press() function as a player. The sight bot does not know the note times: it reads only two rows of pixels of the beat lane.

THREE TRIES AT THE HIT AREAWhere do you look when you press?

The hit area was designed three times. The two older designs are still in the game (Settings, Hit area).

WHAT IS NOT CHECKEDThe limits, from the README

TIMELINEThe order of the work

The times are the times of the files on disk, on the computer that ran the build.