zpwr-clip-engine is the shared DAW arranger / sequencer for the MenkeTechnologies GUI app stack. It is one canvas-2D grid with swappable domains — arranger, notes/piano-roll, launcher/session, automation lanes — plus the clip palette, MIDI export, and project/bank serialization. The real scheduling engine lives here too (engine/): the pattern → events → step/transport/MIDI scheduler, extracted from zpwr-daw as a pure-C++17, header-only C ABI (zpc_clip_*) — header-only ClipEngine + MidiFile, no JUCE, no external deps. Created by MenkeTechnologies.
One grid, swappable domains
A single canvas grid renders arranger, piano-roll, launcher/session, and automation-lane domains — content is swapped, never re-implemented per app.
One engine, every consumer
The zpc_clip_* C ABI builds two ways from one source: libzpwr_clip_engine_static.a (the daw links it natively) and libzpwr_clip_engine.dylib/.so (the Tauri apps load it through a Rust FFI wrapper).
Mount through one entry
Hosts call initClipSeq({ nf, getCAT }) and supply a backend; the nf functions bridge the grid to whichever engine the host uses.
No JUCE, no deps
The engine is header-only C++17 (ClipEngine + MidiFile) with no JUCE and no external dependencies — so it embeds in native and Tauri hosts alike.
Audio & video clips
Beyond MIDI patterns, tracks can hold audio clips (waveform + fades) and video clips (filmstrip + in/out trim). Video clips drop in-browser (frames sampled to a filmstrip), and a program monitor — dockable or popped out into a draggable, resizable player — previews the frame under the playhead. The foundation for a video-editing timeline.
Hosts
- zpwr-daw (JUCE / C++) — drives the grid through native
nffunctions backed by this engine plus its own audio voices / per-track instruments (real sound). - Tauri apps (Audio-Haxor, traderview, ztranslator) — bridge
nf→ the C ABI via a Rust FFI wrapper. - Domains — arranger, notes / piano-roll, launcher / session, automation lanes.
- Clip palette — the swappable clip bank shared across domains.
- MIDI export — pattern/event data written out via the engine's
MidiFile. - Serialization — project / bank save & load.
Mounting
A host mounts the shared grid through one entry point and supplies its backend bridge:
import { initClipSeq } from './webui/grid/index.js';
// nf = the host's bridge functions (native in the daw, FFI in Tauri apps);
// getCAT = the host's content/category provider for the clip palette
initClipSeq({ nf, getCAT });
Layout
See the engineering report for the module map across webui/ (the shared frontend) and engine/ (the C-ABI scheduler).