ZzFXTrack
With this app you can create musical content using ZzFXMicro.js synthesis with Strudel REPL interface or Arranger.
Export your creations as JSON files and use them in your games or other projects using the bundled ZzFXTrack Player.
With this app you can create musical content using ZzFXMicro.js synthesis with Strudel REPL interface or Arranger.
Export your creations as JSON files and use them in your games or other projects using the bundled ZzFXTrack Player.
ZzFXTrack is a music creation app that uses ZzFXMicro synthesis by Frank Force. It embeds Strudel for its REPL workflow and adds custom-made Arranger and Blocks tools with a tracker-style interface. The Arranger and Blocks are built on Strudel's patterns and scheduling, with one-way integration.
Instruments can be created using a streamlined editor with scrub inputs. Instrument playback is handled externally by ZzFXMicro instead of Strudel's internal sound engine. This keeps exported music optimal and predictable for games and demos.
Exported music can be played with the bundled ZzFXTrack Player, which takes inspiration from ZzFXM by Keith Clark and Frank Force. Developers can freely use it in their projects or build their own player. WAV export is also supported.
ZzFXTrack is not affiliated with or endorsed by the creators of Strudel, ZzFX (Frank Force), or ZzFXM (Keith Clark & Frank Force). It is not intended for small game compos. It was originally made for my personal projects, but I'm open to expanding the idea and collaborating.
Uses Strudel (AGPL-3.0-or-later), ZzFX / ZzFXMicro (MIT), and adapts ideas from ZzFXM (MIT).
Strudel packages used by this app are licensed under AGPL-3.0-or-later. ZzFX and ZzFXM are MIT-licensed components adapted for this workflow.
ZzFXTrack is an independent project and is not affiliated with or endorsed by Strudel, Frank Force, KilledByAPixel, or the ZzFXM authors.
For full repository-level attribution details, see
THIRD_PARTY_NOTICES.md in the project root.
Source code: github.com/jkooler/zzfxtrack
This app is a browser-based composition and export tool. It combines Strudel as the pattern language and live-coding interface, ZzFXMicro as the synth engine for sound generation, and an export pipeline whose main output is ZzFXTrack Player-compatible song JSON.
<strudel-editor> REPL component. When you press Play (or run code via Strudel shortcuts), Strudel evaluates your code and drives timing/scheduling in the browser.patterns/. A selected pattern is loaded into the editor and also used as the source of truth for export and playback.blocks/. They can include an embedded trackerState object so the Tracker can re-open them for editing.arrangements/ and reference blocks, letting you build longer pieces out of smaller patterns.instruments.js and mapped to ZzFXMicro parameters for both preview and export.
During development, the app talks to a small local API exposed by Vite middleware (endpoints like /api/patterns, /api/pattern/<name>, /api/blocks, and rename endpoints). These endpoints read and write files in the project directories so your edits persist as real modules you can commit.
trackerState) for later edits.[instruments, patterns, sequence, BPM] (plus optional stats), designed to be deterministic and engine-friendly.Export WAV renders the exported song to PCM audio and encodes it as a WAV file (sample rate and bit depth are configurable in Export Settings).Exported JSON is for the ZzFXTrack Player, not the canonical ZzFXM player. To play songs in your game or project:
packages/zzfxtrack-player/ folder from this repo into your project.import { playZzFXTrackSong, stopZzFXTrackSong } from './zzfxtrack-player/index.js'; (adjust path as needed).playZzFXTrackSong(songData, audioCtx, onEnded?) with your exported [instruments, patterns, sequence, BPM] array and an AudioContext.
The player has no dependencies. See packages/zzfxtrack-player/README.md in the repo for the full API.
In demo mode, pattern management is read-only and edits are kept in memory for the session. You can still download a ZIP to move the project files into a local workspace.
v0.1.0-alpha.2
Q2/2026
Full details are tracked in CHANGELOG.md in the project root.
In demo mode, your user patterns, blocks, arrangements, and instruments are stored in this browser.
Changes are not written to project files or the output/ directory. To save them, open System settings from the wrench icon in the bottom corner, then go to Application data and select Export.
Use Import and Export there to move ZIP bundles between browsers, devices, or the local version.
Source code for this app is available at github.com/jkooler/zzfxtrack.
Only .zip files generated by this app are accepted.
Giving your export an unique name will help you tell apart different exports from each other.
Are you sure you want to import this sound to the current instrument? This will overwrite existing parameters.
Choose which set to load. This will overwrite the other source.
Message
This action cannot be undone.
Enter a name for your instrument. This will be the name you use in Strudel.
This action cannot be undone.
Applied to ZzFXTrack Player preview and arrangement playback. Uses soft clipping to reduce harsh digital clipping.
Rows per cycle. Lower = smaller JSON, less timing precision.
One pattern per arrangement row instead of per repeat. Turn on if you see playback issues or need the older format.
Note: Some notes can be cut out, especially if you're using chords in Strudel.
Reduce gain when the same note plays multiple times simultaneously (1/√n scaling)
This link will open in a new tab. Your work is safe.
Optional credits and licensing information for the arrangement and exported song data.
Editing theme colors switches to the User theme and saves changes locally. The User theme starts from Phantom by default.
Use with caution. Will enable functionality that can lead to unintended data loss.
Backup your Instruments, Arrangements, Blocks and Strudel patterns and import them to another device or browser.
Create arrangements with Blocks and add them to your Strudel patterns as a starting point.
No arrangements yet.
Create one to start arranging your blocks.
This action cannot be undone.
This action cannot be undone.
This action is not undoable.
You have unsaved changes. Do you want to save before closing?
All notes, volume and effects in the grid will be cleared. Instrument assignments are kept. You can undo this with Ctrl/Cmd-Z.
You have unsaved changes. Do you want to save before closing?