{"id":50337348,"url":"https://github.com/fdb/vamos","last_synced_at":"2026-05-29T14:30:46.237Z","repository":{"id":339492278,"uuid":"1161996041","full_name":"fdb/vamos","owner":"fdb","description":"Learning about synthesizers","archived":false,"fork":false,"pushed_at":"2026-03-02T21:20:39.000Z","size":691,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-03T00:36:13.600Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fdb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-19T18:54:53.000Z","updated_at":"2026-03-02T21:20:43.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/fdb/vamos","commit_stats":null,"previous_names":["fdb/vamos"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/fdb/vamos","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fdb%2Fvamos","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fdb%2Fvamos/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fdb%2Fvamos/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fdb%2Fvamos/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fdb","download_url":"https://codeload.github.com/fdb/vamos/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fdb%2Fvamos/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33657690,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-29T02:00:06.066Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-29T14:30:45.545Z","updated_at":"2026-05-29T14:30:46.226Z","avatar_url":"https://github.com/fdb.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# Vamos\n\n**Vamos is two things at once.**\n\nA polyphonic synthesizer built with AI — and AI-generated video overviews\nthat recover the context humans lose when the code writes itself.\n\n\u003cbr\u003e\n\n\u003cimg src=\".github/vamos-ui.png\" alt=\"Vamos synthesizer UI\" width=\"720\"\u003e\n\n\u003cbr\u003e\n\u003cbr\u003e\n\n`C++20` \u0026nbsp; `JUCE 8` \u0026nbsp; `VST3 / AU` \u0026nbsp; `CMake` \u0026nbsp; `Remotion`\n\n\u003c/div\u003e\n\n\u003cbr\u003e\n\n## Thing one: the synth\n\nWhen AI writes your code, you stop building a mental model of it — the videos are an experiment in getting that understanding back.\n\nVamos is a polyphonic software synthesizer plugin written in C++20 with [JUCE](https://juce.com/), inspired by Ableton's Drift. Eight voices, dual oscillators with PolyBLEP anti-aliasing, eight filter types, exponential ADSR envelopes, an LFO, a cycling envelope, and a modulation matrix with flexible routing. It runs as VST3, Audio Unit, and standalone app. It works in your DAW.\n\n\u003cp align=\"center\"\u003e\u003cimg src=\".github/vamos-signal-flow.png\" alt=\"Signal flow: Osc1 + Osc2 + Noise → Mixer → Filter → Amp → Output, with modulator routing below\" width=\"720\"\u003e\u003c/p\u003e\n\nThe code is split into two layers:\n\n- **DSP layer** (`src/dsp/`) — Pure C++20, zero JUCE dependencies. Oscillators, envelopes, filters, voices, and the synth engine all live here and can be tested independently.\n- **Plugin layer** (`src/PluginProcessor.cpp`, `src/PluginEditor.cpp`) — JUCE integration. Bridges the DSP engine to the AudioProcessor, manages 30+ parameters via APVTS, and renders the GUI.\n\nEach piece of the synth was built in a distinct phase, documented in `docs/`:\n\n| Phase | Topic |\n|-------|-------|\n| 1 | Foundation — phasor, oscillator, envelope, voice, synth, plugin |\n| 2 | Sound sources — 7 waveform types, noise generator |\n| 3 | Filter — Sallen-Key, SVF, vowel, comb, DJ, and more |\n| 4 | Modulators — LFO, cycling envelope |\n| 5 | Modulation — mod matrix, routing, per-voice modulation |\n| 6 | Voice architecture — mono, unison, stereo modes, voice stealing |\n| 7 | Parameters and GUI — APVTS integration, custom LookAndFeel |\n\n## Thing two: the videos\n\nEvery phase becomes an episode. The [`video/`](video/) directory contains a [Remotion](https://www.remotion.dev/) project — a React-based framework for making videos with code — that turns each development phase into a narrated, animated explainer.\n\nThe videos aren't made in a timeline editor. Narration text, scene timing, voiceover audio, animated visualizations, subtitles, chapter markers, and thumbnails are all generated from structured data in TypeScript. The same code-driven approach that builds the synth also builds the content about it.\n\n```\nnarration.ts  →  ElevenLabs TTS  →  timing.ts  →  Remotion scenes  →  MP4\n                                                                       ↓\n                                              VTT subtitles, chapters, thumbnail\n```\n\nSee [`video/README.md`](video/README.md) for how the pipeline works.\n\n## How they feed each other\n\nThe synth gives the videos something real to explain — not a toy example, but actual DSP code that runs in a DAW. The phase documents (`docs/`) capture the architectural thinking behind each step, and that thinking becomes the backbone of each episode's narration.\n\nThe videos, in turn, force clarity back into the code. If you can't explain a design decision in plain language — why the envelope overshoots to 1.2, why PolyBLEP costs only two multiplications per sample, why we separate DSP from the plugin layer — it's probably not clean enough yet. The act of producing the episode becomes a review of the code itself.\n\nAnd both sides share an aesthetic. The synth's dark UI with cyan accents at `#00E5FF` is the same palette used in the video's animated diagrams, code walkthroughs, and thumbnails. One visual language, two outputs.\n\n## Build\n\nRequires CMake 3.22+ and a C++20 compiler. JUCE and Catch2 are fetched automatically via CMake's FetchContent (first configure takes ~2 minutes).\n\n```bash\n./scripts/dev.sh              # Debug build + launch standalone\n./scripts/dev.sh --release    # Release build + launch\n./scripts/dev.sh --test       # Build and run all tests\n```\n\nBuild artifacts end up in `build/{Debug,Release}/Vamos_artefacts/{Standalone,VST3,AU}/`.\n\n## Tests\n\nTwo test executables with different dependency profiles:\n\n```bash\n# DSP-only tests — no JUCE, fast\ncmake --build build/Debug --target VamosTests -j$(sysctl -n hw.ncpu)\n./build/Debug/tests/VamosTests\n\n# Plugin integration tests — links JUCE\ncmake --build build/Debug --target VamosPluginTests -j$(sysctl -n hw.ncpu)\n./build/Debug/tests/VamosPluginTests\n```\n\nBoth use Catch2 v3. Run a specific test by name or tag:\n\n```bash\n./build/Debug/tests/VamosTests \"[Oscillator]\"\n./build/Debug/tests/VamosTests \"Saw wave\"\n```\n\n## License\n\nMIT — see [LICENSE](LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffdb%2Fvamos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffdb%2Fvamos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffdb%2Fvamos/lists"}