Skip to content

About

Software Development Kit for Polyend Endless

Resources

Stars

1 star

Watchers

0 watching

Forks

 
 

Repository files navigation

FxPatchSDK Fork for Polyend Endless

This repository is a development-focused fork of the official polyend/FxPatchSDK for the Polyend Endless multi-effects pedal. The official SDK is intentionally small: one Patch base class, a thin C ABI, and a build pipeline that emits .endl binaries for drag-and-drop deployment. This fork keeps that stock SDK shape, then layers on custom effects, validation scripts, deeper notes, and a working knowledge base for future Endless development.

Polyend positions Endless as both a pedal and a platform: you can build effects by writing C++ against the SDK, or use the hosted Playground text-to-effect workflow to generate compiled patches. This fork is for the first path: controlled, inspectable, versioned development.

Current Repository Status

  • master is the current baseline for future work in this fork.
  • The repo keeps the stock SDK shape, but the default SDK target remains source/PatchImpl.cpp while helper scripts can build every top-level custom effect without mutating it.
  • This fork adds hand-written effects in effects/, validation in tests/, design/reference notes in docs/, compiled Playground artifacts in playground/, and a documented local sync workflow for the official Polyend Plates archive.

For the audit that produced this rewrite, see docs/repository-review.md.

Repository Map

source/        public Patch API and the default single-patch build target
source/dsp/    header-only shared DSP primitives (filters, LFO, smoother, ...)
internal/      C ABI wrapper, image header, linker script, patch entrypoint
effects/       custom stock-SDK-compatible patches and reference examples
effects/builds/ local-only generated .endl outputs for hand-written effects
tests/         host-side syntax and lint validation
tests/dsp/     per-primitive unit tests for source/dsp/
docs/          SDK notes, patch design walkthroughs, branch/repo review
scripts/       helper utilities such as local Polyend Plates sync and effect builds
playground/    compiled Playground examples and supporting artifacts
vst/           JUCE VST3/LV2/Standalone wrapper for auditioning patches on the desktop

The vst/ wrapper is a separate CMake build that lets a patch be heard in a DAW before hardware deployment; see vst/README.md and docs/vst-host-plan.md. It is deliberately experimental / test-only — host floats are not Cortex-M7 floats, so hardware listening remains the final word on voicing. The Linux build needs the JUCE system-library set (libasound2-dev, libx11-dev, libxext-dev, libxrandr-dev, libxinerama-dev, libxcursor-dev, libxrender-dev, libfreetype6-dev, libgl1-mesa-dev) in addition to build-essential, cmake, and git; the wrapper has only been verified on Linux. It does not affect the firmware build.

For the craft of writing a good Endless patch, start with docs/patch-authoring-best-practices.md. It crystallises control-law conventions, DSP idioms (with pointers into source/dsp/), working-buffer use patterns, CPU-budget intuition, and the handcraft-vs-Playground positioning that animates this fork.

Included Effect Work

This fork currently includes fourteen stock-SDK-compatible custom effects:

  • effects/back_talk_reverse_delay.cpp: Back Talk-inspired reverse delay with a texture mode and expression-as-mix
  • effects/bbe_sonic_stomp.cpp: guitar-oriented sonic enhancer inspired by BBE Sonic Stomp / Aion Lumin
  • effects/big_muff.cpp: Ram's Head-inspired Big Muff fuzz with a Tone Bypass alternate voice and expression-as-blend
  • effects/big_muff_wdf.cpp: hybrid WDF-style Big Muff sibling that keeps the same Sustain / Tone / Blend control story while replacing the clip core with wave-solved diode-pair stages
  • effects/chorus.cpp: stereo modulated-delay chorus
  • effects/dimension_chorus.cpp: Boss DC-2 Dimension-style stereo widener with a mono ring buffer, shared inverted-pair LFO, and cross-feed Width instead of a mix knob
  • effects/funk_machine_envelope_filter.cpp: touch-sensitive envelope filter with a 4-state voice x direction cycle (Bass/GuitarKeys, Down/Up) and expression-as-bias
  • effects/harmonica.cpp: blues bullet-mic harmonica voicing of a guitar, with an Open/Cupped voicing toggle and expression-driven hand-cup sweep
  • effects/klon_centaur.cpp: Klon-inspired transparent overdrive with a Tone Mod alternate voice and expression-as-output
  • effects/mxr_distortion_plus.cpp: MXR Distortion+ inspired distortion, retuned for smoother Endless control
  • effects/phase_90.cpp: one-knob Phase 90 phaser with a script-mod vintage alternate voice
  • effects/tube_screamer.cpp: TS808-inspired overdrive with a TS9 alternate voice and expression-as-tone
  • effects/tube_screamer_wdf.cpp: WDF-style Tube Screamer sibling that deliberately tests Drive / Tone / Level with expression-as-level and a TS808 / TS9 hold toggle
  • effects/wah.cpp: dual-mode Crybaby/Vox-inspired wah using expression control

