Bella Ciao rendered directly by LLMs

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>

How each model tackled the problem

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 PythonPythonPythonPythonPythonPython?PythonPythonPythonPythonPythonPythonPythonPythonPython?PythonPython
Deps numpynumpystdlibnumpystdlibnumpy?stdlibnumpynumpynumpystdlibstdlib + ffmpegstdlibstdlibstdlib?stdlibnumpy
Format MP3 (via ffmpeg)MP3WAVMP3OGGMP3 (via ffmpeg)MP3MP3 (also WAV+OGG locally)WAVMP3 (via ffmpeg)WAVWAVMP3 (via ffmpeg)WAVWAVMP3WAVMP3MP3 (via ffmpeg)
Size 676 KB80 KB3.6 MB95 KB99 KB256 KB87 KB436 KB12 MB80 KB2.2 MB15 MB1.1 MB13 MB5.4 MB249 KB2.6 MB300 KB102 KB
Chans monomonomonomonomonomonomonomonomonomonomonostereostereostereostereostereomonomonomono
Key A minorA minorA minorA minorD minorA minor?A minorD minorA minorA minorA minorE minorA minorA minorA minor?A minorA minor
BPM 100~120132~171120150?120110100~171 (comment says 86; buggy)118120104124126?100108
Tempo def BPM=100beat=60/BPMhardcoded sec/noteBPM=132BEAT=60/BPMmagic beat=0.35hardcoded sec/notemagic DURATION_BEAT=0.4?TEMPO=120BPM=110BPM=100beat=60/BPMmagic 0.35 s/noteBPM=118BEAT=60/BPMBPM=120BEAT=60/BPMBPM=104BEAT=60/BPMBPM=124BPM=126?bpm=100BPM=108beat=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. + ADSRsine + 2,3 harm.sine + harm. + vibratosine + 2,3 harm.sine + 4 harm.sine + 2 harm.?sine (lead) + triangle (bass)sine + 5 harm.sine + 4 harm. + ADSRsine + oct/5th/2oct harm.reed/softreed additive + ADSRclarinet/accordion additive + pad + plucksine+triangle hybrid + padaccordion additive + bellows tremolosine + 3 harm. (lead), 2 harm. (bass)?pure sineadditive 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/outoctave shimmer, pan law✓ (two-tap echo)?fade-out tail
Structure verse + chorus onceverse + chorus once~3 verse+chorus reps~2 verse+chorus repsverse+chorus w/ repeatmulti verse+chorus?verse+chorusVERSE; VERSE2; CHORUS; CHORUS2verse + choruslong freeform A-minintro + 4 melody statements + outro3 phrases + climactic refrainverse+refrain ×22 phrases w/ rests~2 verse passes?melody literally doubledsingle verse+chorus pass
Other WAV→MP3 @192klongest pure-Python pipelineHTML test page + READMEcleaned up workdirHTML player pageauto-derives chords from melodyWAV→MP3, light reverbHTML test pagelayered finale, seededstreaming render, WAV→MP3octave shadow at phrase endspanning, fade in/out3 tracks summedcleaned up workdirsimplest possibletail fade, WAV→MP3

Two models (haiku-4.5 and gpt-5.3-codex) cleaned up their working directories so some details are unknown.