Skip to content

Improvement: the site builds Rytm sets on Modwerk's base, send-bus only with a send effect - #1085

Merged
repeat98 merged 7 commits into
repeat98:mainfrom
stigmagit:improvement/rytm-site-modwerk-base
Nov 5, 2026
Merged

repeat98 merged 7 commits into
repeat98:mainfrom
stigmagit:improvement/rytm-site-modwerk-base

Conversation

@stigmagit

@stigmagit stigmagit commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

Step 3 of the Rytm base plan studied on #878 ("Rytm: moving the site's builds to the Modwerk base", 29 October): the site builds Analog Rytm MKII sets on Modwerk's own base instead of irpina's unchanged core-ar2-0.7.elemod, so the send effects can link there. CHORUS (#1060), FLANGER (#1061) and PHASER (#1062) are merged, but they are still in _submissions/, because irpina's core cannot link them.

  • What was wrong or hard: the site linked every Rytm set with irpina's core-ar2 0.7, which has no mw_fx collection and no mw_fx_rate, mw_fx_onepole or mw_fx_tempo exports, so the merged send effects could not be offered. Switching every build to the base with the bus would have cost every Rytm set about 83 KB of the 128 KiB mod area and 62 of the 64 kit storage bits, even with no effect.
  • What this changes (option B of the study, since a set without a send effect should not pay for the bus). You have not chosen between A, B and C on Analog Rytm MKII: Send FX submission (0.1.0-experimental) #878 yet, so B is our proposal. If you prefer A (one base for every build), the change is to drop the plain variant: every Rytm set then builds on send-bus.
    • Two variants of the base, as the Octatrack base's USB Audio layouts: base.json's variants names send-bus (the default, with add: identity 0c92aa45…, unchanged since Improvement: the Rytm base carries the send bus, and send effects join its FX list #1057) and plain (core-ar2 0.7's source alone: e558ad22…, Improvement: Modwerk builds its own Analog Rytm MKII base from core-ar2 0.7's source #1047's identity). npm run machine:base builds both, checks both against irpina's release (reference.keeps), and records both in base-binding.json's variants; --out writes each under its catalogue name.
    • The packages, built from the owner's OS 1.74 with the reviewed toolchain, committed as Filter Hz's are: sdk/imports/packages/modwerk-base-analog-rytm-mkii/ and vendor/elekloader/catalog/, pinned by the record sdk/imports/elekloader-modwerk-base-analog-rytm-mkii-2026-10-30.json (source: this branch's commit 42df786). Stock-free, as irpina's: each site has a stock_sha256 and Modwerk's new bytes, copied is empty, and the build fills stock bytes from the user's OS.
    • The choice in the builder (src/engine/elekloader/machine-build.ts): selectionCatalog cuts the Rytm's cores to the variant the selection needs, by identity: send-bus when it holds a module listed in fx-ids.json (which modules:check already ties to every module contributing to mw_fx), plain otherwise. planBuild and prepareBuild use it; a catalogue without that variant plans no core, so the build fails closed. The kit is unchanged.
    • irpina's core-ar2 0.7 and 0.3 stay in the catalogue, never built on: 0.7 is the release machine:base checks the base against.
    • Storage. Both variants are core-ar2 0.7's store, the same version, so a configuration's lockfile carries over from irpina's release and between the variants: adding a send effect keeps every module's fields in place and adds the bus's (7 sound, 62 kit, 7 project bits). Old configuration backups import as before (new catalogue revision).
    • Docs and profile: machine.json's toolchain and budgets (plain 11,716 B; send-bus 95,171 B), the interface's status, the MACHINE_RECIPE row (the Modwerk base is the release authority) and Base piece, the Rytm guide and base guide, the vendored kit README.
  • How I checked it (the owner's stock OS 1.74, sha256 cb0f99d6…e123; Homebrew m68k-elf GCC 16.2.0 + binutils 2.47; kit 0.7.0):
    • npm run machine:base -- analog-rytm-mkii --stock … rebuilds both identities byte for byte.
    • src/engine/elekloader/rytm-base.test.ts, in CI: each variant is served and pinned by its identity; only send-bus has mw_fx and the three exports, and only it keeps storage; every Rytm module (library and _submissions) whose build.json contributes to mw_fx is in fx-ids.json and plans on send-bus.
    • The same file, locally with the stock OS (MODWERK_RYTM_STOCK, and MODWERK_RYTM_FX = build-elemod-packages.mjs --drafts output for chorus, flanger and phaser): through the site's prepareBuild and buildWithLock and the kit's worker logic, three whole builds, each writing a .syx:
      • Loop Sync + Filter Hz on plain (e558ad22): test.syx 2,063,904 B;
      • CHORUS alone on send-bus (0c92aa45): 2,075,936 B;
      • Loop Sync + CHORUS + FLANGER + PHASER on send-bus, from the plain set's lockfile: 2,084,128 B. All 32 Loop Sync fields keep their place; the bus's 5 fields come on top.
    • digi-build.test.ts: Filter Hz, Loop Sync and an empty set plan on plain; a set with CHORUS plans on send-bus, and fails closed when the catalogue lacks it. test_machine_base.py: each variant stages with or without add, and the binding records each.
    • npm run pr:ready: Ready.
    • On a unit, plain variant, 4 November (Steve's Analog Rytm MKII; each result is what he reported, by ear and eye):
      • Build: TEST-1085-PLAIN-LoopSync-FilterHz.syx, 2,063,904 B, sha256 e7bd53027cd86f1e11ebf2c6590b75756e7aefc38d316b4268831b78a866cc62, made through the site's prepareBuild and buildWithLock from this branch (d2aa0789) and the owner's stock OS 1.74 (cb0f99d6…e123).
      • Contents: the plain base e558ad22 (core 0.7), Filter Hz 1.2.0 (95e455cb…) and Loop Sync 0.2.0-experimental (2dd3d671…, the version the library serves). The three packages are byte-identical to this branch's vendor/elekloader/catalog/. Its storage layout (0x44390c05) differs from his playing OS's, so he tested on a new empty project and saved nothing.
      • Flashed with Elektron Transfer over USB: boots, and again after a power cycle.
      • New empty project, a kick and one of his loop samples, PLAY: the pattern plays.
      • Loop Sync: SMPL, FUNC + TUN to AUTO, then a tempo change: works. What the box read was not noted.
      • Filter Hz: FILTER, turn FRQ: the popup shows the cutoff in Hz: works.
      • Stock OS 1.74 flashed afterwards: boots.
      • Then back to his playing OS: his project, saved before the test and reloaded from the +Drive, plays as before.
      • Not checked: CPU, settings kept across SAVE PROJECT and a reboot, external MIDI clock. The send-bus variant is the base Steve ran in MB02 (with Loop Sync, Retrig Grid and the three effects).
  • Follow-ups, not in this PR:
    • Move CHORUS, FLANGER and PHASER from _submissions/ to the library, each alone, with its package and record (needs_core: "0.7"): the configurator then offers them, on send-bus.
    • scripts/build-elemod-packages.mjs --drafts fails today on two Rytm drafts of other authors (midi-mute's resources.load.method: "measured", and retrig-grid 0.2.0's evidence naming 0.1.0), so the three effects had to be compiled in a copy without them.
    • When R4 proves a free DDR range for the 64 KB work area (option C), the two variants could become one.
  • Questions for you:
    1. A, B or C from the Analog Rytm MKII: Send FX submission (0.1.0-experimental) #878 study? This PR does B.
    2. Who builds and commits the base packages from the OS 1.74 file? I built these locally from the owner's file. The other way is that you build them, as for the Octatrack base, and check the identities in base-binding.json.
  • What the guides lacked: the recipe said nothing about a base that costs every build for a part only some modules use. Its Base row now says to record a variant without that part in base-binding.json's variants, as the Octatrack's USB Audio layouts are, and let the site pick by selection (docs/MACHINE_RECIPE.md). The Rytm base guide now says how a new identity is published (sdk/machines/analog-rytm-mkii/elekloader/README.md).
  • Changelog: changelog/2026-10-30-rytm-site-modwerk-base.md.

🤖 Generated with Claude Code

stigmagit and others added 4 commits October 30, 2026 10:26
…heir packages

The plain variant is core-ar2 0.7's source alone (e558ad22, repeat98#1047's identity), so a
build with no send effect pays none of the bus's cost; send-bus (0c92aa45, unchanged)
is the default. Both packages are stock-free: sites carry a hash and Modwerk's bytes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nd effect

The catalogue serves the base's plain and send-bus packages (record
elekloader-modwerk-base-analog-rytm-mkii-2026-10-30.json); machine-build.ts cuts the
Rytm's cores to the variant the selection needs: send-bus when it holds a module listed
in fx-ids.json, plain otherwise. irpina's core-ar2 0.7 stays as machine:base's reference.
rytm-base.test.ts checks the packages' interface in CI and, with the owner's OS, builds
CHORUS through the site's builder with Loop Sync's storage kept in place.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added the enhancement New feature or request label Oct 30, 2026
@repeat98

Copy link
Copy Markdown
Owner

Thanks, the study made this easy to decide.

  1. B. A set without a send effect shouldn't pay for the bus, so keep the two variants as you built them.
  2. The packages: you build and commit them, as here, and I check them before merging by rebuilding both identities from my own OS 1.74 file with npm run machine:base -- analog-rytm-mkii --stock …. I'll merge once they match.

@repeat98

repeat98 commented Nov 4, 2026

Copy link
Copy Markdown
Owner

One thing has changed since my last comment: Rytm builds can be downloaded since #1190 (3 Nov). So this PR now changes what people actually flash. Every set without a send effect moves from irpina's core-ar2 0.7 to the plain variant, and as your description says, nobody has flashed a plain-only set yet. Send-bus is the base you already ran in MB02, so plain is the one I'm missing.

Before I merge, could you flash one plain build from this branch on your Rytm, Loop Sync + Filter Hz (e558ad22)? Check that it boots, plays a pattern and both modules do their job, then restore stock, and add the result to the description.

I'll merge main into it myself (two small conflicts, in the Rytm README and digi-build.test.ts) and run the identity check from my OS file as planned.

@stigmagit

Copy link
Copy Markdown
Contributor Author

The plain-variant run you asked for is done on my Rytm (4 November), and the results are in the description under On a unit, plain variant, 4 November: the Loop Sync + Filter Hz build from this branch (base e558ad22) boots, also after a power cycle, plays a pattern, Loop Sync's AUTO follows a tempo change and Filter Hz shows the cutoff in Hz; stock OS 1.74 and then my playing OS came back afterwards. Not checked: CPU, settings across SAVE PROJECT and a reboot, external MIDI clock.


Generated by Claude Code

repeat98 and others added 3 commits November 5, 2026 13:18
main's new Rytm library plans (Pipo Loop, Sample RATE, Silent Pad+Trig, Chromatic Aftertouch Fix, Quick Velocity+Aftertouch Assign, Control In Actions, Audio In FX) carry no send effect, so they plan on the plain base; the README keeps main's note that Rytm downloads are on.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ranch

# Conflicts:
#	src/engine/elekloader/digi-build.test.ts
Live Rec Retrig Fix's plan carries no send effect, so it plans on the plain base like the other Rytm library modules.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@repeat98
repeat98 merged commit 8aa2afa into repeat98:main Nov 5, 2026
8 checks passed
repeat98 added a commit to stigmagit/modwerk that referenced this pull request Nov 5, 2026
repeat98 added a commit to stigmagit/modwerk that referenced this pull request Nov 5, 2026
…ts, rebuilt on main after repeat98#1085

npm run machine:base -- analog-rytm-mkii --stock <OS 1.74> --write: plain stays e558ad22 byte for byte; send-bus gets this PR's identity (clock, TRK and KIT menu fixes, 32 KB work area) and replaces 0c92aa45 in sdk/imports/packages and vendor/elekloader/catalog. machine.json and the elekloader README carry the new send-bus budget.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
repeat98 added a commit to stigmagit/modwerk that referenced this pull request Nov 5, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants