# tkleisas/yawn architecture

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

- Interactive diagram: https://gitdiagram.com/tkleisas/yawn
- Repository: https://github.com/tkleisas/yawn

## Overview

Y.A.W.N is a cross-platform digital audio workstation. The principal workflow is a musician editing session or arrangement clips, then launching or playing them through the audio engine to a mixed output; MIDI, instruments, effects, and automation shape playback. Separate workflows cover visual/VJ output, external sync and controllers, plugin hosting, media analysis, and library browsing. The README documents these capabilities; sampled source confirms selected audio, MIDI, automation, visual, and controller connections, so unsampled wiring is omitted.

Main entry points: [`src/app/App.cpp`](https://github.com/tkleisas/yawn/blob/master/src/app/App.cpp) (Application), [`src/audio/AudioEngine.cpp`](https://github.com/tkleisas/yawn/blob/master/src/audio/AudioEngine.cpp) (Audio Engine), [`src/visual/VisualEngine.cpp`](https://github.com/tkleisas/yawn/blob/master/src/visual/VisualEngine.cpp) (Visual and VJ Engine), [`src/app/Project.h`](https://github.com/tkleisas/yawn/blob/master/src/app/Project.h) (Project State)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Editing and Project"]
  node_app["Application<br/>[App.cpp]"]
  node_session["Session and Arrangement<br/>[SessionPanel.cpp]"]
  node_arrangement["Arrangement Editor"]
  node_project["Project State<br/>[Project.h]"]
  node_serializer["Project Persistence"]
end

subgraph group_audio["Audio and MIDI"]
  node_audioengine["Audio Engine<br/>[AudioEngine.cpp]"]
  node_playback["Clip and Timeline Playback"]
  node_mixer["Mixer and Effects<br/>[Mixer.cpp]"]
  node_instruments["Instruments<br/>[Instrument.h]"]
  node_automation["Automation"]
  node_midi["MIDI Engine<br/>[MidiEngine.cpp]"]
end

subgraph group_visual["Visual Engine"]
  node_visualengine["Visual and VJ Engine<br/>[VisualEngine.cpp]"]
  node_video["Video and Live Input<br/>[VideoDecoder.cpp]"]
  node_models["3D Models and Scripts<br/>[M3DModel.cpp]"]
end

subgraph group_integrations["External Integrations"]
  node_midiports["MIDI Devices<br/>[MidiPort.h]"]
  node_link["Ableton Link<br/>[LinkManager.cpp]"]
  node_controllers["Controller Scripting"]
  node_vst["VST3 Hosting<br/>[VST3Host.cpp]"]
end

subgraph group_content["Media and Library"]
  node_analysis["Audio Analysis<br/>[StemSeparation.cpp]"]
  node_library["Media and Preset Library<br/>[LibraryScanner.cpp]"]
  node_store[("Library Database")]
end

node_musician(("Musician"))
node_output(("Audio Output"))
node_lan(("Link Peers"))
node_plugin(("VST3 Plugins"))

node_musician -->|"operates"| node_app
node_app -->|"presents"| node_session
node_app -->|"presents"| node_arrangement
node_app -->|"manages"| node_project
node_session -->|"edits clips"| node_project
node_arrangement -->|"edits timeline"| node_project
node_app -->|"loads and saves"| node_serializer
node_app -->|"controls playback"| node_audioengine
node_audioengine -->|"processes clips"| node_playback
node_audioengine -->|"processes automation"| node_automation
node_audioengine -->|"routes MIDI"| node_midi
node_audioengine -->|"renders instruments"| node_instruments
node_audioengine -->|"mixes audio"| node_mixer
node_mixer -->|"sends audio"| node_output
node_midi -->|"receives and sends"| node_midiports
node_app -->|"controls visuals"| node_visualengine
node_visualengine -->|"uses video input"| node_video
node_visualengine -->|"renders models"| node_models
node_visualengine -->|"reads audio reactivity"| node_audioengine
node_app -->|"coordinates tempo"| node_link
node_link -->|"syncs over LAN"| node_lan
node_app -->|"manages scripts"| node_controllers
node_controllers -->|"sends commands"| node_audioengine
node_app -->|"hosts plugins"| node_vst
node_vst -->|"loads plugin"| node_plugin
node_app -->|"runs audio analysis"| node_analysis
node_app -->|"browses media"| node_library
node_library -->|"indexes media"| node_store

click node_app "https://github.com/tkleisas/yawn/blob/master/src/app/App.cpp"
click node_session "https://github.com/tkleisas/yawn/blob/master/src/ui/panels/SessionPanel.cpp"
click node_arrangement "https://github.com/tkleisas/yawn/blob/master/src/ui/panels/ArrangementPanel.cpp"
click node_project "https://github.com/tkleisas/yawn/blob/master/src/app/Project.h"
click node_serializer "https://github.com/tkleisas/yawn/blob/master/src/util/ProjectSerializer.cpp"
click node_audioengine "https://github.com/tkleisas/yawn/blob/master/src/audio/AudioEngine.cpp"
click node_playback "https://github.com/tkleisas/yawn/blob/master/src/audio/ArrangementPlayback.cpp"
click node_mixer "https://github.com/tkleisas/yawn/blob/master/src/audio/Mixer.cpp"
click node_instruments "https://github.com/tkleisas/yawn/blob/master/src/instruments/Instrument.h"
click node_automation "https://github.com/tkleisas/yawn/blob/master/src/automation/AutomationEngine.cpp"
click node_midi "https://github.com/tkleisas/yawn/blob/master/src/midi/MidiEngine.cpp"
click node_midiports "https://github.com/tkleisas/yawn/blob/master/src/midi/MidiPort.h"
click node_visualengine "https://github.com/tkleisas/yawn/blob/master/src/visual/VisualEngine.cpp"
click node_video "https://github.com/tkleisas/yawn/blob/master/src/visual/VideoDecoder.cpp"
click node_models "https://github.com/tkleisas/yawn/blob/master/src/visual/gltf/M3DModel.cpp"
click node_link "https://github.com/tkleisas/yawn/blob/master/src/link/LinkManager.cpp"
click node_controllers "https://github.com/tkleisas/yawn/blob/master/src/controllers/ControllerManager.cpp"
click node_vst "https://github.com/tkleisas/yawn/blob/master/src/vst3/VST3Host.cpp"
click node_analysis "https://github.com/tkleisas/yawn/blob/master/src/transcribe/StemSeparation.cpp"
click node_library "https://github.com/tkleisas/yawn/blob/master/src/library/LibraryScanner.cpp"
click node_store "https://github.com/tkleisas/yawn/blob/master/src/library/LibraryDatabase.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_app,node_session,node_arrangement,node_project,node_serializer toneBlue
class node_audioengine,node_playback,node_mixer,node_instruments,node_automation,node_midi toneAmber
class node_visualengine,node_video,node_models toneMint
class node_midiports,node_link,node_controllers,node_vst toneRose
class node_analysis,node_library,node_store,node_musician,node_output,node_lan,node_plugin toneIndigo
```

## Components

### Editing and Project

- [Application](https://github.com/tkleisas/yawn/blob/master/src/app/App.cpp): `src/app/App.cpp`
- [Session and Arrangement](https://github.com/tkleisas/yawn/blob/master/src/ui/panels/SessionPanel.cpp): `src/ui/panels/SessionPanel.cpp`
- [Arrangement Editor](https://github.com/tkleisas/yawn/blob/master/src/ui/panels/ArrangementPanel.cpp): `src/ui/panels/ArrangementPanel.cpp`
- [Project State](https://github.com/tkleisas/yawn/blob/master/src/app/Project.h): `src/app/Project.h`
- [Project Persistence](https://github.com/tkleisas/yawn/blob/master/src/util/ProjectSerializer.cpp): `src/util/ProjectSerializer.cpp`

### Audio and MIDI

- [Audio Engine](https://github.com/tkleisas/yawn/blob/master/src/audio/AudioEngine.cpp): `src/audio/AudioEngine.cpp`
- [Clip and Timeline Playback](https://github.com/tkleisas/yawn/blob/master/src/audio/ArrangementPlayback.cpp): `src/audio/ArrangementPlayback.cpp`
- [Mixer and Effects](https://github.com/tkleisas/yawn/blob/master/src/audio/Mixer.cpp): `src/audio/Mixer.cpp`
- [Instruments](https://github.com/tkleisas/yawn/blob/master/src/instruments/Instrument.h): `src/instruments/Instrument.h`
- [Automation](https://github.com/tkleisas/yawn/blob/master/src/automation/AutomationEngine.cpp): `src/automation/AutomationEngine.cpp`
- [MIDI Engine](https://github.com/tkleisas/yawn/blob/master/src/midi/MidiEngine.cpp): `src/midi/MidiEngine.cpp`

### Visual Engine

- [Visual and VJ Engine](https://github.com/tkleisas/yawn/blob/master/src/visual/VisualEngine.cpp): `src/visual/VisualEngine.cpp`
- [Video and Live Input](https://github.com/tkleisas/yawn/blob/master/src/visual/VideoDecoder.cpp): `src/visual/VideoDecoder.cpp`
- [3D Models and Scripts](https://github.com/tkleisas/yawn/blob/master/src/visual/gltf/M3DModel.cpp): `src/visual/gltf/M3DModel.cpp`

### External Integrations

- [MIDI Devices](https://github.com/tkleisas/yawn/blob/master/src/midi/MidiPort.h): `src/midi/MidiPort.h`
- [Ableton Link](https://github.com/tkleisas/yawn/blob/master/src/link/LinkManager.cpp): `src/link/LinkManager.cpp`
- [Controller Scripting](https://github.com/tkleisas/yawn/blob/master/src/controllers/ControllerManager.cpp): `src/controllers/ControllerManager.cpp`
- [VST3 Hosting](https://github.com/tkleisas/yawn/blob/master/src/vst3/VST3Host.cpp): `src/vst3/VST3Host.cpp`

### Media and Library

- [Audio Analysis](https://github.com/tkleisas/yawn/blob/master/src/transcribe/StemSeparation.cpp): `src/transcribe/StemSeparation.cpp`
- [Media and Preset Library](https://github.com/tkleisas/yawn/blob/master/src/library/LibraryScanner.cpp): `src/library/LibraryScanner.cpp`
- [Library Database](https://github.com/tkleisas/yawn/blob/master/src/library/LibraryDatabase.cpp): `src/library/LibraryDatabase.cpp`

### Other components

- **Musician**
- **Audio Output**
- **Link Peers**
- **VST3 Plugins**

## Connections

- Musician → Application: operates
- Application → Session and Arrangement: presents
- Application → Arrangement Editor: presents
- Application → Project State: manages
- Session and Arrangement → Project State: edits clips
- Arrangement Editor → Project State: edits timeline
- Application → Project Persistence: loads and saves
- Application → Audio Engine: controls playback
- Audio Engine → Clip and Timeline Playback: processes clips
- Audio Engine → Automation: processes automation
- Audio Engine → MIDI Engine: routes MIDI
- Audio Engine → Instruments: renders instruments
- Audio Engine → Mixer and Effects: mixes audio
- Mixer and Effects → Audio Output: sends audio
- MIDI Engine → MIDI Devices: receives and sends
- Application → Visual and VJ Engine: controls visuals
- Visual and VJ Engine → Video and Live Input: uses video input
- Visual and VJ Engine → 3D Models and Scripts: renders models
- Visual and VJ Engine → Audio Engine: reads audio reactivity
- Application → Ableton Link: coordinates tempo
- Ableton Link → Link Peers: syncs over LAN
- Application → Controller Scripting: manages scripts
- Controller Scripting → Audio Engine: sends commands
- Application → VST3 Hosting: hosts plugins
- VST3 Hosting → VST3 Plugins: loads plugin
- Application → Audio Analysis: runs audio analysis
- Application → Media and Preset Library: browses media
- Media and Preset Library → Library Database: indexes media
