Each model was given this exact prompt (with MODELNAME substituted):
Without using the Internet, working in /tmp/MODELNAME, generate an audio file of Bella Ciao, playable in an average web browser, and then drop the final result in ~/static/bella_ciao_MODELNAME.<ext>
All artifacts were inspected after the fact; the table below summarizes their approaches.
| Model | opus-4.7 | opus-4.6 | opus-4.5 | sonnet-4.6 | sonnet-4.5 | haiku-4.5 | deepseek-v4-pro | glm-5.1 | kimi-k2.6 | gpt-5.5 | gpt-5.4 | gpt-5.3-codex | gpt-5.2-codex |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Lang | Python | Python | Python | Python | Python | ? | Python | Python | Python | Python | Python | ? | Python |
| Deps | numpy | stdlib | numpy | stdlib | numpy | ? | stdlib | numpy | numpy | stdlib | stdlib | ? | stdlib |
| Format | MP3 | WAV | MP3 | OGG | MP3 (via ffmpeg) | MP3 | MP3 (also WAV+OGG locally) | WAV | WAV | WAV | MP3 | WAV | MP3 |
| Size | 80 KB | 3.6 MB | 95 KB | 99 KB | 256 KB | 87 KB | 436 KB | 12 MB | 2.2 MB | 5.4 MB | 249 KB | 2.6 MB | 300 KB |
| Chans | mono | mono | mono | mono | mono | mono | mono | mono | mono | stereo | stereo | mono | mono |
| Key | A minor | A minor | A minor | D minor | A minor | ? | A minor | D minor | A minor | A minor | A minor | ? | A minor |
| BPM | ~120 | 132 | ~171 | 120 | 150 | ? | 120 | 110 | ~171 (comment says 86; buggy) | 124 | 126 | ? | 100 |
| Tempo def | hardcoded sec/note | BPM=132 → BEAT=60/BPM | magic beat=0.35 | hardcoded sec/note | magic DURATION_BEAT=0.4 | ? | TEMPO=120 | BPM=110 | magic 0.35 s/note | BPM=124 | BPM=126 | ? | bpm=100 |
| Melody | (note, dur_sec) | (note, beats) w/ W/H/Q constants | (note, beats) | (note, dur_sec) | (note, beats) | ? | (freq_Hz, beats) inlined | (note, beats), VERSE/CHORUS sections | (note, beats) | (note, beats) | (note, beats) | ? | (note, beats), melody*2 |
| Synth | sine + 2,3 harm. | sine + harm. + vibrato | sine + 2,3 harm. | sine + 4 harm. | sine + 2 harm. | ? | sine (lead) + triangle (bass) | sine + 5 harm. | sine + oct/5th/2oct harm. | accordion additive + bellows tremolo | sine + 3 harm. (lead), 2 harm. (bass) | ? | pure sine |
| Vibrato | — | ✓ | — | — | — | ? | — | — | ✓ (cumulative-phase FM) | ✓ | ✓ | ? | — |
| Bass | — | ✓ | — | — | — | ? | ✓ (triangle) | ✓ (downbeat) | — | ✓ (oom-pah) | ✓ | ? | — |
| Chords | — | ✓ (Am–Dm–E7–Am pad) | — | — | — | ? | — (bass only) | ✓ (Dm/Gm/A, auto-inferred) | — | ✓ (Am/Dm/E7 stabs) | ✓ (Am/F/G/E triads) | ? | — |
| Drums | — | — | — | — | — | ? | — | — | — | ✓ (deterministic pseudo-noise hits) | — | ? | — |
| FX | — | — | — | — | — | ? | — | — | ✓ (comb-filter) | ✓ (two-tap echo) | — | ? | — |
| Structure | verse + chorus once | ~3 verse+chorus reps | ~2 verse+chorus reps | verse+chorus w/ repeat | multi verse+chorus | ? | verse+chorus | VERSE; VERSE2; CHORUS; CHORUS2 | long freeform A-min | 2 phrases w/ rests | ~2 verse passes | ? | melody literally doubled |
| Other | — | longest pure-Python pipeline | — | — | HTML test page + README | cleaned up workdir | HTML player page | auto-derives chords from melody | HTML test page | panning, fade in/out | 3 tracks summed | cleaned up workdir | simplest possible |
Two models (haiku-4.5 and gpt-5.3-codex) cleaned up their working directories so some details are unknown.