# koz39/icon-generator architecture

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

- Interactive diagram: https://gitdiagram.com/koz39/icon-generator
- Repository: https://github.com/koz39/icon-generator

## Overview

1. **What this repository is**
   - This is a **Unity Editor tool** called **Icon Generator**.
   - Its primary purpose is to generate icon images from a selected 3D source object, especially for **child objects under a parent source object**.
   - It is not a general application backend/frontend split; it is a **Unity extension plus a small companion website** for distribution.

2. **Core architecture: Unity editor extension**
   - The main product lives in the Unity project/package side of the repo.
   - The README indicates the tool is accessed from the **Unity top menu: “Tools → 3D Obj to Icon”**.
   - That means the main subsystem is an **editor-time workflow** rather than runtime gameplay code.

3. **Likely functional flow inside Unity**
   - A user selects a source object in the Unity scene or hierarchy.
   - The tool generates icon output for that object and optionally its children.
   - The generation process includes:
     - choosing the source object,
     - configuring output directory,
     - setting icon size,
     - choosing a camera capture direction or custom angle,
     - then triggering generation.
   - The data flow is therefore: **scene object input → editor tool configuration → camera/render capture → saved icon files**.

4. **Configuration and output boundary**
   - The README explicitly calls out **output directory** and **size settings** as configurable parameters.
   - This suggests the tool has a clear boundary between:
     - **scene/editor state** (selected object, camera angle),
     - **file system output** (generated icon images).
   - For an architecture diagram, treat file writing as an external boundary from the Unity editor logic.

5. **Package and asset layout**
   - `Assets/` exists but contains only `.gitkeep`, suggesting the repo may rely heavily on packaged content rather than loose project assets.
   - `Packages/` is present, which is significant in Unity because it usually contains package-related metadata or embedded packages.
   - This points to a **package-oriented Unity distribution model** rather than a large standalone game project.

6. **Distribution and installation path**
   - The README offers two installation paths:
     - **Add to VCC** via the hosted website,
     - or import the included **.unitypackage**.
   - That means the repo supports both:
     - a **package catalog / VCC-style distribution surface**,
     - and a **manual Unity package import path**.
   - Architecturally, the project is split between the editor tool itself and a distribution mechanism.

7. **Companion website**
   - The `Website/` folder contains `index.html`, `app.js`, and `styles.css`.
   - This is a small static site, likely used to present the package for **“Add to VCC”** and/or installation instructions.
   - It appears to be a **deployment surface for GitHub Pages**, not a full web application backend.

8. **Website role in the system**
   - The website acts as an entry point that points users into the Unity/VCC install flow.
   - It is an external-facing artifact separate from the Unity editor tool itself.
   - For a diagram, place it as a **distribution/UI layer** connected to the GitHub Pages hosting boundary.

9. **CI/CD and release automation**
   - The `.github/workflows/` directory contains:
     - `build-listing.yml`
     - `release.yml`
   - This indicates automated repository operations for:
     - building or updating the website/package listing,
     - producing releases.
   - GitHub Actions is therefore part of the delivery pipeline, not the runtime product.

10. **Release packaging boundary**
   - The presence of a `release.yml` workflow strongly suggests the repo produces release artifacts such as:
     - a Unity package,
     - a GitHub release asset,
     - or a website update for installation.
   - The release pipeline likely bridges the Unity tool source and the end-user distribution formats.

11. **Documentation and localization**
   - The repo includes `README.md` plus localized versions in **Korean** and **Japanese**.
   - That means documentation is treated as part of the user-facing architecture, not just developer notes.
   - This is relevant because the tool is likely intended for a multi-language creator audience.

12. **External platform dependencies**
   - **Unity 2022.3.22f1** is a hard requirement and is the primary runtime/editor environment.
   - **GitHub Pages** appears to host the install page.
   - **GitHub Actions** automates build/release steps.
   - The README references **VCC** as the installation path, so the tool is integrated into the VRChat creator ecosystem.

