# toxic-joker/obs-brand-kit architecture

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

- Interactive diagram: https://gitdiagram.com/toxic-joker/obs-brand-kit
- Repository: https://github.com/toxic-joker/obs-brand-kit

## Overview

OBS Brand Kit turns a brand description into animated stream assets and importable OBS or Streamlabs collections. The main workflow validates brand settings, renders assets, translates a shared scene layout into platform formats, packages the outputs, and runs safety checks before handoff. The graph preserves both export targets and the documented vertical-scene capability. Some runtime modules were not excerpted; links for those rely on the README or SOURCE INDEX, not an inspection of their full implementations.

Main entry points: [`kit/__main__.py`](https://github.com/toxic-joker/obs-brand-kit/blob/main/kit/__main__.py) (Build command), [`kit/package.py`](https://github.com/toxic-joker/obs-brand-kit/blob/main/kit/package.py) (Kit packaging), [`kit/layout.py`](https://github.com/toxic-joker/obs-brand-kit/blob/main/kit/layout.py) (Shared scene layout), [`brands/cloudberry/brand.json`](https://github.com/toxic-joker/obs-brand-kit/blob/main/brands/cloudberry/brand.json) (Brand settings)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_inputs["Brand inputs"]
  node_brand["Brand settings<br/>[brand.json]"]
  node_validator["Brand validation<br/>[brand.py]"]
end

subgraph group_generation["Asset generation"]
  node_cli["Build command<br/>[__main__.py]"]
  node_asset_builders["Motion assets<br/>[assets.py]"]
  node_effectcraft["Render driver<br/>[ec.py]"]
end

subgraph group_exports["Scene exports"]
  node_scene_layout["Shared scene layout<br/>[layout.py]"]
  node_obs_export["OBS collection<br/>[obs.py]"]
  node_streamlabs_export["Streamlabs overlay<br/>[streamlabs.py]"]
end

subgraph group_delivery["Packaging and safety"]
  node_packager["Kit packaging<br/>[package.py]"]
  node_safety["Safety checks<br/>[check.py]"]
  node_kit_outputs["Importable kit"]
end

node_streamer(("Kit author"))
node_streamer_import(("Streamer"))

node_streamer -->|"defines"| node_brand
node_brand -->|"configures"| node_cli
node_cli -->|"loads and validates"| node_validator
node_cli -->|"builds assets"| node_asset_builders
node_asset_builders -->|"uses render driver"| node_effectcraft
node_cli -.->|"builds scenes"| node_scene_layout
node_scene_layout -->|"translates layout"| node_obs_export
node_scene_layout -->|"translates layout"| node_streamlabs_export
node_cli -->|"packages kit"| node_packager
node_packager -->|"writes collection"| node_obs_export
node_packager -->|"writes overlay"| node_streamlabs_export
node_packager -->|"checks outputs"| node_safety
node_packager -->|"produces"| node_kit_outputs
node_safety -->|"accepts or rejects"| node_kit_outputs
node_kit_outputs -->|"imports into OBS or Streamlabs"| node_streamer_import

click node_brand "https://github.com/toxic-joker/obs-brand-kit/blob/main/brands/cloudberry/brand.json"
click node_cli "https://github.com/toxic-joker/obs-brand-kit/blob/main/kit/__main__.py"
click node_validator "https://github.com/toxic-joker/obs-brand-kit/blob/main/kit/brand.py"
click node_asset_builders "https://github.com/toxic-joker/obs-brand-kit/blob/main/kit/assets.py"
click node_effectcraft "https://github.com/toxic-joker/obs-brand-kit/blob/main/kit/ec.py"
click node_scene_layout "https://github.com/toxic-joker/obs-brand-kit/blob/main/kit/layout.py"
click node_obs_export "https://github.com/toxic-joker/obs-brand-kit/blob/main/kit/obs.py"
click node_streamlabs_export "https://github.com/toxic-joker/obs-brand-kit/blob/main/kit/streamlabs.py"
click node_packager "https://github.com/toxic-joker/obs-brand-kit/blob/main/kit/package.py"
click node_safety "https://github.com/toxic-joker/obs-brand-kit/blob/main/kit/check.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_brand,node_validator toneBlue
class node_cli,node_asset_builders,node_effectcraft toneAmber
class node_scene_layout,node_obs_export,node_streamlabs_export toneMint
class node_packager,node_safety,node_kit_outputs toneRose
class node_streamer,node_streamer_import toneIndigo
```

## Components

### Brand inputs

- [Brand settings](https://github.com/toxic-joker/obs-brand-kit/blob/main/brands/cloudberry/brand.json): `brands/cloudberry/brand.json`
- [Brand validation](https://github.com/toxic-joker/obs-brand-kit/blob/main/kit/brand.py): `kit/brand.py`

### Asset generation

- [Build command](https://github.com/toxic-joker/obs-brand-kit/blob/main/kit/__main__.py): `kit/__main__.py`
- [Motion assets](https://github.com/toxic-joker/obs-brand-kit/blob/main/kit/assets.py): `kit/assets.py`
- [Render driver](https://github.com/toxic-joker/obs-brand-kit/blob/main/kit/ec.py): `kit/ec.py`

### Scene exports

- [Shared scene layout](https://github.com/toxic-joker/obs-brand-kit/blob/main/kit/layout.py): `kit/layout.py`
- [OBS collection](https://github.com/toxic-joker/obs-brand-kit/blob/main/kit/obs.py): `kit/obs.py`
- [Streamlabs overlay](https://github.com/toxic-joker/obs-brand-kit/blob/main/kit/streamlabs.py): `kit/streamlabs.py`

### Packaging and safety

- [Kit packaging](https://github.com/toxic-joker/obs-brand-kit/blob/main/kit/package.py): `kit/package.py`
- [Safety checks](https://github.com/toxic-joker/obs-brand-kit/blob/main/kit/check.py): `kit/check.py`
- **Importable kit**

### Other components

- **Kit author**
- **Streamer**

## Connections

- Kit author → Brand settings: defines (evidence: `README.md`)
- Brand settings → Build command: configures (evidence: `README.md`)
- Build command → Brand validation: loads and validates (evidence: `kit/__main__.py`)
- Build command → Motion assets: builds assets (evidence: `kit/__main__.py`)
- Motion assets → Render driver: uses render driver (evidence: `kit/assets.py`)
- Build command → Shared scene layout: builds scenes
- Shared scene layout → OBS collection: translates layout (evidence: `kit/obs.py`)
- Shared scene layout → Streamlabs overlay: translates layout (evidence: `kit/streamlabs.py`)
- Build command → Kit packaging: packages kit (evidence: `kit/__main__.py`)
- Kit packaging → OBS collection: writes collection (evidence: `kit/package.py`)
- Kit packaging → Streamlabs overlay: writes overlay (evidence: `kit/package.py`)
- Kit packaging → Safety checks: checks outputs (evidence: `kit/package.py`)
- Kit packaging → Importable kit: produces (evidence: `README.md`)
- Safety checks → Importable kit: accepts or rejects (evidence: `README.md`)
- Importable kit → Streamer: imports into OBS or Streamlabs (evidence: `README.md`)