There is also one external reference example in effects/examples/reverb.cpp that compiles against the stock SDK.

Build and Deploy

Install the GNU Arm Embedded toolchain for your host, then build from the repo root:

make TOOLCHAIN=/usr/bin/arm-none-eabi-

To build a named output:

make TOOLCHAIN=/usr/bin/arm-none-eabi- PATCH_NAME=my_effect

The build emits build/<PATCH_NAME>_<timestamp>.endl. Deploy by connecting the Endless over USB-C and copying the .endl file onto the mounted Endless drive.

To build every top-level hand-written effect into local deployment artifacts under effects/builds/:

bash scripts/build_effects.sh

For the official Polyend Plates catalog specifically, see playground/polyend_plates/README.md. That archive documents the full current Plates lineup, keeps only a small sample of official binaries tracked in git, and uses scripts/sync_polyend_plates.sh for local-only sync. For fast day-to-day use, it also now includes a Plate-by-Plate control cheat sheet. The hand-written SDK patches have a matching quick reference in effects/README.md, and the community reverb example is summarized in effects/examples/README.md. The host-side analyzer now also tracks output-control unity position, midband level movement, and early limiter pressure so drive retunes are judged against pedal-like behavior instead of raw RMS span alone.

source/PatchImpl.cpp remains the default SDK build target for ad hoc single-patch work. For repeatable local builds across every hand-written effect, use scripts/build_effects.sh or tests/check_arm_build.sh instead of manually copying files into source/PatchImpl.cpp.

Validation

Run the host-side syntax and lint checks before hardware testing:

bash tests/check_patches.sh
bash tests/check_arm_build.sh
bash tests/analyze_effects.sh

This keeps three levels of verification:

  • tests/check_patches.sh: fast host-side syntax/lint checks
  • tests/check_arm_build.sh: real ARM .endl builds for all top-level effects/*.cpp
  • tests/analyze_effects.sh: repeatable probe sweeps that check nonlinear growth, unity position, and limiter/headroom behavior for the current control laws

Recommended Reading Order

If you are an LLM coding agent (Claude Code, OpenAI Codex, etc.), start at CLAUDE.md — AGENTS.md redirects there. Human readers preparing to add or change code should start here:

  1. docs/repository-review.md
  2. docs/endless-reference.md
  3. docs/patch-authoring-best-practices.md — the craft of writing a good Endless patch
  4. effects/README.md
  5. docs/circuit-to-patch-conversion.md
  6. docs/fork-comparisons/upstream-and-forks.md and docs/fork-comparisons/sthompsonjr-wdf.md
  7. docs/cycle-budget.md (if you are budgeting CPU)

If you are starting a new patch rather than editing an existing one, pair docs/templates/patch-build-walkthrough.md with docs/templates/patch-code-skeleton.cpp.

Then read the specific walkthroughs for any effect you plan to extend:

Official References

License

This project is licensed under the MIT License. See LICENSE.TXT.

About

Software Development Kit for Polyend Endless

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages