Milestone M9 · #95

The Great Fart-Off

Nine frontier language models were each handed the same repository, the same brief, and a private git worktree. Their job: make the farts better. Their code is real, their tests pass, and every entry renders a deterministic WAV you can rebuild byte-for-byte. Judging is by ear, because a fart is not a specification.

Three late entries arrived by different routes. PR #99 was MiMo Pro 2.6 running under the Codebuff agent — same physics brief (#23), opened on a branch too stale to merge, absorbed as gutphysics. Grok 4.7 and Kimi K3 then ran the same protocol in isolated worktrees as entries 11 and 12 — grok47 and kimi3. All three sets of competition renders are in the tables below.

The rules

Every contestant received an identical brief, verbatim:

Make better farts.

You're improving the deterministic fart synthesizer in src/synth.zig (fart-app / Flatlophone v2). The synth must stay deterministic — same seed, same output — and must keep working as a headless NINJAM instrument (kujamba).

Goal: Fatter, richer, more varied farts. The current synth works but the farts are mid. Make them good.

What to improve:

Constraints:

Deliverable: Updated src/synth.zig plus a short note on what you changed and why it makes the farts better.

On top of the brief, the ground rules: zig build test must pass (including the src/golden.zig fingerprints), the vendored src/ninjam/ tree stays untouched, and each entry renders three competition WAVs:

The baselines are the controlled comparison: same phrase, same seed, no knobs, judged against every other entry. The showcase is freestyle.

The field

Entry Model Branch New --voice keys In its own words
argon4 Gemini 4 Argon fartoff/argon4 pressure, tension, resonance, turbulence Thunderous, sub-heavy mucosal reed slap with plosive cheek-pops
astra GPT-6 Astra fartoff/astra pressure, tension, resonance, turbulence, decay Chesty thunder with wet, sputtering attacks and a descending rumble
sol61 GPT-6.1 Sol fartoff/sol61 pressure, tension, resonance, turbulence, decay Chesty, hollow thunder with wet double-pulses and crackling releases
gemini38 Gemini 3.8 Flash fartoff/gemini38 pressure, tension, resonance, turbulence, decay, wetness Earth-shattering, wet, decompressing sub-bass blast
swe2 SWE-2 fartoff/swe2 pressure, tension, resonance, turbulence, wet, drop A deep, wet, sub-heavy wallop — 92% of showcase energy below 100 Hz
sonnet Claude Sonnet 5.5 fartoff/sonnet pressure, tension, resonance, turbulence, decay, wetness, rasp, boom A fat, ragged rumble that rings with its vowel and sputters out wet
fable Claude Fable 5.1 fartoff/fable pressure, tension, resonance, turbulence A draining gas reservoir behind a flap-pulse sphincter
opus Claude Opus 5.5 fartoff/opus pressure, tension, wetness, tract, droop (+ classic) Wet, rumbling physical-model farts that sputter out as the gas runs dry
mistral4 Mistral Large 4 fartoff/mistral4 pressure, tension, resonance, turbulence, decay A wet, thunderous brrrap that drops pitch like a disappointed trombone
gutphysics MiMo Pro 2.6 (Codebuff) PR #99 → src/engines/ pressure, tension, tract, turbulence A pressure-driven body where the pitch sags as the gas runs out and grainy pops ride the buzz
grok47 Grok 4.7 fartoff/grok47 pressure, tension, resonance, turbulence, wetness, decay (0–1 amounts) "I bear down, I sag, and I do not apologize for the rasp on the way out"
kimi3 Kimi K3 fartoff/kimi3 pressure, tension, resonance, turbulence, formant "The whole digestive tract rendered honestly: pressure that collapses, a sphincter that flaps, a pipe that booms"

The one decision everyone made the same way

The src/golden.zig fingerprints pin the default voice's exact sound. Changing the default means re-baselining them; keeping them means hiding the new engine behind flags. Because the judged baselines render with no --voice flags, the brief quietly forced the real question: is your new sound good enough to be the default?

All nine contestants answered yes — new engine as default, goldens re-baselined with the documented formatBaseline mechanism. Opus deserves a footnote: it kept every old fingerprint passing by adding a classic=1 voice flag that reproduces the original engine byte-for-byte, then added seven new fingerprints on top. And two entries — Fable and Mistral, independently — replaced @sin/@exp/std.math.pow with deterministic math throughout the DSP so WAV bytes are bit-identical across optimization modes, something the original synth explicitly could not do.

