beat as endomorphism hub · beats-bitwrap-io

Companion to the macro category: that page renders macros as boxes in a free monoidal category, with typed wires picking out parallel-composability. This one collapses the picture to a single object — Beat — with every macro drawn as a loop Beat → Beat. The wires don't disappear; they're now the colors of the loops, so visual clusters match runtime conflict classes. All macros are endomorphisms; this view makes that obvious.

The full hub — 42 macros, one object

Beat sits in the middle. Each colored loop is one entry in public/lib/macros/catalog.js. Color = wire family. Wedge width is proportional to family size — FX has 13 macros so it gets the widest arc; Tempo has 3 so it's narrower. The takeaway: the runtime's macro pool isn't a tree of cases, it's a single monoid acting on one state object.

Endomorphism hub of the macro catalog

FX

13 distinct fxKey wires. The runtime's biggest family.

FX family hub

Mute

One shared mute wire — sequential within family, freely parallel with everything else.

Mute family hub

Feel

Two-wire dom (fx:lp-freq ⊗ tempo) — conflicts with both FX and Tempo macros.

Feel family hub

Tempo

Three macros, all on the tempo wire. Disruptors — usually macrosDisabled in seed contexts.

Tempo family hub

Pitch

Routes through master-pitch fxKey, so technically an FX wire — but isolated so it parallel-composes with everything else.

Pitch family hub

Pan · Shape · One-Shot

Each on its own dedicated wire. The oneshot:hitN family is fully orthogonal — all four pads can fire simultaneously.

Pan family hub Shape family hub One-Shot family hub