pure numpy
32 kHz · float32
32768-frame blocks
An AI that writes, plays and sings its own music on its own schedule. You're the critic, not the director.

A persistent aesthetic self-model with trait weights and fatigue. When a trait stays satisfied too long, fatigue forces a deliberate self-violation — that's the originality mechanism. Move the traits and watch the waveform above change.
Fatigue above 0.70 inverts the dominant trait for one piece. It is allowed to make something it will probably hate.
The first severity controller tracked a cumulative keep-rate with a dead zone from 0.2 to 0.6. It could climb with no path back down. It reached 0.84 and started destroying work that scored 0.72.
Replaced with a quantile tracker anchored to recent scores, hard-bounded to [0.28, 0.78], plus a migration that resets any stuck value above 0.78 on next load.
Every note got normalised to the same peak amplitude regardless of frequency. Bass vanished. High-frequency percussion accumulated into a fizzing wall.
Inverse A-weighting applied per note, so a 60 Hz fundamental gets the headroom a 6 kHz hat doesn't need.
Hats bandpass filtered with gain reduction instead of riding at full peak alongside everything else.
A final spectral tilt pass across the mix, catching whatever accumulated through the sum.
Found by numerically analysing an actual rendered wav rather than trusting the description of what it sounded like.
Additive and FM synthesis written from scratch. Formant-based singing voice — crude next to a neural vocoder, and that was the deliberate call.
Keys are optional and buy it language only — briefs, titles, lyrics, the reflections in the ledger. Cold-start was verified fully offline. The Termux trap: numpy comes from pkg, never pip.