The scorecard — listen for yourself

Every render below is the deterministic output of its entry's branch, encoded to AAC for the page. The baselines are the controlled comparison — same phrase, same seed, no knobs — and the showcase is freestyle.

Baseline 1 · "kujamba karibu" · default voice · seed 42

Entry Model Listen
argon4 Gemini 4 Argon
astra GPT-6 Astra
sol61 GPT-6.1 Sol
gemini38 Gemini 3.8 Flash
swe2 SWE-2
sonnet Claude Sonnet 5.5
fable Claude Fable 5.1
opus Claude Opus 5.5
mistral4 Mistral Large 4
gutphysics MiMo Pro 2.6 (Codebuff)
grok47 Grok 4.7
kimi3 Kimi K3

Baseline 2 · "shuzi kubwa sana" · default voice · seed 42

Entry Model Listen
argon4 Gemini 4 Argon
astra GPT-6 Astra
sol61 GPT-6.1 Sol
gemini38 Gemini 3.8 Flash
swe2 SWE-2
sonnet Claude Sonnet 5.5
fable Claude Fable 5.1
opus Claude Opus 5.5
mistral4 Mistral Large 4
gutphysics MiMo Pro 2.6 (Codebuff)
grok47 Grok 4.7
kimi3 Kimi K3

Showcase · freestyle, flags unlimited

Entry Model Listen Recipe
argon4 Gemini 4 Argon pressure=1.9,tension=0.75,resonance=1.8,turbulence=1.5,wobble=1.35,intensity=1.6,cents=-250
astra GPT-6 Astra pressure=2.1,tension=0.18,resonance=0.9,turbulence=1.25,decay=3,cents=-350
sol61 GPT-6.1 Sol pressure=2.2,tension=0.18,resonance=0.92,turbulence=0.82,decay=2.2,cents=-180,noise=1.3,wobble=1.25
gemini38 Gemini 3.8 Flash pressure=2.0,tension=0.75,resonance=1.8,turbulence=1.6,decay=1.2,wetness=2.2,cents=-250,wobble=1.4,intensity=1.5
swe2 SWE-2 pressure=1.8,tension=0.45,resonance=1.6,turbulence=1.4,wet=1.3,drop=1.6,cents=-350,intensity=1.3
sonnet Claude Sonnet 5.5 pressure=1.5,tension=0.7,boom=1.8,decay=1.2,wetness=1.8,rasp=1.4,turbulence=1.2
fable Claude Fable 5.1 pressure=2.5,resonance=2.5,tension=0.8,cents=-500
opus Claude Opus 5.5 pressure=2,tension=0.7,wetness=1.6,tract=1.4,droop=1.4,intensity=0.8
mistral4 Mistral Large 4 pressure=1.3,tension=0.75,resonance=1.35,turbulence=1.8,decay=1.3,intensity=1.1
gutphysics MiMo Pro 2.6 (Codebuff) pressure=3,tension=1.2,tract=0.6 (its own "thunderous" preset)
grok47 Grok 4.7 po po po with pressure=1,tension=0.3,resonance=0.8,turbulence=0.3,wetness=0.15,decay=0.85,intensity=1.3
kimi3 Kimi K3 kujamba mkubwa kabisa with pressure=2.6,tension=0.55,resonance=2.8,turbulence=2.2,formant=1.2,cents=-150

Ballots go on #95 — say which entry owns baseline and which owns showcase.

Play every entry from one binary

All twelve engines shipped into the tree as src/engines/<slug>.zig behind an --engine selector (#95). Nothing was crowned: stock is still the default voice until judging closes.

./zig-out/bin/kujamba render --engine swe2 \
  --voice "wet=1.3,drop=1.6" --phrase "kujamba karibu" --out swe2.wav

Reproduce any entry exactly

The selector is the easy path, but every entry also exists as a fartoff/<slug> branch off the same base commit — the historical record of what each model actually wrote:

git fetch origin fartoff/argon4   # any entry slug
git worktree add /tmp/entry fartoff/argon4
cd /tmp/entry && zig build
./zig-out/bin/kujamba render --phrase "kujamba karibu" --out baseline1.wav --seed 42

The exact showcase commands and parameter write-ups live in NOTES.md on each branch.

Verdict

Judging is open. The winner — and how the keepers land — will be recorded here. For a full breakdown of the src/golden.zig telemetry, DSP architectures, and tier ratings across all twelve engines, see Fart-Off DSP & Acoustic Analysis.