# douwdy/noobster architecture

> Architecture diagram of the GitHub repository douwdy/noobster, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/douwdy/noobster
- Repository: https://github.com/douwdy/noobster

## Overview

Noobster is a paired VST3/CLAP mixing and mastering plugin: track instances analyze and process individual mixer channels, while a Master instance coordinates them, solves track settings, and masters the summed output. The documented workflow is listen, analyze, publish per-track adjustments, then master; a second pass refines loudness against the actual chain. The README also describes reference matching, role-based processing, mix controls, snapshots, comparison, and project persistence. Sampled code confirms the shared session and processor responsibilities; some detailed DSP wiring is documented rather than shown in the excerpts.

Main entry points: [`core/src/Processors.cpp`](https://github.com/douwdy/noobster/blob/main/core/src/Processors.cpp) (Master processor), [`plugin/vst3/Vst3Plugin.cpp`](https://github.com/douwdy/noobster/blob/main/plugin/vst3/Vst3Plugin.cpp) (VST3 adapter), [`ui/src/Views.cpp`](https://github.com/douwdy/noobster/blob/main/ui/src/Views.cpp) (Master and track views), [`plugin/clap/ClapPlugin.cpp`](https://github.com/douwdy/noobster/blob/main/plugin/clap/ClapPlugin.cpp) (CLAP adapter)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Plugin entry"]
  node_clap["CLAP adapter<br/>[ClapPlugin.cpp]"]
  node_vst3["VST3 adapter<br/>[Vst3Plugin.cpp]"]
end

subgraph group_mix["Mix coordination"]
  node_analysis["Track analysis<br/>[Analysis.cpp]"]
  node_solver["Mix solver<br/>[Solver.cpp]"]
  node_session["Shared session<br/>[Session.cpp]"]
  node_reference["Reference profile<br/>[Profiles.cpp]"]
end

subgraph group_dsp["Audio processing"]
  node_track["Track processor<br/>[Processors.cpp]"]
  node_master["Master processor<br/>[Processors.cpp]"]
  node_trackfx["Track treatment<br/>[Processors.cpp]"]
  node_masterfx["Master treatment<br/>[Processors.cpp]"]
end

subgraph group_interface["User interface"]
  node_ui["Master and track views<br/>[Views.cpp]"]
  node_widgets["UI controls<br/>[Widgets.cpp]"]
  node_window["Editor window"]
end

subgraph group_state["Project state"]
  node_params["Parameters<br/>[Params.cpp]"]
  node_projectstate["Project state<br/>[Vst3Plugin.cpp]"]
end

node_host(("DAW host"))

node_host -->|"hosts plugins"| node_clap
node_host -->|"hosts plugins"| node_vst3
node_clap -->|"dispatches audio"| node_track
node_clap -->|"dispatches audio"| node_master
node_vst3 -->|"dispatches audio"| node_track
node_vst3 -->|"dispatches audio"| node_master
node_track -->|"publishes analysis"| node_analysis
node_track -->|"publishes track data"| node_session
node_session -->|"solves tracks"| node_solver
node_session -->|"publishes settings"| node_track
node_master -->|"coordinates tracks"| node_session
node_master -->|"analyzes mix"| node_analysis
node_master -->|"solves mastering"| node_solver
node_master -.->|"uses profile"| node_reference
node_track -->|"processes track"| node_trackfx
node_master -->|"processes master"| node_masterfx
node_clap -->|"reads and updates"| node_params
node_vst3 -->|"reads and updates"| node_params
node_vst3 -->|"loads and saves"| node_projectstate
node_clap -->|"creates views"| node_ui
node_vst3 -->|"creates views"| node_ui
node_ui -->|"uses controls"| node_widgets
node_ui -->|"renders in"| node_window
node_widgets -->|"edits parameters"| node_params
node_ui -->|"requests undo"| node_master
node_ui -->|"controls mix"| node_session

click node_clap "https://github.com/douwdy/noobster/blob/main/plugin/clap/ClapPlugin.cpp"
click node_vst3 "https://github.com/douwdy/noobster/blob/main/plugin/vst3/Vst3Plugin.cpp"
click node_track "https://github.com/douwdy/noobster/blob/main/core/src/Processors.cpp"
click node_master "https://github.com/douwdy/noobster/blob/main/core/src/Processors.cpp"
click node_analysis "https://github.com/douwdy/noobster/blob/main/core/src/Analysis.cpp"
click node_solver "https://github.com/douwdy/noobster/blob/main/core/src/Solver.cpp"
click node_session "https://github.com/douwdy/noobster/blob/main/core/src/Session.cpp"
click node_trackfx "https://github.com/douwdy/noobster/blob/main/core/src/Processors.cpp"
click node_masterfx "https://github.com/douwdy/noobster/blob/main/core/src/Processors.cpp"
click node_reference "https://github.com/douwdy/noobster/blob/main/core/src/Profiles.cpp"
click node_params "https://github.com/douwdy/noobster/blob/main/core/src/Params.cpp"
click node_projectstate "https://github.com/douwdy/noobster/blob/main/plugin/vst3/Vst3Plugin.cpp"
click node_ui "https://github.com/douwdy/noobster/blob/main/ui/src/Views.cpp"
click node_widgets "https://github.com/douwdy/noobster/blob/main/ui/src/Widgets.cpp"
click node_window "https://github.com/douwdy/noobster/blob/main/ui/platform/EditorWindowWin32.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_clap,node_vst3 toneBlue
class node_analysis,node_solver,node_session,node_reference toneAmber
class node_track,node_master,node_trackfx,node_masterfx toneMint
class node_ui,node_widgets,node_window toneRose
class node_params,node_projectstate,node_host toneIndigo
```

## Components

### Plugin entry

- [CLAP adapter](https://github.com/douwdy/noobster/blob/main/plugin/clap/ClapPlugin.cpp): `plugin/clap/ClapPlugin.cpp`
- [VST3 adapter](https://github.com/douwdy/noobster/blob/main/plugin/vst3/Vst3Plugin.cpp): `plugin/vst3/Vst3Plugin.cpp`

### Mix coordination

- [Track analysis](https://github.com/douwdy/noobster/blob/main/core/src/Analysis.cpp): `core/src/Analysis.cpp`
- [Mix solver](https://github.com/douwdy/noobster/blob/main/core/src/Solver.cpp): `core/src/Solver.cpp`
- [Shared session](https://github.com/douwdy/noobster/blob/main/core/src/Session.cpp): `core/src/Session.cpp`
- [Reference profile](https://github.com/douwdy/noobster/blob/main/core/src/Profiles.cpp): `core/src/Profiles.cpp`

### Audio processing

- [Track processor](https://github.com/douwdy/noobster/blob/main/core/src/Processors.cpp): `core/src/Processors.cpp`
- [Master processor](https://github.com/douwdy/noobster/blob/main/core/src/Processors.cpp): `core/src/Processors.cpp`
- [Track treatment](https://github.com/douwdy/noobster/blob/main/core/src/Processors.cpp): `core/src/Processors.cpp`
- [Master treatment](https://github.com/douwdy/noobster/blob/main/core/src/Processors.cpp): `core/src/Processors.cpp`

### User interface

- [Master and track views](https://github.com/douwdy/noobster/blob/main/ui/src/Views.cpp): `ui/src/Views.cpp`
- [UI controls](https://github.com/douwdy/noobster/blob/main/ui/src/Widgets.cpp): `ui/src/Widgets.cpp`
- [Editor window](https://github.com/douwdy/noobster/blob/main/ui/platform/EditorWindowWin32.cpp): `ui/platform/EditorWindowWin32.cpp`

### Project state

- [Parameters](https://github.com/douwdy/noobster/blob/main/core/src/Params.cpp): `core/src/Params.cpp`
- [Project state](https://github.com/douwdy/noobster/blob/main/plugin/vst3/Vst3Plugin.cpp): `plugin/vst3/Vst3Plugin.cpp`

### Other components

- **DAW host**

## Connections

- DAW host → CLAP adapter: hosts plugins
- DAW host → VST3 adapter: hosts plugins
- CLAP adapter → Track processor: dispatches audio
- CLAP adapter → Master processor: dispatches audio
- VST3 adapter → Track processor: dispatches audio
- VST3 adapter → Master processor: dispatches audio
- Track processor → Track analysis: publishes analysis
- Track processor → Shared session: publishes track data
- Shared session → Mix solver: solves tracks
- Shared session → Track processor: publishes settings
- Master processor → Shared session: coordinates tracks
- Master processor → Track analysis: analyzes mix
- Master processor → Mix solver: solves mastering
- Master processor → Reference profile: uses profile
- Track processor → Track treatment: processes track
- Master processor → Master treatment: processes master
- CLAP adapter → Parameters: reads and updates
- VST3 adapter → Parameters: reads and updates
- VST3 adapter → Project state: loads and saves
- CLAP adapter → Master and track views: creates views
- VST3 adapter → Master and track views: creates views
- Master and track views → UI controls: uses controls
- Master and track views → Editor window: renders in
- UI controls → Parameters: edits parameters
- Master and track views → Master processor: requests undo
- Master and track views → Shared session: controls mix
