Nord Modular Classic patch tools, Faust export, and disting NT plug-in builds.
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-08-22 18:16:39 +00:00
.forgejo docs: adopt org-wide contributor-review policy (v1) 2026-08-22 11:11:48 -07:00
.github/workflows Initial public release 2026-08-22 09:31:25 -07:00
.spelwork Initial public release 2026-08-22 09:31:25 -07:00
docs Initial public release 2026-08-22 09:31:25 -07:00
tests Initial public release 2026-08-22 09:31:25 -07:00
tools Initial public release 2026-08-22 09:31:25 -07:00
.gitattributes Initial public release 2026-08-22 09:31:25 -07:00
.gitignore Initial public release 2026-08-22 09:31:25 -07:00
ATTRIBUTION.md Initial public release 2026-08-22 09:31:25 -07:00
CONTRIBUTING.md docs: adopt org-wide contributor-review policy (v1) 2026-08-22 11:11:48 -07:00
LICENSE Initial public release 2026-08-22 09:31:25 -07:00
nardwahl.py Initial public release 2026-08-22 09:31:25 -07:00
NOTICE Initial public release 2026-08-22 09:31:25 -07:00
README.md Initial public release 2026-08-22 09:31:25 -07:00
SECURITY.md Initial public release 2026-08-22 09:31:25 -07:00

nardwahl

Nord Modular Classic patch tools for inspection, conservative editing, Faust export, and disting NT plug-in builds.

This is a SPELWork-provinced project. Its public release surface contains only original source, documentation, and permission-cleared fixtures. See the AI nutrition label, attribution notice, and release evidence.

What It Does

  • Reads and round-trips Nord Modular Classic .pch patches.
  • Inspects module/cable context and suggests replacements by I/O shape.
  • Writes edited patches with optional conservative cable rewiring.
  • Exports supported patch graphs to Faust source.
  • Builds Faust source into an ARM disting NT plug-in object using the official Disting NT API and an ARM GNU toolchain.

The DSP implementation is compatibility-oriented, not a cycle-accurate Nord Modular emulator. A compiled plug-in must be auditioned on hardware before it is treated as a faithful port.

Quick Start

python3 nardwahl.py info path/to/patch.pch
python3 nardwahl.py module-report path/to/patch.pch --module 1:3
python3 nardwahl.py similar 113
python3 nardwahl.py replace-module path/to/patch.pch --module 1:3 \
  --new-type 112 --rewire --output edited.pch

To select a catalog-similar module by I/O shape, preview the replacement first:

python3 nardwahl.py replace-similar path/to/patch.pch --module 1:3 \
  --rewire --dry-run

Remove --dry-run and pass --output edited.pch to write it. Similarity is a structural suggestion only; inspect the reported cable map before accepting it.

To enable catalog-backed module naming and replacement suggestions, point NARDWAHL_CATALOG at a legally obtained patch303.txt catalog:

export NARDWAHL_CATALOG=/path/to/patch303.txt

Disting NT Build

Nord .pch -> nardwahl Faust .dsp -> Faust C++ -> ARM plug-in .o -> disting NT

Prerequisites:

  • Faust on PATH, or pass --faust /path/to/faust.
  • A complete ARM GNU toolchain with arm-none-eabi-c++, Newlib, and C++ headers.
  • A local distingNT_API checkout. Set NARDWAHL_DISTING_API=/path/to/distingNT_API, or pass --api.
python3 nardwahl.py build-disting path/to/patch.pch \
  --output build/MyNordPatch.o \
  --name 'My Nord Patch'

The command also writes build/MyNordPatch.dsp. Supply --guid ABCD to choose a four-character plug-in GUID; otherwise one is derived from the patch path. Use a distinct GUID for plug-ins that coexist on a device.

To install a compiled plug-in, mount the disting NT MicroSD card and pass its root directory. The module scans /programs/plug-ins for .o files at startup or after the card is remounted. This follows the official user manual.

python3 nardwahl.py install-disting build/MyNordPatch.o \
  --sd-root /Volumes/DISTINGNT

Existing files are protected; add --force only when intentionally replacing the same plug-in filename.

For a GitHub release, package the object as a zip that expands at the SD-card root:

python3 nardwahl.py package-disting build/MyNordPatch.o \
  --output build/MyNordPatch-disting-nt.zip

Or produce that release bundle directly from a patch:

python3 nardwahl.py release-disting path/to/patch.pch \
  --output build/MyNordPatch-disting-nt.zip

Validate a patch or a bounded corpus sample without retaining generated files:

python3 nardwahl.py validate-disting path/to/patches --limit 10

The command reports parser failures separately from Faust/ARM build failures and returns nonzero if any selected patch does not compile. Use --output-dir build/validation to retain the generated .dsp and .o artifacts for inspection.

Public Release

This working repository may contain private validation material. Do not publish its history directly. Instead, create a clean public seed repository:

python3 tools/export_public.py /path/to/nardwahl-public
cd /path/to/nardwahl-public
git init
git add .
git commit -m 'Initial public release'

The export is allowlisted and rejects known private corpus paths. Review the result, select a public GitHub organization, and add its remote only after that review. See CONTRIBUTING.md for contribution requirements.

License

Nardwahl's original source is released under the MIT License. Third-party components, generated artifacts, the Nord patch corpus, and module catalogs have separate rights; see ATTRIBUTION.md.