SPEC.mdpreviewSPEC.mdsource266 lines · 16.2 KB · raw
1---
2title: TOO CHEAP TO METER
3theme: jev
4status: made
5song: song.js
6measured: {"date":"2026-09-25","song":"9622a5d6ded9","total":{"loudnessDbfs":-20.4,"peakDbfs":-1},"parts":{"bass":{"loudnessDbfs":-28.1,"peakDbfs":-17.5},"drums":{"loudnessDbfs":-33.2,"peakDbfs":-7.9},"kick":{"loudnessDbfs":-23.4,"peakDbfs":-8.9},"stabs":{"loudnessDbfs":-30.8,"peakDbfs":-10.5},"vocals":{"loudnessDbfs":-27.2,"peakDbfs":-5}},"sections":{"1-8":{"total":{"loudnessDbfs":-22.3,"peakDbfs":-8},"parts":{"kick":{"loudnessDbfs":-23,"peakDbfs":-8.9},"stabs":{"loudnessDbfs":-30.5,"peakDbfs":-10.6}}},"9-16":{"total":{"loudnessDbfs":-19,"peakDbfs":-1.3},"parts":{"bass":{"loudnessDbfs":-26.7,"peakDbfs":-17.5},"drums":{"loudnessDbfs":-31.9,"peakDbfs":-8},"kick":{"loudnessDbfs":-23,"peakDbfs":-8.9},"stabs":{"loudnessDbfs":-30.8,"peakDbfs":-11.2},"vocals":{"loudnessDbfs":-23.6,"peakDbfs":-5}}},"17-24":{"total":{"loudnessDbfs":-19.1,"peakDbfs":-1.7},"parts":{"bass":{"loudnessDbfs":-26.7,"peakDbfs":-17.5},"drums":{"loudnessDbfs":-31.9,"peakDbfs":-7.9},"kick":{"loudnessDbfs":-23,"peakDbfs":-8.9},"stabs":{"loudnessDbfs":-30.5,"peakDbfs":-10.5},"vocals":{"loudnessDbfs":-23.9,"peakDbfs":-5.8}}},"25-32":{"total":{"loudnessDbfs":-20.8,"peakDbfs":-2},"parts":{"bass":{"loudnessDbfs":-26.7,"peakDbfs":-17.5},"drums":{"loudnessDbfs":-31.7,"peakDbfs":-8.1},"kick":{"loudnessDbfs":-23,"peakDbfs":-8.9},"stabs":{"loudnessDbfs":-30.9,"peakDbfs":-12.4},"vocals":{"loudnessDbfs":-82,"peakDbfs":-51.1}}},"33-40":{"total":{"loudnessDbfs":-20.8,"peakDbfs":-1.9},"parts":{"bass":{"loudnessDbfs":-26.7,"peakDbfs":-17.5},"drums":{"loudnessDbfs":-31.8,"peakDbfs":-8.1},"kick":{"loudnessDbfs":-23,"peakDbfs":-8.9},"stabs":{"loudnessDbfs":-30.8,"peakDbfs":-11.9},"vocals":{"loudnessDbfs":-194.6,"peakDbfs":-153.7}}},"41-48":{"total":{"loudnessDbfs":-19.5,"peakDbfs":-1},"parts":{"bass":{"loudnessDbfs":-26.7,"peakDbfs":-17.5},"drums":{"loudnessDbfs":-31.9,"peakDbfs":-8},"kick":{"loudnessDbfs":-23,"peakDbfs":-8.9},"stabs":{"loudnessDbfs":-30.8,"peakDbfs":-10.8},"vocals":{"loudnessDbfs":-25.2,"peakDbfs":-5}}},"49-56":{"total":{"loudnessDbfs":-19,"peakDbfs":-1.6},"parts":{"bass":{"loudnessDbfs":-26.7,"peakDbfs":-17.5},"drums":{"loudnessDbfs":-31.9,"peakDbfs":-8},"kick":{"loudnessDbfs":-23,"peakDbfs":-8.9},"stabs":{"loudnessDbfs":-30.6,"peakDbfs":-11.3},"vocals":{"loudnessDbfs":-23.9,"peakDbfs":-5.8}}},"57-64":{"total":{"loudnessDbfs":-24.6,"peakDbfs":-8.3},"parts":{"bass":{"loudnessDbfs":-51.3,"peakDbfs":-24},"drums":{"loudnessDbfs":-75.8,"peakDbfs":-44.3},"kick":{"loudnessDbfs":-25.9,"peakDbfs":-8.9},"stabs":{"loudnessDbfs":-30.3,"peakDbfs":-10.7},"vocals":{"loudnessDbfs":-84.2,"peakDbfs":-53.5}}}}}
7critic:
8  date: 2026-09-25
9  model: jev-1.13.0
10  method: rubric-1
11  art: 0.59
12  artRuns: [0.59, 0.6, 0.59]
13  criteria:
14    hook: 2.9
15    development: 3.1
16    structure: 3
17    concept: 3.6
18    originality: 3.1
19    craft: 2.1
20ideas:
21  - date: 2026-09-24
22    model: claude-opus-5-5
23    harness: claude-code
24    prompt: "Research Jev's real use cases; jab at people using Jev where deterministic code would do better, such as game bots."
25    brief: "French house at 124 bpm. A vocoder sings the price list: \"input tokens, forty-two per billion… output tokens: FREE\". The chorus answers with \"It's free real estate\". The verses list what Jev is actually good at: \"route the ticket, flag the jailbreak, gate the sudo\". Filtered disco chords, and vocals in the verses and hook only."
26revisions:
27  - rev: 1
28    date: 2026-09-24
29    model: claude-opus-5-5
30    harness: claude-code
31    prompt: "French house at 124 bpm. A vocoder sings the price list: \"input tokens, forty-two per billion… output tokens: FREE\". The chorus answers with \"It's free real estate\". The verses list what Jev is actually good at: \"route the ticket, flag the jailbreak, gate the sudo\". Filtered disco chords, and vocals in the verses and hook only."
32    output: null  # overwritten by rev 2
33    art: 0.55
34    artRuns: [0.55, 0.56, 0.55]
35  - rev: 2
36    date: 2026-09-24
37    model: claude-opus-5-5
38    harness: claude-code
39    prompt: "Let Jev arrange the song as it plays. Split it into named parts and name each 8-bar section with the sections allowed to follow it; at every section Jev picks the next section, the move to play it with (as written, no drums, drums and bass, or stabs and drums), and how intense it is, and ends the song by choosing the outro, with a cap of 16 sections. Tell Jev the tempo, key, chords, lyrics and everything played so far, and how the listener reacted. Without Jev it plays as written."
40    output: null  # overwritten by rev 3
41    art: 0.62
42    artRuns: [0.61, 0.62, 0.62]
43  - rev: 3
44    date: 2026-09-24
45    model: claude-opus-5-5
46    harness: claude-code
47    prompt: "Let Jev set each part (stabs, kick, claps and hats, bass, vocals) to out, back or full per section, and choose how the song moves into each section (cut, clap-roll fill, riser, or a one-beat dropout)."
48    output: null  # overwritten by rev 4
49    art: null  # not scored: the song.js before rev 4 was recorded is rev 2's, not rev 3's
50  - rev: 4
51    date: 2026-09-25
52    model: claude-opus-5-5
53    harness: claude-code
54    prompt: "Stop the mix clipping: peaks under -1 dBFS with a master level, the kick down and the stabs up to within about 8-10 dB of it, so the intro is carried by the sweep. One riser into the drop, written on the last two beats of bar 24 after \"It's free real estate\" ends, and Jev offered only the transitions that suit each section. Every path sings verse 2 before the outro. The ending always plays: the outro's kick through bar 60 and its stabs are not Jev's. Re-render \"Gate the sudo command\" so it reads back as sudo, dry and over the kick. A real crash on 25, not a ride. Ask Jev only about the parts a section has; vocals back or full in the verses and hooks, never out. Describe drop 2 and the energy steps truthfully. The fill replaces the backbeat clap in its bar. Credit the meme to Tim Heidecker."
55    output: song.js
56    art: 0.59
57    artRuns: [0.59, 0.6, 0.59]
58---
59
60# TOO CHEAP TO METER — spec
61
62`song.js` is generated from this spec. Change the spec first, then the song.
63
64## Intent
65
66A celebration of Jev's pricing and of the jobs it is actually built for.
67Facts it rests on (`~/brains/personal/technology/artificial-intelligence/jev/jev.md`, from TypeSafe's launch post):
68input tokens cost $42 per billion ("$0.042 / MTok"), output tokens are
69"FREE (too cheap to meter)", and a response takes 70–500 ms. TypeSafe's named
70use cases: classification and routing, monitoring LLM agents for jailbreaks,
71model routing, and safety review of commands.
72
73## Style
74
75- Filter house, 124 bpm, A minor: Am7 – D9 – Gmaj7 – Cmaj7, two bars each.
76- Chopped disco chord stabs (supersaw) under a slow low-pass sweep that opens
77  over each 8-bar phrase; four-on-the-floor kick, open hats on the off-beat,
78  claps on 2 and 4; a pumping octave bassline; a crash (`hh27:1`) on the
79  drop's downbeat.
80- The mix peaks at or under -1 dBFS at the loudest Jev can pick (every part
81  full, energy all out), with a master level on the final stack: superdough
82  has no limiter. The stabs sit within about 8-10 dB of the kick, so the
83  intro is carried by the opening sweep, not a kick solo. The open stab layer
84  in the drop keeps some resonance (`lpq(3)`) and sits a touch above the
85  swept layer, so the drop does not dip when the filter opens.
86
87## Structure
88
8964 bars (~2:04).
90
91| Bars | Section | Contents |
92|---|---|---|
93| 1–8 | Intro | Filtered chord stabs and kick; filter opens |
94| 9–16 | Verse 1 | Vocoder: the price list |
95| 17–24 | Hook | "Output tokens: free" → "It's free real estate", call and response, one pair per chord; the last call is "Too cheap to meter"; the white-noise riser on the last two beats of bar 24, after the last "It's free real estate" ends |
96| 25–40 | Drop 1 | Instrumental: filter fully open, bassline, claps; crash (`hh27:1`) on 25 |
97| 41–48 | Verse 2 | Vocoder: what Jev is for |
98| 49–56 | Hook | As before |
99| 57–64 | Outro | Filter closes over four more bars of kick; kick stops after bar 60, the rest after 62; last stab on 63 rings |
100
101## Vocals
102
103- Vocoder, one line per 2 bars, each on its chord:
104  1. "Input tokens, forty-two per billion" — Am7
105  2. "Output tokens: free" — D9
106  3. "Seventy to five hundred milliseconds" — Gmaj7
107  4. "Too cheap to meter" — Cmaj7
108  5. "Route the ticket" — Am7
109  6. "Flag the jailbreak" — D9
110  7. "Gate the sudo command" — Gmaj7
111  8. "Too cheap to meter" — Cmaj7 (reuses line 4)
112- Hook: "Output tokens: free" rendered on each chord it lands on (Am7, D9,
113  Gmaj7), answered each time by the meme; the fourth call is line 4.
114- Meme: "It's free real estate": Tim Heidecker as Jim Boonie, "Free House
115  For You, Jim", Tim and Eric Awesome Show, Great Job! (2009), answering
116  "Output tokens: free" in each hook.
117
118Line 7 was "Gate the sudo". Five renders of that short line, with different
119spellings and dry mixes, all came back from whisper as other words ("Keep
120this here though", "See you later"), so the lyric grew a word: "Gate the
121sudo command". That render still read back as "Gate the PSEUDO command" dry
122and "HATE the pseudo command" over the kick, so it was re-rendered
123(2026-09-25) spelled "Gate, the sue-doo command": the comma gives "Gate"
124room and the spelling keeps "sudo" from turning into "pseudo". A render of
125this line is accepted only when whisper.cpp (`ggml-base.en`) reads back
126"gate the sudo command" both dry and over the four-on-the-floor kick.
127
128Every vocal section starts on a multiple of 8 bars, so each line lands on
129the first bar of its chord (the harmony cycles every 8 bars).
130
131## Jev in the booth
132
133Jev arranges the song as it plays, as two jevs declared at the top in
134TypeSafe's own shape (`jev({ state, questions })`, `website/src/jev/`), both
135given the song as state (subject, tempo, key, chords, lyrics):
136
137- **`formJev`** asks one choice: which **section** plays next, among the
138  song's eight 8-bar sections.
139- **`djJev`** asks, once that is decided, a level per part (the chord stabs, the kick, the claps and hats, the bass, the vocals:
140  out, back or full, where the section has that part), a choice of how the
141  song moves **into** the section, and a score for the section's **energy**.
142  Questions in one request cannot see each other's answers, so it is a
143  second request, told the section just chosen (`after: { section }`).
144
145Both are asked every 8 bars (`.every(8, …)`), and the answers are
146composed in ordinary Strudel at the bottom: `walk` holds the form's rules,
147each part plays at its level, the transition plays over the last bar before
148the section, and `energy.score` scales the velocity.
149The kick is its own part, apart from the claps and hats, so Jev can take
150out the four on the floor alone and bring it back: the filter-house
151drop.
152
153**The form.** A section may be followed only by these:
154
155| Section | Bars as written | May be followed by |
156|---|---|---|
157| `intro` | 1–8 | verse1 |
158| `verse1` | 9–16 | hook1 |
159| `hook1` | 17–24 | drop |
160| `drop` | 25–32 | drop2 |
161| `drop2` | 33–40 | verse2 |
162| `verse2` | 41–48 | hook2 |
163| `hook2` | 49–56 | outro, drop, verse1 |
164| `outro` | 57–64 | (the end) |
165
166Every path sings verse 2 before the outro: the outro follows only hook 2,
167which follows only verse 2, and the drop's second half leads only to
168verse 2. The brief's "route the ticket, flag the jailbreak, gate the sudo"
169is the song's point, so no arrangement may skip it.
170
171These rules are code (`walk`), not Jev: each request offers Jev only the
172sections allowed next. The written order is always allowed, and it is what
173plays when Jev can't be reached. The song ends when Jev picks the outro,
174whose closing filter and last stab always ring out; at 16 sections (about 4
175minutes at 124 bpm) the outro is forced. Sections stay on the 8-bar grid, so
176the stab filter still opens over each phrase wherever a section lands.
177
178**The parts.** Each part's level is a choice of three: out (silent for the
179section), back (half velocity, about 6 dB under the rest of the mix) and
180full (as written). Each question says what the part is and where it plays
181as written, so Jev can drop parts to build tension or make space, pull them
182back to let others speak, and bring them in full for the payoff. A part
183keeps its own masks, so vocals still appear only where the structure table
184puts them.
185
186Jev is asked only about the parts a section has; in the verses and hooks
187the vocals are back or full, never out, since the words are the song. A
188part the section does not have is set to full in code and not asked (the
189history marks it forced, not answered): the vocals outside the verses and
190hooks, the claps, hats and bass in the intro and outro, and every part in
191the outro, which is all ending. When Jev can't be reached, every part plays
192in full.
193
194Each part plays on its own orbit, named for its question (`stabs`, `kick`,
195`drums`, `bass`, `vocals`), so the browser's meter hears each one alone;
196the ending's stabs and kick play on the `stabs` and `kick` orbits, and the
197transitions on their own, `into`, since no part's level controls them.
198
199**The ending always plays**: the closing filter over the outro's stabs, the
200kick through bar 60 and the last stab. The outro's parts are not Jev's, so
201the song always finishes as written.
202
203**Into the next section.** Over the last bar of each section, the song
204plays how Jev chose to move into the next one: a straight cut, a fill
205(a clap roll doubling up into the first beat, replacing the backbeat clap
206in its bar), a riser (a lift into a section that has none of its own: the
207song's white-noise riser sweeping up), or a dropout (every part stops for
208the last beat). The last bar reads the next section's answer, so the
209transition fits where the song is going. The outro has no next section, so
210nothing plays over its last bar and its last beat is never cut. When Jev
211can't be reached, it is a cut.
212
213Which transitions suit which section is code (`allow`), so Jev is offered
214only those, and a cut is always one of them:
215
216| Into | Offered |
217|---|---|
218| a verse | cut, fill |
219| a hook | cut, fill, riser |
220| `drop` | cut, fill, dropout |
221| `drop2` | cut, fill |
222| `outro` | cut, dropout |
223
224The drop's riser is written: hook 1 ends on it, on the last two beats of
225bar 24, after the last "It's free real estate" ends, so a second riser is
226never offered into the drop to stack on it and sweep over the meme.
227
228**A little chance.** The section is sampled from Jev's
229probabilities at temperature 0.7 (`sample`), so two plays of the song can
230take different paths; the strip shows Jev's top pick beside the one
231sampled. A close call between
232sections is where sampling matters most, so there is no confidence
233threshold: an unsure Jev still picks, and the written order plays only
234when Jev can't be reached.
235
236**Energy** is a four-step ladder. It scales every part's velocity together,
237so the mix keeps its balance: held back is about 5 dB down (0.55), steady
238about 3 dB down (0.7), driving just under as written (0.85, about 1.4 dB
239down) and all out as written (1). No filter is added: the stabs, bass and
240riser already set theirs.
241
242- Bars 1–8 always play as written.
243- Each request tells Jev the song's state (subject, tempo, key, chords,
244  lyrics), every answer so far, where the song is in its form (the sections
245  allowed next, and those left before the cap), how loud each finished
246  section measured in the browser, and the 🔥/😴 reactions from the
247  listener's tab.
248- This relaxes the constraints below that the song plays once in a fixed
249  order and never varies by chance: the arrangement varies with Jev's
250  choices, which are judgments, with a little sampled chance in the form.
251
252## Constraints
253
254- Plays once from bar 1 and ends; never loops. Sections are absolute-cycle
255  masks, so playback starts from stopped.
256- Structured: patterns vary by section, never by chance. (Random chopping
257  read as noise on the first song.)
258- No sustained background pad; harmony comes from rhythmic parts.
259- Vocals only where the structure table puts them; drops are instrumental.
260- Meme clips are the real audio (myinstants, or YouTube via yt-dlp), cut at
261  word timings measured with whisper.cpp. Vocoder lines are made with
262  `speak` + `vocode` on the chord they land on, and checked by transcribing
263  the result with whisper.cpp. Everything lands in `samples/<sound>/` with
264  a provenance row in `samples/README.md`.
265- Samples load from `samples('jev-samples/strudel.json')`; drums from
266  `github:tidalcycles/dirt-samples`.