13. **Project shape to diagram**
   - A useful architecture diagram would have three main parts:
     - **Unity Editor Tool**: icon generation logic, object selection, camera/capture configuration, file output.
     - **Distribution Layer**: static website and package listing for installation.
     - **Automation Layer**: GitHub workflows for builds and releases.
   - The main data flow is from **user-selected Unity objects** to **generated icon files**, while the delivery flow is from **repo source** to **website/release artifacts**.

14. **Notable absence**
   - There is no sign of a server, database, or runtime network API.
   - The system is mainly an **editor-side asset generation utility** with a lightweight web presence for distribution.

Main entry points: [`Website`](https://github.com/koz39/icon-generator/tree/main/Website) (Website), [`README.md`](https://github.com/koz39/icon-generator/blob/main/README.md) (README), [`.github/workflows/build-listing.yml`](https://github.com/koz39/icon-generator/blob/main/.github/workflows/build-listing.yml) (Build listing), [`.github/workflows/release.yml`](https://github.com/koz39/icon-generator/blob/main/.github/workflows/release.yml) (Release)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_unity["Unity tool"]
  node_packages["Packages<br/>unity package root"]
  node_assets["Assets"]
  node_icon_tool{{"Icon tool<br/>editor workflow"}}
  node_source_select(("Source select<br/>editor input"))
  node_tool_config(("Tool config<br/>settings"))
  node_capture{{"Capture"}}
  node_file_output[("Icon files<br/>filesystem output")]
end

subgraph group_dist["Distribution"]
  node_website["Website<br/>static site"]
  node_index_html["Home page<br/>html entry<br/>[index.html]"]
  node_app_js["Site script<br/>frontend script<br/>[app.js]"]
  node_styles_css["Site styles<br/>css<br/>[styles.css]"]
end

subgraph group_ci["Automation"]
  node_build_listing["Build listing<br/>github action<br/>[build-listing.yml]"]
  node_release_wf["Release<br/>github action<br/>[release.yml]"]
end

subgraph group_docs["Documentation"]
  node_readme_en["README<br/>docs<br/>[README.md]"]
  node_readme_ja["README JA<br/>docs<br/>[README_JA.md]"]
  node_readme_ko["README KO<br/>docs<br/>[README_KO.md]"]
  node_changelog["Changelog<br/>release notes<br/>[CHANGELOG.md]"]
end

node_source_select -->|"selects"| node_icon_tool
node_tool_config -->|"configures"| node_icon_tool
node_icon_tool -->|"renders"| node_capture
node_capture -->|"writes"| node_file_output
node_packages -->|"contains"| node_icon_tool
node_assets -.->|"supports"| node_icon_tool
node_website -->|"hosts"| node_index_html
node_website -->|"hosts"| node_app_js
node_website -->|"hosts"| node_styles_css
node_index_html -.->|"published by"| node_build_listing
node_build_listing -->|"updates"| node_website
node_release_wf -->|"packages"| node_packages
node_release_wf -.->|"tags"| node_changelog
node_readme_en -->|"documents"| node_icon_tool
node_readme_en -->|"links"| node_website
node_readme_ja -.->|"documents"| node_icon_tool
node_readme_ko -.->|"documents"| node_icon_tool
node_readme_en -.->|"describes"| node_build_listing

click node_packages "https://github.com/koz39/icon-generator/tree/main/Packages"
click node_assets "https://github.com/koz39/icon-generator/tree/main/Assets"
click node_website "https://github.com/koz39/icon-generator/tree/main/Website"
click node_index_html "https://github.com/koz39/icon-generator/blob/main/Website/index.html"
click node_app_js "https://github.com/koz39/icon-generator/blob/main/Website/app.js"
click node_styles_css "https://github.com/koz39/icon-generator/blob/main/Website/styles.css"
click node_build_listing "https://github.com/koz39/icon-generator/blob/main/.github/workflows/build-listing.yml"
click node_release_wf "https://github.com/koz39/icon-generator/blob/main/.github/workflows/release.yml"
click node_readme_en "https://github.com/koz39/icon-generator/blob/main/README.md"
click node_readme_ja "https://github.com/koz39/icon-generator/blob/main/README_JA.md"
click node_readme_ko "https://github.com/koz39/icon-generator/blob/main/README_KO.md"
click node_changelog "https://github.com/koz39/icon-generator/blob/main/CHANGELOG.md"

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_packages,node_assets,node_icon_tool,node_source_select,node_tool_config,node_capture,node_file_output toneBlue
class node_website,node_index_html,node_app_js,node_styles_css toneAmber
class node_build_listing,node_release_wf toneMint
class node_readme_en,node_readme_ja,node_readme_ko,node_changelog toneRose
```

## Components

### Unity tool

Editor-side icon generation and package content.

- [Packages](https://github.com/koz39/icon-generator/tree/main/Packages): unity package root · Unity package-oriented project content. · `Packages`
- [Assets](https://github.com/koz39/icon-generator/tree/main/Assets): unity assets · Minimal Unity project assets placeholder. · `Assets`
- **Icon tool**: editor workflow · Generate icons from selected 3D objects in the Unity Editor.
- **Source select**: editor input · Select a source object or child hierarchy to iconize.
- **Tool config**: settings · Output directory, icon size, and capture angle settings.
- **Capture**: render capture · Camera-driven snapshot step that renders icon images.
- **Icon files**: filesystem output · Saved generated icon images on disk.

### Distribution

Static website and install surface for users.

- [Website](https://github.com/koz39/icon-generator/tree/main/Website): static site · Companion installation and listing site. · `Website`
- [Home page](https://github.com/koz39/icon-generator/blob/main/Website/index.html): html entry · Primary landing page for installation and listing. · `Website/index.html`
- [Site script](https://github.com/koz39/icon-generator/blob/main/Website/app.js): frontend script · Client-side behavior for the companion site. · `Website/app.js`
- [Site styles](https://github.com/koz39/icon-generator/blob/main/Website/styles.css): css · Visual styling for the companion site. · `Website/styles.css`

### Automation

GitHub Actions for listing and release delivery.

- [Build listing](https://github.com/koz39/icon-generator/blob/main/.github/workflows/build-listing.yml): github action · Workflow that builds or updates the package listing site. · `.github/workflows/build-listing.yml`
- [Release](https://github.com/koz39/icon-generator/blob/main/.github/workflows/release.yml): github action · Workflow that produces release artifacts. · `.github/workflows/release.yml`

### Documentation

User-facing README variants and changelog.

- [README](https://github.com/koz39/icon-generator/blob/main/README.md): docs · Primary project and install documentation. · `README.md`
- [README JA](https://github.com/koz39/icon-generator/blob/main/README_JA.md): docs · Japanese documentation. · `README_JA.md`
- [README KO](https://github.com/koz39/icon-generator/blob/main/README_KO.md): docs · Korean documentation. · `README_KO.md`
- [Changelog](https://github.com/koz39/icon-generator/blob/main/CHANGELOG.md): release notes · Version history and release notes. · `CHANGELOG.md`

## Connections

- Source select → Icon tool: selects · User picks the source object for processing.
- Tool config → Icon tool: configures · Settings drive how icons are generated.
- Icon tool → Capture: renders · The editor workflow captures the object through a camera/render step.
- Capture → Icon files: writes · Rendered icons are written to the configured output directory.
- Packages → Icon tool: contains · Package-oriented Unity content holds the editor tool implementation.
- Assets → Icon tool: supports · Project assets support the editor extension.
- Website → Home page: hosts · The static site is composed of the landing page and assets.
- Website → Site script: hosts · Client-side behavior for the site.
- Website → Site styles: hosts · Presentation layer for the companion site.
- Home page → Build listing: published by · The listing page is updated through automation.
- Build listing → Website: updates · Workflow refreshes the hosted installation listing.
- Release → Packages: packages · Release automation produces distributable Unity package artifacts.
- Release → Changelog: tags · Release workflow aligns with versioned release notes.
- README → Icon tool: documents · Primary docs explain the Unity editor workflow.
- README → Website: links · Docs point users to the installation surface.
- README JA → Icon tool: documents · Japanese documentation mirrors the main usage story.
- README KO → Icon tool: documents · Korean documentation mirrors the main usage story.
- README → Build listing: describes · Docs describe the VCC-style installation flow.
