# y1ruc/sakuraasource2 architecture

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

- Interactive diagram: https://gitdiagram.com/y1ruc/sakuraasource2
- Repository: https://github.com/y1ruc/sakuraasource2

## Overview

Sak ur aa Casting Mod is a Gorilla Tag BepInEx client whose main user workflow is operating VR or desktop menus to invoke game, social, and media features. The README also identifies replay, automated refereeing, overlays, soundboard, config sync, Discord RPC, and Spotify. EmbedIO and SpotifyAPI.Web are substantial supporting libraries. Several feature branches are documented but their runtime wiring is not shown in the excerpts; those links are therefore dashed and unverified.

Main entry points: [`SakuraaCastingMod/SakuraaCastingMod/VR/UtilMenu/UtilMenuController.cs`](https://github.com/y1ruc/sakuraasource2/blob/main/SakuraaCastingMod/SakuraaCastingMod/VR/UtilMenu/UtilMenuController.cs) (VR Tablet UI), [`SakuraaCastingMod/SakuraaCastingMod/VR/UtilMenu/Utility/FriendNetworkController.cs`](https://github.com/y1ruc/sakuraasource2/blob/main/SakuraaCastingMod/SakuraaCastingMod/VR/UtilMenu/Utility/FriendNetworkController.cs) (Friend Network), [`EmbedIO/EmbedIO/WebServer.cs`](https://github.com/y1ruc/sakuraasource2/blob/main/EmbedIO/EmbedIO/WebServer.cs) (HTTP Server), [`SpotifyAPI.Web/SpotifyAPI/Web/PlayerClient.cs`](https://github.com/y1ruc/sakuraasource2/blob/main/SpotifyAPI.Web/SpotifyAPI/Web/PlayerClient.cs) (Spotify Client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Mod Client"]
  node_vrui["VR Tablet UI"]
  node_desktopui["Desktop UI<br/>[GuiManager.cs]"]
  node_config["Configuration<br/>[Configuration.cs]"]
  node_themes["UI Themes<br/>[ThemeManager.cs]"]
end

subgraph group_features["Game Features"]
  node_autoref["AutoRef<br/>[AutoRefManager.cs]"]
  node_replay["Replay System"]
  node_overlays["Game Overlays<br/>[Scoreboard.cs]"]
  node_soundboard["Soundboard"]
  node_control["Player Control<br/>[ControlMode.cs]"]
  node_haptics["VR Haptics<br/>[HapticEngine.cs]"]
end

subgraph group_network["Networking"]
  node_friendnet["Friend Network"]
  node_sakmerge["Photon Bridge<br/>[MessageBus.cs]"]
end

subgraph group_integrations["External Integrations"]
  node_spotifyui["Spotify UI"]
  node_spotify["Spotify Client<br/>[PlayerClient.cs]"]
  node_oauth["Spotify Auth<br/>[OAuthClient.cs]"]
  node_discord["Discord RPC"]
end

subgraph group_libraries["Supporting Libraries"]
  node_embedio["HTTP Server<br/>[WebServer.cs]"]
  node_routes["HTTP Routing<br/>[Route.cs]"]
  node_sessions[("HTTP Sessions")]
end

node_player(("Player"))

node_player -->|"uses"| node_vrui
node_player -.->|"uses"| node_desktopui
node_vrui -->|"initializes"| node_themes
node_vrui -->|"triggers"| node_haptics
node_player -.->|"uses"| node_autoref
node_player -.->|"records or plays"| node_replay
node_player -.->|"views"| node_overlays
node_player -.->|"plays audio"| node_soundboard
node_player -.->|"controls"| node_control
node_friendnet -.->|"sends messages"| node_sakmerge
node_friendnet -->|"updates presets"| node_config
node_player -.->|"uses"| node_spotifyui
node_spotifyui -.->|"controls playback"| node_spotify
node_spotify -.->|"obtains tokens"| node_oauth
node_player -.->|"uses presence"| node_discord
node_embedio -.->|"dispatches requests"| node_routes
node_embedio -.->|"manages sessions"| node_sessions

click node_vrui "https://github.com/y1ruc/sakuraasource2/blob/main/SakuraaCastingMod/SakuraaCastingMod/VR/UtilMenu/UtilMenuController.cs"
click node_desktopui "https://github.com/y1ruc/sakuraasource2/blob/main/SakuraaCastingMod/SakuraaCastingMod/Desktop/Ui/GuiManager.cs"
click node_config "https://github.com/y1ruc/sakuraasource2/blob/main/SakuraaCastingMod/SakuraaCastingMod/Core/Configuration.cs"
click node_themes "https://github.com/y1ruc/sakuraasource2/blob/main/SakuraaCastingMod/SakuraaCastingMod/VR/UtilMenu/Utility/ThemeManager.cs"
click node_autoref "https://github.com/y1ruc/sakuraasource2/blob/main/SakuraaCastingMod/SakuraaCastingMod/Features/AutoRef/AutoRefManager.cs"
click node_replay "https://github.com/y1ruc/sakuraasource2/tree/main/SakuraaCastingMod/SakuraaCastingMod/Features/Replay"
click node_overlays "https://github.com/y1ruc/sakuraasource2/blob/main/SakuraaCastingMod/SakuraaCastingMod/Features/Overlays/Scoreboard.cs"
click node_soundboard "https://github.com/y1ruc/sakuraasource2/blob/main/SakuraaCastingMod/SakuraaCastingMod/Features/Soundboard/SoundboardManager.cs"
click node_control "https://github.com/y1ruc/sakuraasource2/blob/main/SakuraaCastingMod/SakuraaCastingMod/Desktop/ControlMode/Main/ControlMode.cs"
click node_haptics "https://github.com/y1ruc/sakuraasource2/blob/main/SakuraaCastingMod/SakuraaCastingMod/VR/Interaction/HapticEngine.cs"
click node_friendnet "https://github.com/y1ruc/sakuraasource2/blob/main/SakuraaCastingMod/SakuraaCastingMod/VR/UtilMenu/Utility/FriendNetworkController.cs"
click node_sakmerge "https://github.com/y1ruc/sakuraasource2/blob/main/SakMerge/SakMerge/Net/MessageBus.cs"
click node_spotifyui "https://github.com/y1ruc/sakuraasource2/blob/main/SakuraaCastingMod/SakuraaCastingMod/VR/UtilMenu/UtilMenuController.cs"
click node_spotify "https://github.com/y1ruc/sakuraasource2/blob/main/SpotifyAPI.Web/SpotifyAPI/Web/PlayerClient.cs"
click node_oauth "https://github.com/y1ruc/sakuraasource2/blob/main/SpotifyAPI.Web/SpotifyAPI/Web/OAuthClient.cs"
click node_discord "https://github.com/y1ruc/sakuraasource2/blob/main/SakuraaCastingMod/SakuraaCastingMod/Shared/Integrations/DiscordSDK/GetStorageManagerMethod.cs"
click node_embedio "https://github.com/y1ruc/sakuraasource2/blob/main/EmbedIO/EmbedIO/WebServer.cs"
click node_routes "https://github.com/y1ruc/sakuraasource2/blob/main/EmbedIO/EmbedIO/Routing/Route.cs"
click node_sessions "https://github.com/y1ruc/sakuraasource2/blob/main/EmbedIO/EmbedIO/Sessions/LocalSessionManager.cs"

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_vrui,node_desktopui,node_config,node_themes toneBlue
class node_autoref,node_replay,node_overlays,node_soundboard,node_control,node_haptics toneAmber
class node_friendnet,node_sakmerge toneMint
class node_spotifyui,node_spotify,node_oauth,node_discord toneRose
class node_embedio,node_routes,node_sessions,node_player toneIndigo
```

## Components

### Mod Client

- [VR Tablet UI](https://github.com/y1ruc/sakuraasource2/blob/main/SakuraaCastingMod/SakuraaCastingMod/VR/UtilMenu/UtilMenuController.cs): `SakuraaCastingMod/SakuraaCastingMod/VR/UtilMenu/UtilMenuController.cs`
- [Desktop UI](https://github.com/y1ruc/sakuraasource2/blob/main/SakuraaCastingMod/SakuraaCastingMod/Desktop/Ui/GuiManager.cs): `SakuraaCastingMod/SakuraaCastingMod/Desktop/Ui/GuiManager.cs`
- [Configuration](https://github.com/y1ruc/sakuraasource2/blob/main/SakuraaCastingMod/SakuraaCastingMod/Core/Configuration.cs): `SakuraaCastingMod/SakuraaCastingMod/Core/Configuration.cs`
- [UI Themes](https://github.com/y1ruc/sakuraasource2/blob/main/SakuraaCastingMod/SakuraaCastingMod/VR/UtilMenu/Utility/ThemeManager.cs): `SakuraaCastingMod/SakuraaCastingMod/VR/UtilMenu/Utility/ThemeManager.cs`

### Game Features

- [AutoRef](https://github.com/y1ruc/sakuraasource2/blob/main/SakuraaCastingMod/SakuraaCastingMod/Features/AutoRef/AutoRefManager.cs): `SakuraaCastingMod/SakuraaCastingMod/Features/AutoRef/AutoRefManager.cs`
- [Replay System](https://github.com/y1ruc/sakuraasource2/tree/main/SakuraaCastingMod/SakuraaCastingMod/Features/Replay): `SakuraaCastingMod/SakuraaCastingMod/Features/Replay`
- [Game Overlays](https://github.com/y1ruc/sakuraasource2/blob/main/SakuraaCastingMod/SakuraaCastingMod/Features/Overlays/Scoreboard.cs): `SakuraaCastingMod/SakuraaCastingMod/Features/Overlays/Scoreboard.cs`
- [Soundboard](https://github.com/y1ruc/sakuraasource2/blob/main/SakuraaCastingMod/SakuraaCastingMod/Features/Soundboard/SoundboardManager.cs): `SakuraaCastingMod/SakuraaCastingMod/Features/Soundboard/SoundboardManager.cs`
- [Player Control](https://github.com/y1ruc/sakuraasource2/blob/main/SakuraaCastingMod/SakuraaCastingMod/Desktop/ControlMode/Main/ControlMode.cs): `SakuraaCastingMod/SakuraaCastingMod/Desktop/ControlMode/Main/ControlMode.cs`
- [VR Haptics](https://github.com/y1ruc/sakuraasource2/blob/main/SakuraaCastingMod/SakuraaCastingMod/VR/Interaction/HapticEngine.cs): `SakuraaCastingMod/SakuraaCastingMod/VR/Interaction/HapticEngine.cs`

### Networking

- [Friend Network](https://github.com/y1ruc/sakuraasource2/blob/main/SakuraaCastingMod/SakuraaCastingMod/VR/UtilMenu/Utility/FriendNetworkController.cs): `SakuraaCastingMod/SakuraaCastingMod/VR/UtilMenu/Utility/FriendNetworkController.cs`
- [Photon Bridge](https://github.com/y1ruc/sakuraasource2/blob/main/SakMerge/SakMerge/Net/MessageBus.cs): `SakMerge/SakMerge/Net/MessageBus.cs`

### External Integrations

- [Spotify UI](https://github.com/y1ruc/sakuraasource2/blob/main/SakuraaCastingMod/SakuraaCastingMod/VR/UtilMenu/UtilMenuController.cs): `SakuraaCastingMod/SakuraaCastingMod/VR/UtilMenu/UtilMenuController.cs`
- [Spotify Client](https://github.com/y1ruc/sakuraasource2/blob/main/SpotifyAPI.Web/SpotifyAPI/Web/PlayerClient.cs): `SpotifyAPI.Web/SpotifyAPI/Web/PlayerClient.cs`
- [Spotify Auth](https://github.com/y1ruc/sakuraasource2/blob/main/SpotifyAPI.Web/SpotifyAPI/Web/OAuthClient.cs): `SpotifyAPI.Web/SpotifyAPI/Web/OAuthClient.cs`
- [Discord RPC](https://github.com/y1ruc/sakuraasource2/blob/main/SakuraaCastingMod/SakuraaCastingMod/Shared/Integrations/DiscordSDK/GetStorageManagerMethod.cs): `SakuraaCastingMod/SakuraaCastingMod/Shared/Integrations/DiscordSDK/GetStorageManagerMethod.cs`

### Supporting Libraries

- [HTTP Server](https://github.com/y1ruc/sakuraasource2/blob/main/EmbedIO/EmbedIO/WebServer.cs): `EmbedIO/EmbedIO/WebServer.cs`
- [HTTP Routing](https://github.com/y1ruc/sakuraasource2/blob/main/EmbedIO/EmbedIO/Routing/Route.cs): `EmbedIO/EmbedIO/Routing/Route.cs`
- [HTTP Sessions](https://github.com/y1ruc/sakuraasource2/blob/main/EmbedIO/EmbedIO/Sessions/LocalSessionManager.cs): `EmbedIO/EmbedIO/Sessions/LocalSessionManager.cs`

### Other components

- **Player**

## Connections

- Player → VR Tablet UI: uses (evidence: `SakuraaCastingMod/SakuraaCastingMod/VR/UtilMenu/UtilMenuController.cs`)
- Player → Desktop UI: uses
- VR Tablet UI → UI Themes: initializes (evidence: `SakuraaCastingMod/SakuraaCastingMod/VR/UtilMenu/UtilMenuMain.cs`)
- VR Tablet UI → VR Haptics: triggers (evidence: `SakuraaCastingMod/SakuraaCastingMod/VR/UtilMenu/UtilMenuController.cs`)
- Player → AutoRef: uses
- Player → Replay System: records or plays
- Player → Game Overlays: views
- Player → Soundboard: plays audio
- Player → Player Control: controls
- Friend Network → Photon Bridge: sends messages
- Friend Network → Configuration: updates presets (evidence: `SakuraaCastingMod/SakuraaCastingMod/VR/UtilMenu/Utility/FriendNetworkController.cs`)
- Player → Spotify UI: uses
- Spotify UI → Spotify Client: controls playback
- Spotify Client → Spotify Auth: obtains tokens
- Player → Discord RPC: uses presence
- HTTP Server → HTTP Routing: dispatches requests
- HTTP Server → HTTP Sessions: manages sessions
