capicola
Hype22/100Real-time time stretcher, pitch shifter, envelope follower, and transient detector firmware for the Hermetic Modular Alchemy Lab. AGPL-3.0.
capicola is a mod for the Hermetic Modular Alchemy Lab, by @heavylight-industries. Open source under AGPL-3.0, latest release v1.1.0 (October 2026), 70 stars on GitHub.
forHermetic Modular Alchemy Lab·by@heavylight-industries
Unclaimed. Is this yours? Sign in with GitHub as @heavylight-industries to claim it.
capicola.bin· 233 KB
AGPL-3.0· heavylight-industries/capicola·downloads come from the creator’s GitHub releases
v1.1.0Capicola 1.1.0Latest1 file
Three CV inputs instead of one
Trig 1 and Env 1 are now CV inputs out of the box: CV 2 and CV 3, alongside CV In. Every routing knob has two more segments for them. Nothing is lost: Trig 2 and Env 2 now carry the input follower's triggers and envelope by default. Each can be set to any of the four follower signals (input or output triggers, input or output envelope) in the web programmer's Options. Prefer the original layout? Set Trig 1 / Env 1 Jacks to Outputs. The setting is saved with each preset.
Save, load and factory reset from the panel
- B1+B2: save. Saves are now a history. Slot 1 is always your latest save and what the module boots into, and slots 2–16 keep the fifteen before it. Panel saves name themselves Save 1, Save 2, …, so the web programmer shows their order. Saving is just as quick on your 100th save as on your first.
- B2+B3: load. Back to your latest save, without power-cycling.
- B1+B3: factory reset, now for every page at once: one move back to a known starting point. Your saves are never touched, so B2+B3 undoes it.
- All three confirm with three bright white flashes on the buttons.
SHIFT snap
Hold B3 (printed SHIFT) and nudge any knob, on any page, and it snaps to its factory value. Depths go to exactly zero. Nudge back and it returns to where it was. In the programmer, the snap target can instead be your latest save, so every knob toggles between where you are and where you saved: a performance move in its own right.
The routing page shows what's arriving
The selected segment on each routing knob now glows with its source's live level, so you can see at a glance whether an envelope is moving or a CV is patched. The colors have also changed, CCW → CW: orange (input follower), blue (output follower), white (CV In), purple (CV 2), green (CV 3).
Polarity flips that don't retrigger
B2 now slices when you release it. Hold B2 and nudge Pitch or Stretch to flip its direction: the flip no longer snaps the playhead to "now", only modulation from the pot itself counts (CV can't flip it), and the flipped direction is now saved with your preset.
A real manual
The new interactive manual draws the actual faceplate. Pick a page and the knob labels and colors change to match. Click any knob, button or jack for its details, with links between related settings. A Gestures page covers every button move. The web programmer now shows the same text, word for word.
Sound
- Quality reaches further into crunch at its CCW end (ε 0.08, up from 0.03).
- New factory defaults: Stretch 0.9 (about 1.75× slower) and Grain Size 642 keyframes.
Fixes
- A polarity flip wasn't saved: flip Pitch to reverse, save, and it came back forward.
- Loading from the web programmer could be partly undone, or overwritten by the knobs, depending on the page you were on.
Before you update
- Presets from 1.0.0 won't load. The preset format changed, so the module starts at factory settings, and B2+B3 does nothing until you save once. Dial your sound back in and save with B1+B2, or migrate your slots with the programmer's Back up all.
- Trig 1 and Env 1 are now inputs. If you patch them as outputs, set Trig 1 / Env 1 Jacks to Outputs in the programmer first.
- CV In's routing color is now white (it was purple).
- B3 holds: a quick B3 tap still changes pages. Held, it's now SHIFT.
- Save from the panel to keep your history. The programmer's own Save to slot overwrites a slot directly, without moving your previous save into the history.
Full details in CHANGELOG.md.
v1.0.0Capicola 1.0.01 file
First public release. Earlier version strings (0.3.0 and below) were never tagged or published.
Added
- Bidirectional stretch. P2 is bipolar: a true freeze at noon, realtime forward at the CW stop, realtime reverse at CCW. The keyframe grid can now walk backward through the buffer.
- Bidirectional pitch. P1 is grain playback speed, bipolar and linear:
forward above noon, reversed below, up to 2× either way, and a true stop at
noon. Unity sits at ¼ and ¾ with a detent holding each. The programmer shows
the speed directly (e.g.
1.25x). - Ping-pong gesture. Hold B2 and P1 or P2 becomes a direction control: the rate pins where it is and a nudge of the knob flips polarity at that same rate, instead of dragging it down through the centre and back. A pitch flip hands off between the two grains over one crossfade, so it never clicks. Release and the knob waits behind a catch pip, exactly like a knob after a page switch. A CV riding the knob nudges it too, so an LFO into P1 ping-pongs on its own.
- Buffer-exhaustion handling. Freezing or reversing long enough that the grid runs out of room behind the writer now re-anchors to the delayed tap over a full fixed fade. Works on a partially filled ring as well as a lapped one.
Changed
- The save gesture moved to B1+B2 (held 0.33 s), mirroring B1+B3 = reset. B2 alone is the ping-pong gesture, so the two cannot collide — and while B1 is down, a knob nudge cannot flip a polarity.
- Quality (P5) range narrowed to ε 0.03–0.001, from 0.1–0.001. The old CCW end measured around 2.5 dB reconstruction SNR on speech — past crunchy into broken — and because the map is linear in ε it consumed half the sweep. The whole travel is now usable.
Fixed
- Windows only stepped forward. A cursor leaving its keyframe bracket backward was never noticed, so the window went stale for the rest of the pass and the read stuck at a clamped endpoint — silently, with no click and no NaN. Unreachable before bidirectional playback existed; a prerequisite for it.
- Crossfades never finished at negative pitch. The splice phase advanced by
increment × pitch, which runs backward when the head does. It now advances by|pitch|; at exactly zero a fade simply holds until the head moves again.
Notes
- Saved presets from pre-release firmware will not read correctly: P1, P2 and P5 all changed meaning. Hold B1+B3 to reset a page to factory defaults, then B1+B2 to save.
Install: download
capicola.bin, hold B3 through the boot window to enter update mode, then:dfu-util -a 0 -s 0x90040000:leave -D capicola.bin -d ,0483:df11
