# websmack/raspberry-disag-viz architecture

> Architecture diagram of the GitHub repository websmack/raspberry-disag-viz, 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/websmack/raspberry-disag-viz
- Repository: https://github.com/websmack/raspberry-disag-viz

## Overview

DISAG VIZ DietPi-Kiosk builds board-specific DietPi images that boot directly into the DISAG OpticScore visualization. The main workflow selects a supported target, prepares and customizes its base image, then produces a compressed image for the board. At runtime, DietPi first-run setup leads to a kiosk session that configures the display, imports editable settings, and launches the visualization; a separate startup path turns boot-partition network settings into NetworkManager profiles. The README documents these capabilities, but sampled source is limited, so links to unsampled build and launch internals are omitted where ownership is uncertain.

Main entry points: [`build-image-platform.sh`](https://github.com/websmack/raspberry-disag-viz/blob/main/build-image-platform.sh) (Platform build), [`kiosk/disag-kiosk.service`](https://github.com/websmack/raspberry-disag-viz/blob/main/kiosk/disag-kiosk.service) (Kiosk startup), [`build-image.sh`](https://github.com/websmack/raspberry-disag-viz/blob/main/build-image.sh) (Image builder), [`kiosk/network.py`](https://github.com/websmack/raspberry-disag-viz/blob/main/kiosk/network.py) (Network profiles)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_image["Image creation"]
  node_builder["Image builder<br/>[build-image.sh]"]
  node_platform_build["Platform build"]
  node_platforms["Board profiles<br/>[platforms.conf]"]
  node_output["Compressed image"]
end

subgraph group_configuration["User configuration"]
  node_disag_config["DISAG settings<br/>[disag.txt]"]
  node_network_config["Network settings<br/>[network.txt]"]
  node_logo["Boot logo assets"]
end

subgraph group_startup["Boot and kiosk"]
  node_boot_config["Boot configuration<br/>[boot-config.py]"]
  node_dietpi_config["DietPi first boot"]
  node_kiosk_service["Kiosk startup"]
  node_network_service["Network startup"]
end

subgraph group_runtime["Appliance runtime"]
  node_display["HDMI selection<br/>[display.py]"]
  node_settings["Settings import<br/>[settings.py]"]
  node_network["Network profiles<br/>[network.py]"]
  node_desktop["Xorg and Openbox"]
  node_visualization["DISAG visualization"]
  node_networkmanager["NetworkManager"]
end

node_operator(("Image operator"))
node_dietpi["DietPi base image"]
node_board(("Target board"))

node_operator -->|"requests build"| node_builder
node_builder -->|"reads profiles"| node_platforms
node_builder -->|"dispatches build"| node_platform_build
node_platform_build -->|"customizes base"| node_dietpi
node_platform_build -->|"includes settings"| node_disag_config
node_platform_build -->|"includes settings"| node_network_config
node_platform_build -.->|"uses assets"| node_logo
node_platform_build -->|"produces image"| node_output
node_board -->|"boots image"| node_boot_config
node_boot_config -->|"configures first boot"| node_dietpi_config
node_dietpi_config -->|"enables startup"| node_kiosk_service
node_kiosk_service -->|"starts kiosk session"| node_desktop
node_kiosk_service -->|"configures display"| node_display
node_kiosk_service -->|"imports settings"| node_settings
node_settings -->|"reads boot settings"| node_disag_config
node_kiosk_service -->|"launches"| node_visualization
node_visualization -->|"displays on"| node_desktop
node_network_service -->|"runs configurator"| node_network
node_network -->|"reads boot settings"| node_network_config
node_network -->|"writes profiles"| node_networkmanager

click node_builder "https://github.com/websmack/raspberry-disag-viz/blob/main/build-image.sh"
click node_platform_build "https://github.com/websmack/raspberry-disag-viz/blob/main/build-image-platform.sh"
click node_platforms "https://github.com/websmack/raspberry-disag-viz/blob/main/config/platforms.conf"
click node_disag_config "https://github.com/websmack/raspberry-disag-viz/blob/main/config/disag.txt"
click node_network_config "https://github.com/websmack/raspberry-disag-viz/blob/main/config/network.txt"
click node_logo "https://github.com/websmack/raspberry-disag-viz/tree/main/images"
click node_boot_config "https://github.com/websmack/raspberry-disag-viz/blob/main/kiosk/boot-config.py"
click node_dietpi_config "https://github.com/websmack/raspberry-disag-viz/blob/main/kiosk/configure-dietpi.py"
click node_kiosk_service "https://github.com/websmack/raspberry-disag-viz/blob/main/kiosk/disag-kiosk.service"
click node_network_service "https://github.com/websmack/raspberry-disag-viz/blob/main/kiosk/disag-network.service"
click node_display "https://github.com/websmack/raspberry-disag-viz/blob/main/kiosk/display.py"
click node_settings "https://github.com/websmack/raspberry-disag-viz/blob/main/kiosk/settings.py"
click node_network "https://github.com/websmack/raspberry-disag-viz/blob/main/kiosk/network.py"

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_builder,node_platform_build,node_platforms,node_output toneBlue
class node_disag_config,node_network_config,node_logo toneAmber
class node_boot_config,node_dietpi_config,node_kiosk_service,node_network_service toneMint
class node_display,node_settings,node_network,node_desktop,node_visualization,node_networkmanager toneRose
class node_operator,node_dietpi,node_board toneIndigo
```

## Components

### Image creation

- [Image builder](https://github.com/websmack/raspberry-disag-viz/blob/main/build-image.sh): `build-image.sh`
- [Platform build](https://github.com/websmack/raspberry-disag-viz/blob/main/build-image-platform.sh): `build-image-platform.sh`
- [Board profiles](https://github.com/websmack/raspberry-disag-viz/blob/main/config/platforms.conf): `config/platforms.conf`
- **Compressed image**

### User configuration

- [DISAG settings](https://github.com/websmack/raspberry-disag-viz/blob/main/config/disag.txt): `config/disag.txt`
- [Network settings](https://github.com/websmack/raspberry-disag-viz/blob/main/config/network.txt): `config/network.txt`
- [Boot logo assets](https://github.com/websmack/raspberry-disag-viz/tree/main/images): `images`

### Boot and kiosk

- [Boot configuration](https://github.com/websmack/raspberry-disag-viz/blob/main/kiosk/boot-config.py): `kiosk/boot-config.py`
- [DietPi first boot](https://github.com/websmack/raspberry-disag-viz/blob/main/kiosk/configure-dietpi.py): `kiosk/configure-dietpi.py`
- [Kiosk startup](https://github.com/websmack/raspberry-disag-viz/blob/main/kiosk/disag-kiosk.service): `kiosk/disag-kiosk.service`
- [Network startup](https://github.com/websmack/raspberry-disag-viz/blob/main/kiosk/disag-network.service): `kiosk/disag-network.service`

### Appliance runtime

- [HDMI selection](https://github.com/websmack/raspberry-disag-viz/blob/main/kiosk/display.py): `kiosk/display.py`
- [Settings import](https://github.com/websmack/raspberry-disag-viz/blob/main/kiosk/settings.py): `kiosk/settings.py`
- [Network profiles](https://github.com/websmack/raspberry-disag-viz/blob/main/kiosk/network.py): `kiosk/network.py`
- **Xorg and Openbox**
- **DISAG visualization**
- **NetworkManager**

### Other components

- **Image operator**
- **DietPi base image**
- **Target board**

## Connections

- Image operator → Image builder: requests build
- Image builder → Board profiles: reads profiles
- Image builder → Platform build: dispatches build
- Platform build → DietPi base image: customizes base
- Platform build → DISAG settings: includes settings
- Platform build → Network settings: includes settings
- Platform build → Boot logo assets: uses assets
- Platform build → Compressed image: produces image
- Target board → Boot configuration: boots image
- Boot configuration → DietPi first boot: configures first boot
- DietPi first boot → Kiosk startup: enables startup
- Kiosk startup → Xorg and Openbox: starts kiosk session
- Kiosk startup → HDMI selection: configures display
- Kiosk startup → Settings import: imports settings
- Settings import → DISAG settings: reads boot settings
- Kiosk startup → DISAG visualization: launches
- DISAG visualization → Xorg and Openbox: displays on
- Network startup → Network profiles: runs configurator
- Network profiles → Network settings: reads boot settings
- Network profiles → NetworkManager: writes profiles
