Four shipped patches on a read-only shelf: ✦ the heartbeat (boom-bap, mpc 8-4, kick duck), ✦ the wheel within the wheel (WHEELS polymeter — kick 16 / hat 12 / clap 10), ✦ the squeeze (GODSQUASH — the market & quakes pump the master), ✦ quiet arrival (gentle earth-echo ambient, no drums). git-tracked in factory/, authored in the client's serializePatch shape. Course-correction from the brief's stale anchor: the template select reads /api/presets (account-based, auth.py), NOT the hub's legacy patchList — so the factory shelf is injected there. list_factory() + load_factory() prepend the ✦ patches for every signed-in player; PUT/DELETE on a ✦ name → 403 (read-only); a missing factory/ degrades to []. test_factory.py (deploy-excluded) validates shape. Verified: HTTP dispatch serves the 4 ✦ names leading the list, loads one, rejects writes (403), user saves still work, traversal/missing → None, zero index.html changes. Taste disclaimer: these are structural drafts — correct shape is the deliverable, beauty is the human's. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
376 lines
5.2 KiB
JSON
376 lines
5.2 KiB
JSON
{
|
|
"name": "✦ the squeeze",
|
|
"data": {
|
|
"routes": [
|
|
{
|
|
"source": "crypto.vel",
|
|
"dest": "squash",
|
|
"amount": 0.9,
|
|
"curve": "lin",
|
|
"gate": null,
|
|
"quantize": null,
|
|
"label": "the market pumps the master"
|
|
},
|
|
{
|
|
"source": "quake.event",
|
|
"dest": "squash",
|
|
"amount": 0.7,
|
|
"curve": "exp3",
|
|
"gate": null,
|
|
"quantize": null,
|
|
"label": "a quake heaves the whole mix"
|
|
}
|
|
],
|
|
"tweaks": {},
|
|
"seqs": {
|
|
"drum.kick": {
|
|
"on": true,
|
|
"steps": [
|
|
1,
|
|
0,
|
|
0,
|
|
0,
|
|
1,
|
|
0,
|
|
0,
|
|
0,
|
|
1,
|
|
0,
|
|
0,
|
|
0,
|
|
1,
|
|
0,
|
|
0,
|
|
0
|
|
],
|
|
"vel": [
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8
|
|
],
|
|
"chance": [
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1
|
|
],
|
|
"rat": [
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1
|
|
],
|
|
"lock": [
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1
|
|
],
|
|
"len": [
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1
|
|
],
|
|
"wlen": 16
|
|
},
|
|
"drum.hat": {
|
|
"on": true,
|
|
"steps": [
|
|
0,
|
|
0,
|
|
1,
|
|
0,
|
|
0,
|
|
0,
|
|
1,
|
|
0,
|
|
0,
|
|
0,
|
|
1,
|
|
0,
|
|
0,
|
|
0,
|
|
1,
|
|
0
|
|
],
|
|
"vel": [
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8
|
|
],
|
|
"chance": [
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1
|
|
],
|
|
"rat": [
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1
|
|
],
|
|
"lock": [
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1
|
|
],
|
|
"len": [
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1
|
|
],
|
|
"wlen": 16
|
|
},
|
|
"drum.snare": {
|
|
"on": true,
|
|
"steps": [
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
1,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
1,
|
|
0,
|
|
0,
|
|
0
|
|
],
|
|
"vel": [
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8,
|
|
0.8
|
|
],
|
|
"chance": [
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1
|
|
],
|
|
"rat": [
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1
|
|
],
|
|
"lock": [
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1,
|
|
-1
|
|
],
|
|
"len": [
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1
|
|
],
|
|
"wlen": 16
|
|
}
|
|
},
|
|
"bpm": 120,
|
|
"groove": {
|
|
"amount": 1,
|
|
"preset": "straight",
|
|
"swing": 0,
|
|
"humanize": 0.03,
|
|
"velo": 0.12
|
|
},
|
|
"scale": {
|
|
"root": 0,
|
|
"name": "minor_pent"
|
|
}
|
|
}
|
|
} |