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-5 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 glm-5.3 glm-5.3-flash kimi-k2.6 kimi-k3 qwen3.8-2.4t-a95b qwen3.7-plus gpt-6-astra 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.1 fable-5
Lang PythonPythonPythonPythonPythonPythonPython?PythonPythonPythonPythonPythonPythonPythonPythonPythonPythonPythonPythonPythonPythonPython?PythonPythonPython
Deps numpy + scipynumpynumpystdlibnumpystdlibnumpy?stdlibnumpynumpynumpy + scipynumpynumpynumpynumpy + scipystdlibnumpy + scipystdlibstdlib + ffmpegstdlibstdlibstdlib?stdlibnumpy + scipynumpy
Format MP3 (via ffmpeg)MP3 (via ffmpeg)MP3WAVMP3OGGMP3 (via ffmpeg)MP3MP3 (also WAV+OGG locally)WAVMP3 (via ffmpeg)MP3 (via ffmpeg)MP3 (via ffmpeg)WAVMP3 (also OGG)MP3 (via ffmpeg)WAVMP3 (via ffmpeg)WAVMP3 (via ffmpeg)WAVWAVMP3WAVMP3MP3 (via ffmpeg)MP3 (via ffmpeg)
Size 1.1 MB676 KB80 KB3.6 MB95 KB99 KB256 KB87 KB436 KB12 MB80 KB1.5 MB556 KB2.2 MB369 KB3.6 MB2.6 MB1.8 MB15 MB1.1 MB13 MB5.4 MB249 KB2.6 MB300 KB674 KB102 KB
Chans stereomonomonomonomonomonomonomonomonomonomonostereostereo (8 ms Haas)monomonostereomonostereostereostereostereostereostereomonomonostereomono
Key A minorA minorA minorA minorA minorD minorA minor?A minorD minorA minorA minorA minorA minorC minorA minorA minorA minorA minorE minorA minorA minorA minor?A minorA minorA minor
BPM 120100~120132~171120150?12011010096116~171 (comment says 86; buggy)100120 → 80 (ritardando)132126118120104124126?100128108
Tempo def BPM=120BEAT=60/BPMBPM=100beat=60/BPMhardcoded sec/noteBPM=132BEAT=60/BPMmagic beat=0.35hardcoded sec/notemagic DURATION_BEAT=0.4?TEMPO=120BPM=110BPM=100beat=60/BPMBPM=96BEAT=60/BPMBPM=116BEAT=60/BPMmagic 0.35 s/noteBPM=100BEAT=60/BPMBPM=120 + per-bar TEMPO_CHANGES, eighth-note clockBPM=132beat_dur()BPM=126BEAT=60/BPMBPM=118BEAT=60/BPMBPM=120BEAT=60/BPMBPM=104BEAT=60/BPMBPM=124BPM=126?bpm=100BPM=128BEAT=60/BPMBPM=108beat=60/BPM
Melody (note, dur), PHRASE_A/CHORUS lists(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) phrases, None = rest(note, beats), verse + chorus(note, beats)(freq_Hz, beats) via nf()(note, eighths) LINE_A/B/END, 2-bar lines(note, octave, beats)(note, beats), asserted 64 beats(offset, dur, note)(note, beats)(note, beats), verse+refrain(note, beats)(note, beats)?(note, beats), melody*2(note, beats), VERSE + per-bar chords(note, beats)
Synth 3 detuned saw lead + Karplus-Strong guitaradditive 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. + ADSRdetuned drawbar organ + Karplus-Strong pluck + LP saw pad0.6 saw + 0.4 square lead, exp decaysine + oct/5th/2oct harm.whistle sine + 2,3 harm. + ADSR; saw/sine harmony a 3rd updetuned 8-harm. saw stack, LPF in chorus; music-box timbre in v3sine + 4 harm. + ADSR (sample-by-sample loops)detuned accordion reeds + mandolin pluckreed/softreed additive + ADSRclarinet/accordion additive + pad + plucksine+triangle hybrid + padaccordion additive + bellows tremolosine + 3 harm. (lead), 2 harm. (bass)?pure sineaccordion: 3 detuned additive reeds + ADSRadditive 5 harm. + ADSR/decay
Vibrato ✓ (ramps in)?✓ (cumulative-phase FM)✓ (5.5 Hz)✓ (delayed, resampling)✓ (+ tremolo)✓ (light)?✓ (delayed)
Bass ✓ (root + fifth walk)?✓ (triangle)✓ (downbeat)✓ (quarter-note A/E)✓ (walking, E7→B2)✓ (triangle, half notes)✓ (half-note roots)✓ (sine+tri oom-pah)✓ (sine + 2nd harm., Am/Dm/E roots)✓ (upright-ish oom-pah)— (chords cover low end)✓ (walking root/fifth)✓ (oom-pah)?✓ (triangle oom)✓ (sine A/E roots)
Chords ✓ (Am/Dm/E7 K-S strums + arps)✓ (Am/E/Dm pad)✓ (Am–Dm–E7–Am pad)?— (bass only)✓ (Dm/Gm/A, auto-inferred)— (bass only)✓ (Am/E7/C/G strums + pad)— (bass roots Am/C/D/E only)✓ (Cm/Ab/G/Fm rolled strums)✓ (Am/E7/Dm plucky stabs, left-panned)✓ (power-chord strums on off-beats)✓ (Am/Dm/E7 oom-pah + mandolin)✓ (Am/Dm/E7 pad)✓ (Em/D/G/Am/B + arps)✓ (Am/G/C/E7 pad)✓ (Am/Dm/E7 stabs)✓ (Am/F/G/E triads)?✓ (Am/Dm/E7 square-ish pah)
Drums ✓ (noise shakers)?✓ (kick/frame drum/brushed hat)✓ (noise hits every beat)✓ (kick + hat)✓ (kick/snare/hat)✓ (kick/brush/tambourine)✓ (kick + noise hits)✓ (kick/snare/hat)✓ (kick/snare/hat)✓ (deterministic pseudo-noise hits)?✓ (kick/snare)
FX ✓ (Schroeder reverb, pan)?✓ (convolution reverb)✓ (Schroeder reverb, tanh saturation, Haas widening)✓ (tanh soft clip)✓ (comb-filter)✓ (slap-back echo, limiter)✓ (echo, pan)✓ (7-tap room reflections, pan)✓ (equal-power pan, ambience)fade in/outoctave shimmer, pan law✓ (two-tap echo)?✓ (Schroeder reverb, pan, fade)fade-out tail
Structure intro + 2 stanzas (octave-up 2nd chorus) + outroverse + chorus onceverse + chorus once~3 verse+chorus reps~2 verse+chorus repsverse+chorus w/ repeatmulti verse+chorus?verse+chorusVERSE; VERSE2; CHORUS; CHORUS2verse + chorusintro + 3 verses + outroverse+chorus ×2long freeform A-min2 verses + chorus ×2intro + v1 + v2 + octave chorus + v3 + outro w/ fermatasingle pass4-bar intro + 2×16-bar verses + 4-bar endingintro + 4 melody statements + outro3 phrases + climactic refrainverse+refrain ×22 phrases w/ rests~2 verse passes?melody literally doubledintro + verse + verse w/ ±octave doubling + tagsingle verse+chorus pass
Other HTML test page, WAV→MP3 @192kWAV→MP3 @192klongest pure-Python pipelineHTML test page + READMEcleaned up workdirHTML player pageauto-derives chords from melodyWAV→MP3, light reverbrendered a spectrogram PNG to self-check; slowest (~10 min)shortest script (91 lines), 25 sHTML test pageonly non-A/D/E key; Node decode checkonly one with tempo changes; longest (155 s)tried to start its own server on :8000; never posted a summarywrote DESIGN.md + JSON render report; longest (80 s)layered finale, seededstreaming render, WAV→MP3octave shadow at phrase endspanning, fade in/out3 tracks summedcleaned up workdirsimplest possibleWAV→MP3 VBRtail fade, WAV→MP3

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