The codebase
How big the Wavelength engine is, how it grew, and what it can do, measured from its git history one commit at a time.
24,936lines of C++ code, written in 69 hours
- First commit2,430
- v0.1.08,078
- v0.2.09,291
- v0.3.017,776
- v0.4.024,936
- Source files
- 113
- Comment lines
- 1,394
- Commits
- 179
- Releases
- 4, latest v0.4.0
- In development
- 0.4.0
- Lines added, removed
- +50,951 −5,081
How it grew
Each step is a commit: the lines of C++ code in src/ once it landed, not counting blank lines or lines that hold only a comment. Point at the line, or focus it and use the arrow keys, to see each commit.
Every commit (179)
| When | Commit | What changed | Lines of code | Change |
|---|---|---|---|---|
| Sun 27 Sep, 10:28 | b4c709b |
π RELEASE: v0.4.0 | 24,936 | 0 |
| Sun 27 Sep, 10:08 | 21b6a76 |
π¦ NEW: terminal output for people: grouped help, colour, tables, progress | 24,936 | +650 |
| Sun 27 Sep, 09:38 | 2c51575 |
π¦ NEW: wavelength upgrade and version --check | 24,286 | +222 |
| Sun 27 Sep, 09:18 | 9753ba2 |
π DOC: a roadmap, lowercase file names, one line per paragraph | 24,064 | 0 |
| Sun 27 Sep, 09:08 | f01239b |
π€ TEST: release-test uses its own work folder per run | 24,064 | 0 |
| Sun 27 Sep, 09:00 | a069017 |
π€ TEST: release-test runs every archive through the song format, fallbacks and MCP | 24,064 | 0 |
| Sun 27 Sep, 08:58 | 12264d7 |
π DOC: 0.4.0 docs caught up with the engine | 24,064 | +6 |
| Sun 27 Sep, 08:58 | ac8b6fe |
π IMPROVE: song format Draft 2, from an independent review | 24,058 | +266 |
| Sun 27 Sep, 08:58 | 278e2e1 |
π FIX: a master loudness target with no effects crashed | 23,792 | 0 |
| Sun 27 Sep, 07:33 | 1799e4a |
π IMPROVE: packages carry an unchanged sample once | 23,792 | +42 |
| Sun 27 Sep, 07:24 | e5fd7e7 |
π IMPROVE: a song's picture carries its title | 23,750 | +6 |
| Sun 27 Sep, 07:21 | 09c78ae |
π FIX: fallbacks --suggest gave sidechain key tracks a bogus entry | 23,744 | +1 |
| Sun 27 Sep, 07:15 | 4f6fd81 |
π DOC: song workflow in the plugin skill, MCP song tools in README | 23,743 | +1 |
| Sun 27 Sep, 07:15 | 98b3c93 |
π¦ NEW: upgrade, lib: sample names, fallbacks --suggest, render --keep | 23,742 | +1,018 |
| Sun 27 Sep, 06:49 | ab324ee |
π¦ NEW: song format schemas, Python reader and fixtures | 22,724 | +65 |
| Sun 27 Sep, 06:40 | 3273346 |
π¦ NEW: .wavelength packages: pack, unpack, validate | 22,659 | +360 |
| Sun 27 Sep, 06:36 | 051a39c |
π¦ NEW: musical diff and comments pinned to revisions | 22,299 | +554 |
| Sun 27 Sep, 06:29 | 1e24a6c |
π¦ NEW: song history: save, undo, redo, restore, git export | 21,745 | +888 |
| Sun 27 Sep, 06:14 | e6c9959 |
π€ TEST: check.sh waits for serve to answer | 20,857 | 0 |
| Sun 27 Sep, 06:14 | 93974a1 |
π¦ NEW: import Bitwig projects without a DAWproject export | 20,857 | +330 |
| Sun 27 Sep, 05:42 | bd6128a |
π DOC: song format, draft 1 | 20,527 | 0 |
| Sat 26 Sep, 21:36 | 8ef9630 |
π IMPROVE: serve has the Wavelength favicon | 20,527 | +6 |
| Sat 26 Sep, 21:34 | d4273af |
π¦ NEW: wavelength kit, free synths for machines without plugins | 20,521 | +448 |
| Sat 26 Sep, 21:11 | 46d1500 |
π FIX: review comments failed with 403 after serve restarted | 20,073 | +11 |
| Sat 26 Sep, 20:45 | de3e525 |
π DOC: agent skill says how to read song.png | 20,062 | 0 |
| Sat 26 Sep, 20:37 | a2729f8 |
π IMPROVE: song.png lanes show post-fader LUFS and drop jumps | 20,062 | +24 |
| Sat 26 Sep, 20:22 | 6f09d11 |
π DOC: a loop can peak a little over the limiter where its tail folds in | 20,038 | 0 |
| Sat 26 Sep, 20:22 | 65f39c4 |
π IMPROVE: MCP render takes loop | 20,038 | +2 |
| Sat 26 Sep, 20:21 | e9c9db4 |
π¦ NEW: render --loop, seamless loops for games and apps | 20,036 | +39 |
| Sat 26 Sep, 20:16 | 7741e30 |
π FIX: repetition check reads effect automate and lfo curves | 19,997 | +8 |
| Sat 26 Sep, 20:16 | e570bf0 |
π¦ NEW: track fallbacks, so a job renders without its plugins | 19,989 | +84 |
| Sat 26 Sep, 20:12 | 1fad283 |
π¦ NEW: wavelength mcp, built-in docs and a Claude Code plugin | 19,905 | +617 |
| Sat 26 Sep, 20:12 | 7e362b4 |
π¦ NEW: mix checks for the kick, the low end, phase and repetition | 19,288 | +218 |
| Sat 26 Sep, 19:55 | 9806296 |
π¦ NEW: render --png, a picture of the song for agents | 19,070 | +473 |
| Sat 26 Sep, 19:44 | 4786a7d |
π¦ NEW: builtin:synth, a polysynth that needs no plugin | 18,597 | +821 |
| Sat 26 Sep, 19:25 | 7a42c65 |
π IMPROVE: start 0.4.0-dev | 17,776 | 0 |
| Sat 26 Sep, 08:44 | ab278cf |
π RELEASE: v0.3.0 | 17,776 | 0 |
| Sat 26 Sep, 08:38 | 747489c |
π IMPROVE: serve UI in the Wavelength brand | 17,776 | 0 |
| Sat 26 Sep, 08:35 | 4c828b7 |
π¦ NEW: DAWproject export prints built-in instruments | 17,776 | +67 |
| Sat 26 Sep, 06:47 | 9174070 |
π FIX: Windows build of serve, Linux build warnings | 17,709 | 0 |
| Sat 26 Sep, 06:47 | 186b2b3 |
π DOC: known limits and the agent skill caught up with 0.3.0 | 17,709 | 0 |
| Sat 26 Sep, 05:53 | 3d6e99a |
π¦ NEW: DAWproject export | 17,709 | +431 |
| Sat 26 Sep, 05:42 | 343c2ac |
π IMPROVE: MusicXML grace notes and pedal; case-insensitive sample paths | 17,278 | +65 |
| Sat 26 Sep, 05:39 | 31c4262 |
π¦ NEW: SoundFonts, General MIDI fallback, SFZ filters and release triggers | 17,213 | +644 |
| Sat 26 Sep, 00:41 | cb64e04 |
π¦ NEW: MusicXML import | 16,569 | +591 |
| Sat 26 Sep, 00:33 | ee12ed6 |
π¦ NEW: MP3, FLAC and WAV deliveries measured after decoding | 15,978 | +636 |
| Sat 26 Sep, 00:23 | aa0dd85 |
π¦ NEW: SFZ instruments in builtin:sampler | 15,342 | +410 |
| Sat 26 Sep, 00:16 | 3881436 |
π¦ NEW: AIFF, FLAC, MP3 and Ogg Vorbis samples and clips | 14,932 | +175 |
| Fri 25 Sep, 22:36 | a78c40d |
π IMPROVE: optional stable code signature for local macOS builds | 14,757 | 0 |
| Fri 25 Sep, 22:18 | 777e16b |
π IMPROVE: serve answers local reverse proxies on .localhost names | 14,757 | +1 |
| Fri 25 Sep, 21:42 | 09ad700 |
π¦ NEW: wavelength serve, a local web UI for reviewing songs | 14,756 | +668 |
| Fri 25 Sep, 21:31 | 6a344bc |
π¦ NEW: render --from/--to renders only some bars of a song | 14,088 | +77 |
| Fri 25 Sep, 21:21 | f0f5434 |
π DOC: AGENTS.md wording | 14,011 | 0 |
| Fri 25 Sep, 21:21 | d8ede34 |
π€ TEST: automation-tour checks follow and switch curves in the report | 14,011 | 0 |
| Fri 25 Sep, 21:21 | e7324fb |
π¦ NEW: report automation activity and dead curves | 14,011 | +119 |
| Fri 25 Sep, 21:20 | eaf9466 |
π¦ NEW: warn when width narrows a signal away | 13,892 | +34 |
| Fri 25 Sep, 21:20 | 8b25989 |
π IMPROVE: render --tracks keeps stem names | 13,858 | +7 |
| Fri 25 Sep, 21:20 | fe1a5bc |
π¦ NEW: wavelength timeline | 13,851 | +64 |
| Fri 25 Sep, 21:20 | 375e503 |
π¦ NEW: params --set and --map show display text | 13,787 | +91 |
| Fri 25 Sep, 21:20 | 873334c |
π¦ NEW: analyze --peaks | 13,696 | +136 |
| Fri 25 Sep, 21:20 | 85566b5 |
π¦ NEW: bus stems and bus targets in stage-gains | 13,560 | +8 |
| Fri 25 Sep, 21:20 | c8d2834 |
π¦ NEW: send throws shorthand | 13,552 | +36 |
| Fri 25 Sep, 21:20 | ec93ddb |
π¦ NEW: chord timeline and curves that follow it | 13,516 | +135 |
| Fri 25 Sep, 21:19 | 27fdaaf |
π¦ NEW: display text and note names in automation curves | 13,381 | +90 |
| Fri 25 Sep, 21:19 | b43a3ff |
π¦ NEW: switch automation points and curves | 13,291 | +25 |
| Fri 25 Sep, 21:04 | 33b0963 |
π IMPROVE: warn on host mix vs a plugin's own Mix | 13,266 | +16 |
| Fri 25 Sep, 21:03 | e434437 |
π¦ NEW: "intended" silences an effect's distortion warnings | 13,250 | +5 |
| Fri 25 Sep, 21:01 | 0eb9445 |
π¦ NEW: audio clips that play the song's own render | 13,245 | +123 |
| Fri 25 Sep, 20:56 | 1a41c0f |
π¦ NEW: sampler length trim that works with reverse | 13,122 | +4 |
| Fri 25 Sep, 20:55 | e3e053a |
π¦ NEW: builtin:shepard endless riser | 13,118 | +89 |
| Fri 25 Sep, 20:53 | 32f81d7 |
π¦ NEW: repeat effect for beat-repeat stutters | 13,029 | +49 |
| Fri 25 Sep, 20:51 | 66fd20b |
π¦ NEW: delay loopFx, effects inside the feedback loop | 12,980 | +69 |
| Fri 25 Sep, 20:47 | 18d6256 |
π¦ NEW: reverb freeze and automatable decay | 12,911 | +14 |
| Fri 25 Sep, 20:46 | af0cd49 |
π¦ NEW: level match on any effect | 12,897 | +51 |
| Fri 25 Sep, 20:28 | 2491db6 |
π FIX: warn about late automation on buses and the master | 12,846 | +27 |
| Fri 25 Sep, 20:25 | c0cecb4 |
π FIX: drop check measures across an intended near-silence | 12,819 | +28 |
| Fri 25 Sep, 20:22 | b4e1438 |
π FIX: lint --harmony leaves unpitched samples out | 12,791 | +51 |
| Fri 25 Sep, 20:14 | ec2d2b4 |
π FIX: saturate match follows the level over time | 12,740 | +27 |
| Fri 25 Sep, 20:05 | 9fae977 |
π¦ NEW: render --level-from keeps a part at its level in the full mix | 12,713 | +16 |
| Fri 25 Sep, 19:13 | d85238c |
π¦ NEW: lint --harmony finds wrong notes before a render | 12,697 | +497 |
| Fri 25 Sep, 16:15 | 5cd2f4f |
π DOC: move changes made since 0.2.0 out of its changelog section | 12,200 | 0 |
| Fri 25 Sep, 16:15 | 82c14fe |
π¦ NEW: audio clips, instrument automation and five more Bitwig devices in the DAWproject import | 12,200 | +221 |
| Fri 25 Sep, 15:44 | d1c1889 |
π¦ NEW: MIDI file import and export | 11,979 | +637 |
| Fri 25 Sep, 15:24 | de54a2e |
π FIX: read Bitwig 6 projects to the end | 11,342 | +22 |
| Fri 25 Sep, 15:13 | e6d4b76 |
π¦ NEW: read Bitwig projects for what DAWproject exports leave out | 11,320 | +696 |
| Fri 25 Sep, 14:22 | 10c83a6 |
π¦ NEW: import DAWproject files | 10,624 | +539 |
| Fri 25 Sep, 14:13 | 3800487 |
π DOC: VST2 and Rosetta in README, AGENTS.md, effects and changelog | 10,085 | 0 |
| Fri 25 Sep, 14:13 | d22c647 |
π¦ NEW: VST2 hosting, and Intel-only plugins under Rosetta | 10,085 | +715 |
| Fri 25 Sep, 11:33 | 9813330 |
π IMPROVE: track warnings in the top-level warnings list | 9,370 | +9 |
| Fri 25 Sep, 10:24 | 7bbe2f0 |
π IMPROVE: report duration, no empty stems folder, clearer docs | 9,361 | +1 |
| Fri 25 Sep, 10:24 | e97909e |
π FIX: lint compares each pair at its own notes; ranges, split | 9,360 | +58 |
| Fri 25 Sep, 10:23 | 34efdd3 |
π IMPROVE: weak-drop check measures the boundary in bars | 9,302 | +11 |
| Fri 25 Sep, 10:19 | 14ce363 |
π DOC: BBC SO Discover percussion keyswitches by instrument | 9,291 | 0 |
| Fri 25 Sep, 10:06 | 6805806 |
π FIX: Linux release archives without macOS extended attributes | 9,291 | 0 |
| Fri 25 Sep, 10:06 | b765393 |
π FIX: the skill installer downloads with wget when there is no curl | 9,291 | 0 |
| Fri 25 Sep, 09:47 | 239597c |
π¦ NEW: start 0.3.0-dev | 9,291 | 0 |
| Fri 25 Sep, 09:46 | dd5e639 |
π RELEASE: v0.2.0 | 9,291 | 0 |
| Fri 25 Sep, 09:45 | b43b2d1 |
π DOC: changelog ready for 0.2.0 | 9,291 | 0 |
| Fri 25 Sep, 09:45 | af089a7 |
π FIX: Windows archive carries its runtime licences | 9,291 | 0 |
| Fri 25 Sep, 09:45 | 2468e83 |
π¦ NEW: the skill installs release builds on Linux and Windows | 9,291 | 0 |
| Fri 25 Sep, 09:45 | 300db6b |
π€ TEST: arrangement-tour example checked by check.sh | 9,291 | 0 |
| Fri 25 Sep, 09:45 | 182d0b7 |
π FIX: clip distortion warning threshold and advice | 9,291 | +2 |
| Fri 25 Sep, 09:45 | 382b2e1 |
π FIX: analyze and option parsing details | 9,289 | +5 |
| Fri 25 Sep, 09:45 | a4b3f3b |
π FIX: analyze reads chip oscillators at their real pitch | 9,284 | +32 |
| Fri 25 Sep, 09:17 | 7c3d826 |
π IMPROVE: arrangement checks know intent, pre-master sections | 9,252 | +44 |
| Fri 25 Sep, 07:40 | 9a5fb15 |
π¦ NEW: per-note dyn curves for velocityTo instruments | 9,208 | +29 |
| Fri 25 Sep, 07:39 | 1a1c09e |
π¦ NEW: automation.rides, gain curves that add up | 9,179 | +25 |
| Fri 25 Sep, 07:22 | eb9c3a1 |
π¦ NEW: dropout and weak-drop checks, analyze --every | 9,154 | +113 |
| Fri 25 Sep, 06:41 | d35186a |
π IMPROVE: clip kneeDb, loudness gain before the peak stage | 9,041 | +15 |
| Fri 25 Sep, 01:10 | 6dbe23a |
π DOC: transients and sub-heavy sounds in the mixing guide | 9,026 | 0 |
| Fri 25 Sep, 01:10 | 2b6fa8b |
π¦ NEW: clip effect, a soft clipper for transients | 9,026 | +36 |
| Fri 25 Sep, 01:01 | 95d5f7b |
π FIX: render --tracks writes no stems for helper tracks | 8,990 | +3 |
| Fri 25 Sep, 00:59 | bd21b45 |
π FIX: commands reject unknown options | 8,987 | +22 |
| Fri 25 Sep, 00:58 | 49b53e6 |
π FIX: analyze reads the pitch of very short windows | 8,965 | 0 |
| Fri 25 Sep, 00:56 | f9c1cfb |
π¦ NEW: wavelength lint checks voice leading | 8,965 | +113 |
| Fri 25 Sep, 00:50 | d813aa8 |
π¦ NEW: analyze --grid; onset times land on the attack | 8,852 | +26 |
| Fri 25 Sep, 00:40 | 4e969f7 |
π FIX: master lines up a mix's lead-in; limiter reports per section | 8,826 | +30 |
| Fri 25 Sep, 00:37 | 9b202a2 |
π¦ NEW: name the tracks that drive the master limiter | 8,796 | +19 |
| Fri 25 Sep, 00:33 | 7cedf2c |
π IMPROVE: warn when an automation curve starts late | 8,777 | +34 |
| Fri 25 Sep, 00:30 | 3368c41 |
π¦ NEW: level-matched saturate | 8,743 | +9 |
| Fri 25 Sep, 00:29 | e06f532 |
π FIX: loudness of windows shorter than one gating block | 8,734 | +5 |
| Fri 25 Sep, 00:28 | 52d6240 |
π IMPROVE: loudness target gain goes in front of the limiter | 8,729 | +15 |
| Fri 25 Sep, 00:23 | c1f8ac7 |
π¦ NEW: render --tracks renders part of a song | 8,714 | +43 |
| Fri 25 Sep, 00:20 | 6cc1566 |
π IMPROVE: limiter warning says how long it limited | 8,671 | +6 |
| Fri 25 Sep, 00:19 | 3f96872 |
π FIX: audition stops when a plugin opens a licence window | 8,665 | +8 |
| Fri 25 Sep, 00:18 | 9a68d13 |
π FIX: kill render workers that open a licence window | 8,657 | +26 |
| Fri 25 Sep, 00:16 | c51a2bb |
π IMPROVE: fewer render workers when the machine is busy | 8,631 | +15 |
| Fri 25 Sep, 00:15 | 9d862a8 |
π¦ NEW: per-note vibrato on sampler tracks | 8,616 | +32 |
| Fri 25 Sep, 00:14 | eac8e39 |
π IMPROVE: analyze in song time, warn on loud-target gain into master | 8,584 | +27 |
| Fri 25 Sep, 00:13 | d81c066 |
π FIX: round-robin kits play the General MIDI alternate keys | 8,557 | +15 |
| Fri 25 Sep, 00:11 | a17e22a |
π FIX: master --chain no longer passes a mix through silently | 8,542 | +6 |
| Fri 25 Sep, 00:11 | 5c7d3fd |
π€ TEST: check.sh takes BUILD and JOBS | 8,536 | 0 |
| Fri 25 Sep, 00:10 | b9eb126 |
π¦ NEW: loudness range and labelled section loudness in reports | 8,536 | +45 |
| Thu 24 Sep, 23:58 | b4f3cf6 |
π FIX: retry crashed tracks and fail renders that lose one | 8,491 | +28 |
| Thu 24 Sep, 23:58 | 078552d |
π¦ NEW: block plugins by name | 8,463 | +47 |
| Thu 24 Sep, 23:58 | 2f68375 |
π FIX: catch garbage samples after effects, not just plugins | 8,416 | +10 |
| Thu 24 Sep, 22:52 | 4d49df0 |
π FIX: mute garbage samples from plugins | 8,406 | +28 |
| Thu 24 Sep, 22:38 | 57a6813 |
π DOC: release checklist with the local binary builds | 8,378 | 0 |
| Thu 24 Sep, 22:28 | 456e329 |
π FIX: put wine64 on PATH in the Wine smoke-test image | 8,378 | 0 |
| Thu 24 Sep, 22:28 | 0775b30 |
π FIX: release build paths for Windows, quiet GCC ABI notes | 8,378 | 0 |
| Thu 24 Sep, 22:28 | 6d4062b |
π¦ NEW: build release binaries for every platform locally | 8,378 | 0 |
| Thu 24 Sep, 22:28 | 30e7f29 |
π¦ NEW: Linux and Windows support | 8,378 | +300 |
| Thu 24 Sep, 21:52 | da93433 |
π¦ NEW: the /wavelength agent skill | 8,078 | 0 |
| Thu 24 Sep, 21:44 | a80b50c |
π¦ NEW: start 0.2.0-dev | 8,078 | 0 |
| Thu 24 Sep, 21:44 | eaf2da5 |
π RELEASE: v0.1.0 | 8,078 | 0 |
| Thu 24 Sep, 21:42 | 965c9e0 |
π FIX: options without a value are an error | 8,078 | +2 |
| Thu 24 Sep, 21:38 | 3511578 |
π¦ NEW: personal job defaults (defaults.json) | 8,076 | +20 |
| Thu 24 Sep, 20:56 | ea6ae28 |
π DOC: mastering, orchestral writing and listening lessons | 8,056 | +8 |
| Thu 24 Sep, 20:52 | 5380dac |
π¦ NEW: leadIn, silence before the song | 8,048 | +9 |
| Thu 24 Sep, 20:41 | d95d634 |
π IMPROVE: stage-gains reads any render folder | 8,039 | 0 |
| Thu 24 Sep, 20:29 | 392e1bf |
π¦ NEW: wavelength master, and a mastering example | 8,039 | +62 |
| Thu 24 Sep, 20:28 | 6c4a59c |
π¦ NEW: loudness target on the master | 7,977 | +37 |
| Thu 24 Sep, 20:27 | b4e2c33 |
π¦ NEW: multiband effect | 7,940 | +87 |
| Thu 24 Sep, 20:15 | a4ae8b0 |
π IMPROVE: audition tags, retag, retries; Serum 1 patches skipped | 7,853 | +32 |
| Thu 24 Sep, 19:14 | 6908aca |
π¦ NEW: sidechain audio into effects | 7,821 | +120 |
| Thu 24 Sep, 19:11 | b320ae2 |
π¦ NEW: builtin:audio, clips on the timeline with time stretch | 7,701 | +158 |
| Thu 24 Sep, 19:08 | 33de96f |
π¦ NEW: plugin tracks render in parallel worker processes | 7,543 | +154 |
| Thu 24 Sep, 18:44 | 36e3d28 |
π¦ NEW: wavelength audition, a sound index for presets | 7,389 | +308 |
| Thu 24 Sep, 18:33 | 616d683 |
π DOC: point at extract-embedded-presets, drop a stale converter note | 7,081 | 0 |
| Thu 24 Sep, 18:30 | a76b3c6 |
π¦ NEW: wavelength analyze | 7,081 | +342 |
| Thu 24 Sep, 18:28 | d7434b3 |
π FIX: compensate plugin latency | 6,739 | +24 |
| Thu 24 Sep, 18:17 | 296f480 |
π DOC: bring the README and CLI help up to date | 6,715 | +3 |
| Thu 24 Sep, 18:16 | a8cc503 |
π FIX: no unchanged-parameter warning for BBC SO instruments | 6,712 | +1 |
| Thu 24 Sep, 18:13 | f887215 |
π FIX: JSON output survives preset names that are not UTF-8 | 6,711 | 0 |
| Thu 24 Sep, 18:11 | 69196da |
π¦ NEW: Analog Lab V, AAS Player, MPowerSynth, Soundbox, DecentSampler presets | 6,711 | +298 |
| Thu 24 Sep, 18:04 | b9d336c |
π¦ NEW: extract presets compiled into JUCE plugin binaries | 6,413 | +8 |
| Thu 24 Sep, 18:00 | 67306ba |
π¦ NEW: Microtonic kits and drums, parameters as display text | 6,405 | +297 |
| Thu 24 Sep, 17:55 | 4a134c3 |
π¦ NEW: Guitar Rig 6 racks load by name, with licence checks | 6,108 | +96 |
| Thu 24 Sep, 17:53 | 2ddd063 |
π¦ NEW: Cherry Audio presets and SynthMaster NKS by name | 6,012 | +122 |
| Thu 24 Sep, 17:41 | 7a37fe2 |
π¦ NEW: Synplant patches load by name | 5,890 | +85 |
| Thu 24 Sep, 17:38 | 5eb59a5 |
π¦ NEW: NKS preset index and DX7 cartridges for Dexed | 5,805 | +285 |
| Thu 24 Sep, 17:00 | 8a161e3 |
π¦ NEW: Serum 2, Odin2 and u-he presets load natively | 5,520 | +376 |
| Thu 24 Sep, 16:38 | 423bb66 |
π DOC: note behaviour changes in the changelog | 5,144 | 0 |
| Thu 24 Sep, 16:35 | c5e7ccf |
π¦ NEW: modulation, routing, MIDI controllers and safer renders | 5,144 | +1,061 |
| Thu 24 Sep, 15:45 | ac6d60c |
π¦ NEW: builtin:sampler for Bitwig multisamples and drum kits | 4,083 | +692 |
| Thu 24 Sep, 15:28 | 25a1ca4 |
π DOC: drive plugins with compiled-in presets through JUCE state | 3,391 | 0 |
| Thu 24 Sep, 15:13 | 492751b |
π¦ NEW: Load CLAP factory presets by name | 3,391 | +256 |
| Thu 24 Sep, 14:12 | 0a5911f |
π¦ NEW: VST3 hosting | 3,135 | +705 |
| Thu 24 Sep, 13:00 | a5d2ae4 |
π¦ NEW: Wavelength headless music engine for AI agents | 2,430 | +2,430 |
What it can do
Read from the source rather than kept as a list: commands from the command line's dispatcher, effects from the effect factory, formats from the code that reads or writes them. The line in each box is its count over the same days as the chart above.
- Commands 20 5 at the first commit
- Built-in effects 22 11 at the first commit
- Built-in instruments 6 2 at the first commit
- Plugin formats 3 1 at the first commit
- File formats 12 1 at the first commit
- Preset file types 21 1 at the first commit
- Platforms 3 1 at the first commit
- Libraries it builds on 10 2 at the first commit
Release by release
Where each ability first shipped. Hover or tap one for the commit that brought it.
| Ability | In v0.1.024 Sep | New in v0.2.025 Sep | New in v0.3.026 Sep | New in v0.4.027 Sep |
|---|---|---|---|---|
| Commands20 |
|
|
|
|
| Built-in effects22 |
|
|
|
· |
| Built-in instruments6 |
|
· |
|
|
| Plugin formats3 |
|
· |
|
· |
| Audio files5 |
|
· |
|
· |
| Music files4 | · | · |
|
|
| Sample libraries3 |
|
· |
|
· |
| Preset file types21 |
|
· | · | · |
| Platforms3 |
|
|
· | · |
| Libraries it builds on10 |
|
|
|
· |
Commands
| Command | What it does | First in |
|---|---|---|
wavelength state |
v0.1.0 | |
wavelength render |
v0.1.0 | |
wavelength plugins |
v0.1.0 | |
wavelength version |
v0.1.0 | |
wavelength params |
v0.1.0 | |
wavelength presets |
v0.1.0 | |
wavelength samples |
v0.1.0 | |
wavelength analyze |
v0.1.0 | |
wavelength audition |
v0.1.0 | |
wavelength master |
v0.1.0 | |
wavelength lint |
v0.2.0 | |
wavelength import |
v0.3.0 | |
wavelength export |
v0.3.0 | |
wavelength timeline |
v0.3.0 | |
wavelength serve |
v0.3.0 | |
wavelength picture |
v0.4.0 | |
wavelength docs |
v0.4.0 | |
wavelength mcp |
v0.4.0 | |
wavelength kit |
v0.4.0 | |
wavelength upgrade |
v0.4.0 |
The engine, part by part
The C++ source grouped by what it does, largest first, with each part's growth over the same days.
-
Effects and instruments
Built-in effects, the drum machine, FX, sampler, SFZ and SoundFont players, audio clips.
-
Files and formats
Audio files in and out, MIDI, MusicXML, DAWproject and Bitwig projects, zip and XML.
-
Command line and MCP
The wavelength command: arguments, every subcommand, help, terminal output and the JSON report; the MCP server, the docs built into the binary and self-upgrade.
-
Render and mix
The job (with stand-in sounds for missing plugins), tempo map and automation, then the mix graph: tracks, sends, buses, master.
-
Songs
The song format: the manifest, revisions with undo and a musical diff, comments pinned to revisions, .wavelength packages and upgrades.
-
Plugin hosting
Loads CLAP, VST3 and VST2 plugins, scans and caches them, and drives them offline; installs free ones (kit).
-
Presets and states
Finds presets by name in 20-odd formats and turns them into the state a plugin loads; audition indexes how they sound.
-
Measurement
Loudness (BS.1770), analysis of pitch, brightness and onsets, the harmony check, and the song picture for agents that can see but not hear.
-
Review server
The local review page's server (wavelength serve): songs, previews and review comments.
-
Platform
What differs on macOS, Linux and Windows: folders, processes, libraries.
Every source file
Each rectangle is a file (its .cpp and .hpp together), sized by its lines of code and shaded by how many commits changed it: the stronger the blue, the more it has been worked on.
Every source file as a table (113)
| File | Part | Code | Comments | Commits | What it is |
|---|---|---|---|---|---|
main.cpp |
Command line and MCP | 1,750 | 71 | 85 | Wavelength, a headless music engine for AI agents. |
effects.cpp effects.hpp |
Effects and instruments | 1,295 | 86 | 28 | Effects: built-in DSP (deterministic, always available) and CLAP effect plugins. |
render.cpp render.hpp |
Render and mix | 1,210 | 72 | 47 | |
sampler.cpp sampler.hpp |
Effects and instruments | 1,152 | 61 | 12 | builtin:sampler: plays sample libraries without a plugin. |
dawproject.cpp dawproject.hpp |
Files and formats | 1,038 | 68 | 7 | DAWproject import (the open project format Bitwig, Studio One and others export): the arrangement, tracks, notes, plugin states, mixer (volume, pan, mute, sends⦠|
job.cpp job.hpp |
Render and mix | 803 | 29 | 38 | A render job: the JSON document agents write. |
synth.cpp synth.hpp |
Effects and instruments | 781 | 30 | 1 | builtin:synth: a virtual-analog polysynth inside Wavelength, so melodic parts render on a machine without any plugins (a fresh laptop, a CI runner, an agent's cloud⦠|
serve.cpp serve.hpp |
Review server | 682 | 34 | 6 | `wavelength serve`: a local web UI for reviewing songs. |
preset_formats.cpp preset_formats.hpp |
Presets and states | 673 | 44 | 6 | Converters from plugins' own preset files to the state their plugins load. |
midi_file.cpp midi_file.hpp |
Files and formats | 603 | 39 | 3 | Standard MIDI Files (.mid): import into a job, export a job's parts. |
mcp.cpp mcp.hpp |
Command line and MCP | 586 | 12 | 5 | `wavelength mcp`: a Model Context Protocol server on stdin/stdout (JSON-RPC, one message per line), so Claude Desktop, Claude Code, Cursor and other MCP clients can⦠|
song_cli.cpp song_cli.hpp |
Songs | 575 | 10 | 7 | The song commands (docs/song-format.md): save, history, undo, redo, restore, diff, comments, pack, unpack, validate, migrate and fallbacks. |
musicxml.cpp musicxml.hpp |
Files and formats | 568 | 24 | 3 | MusicXML scores (.musicxml, .xml, compressed .mxl; score-partwise) imported into a job. |
vst3_plugin.cpp vst3_plugin.hpp |
Plugin hosting | 563 | 23 | 10 | VST3 implementation of the Plugin interface, built on the Steinberg VST3 SDK hosting helpers (module loading, PlugProvider, HostProcessData, EventList, ParameterChanges). |
encode.cpp encode.hpp |
Files and formats | 544 | 21 | 2 | Delivery files next to mix.wav: MP3 (LAME, loaded at run time, or ffmpeg), FLAC (built in) and 16/24-bit WAV. |
platform.cpp platform.hpp |
Platform | 525 | 37 | 5 | Everything that differs between macOS, Linux and Windows: folders, child processes, loading plugin libraries, the main-thread event loop and leaving the process. |
bitwig.cpp bitwig.hpp |
Files and formats | 517 | 38 | 3 | Bitwig Studio project files (.bwproject): the devices a DAWproject export leaves out. |
package.cpp package.hpp |
Songs | 474 | 24 | 6 | .wavelength packages (docs/song-format.md, section 5): a song folder packed into a ZIP whose first entry is `mimetype`, and back. |
harmony.cpp harmony.hpp |
Measurement | 473 | 42 | 3 | Harmony check for `wavelength lint --harmony`: the key in force at every bar (declared in the job's "keys", given with --key, or detected per section), the chord of⦠|
vst2_plugin.cpp vst2_plugin.hpp |
Plugin hosting | 449 | 13 | 2 | VST 2 implementation of the Plugin interface: loads a .vst bundle (macOS), .dll (Windows) or .so (Linux) through its VSTPluginMain entry, on Wavelength's own declaration⦠|
song.cpp song.hpp |
Songs | 435 | 30 | 6 | A song folder (docs/song-format.md): the manifest wavelength.json, the job and the files that belong to it. |
history.cpp history.hpp |
Songs | 432 | 32 | 4 | A song's revisions (docs/song-format.md, section 6): history/log.jsonl, one revision per line, and history/objects/<2>/<sha256>, each tracked file's content compressed⦠|
kit.cpp kit.hpp |
Plugin hosting | 422 | 21 | 2 | `wavelength kit`: a starter set of free instruments for machines without plugins (a cloud container, CI, a fresh laptop): GPL synthesizers downloaded from their own⦠|
help.cpp help.hpp |
Command line and MCP | 421 | 14 | 1 | `wavelength help`: a short list of commands grouped by task, `help <command>` (or `<command> --help`) for one command's usage and details, `help all` for everything. |
dawproject_export.cpp |
Files and formats | 403 | 17 | 2 | DAWproject export: a job as a project a DAW opens with its plugins loaded (see dawproject.hpp). |
picture.cpp picture.hpp |
Measurement | 401 | 23 | 2 | A picture of a song, for agents that can see images but can't hear: the sections and bars, the mix's loudness over time with each section's level, its spectrum, and a⦠|
preset_files.cpp preset_files.hpp |
Presets and states | 386 | 29 | 13 | Preset files on disk for a plugin, found in the standard preset folders (/Library/Audio/Presets/<vendor>/<plugin>, ~/Library/Audio/Presets/...) and a few known vendor⦠|
sf2.cpp sf2.hpp |
Effects and instruments | 383 | 20 | 1 | SoundFont 2 (.sf2) and its Ogg Vorbis compressed form (.sf3, MuseScore's): presets by bank and program, resolved into zones (instrument generators with the preset's⦠|
instance.cpp instance.hpp |
Plugin hosting | 381 | 24 | 8 | One plugin instance plus the host side it talks to. |
analyze.cpp analyze.hpp |
Measurement | 368 | 38 | 9 | Measurements an agent needs in place of listening: pitch, brightness, spectral balance, stereo image, onsets and the amplitude envelope of a stem, a mix or a window of⦠|
migrate.cpp migrate.hpp |
Songs | 360 | 19 | 1 | `wavelength migrate <song>`: brings a song folder made before the song format (docs/song-format.md) up to it. |
songdiff.cpp songdiff.hpp |
Songs | 349 | 12 | 2 | Two versions of a job compared as music (`wavelength diff`, docs/song-format.md): which tracks, bars, sounds and settings changed. |
catalog.cpp catalog.hpp |
Plugin hosting | 311 | 22 | 7 | Finds CLAP and VST3 plugins on disk. |
audition.cpp audition.hpp |
Presets and states | 300 | 18 | 5 | The audition index: every preset of a plugin rendered once (C4 for one second) and measured, so an agent can choose sounds by what they sound like and knows each⦠|
automation.hpp |
Render and mix | 294 | 33 | 8 | Breakpoint automation. |
clap_plugin.cpp clap_plugin.hpp |
Plugin hosting | 284 | 3 | 8 | CLAP implementation of the Plugin interface (wraps Instance, the CLAP host side). |
fallback.cpp fallback.hpp |
Render and mix | 281 | 22 | 3 | Stand-in sounds for jobs that travel: a track's "fallback" lists other sounds (another plugin, builtin:synth, a sample library) that play its part when its own plugin or⦠|
builtins.cpp builtins.hpp |
Effects and instruments | 267 | 19 | 7 | Built-in instruments, used as `"plugin": "builtin:drums"` or `"plugin": "builtin:fx"`. |
engine.cpp engine.hpp |
Render and mix | 262 | 25 | 17 | Running plugins (CLAP or VST3) over a whole timeline: instruments (notes in, audio out) and effects (audio in, audio out), with parameter automation. |
state_file.cpp state_file.hpp |
Presets and states | 249 | 26 | 11 | Plugin state files. |
microtonic.cpp microtonic.hpp |
Presets and states | 238 | 13 | 1 | Sonic Charge Microtonic kits (.mtpreset) and drums (.mtdrum), via the plugin's own text parser. |
clips.cpp clips.hpp |
Effects and instruments | 220 | 16 | 4 | builtin:audio: audio files placed on the timeline in beats, with pitch-preserving time stretch (Signalsmith Stretch), transposition, reverse, trimming and fades. |
sfz.cpp sfz.hpp |
Effects and instruments | 216 | 7 | 1 | SFZ instruments (the open text format for multisampled instruments): the file's headers flattened into one opcode map per <region> (control -> global -> master -> group⦠|
self_upgrade.cpp self_upgrade.hpp |
Command line and MCP | 188 | 11 | 1 | `wavelength upgrade`: replaces this binary with the latest GitHub release for this platform, checked against the release's SHA256SUMS.txt and run once before it takes⦠|
term.cpp term.hpp |
Command line and MCP | 182 | 15 | 1 | Terminal styling for people, invisible to agents: colours, symbols and a progress line appear only when the stream is a terminal, NO_COLOR is unset, TERM isn't "dumb"β¦ |
presets.cpp presets.hpp |
Presets and states | 175 | 7 | 2 | CLAP preset discovery: lists a plugin's presets (its built-in banks and preset files) through the plugin's preset-discovery factory, and resolves a name to a loadable⦠|
zip.cpp zip.hpp |
Files and formats | 167 | 7 | 5 | Minimal zip reader (stored or deflated entries, no zip64): Bitwig .multisample instruments and DAWproject files are zips. |
xml.cpp xml.hpp |
Files and formats | 163 | 5 | 2 | A small XML reader for project and score files (DAWproject, MusicXML): elements, attributes and text content, entities decoded; comments, processing instructions and⦠|
audio_file.cpp audio_file.hpp |
Files and formats | 159 | 6 | 2 | Audio files in: WAV, AIFF/AIFC, FLAC, MP3 and Ogg Vorbis, told apart by their contents (not the extension). |
wav.cpp wav.hpp |
Files and formats | 130 | 6 | 6 | |
loudness.cpp loudness.hpp |
Measurement | 115 | 11 | 5 | Integrated loudness per ITU-R BS.1770-4 / EBU R128 (K-weighting, 400 ms blocks with 75% overlap, absolute gate at -70 LUFS, relative gate 10 LU below the ungated mean). |
plugin.cpp plugin.hpp |
Plugin hosting | 104 | 22 | 9 | A hosted plugin, independent of its format (CLAP or VST3). |
review.cpp review.hpp |
Songs | 98 | 9 | 2 | Comments on a song (review.json, docs/song-format.md section 7): each keeps an anchor to what was heard (the revision and render that were playing, the bars, time and⦠|
dsp.hpp |
Effects and instruments | 96 | 6 | 3 | Small DSP building blocks shared by the built-in effects and instruments. |
docs.cpp docs.hpp |
Command line and MCP | 91 | 5 | 1 | The agent docs built into the binary (AGENTS.md, docs/job-format.md, docs/effects.md), so an agent with only the executable, or connected over MCP, reads the guide that⦠|
vst2_abi.hpp |
Plugin hosting | 90 | 10 | 1 | The VST 2 plugin binary interface, declared from its publicly documented layout so Wavelength can host VST 2 plugins without Steinberg's (withdrawn) VST 2 SDK. |
sha256.hpp |
Songs | 82 | 3 | 1 | SHA-256 (FIPS 180-4): names song history objects and checks the files a manifest lists. |
bundle.cpp bundle.hpp |
Plugin hosting | 82 | 3 | 5 | A loaded .clap bundle: the shared library, its clap_entry, and the plugin factory. |
audio_codecs.cpp |
Files and formats | 64 | 1 | 1 | dr_flac, dr_mp3 and stb_vorbis compiled into Wavelength (their warnings are silenced for this file). |
tempo.hpp |
Render and mix | 22 | 4 | 4 | Beats <-> seconds through a tempo map. |
image_codecs.cpp |
Measurement | 4 | 2 | 1 | stb_image_write (PNG out) and stb_truetype (text in pictures) compiled into Wavelength (their warnings are silenced for this file). |
Around the engine
The rest of the repository, and the commits that built it.
What the repository holds
Lines in each kind of file, blank lines left out.
What the commits were
By their Emoji-Log prefix.
When they were made
Commits by hour of the day, in the committer's time (UTCβ4).
Measured from commit b4c709b of the engine's repository, 27 September 2026 at 10:28. Only committed work counts.