ZPWR-CLIP-ENGINE // SHARED ARRANGER · SEQUENCER · CLIP GRID

// one canvas grid with swappable domains, plus a header-only C-ABI scheduler — extracted from zpwr-daw, shared by every app

Engineering Report GitHub
Shared component. "One arranger, every app, one grid — content swapped, never re-implemented." The sequencer/arranger frontend and its scheduling engine were extracted verbatim from zpwr-daw; hosts mount the grid through a single entry point, initClipSeq({ nf, getCAT }), and supply a backend.

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

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).