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.8 | opus-4.7 | opus-4.6 | opus-4.5 | sonnet-4.6 | sonnet-4.5 | haiku-4.5 | deepseek-v4-pro | glm-5.1 | glm-5.2 | kimi-k2.6 | gpt-5.6-sol | gpt-5.6-terra | gpt-5.6-luna | gpt-5.5 | gpt-5.4 | gpt-5.3-codex | gpt-5.2-codex | fable-5 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Lang | Python | Python | Python | Python | Python | Python | ? | Python | Python | Python | Python | Python | Python | Python | Python | Python | ? | Python | Python |
| Deps | numpy | numpy | stdlib | numpy | stdlib | numpy | ? | stdlib | numpy | numpy | numpy | stdlib | stdlib + ffmpeg | stdlib | stdlib | stdlib | ? | stdlib | numpy |
| Format | MP3 (via ffmpeg) | MP3 | WAV | MP3 | OGG | MP3 (via ffmpeg) | MP3 | MP3 (also WAV+OGG locally) | WAV | MP3 (via ffmpeg) | WAV | WAV | MP3 (via ffmpeg) | WAV | WAV | MP3 | WAV | MP3 | MP3 (via ffmpeg) |
| Size | 676 KB | 80 KB | 3.6 MB | 95 KB | 99 KB | 256 KB | 87 KB | 436 KB | 12 MB | 80 KB | 2.2 MB | 15 MB | 1.1 MB | 13 MB | 5.4 MB | 249 KB | 2.6 MB | 300 KB | 102 KB |
| Chans | mono | mono | mono | mono | mono | mono | mono | mono | mono | mono | mono | stereo | stereo | stereo | stereo | stereo | mono | mono | mono |
| Key | A minor | A minor | A minor | A minor | D minor | A minor | ? | A minor | D minor | A minor | A minor | A minor | E minor | A minor | A minor | A minor | ? | A minor | A minor |
| BPM | 100 | ~120 | 132 | ~171 | 120 | 150 | ? | 120 | 110 | 100 | ~171 (comment says 86; buggy) | 118 | 120 | 104 | 124 | 126 | ? | 100 | 108 |
| Tempo def | BPM=100 → beat=60/BPM | hardcoded sec/note | BPM=132 → BEAT=60/BPM | magic beat=0.35 | hardcoded sec/note | magic DURATION_BEAT=0.4 | ? | TEMPO=120 | BPM=110 | BPM=100 → beat=60/BPM | magic 0.35 s/note | BPM=118 → BEAT=60/BPM | BPM=120 → BEAT=60/BPM | BPM=104 → BEAT=60/BPM | BPM=124 | BPM=126 | ? | bpm=100 | BPM=108 → beat=60/BPM |
| Melody | (note, beats) | (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) | (offset, dur, note) | (note, beats) | (note, beats), verse+refrain | (note, beats) | (note, beats) | ? | (note, beats), melody*2 | (note, beats) |
| Synth | additive 5 harm. + ADSR | 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 + 4 harm. + ADSR | sine + oct/5th/2oct harm. | reed/softreed additive + ADSR | clarinet/accordion additive + pad + pluck | sine+triangle hybrid + pad | accordion additive + bellows tremolo | sine + 3 harm. (lead), 2 harm. (bass) | ? | pure sine | additive 5 harm. + ADSR/decay |
| Vibrato | — | — | ✓ | — | — | — | ? | — | — | — | ✓ (cumulative-phase FM) | ✓ | ✓ | ✓ (light) | ✓ | ✓ | ? | — | — |
| Bass | — | — | ✓ | — | — | — | ? | ✓ (triangle) | ✓ (downbeat) | ✓ (quarter-note A/E) | — | ✓ | — (chords cover low end) | ✓ (walking root/fifth) | ✓ (oom-pah) | ✓ | ? | — | ✓ (sine A/E roots) |
| Chords | ✓ (Am/E/Dm pad) | — | ✓ (Am–Dm–E7–Am pad) | — | — | — | ? | — (bass only) | ✓ (Dm/Gm/A, auto-inferred) | — (bass only) | — | ✓ (Am/Dm/E7 pad) | ✓ (Em/D/G/Am/B + arps) | ✓ (Am/G/C/E7 pad) | ✓ (Am/Dm/E7 stabs) | ✓ (Am/F/G/E triads) | ? | — | — |
| Drums | — | — | — | — | — | — | ? | — | — | — | — | ✓ (kick + noise hits) | ✓ (kick/snare/hat) | ✓ (kick/snare/hat) | ✓ (deterministic pseudo-noise hits) | — | ? | — | — |
| FX | — | — | — | — | — | — | ? | — | — | ✓ (convolution reverb) | ✓ (comb-filter) | ✓ (equal-power pan, ambience) | fade in/out | octave shimmer, pan law | ✓ (two-tap echo) | — | ? | — | fade-out tail |
| Structure | verse + chorus once | verse + chorus once | ~3 verse+chorus reps | ~2 verse+chorus reps | verse+chorus w/ repeat | multi verse+chorus | ? | verse+chorus | VERSE; VERSE2; CHORUS; CHORUS2 | verse + chorus | long freeform A-min | intro + 4 melody statements + outro | 3 phrases + climactic refrain | verse+refrain ×2 | 2 phrases w/ rests | ~2 verse passes | ? | melody literally doubled | single verse+chorus pass |
| Other | WAV→MP3 @192k | — | longest pure-Python pipeline | — | — | HTML test page + README | cleaned up workdir | HTML player page | auto-derives chords from melody | WAV→MP3, light reverb | HTML test page | layered finale, seeded | streaming render, WAV→MP3 | octave shadow at phrase ends | panning, fade in/out | 3 tracks summed | cleaned up workdir | simplest possible | tail fade, WAV→MP3 |
Two models (haiku-4.5 and gpt-5.3-codex) cleaned up their working directories so some details are unknown.