# ikrevedko0-hash/ye-studio architecture

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

- Interactive diagram: https://gitdiagram.com/ikrevedko0-hash/ye-studio
- Repository: https://github.com/ikrevedko0-hash/ye-studio

## Overview

Ye!Studio is a Windows desktop workshop for creating, editing, checking, and publishing SIGame .siq packs. The central workflow is the renderer’s pack editor, bridged through preload IPC to Electron’s main process for pack files and media operations; domain modules handle validation, preview, poster generation, and content enrichment. README capabilities support additional AI, word, image, media-search, and component-management branches, though their detailed internal wiring is not sampled here. The graph reflects documented capabilities and sampled entry points; uncertain internal calls are omitted.

Main entry points: [`app/src/renderer/src/App.tsx`](https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/renderer/src/App.tsx) (Workshop UI), [`app/src/main/index.ts`](https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/main/index.ts) (Electron main), [`app/src/preload/index.ts`](https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/preload/index.ts) (IPC bridge), [`app/src/renderer/src/Publish.tsx`](https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/renderer/src/Publish.tsx) (Publish tools)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_editing["Pack authoring"]
  node_app["Workshop UI<br/>[App.tsx]"]
  node_board["Board editor<br/>[Board.tsx]"]
  node_question["Question editor<br/>[QuestionEditor.tsx]"]
  node_history["Undo history<br/>[history.ts]"]
  node_siqmodel["Pack model<br/>[model.ts]"]
  node_siqzip["SIQ archive I/O<br/>[zip.ts]"]
  node_checkui["Pack checker UI<br/>[PackCheck.tsx]"]
  node_check["Pack validation<br/>[check.ts]"]
  node_preview["Game preview<br/>[GamePreview.tsx]"]
  node_publish["Publish tools<br/>[Publish.tsx]"]
  node_siqpublish["Poster and export<br/>[publish.ts]"]
end

subgraph group_media["Media and images"]
  node_mediaui["Media center<br/>[MediaCenter.tsx]"]
  node_mediaedit["Media editor<br/>[MediaEditor.tsx]"]
  node_providers["Media providers<br/>[registry.ts]"]
  node_medialib["Downloaded library<br/>[library.ts]"]
  node_ffmpeg["Media processing<br/>[ffmpeg.ts]"]
  node_imagestudio["Image studio<br/>[ImageStudio.tsx]"]
  node_imagecore["Image generation<br/>[image.ts]"]
end

subgraph group_content["Content enrichment"]
  node_wordstudio["Word studio<br/>[WordStudio.tsx]"]
  node_wordgen["Word generators<br/>[registry.ts]"]
  node_ai["AI chat and settings<br/>[chat.ts]"]
  node_assistant["Assistant setup<br/>[assistantKit.ts]"]
end

subgraph group_desktop["Desktop services"]
  node_preload["IPC bridge<br/>[index.ts]"]
  node_main["Electron main<br/>[index.ts]"]
  node_components["Component manager<br/>[components.ts]"]
end

subgraph group_support["External support"]
  node_server["Beta service<br/>[yestudio_server.py]"]
  node_external["AI providers"]
  node_sigame["SIGame ecosystem"]
end

node_author(("Pack author"))

node_author -->|"edits packs"| node_app
node_app -->|"renders editor"| node_board
node_app -->|"edits questions"| node_question
node_app -->|"tracks changes"| node_history
node_app -->|"updates model"| node_siqmodel
node_app -->|"opens checker"| node_checkui
node_checkui -->|"checks pack"| node_check
node_app -->|"previews questions"| node_preview
node_app -->|"opens publishing"| node_publish
node_publish -->|"builds poster"| node_siqpublish
node_app -->|"invokes IPC"| node_preload
node_preload -->|"dispatches requests"| node_main
node_main -->|"opens and saves"| node_siqzip
node_main -->|"renders poster"| node_publish
node_author -->|"finds media"| node_mediaui
node_mediaui -->|"requests search"| node_preload
node_main -->|"searches providers"| node_providers
node_main -->|"stores downloads"| node_medialib
node_author -->|"edits media"| node_mediaedit
node_mediaedit -->|"requests processing"| node_preload
node_main -->|"processes media"| node_ffmpeg
node_author -->|"creates images"| node_imagestudio
node_imagestudio -->|"requests generation"| node_preload
node_main -->|"generates images"| node_imagecore
node_author -->|"builds word themes"| node_wordstudio
node_wordstudio -->|"generates words"| node_wordgen
node_app -->|"uses AI features"| node_ai
node_ai -.->|"calls providers"| node_external
node_author -->|"sets up assistant"| node_assistant
node_main -->|"manages components"| node_components
node_main -.->|"sends telemetry"| node_server
node_publish -->|"exports for SIGame"| node_sigame

click node_app "https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/renderer/src/App.tsx"
click node_board "https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/renderer/src/Board.tsx"
click node_question "https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/renderer/src/QuestionEditor.tsx"
click node_history "https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/core/history.ts"
click node_siqmodel "https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/core/siq/model.ts"
click node_siqzip "https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/core/siq/zip.ts"
click node_checkui "https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/renderer/src/PackCheck.tsx"
click node_check "https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/core/siq/check.ts"
click node_preview "https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/renderer/src/GamePreview.tsx"
click node_publish "https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/renderer/src/Publish.tsx"
click node_siqpublish "https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/core/siq/publish.ts"
click node_mediaui "https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/renderer/src/MediaCenter.tsx"
click node_mediaedit "https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/renderer/src/MediaEditor.tsx"
click node_providers "https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/core/media/providers/registry.ts"
click node_medialib "https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/core/media/library.ts"
click node_ffmpeg "https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/core/media/ffmpeg.ts"
click node_imagestudio "https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/renderer/src/ImageStudio.tsx"
click node_imagecore "https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/core/ai/image.ts"
click node_wordstudio "https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/renderer/src/WordStudio.tsx"
click node_wordgen "https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/core/words/generators/registry.ts"
click node_ai "https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/core/ai/chat.ts"
click node_assistant "https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/main/assistantKit.ts"
click node_preload "https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/preload/index.ts"
click node_main "https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/main/index.ts"
click node_components "https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/main/components.ts"
click node_server "https://github.com/ikrevedko0-hash/ye-studio/blob/main/server/yestudio_server.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_app,node_board,node_question,node_history,node_siqmodel,node_siqzip,node_checkui,node_check,node_preview,node_publish,node_siqpublish toneBlue
class node_mediaui,node_mediaedit,node_providers,node_medialib,node_ffmpeg,node_imagestudio,node_imagecore toneAmber
class node_wordstudio,node_wordgen,node_ai,node_assistant toneMint
class node_preload,node_main,node_components toneRose
class node_server,node_external,node_sigame,node_author toneIndigo
```

## Components

### Pack authoring

- [Workshop UI](https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/renderer/src/App.tsx): `app/src/renderer/src/App.tsx`
- [Board editor](https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/renderer/src/Board.tsx): `app/src/renderer/src/Board.tsx`
- [Question editor](https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/renderer/src/QuestionEditor.tsx): `app/src/renderer/src/QuestionEditor.tsx`
- [Undo history](https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/core/history.ts): `app/src/core/history.ts`
- [Pack model](https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/core/siq/model.ts): `app/src/core/siq/model.ts`
- [SIQ archive I/O](https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/core/siq/zip.ts): `app/src/core/siq/zip.ts`
- [Pack checker UI](https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/renderer/src/PackCheck.tsx): `app/src/renderer/src/PackCheck.tsx`
- [Pack validation](https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/core/siq/check.ts): `app/src/core/siq/check.ts`
- [Game preview](https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/renderer/src/GamePreview.tsx): `app/src/renderer/src/GamePreview.tsx`
- [Publish tools](https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/renderer/src/Publish.tsx): `app/src/renderer/src/Publish.tsx`
- [Poster and export](https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/core/siq/publish.ts): `app/src/core/siq/publish.ts`

### Media and images

- [Media center](https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/renderer/src/MediaCenter.tsx): `app/src/renderer/src/MediaCenter.tsx`
- [Media editor](https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/renderer/src/MediaEditor.tsx): `app/src/renderer/src/MediaEditor.tsx`
- [Media providers](https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/core/media/providers/registry.ts): `app/src/core/media/providers/registry.ts`
- [Downloaded library](https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/core/media/library.ts): `app/src/core/media/library.ts`
- [Media processing](https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/core/media/ffmpeg.ts): `app/src/core/media/ffmpeg.ts`
- [Image studio](https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/renderer/src/ImageStudio.tsx): `app/src/renderer/src/ImageStudio.tsx`
- [Image generation](https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/core/ai/image.ts): `app/src/core/ai/image.ts`

### Content enrichment

- [Word studio](https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/renderer/src/WordStudio.tsx): `app/src/renderer/src/WordStudio.tsx`
- [Word generators](https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/core/words/generators/registry.ts): `app/src/core/words/generators/registry.ts`
- [AI chat and settings](https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/core/ai/chat.ts): `app/src/core/ai/chat.ts`
- [Assistant setup](https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/main/assistantKit.ts): `app/src/main/assistantKit.ts`

### Desktop services

- [IPC bridge](https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/preload/index.ts): `app/src/preload/index.ts`
- [Electron main](https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/main/index.ts): `app/src/main/index.ts`
- [Component manager](https://github.com/ikrevedko0-hash/ye-studio/blob/main/app/src/main/components.ts): `app/src/main/components.ts`

### External support

- [Beta service](https://github.com/ikrevedko0-hash/ye-studio/blob/main/server/yestudio_server.py): `server/yestudio_server.py`
- **AI providers**
- **SIGame ecosystem**

### Other components

- **Pack author**

## Connections

- Pack author → Workshop UI: edits packs
- Workshop UI → Board editor: renders editor
- Workshop UI → Question editor: edits questions
- Workshop UI → Undo history: tracks changes
- Workshop UI → Pack model: updates model
- Workshop UI → Pack checker UI: opens checker
- Pack checker UI → Pack validation: checks pack
- Workshop UI → Game preview: previews questions
- Workshop UI → Publish tools: opens publishing
- Publish tools → Poster and export: builds poster
- Workshop UI → IPC bridge: invokes IPC
- IPC bridge → Electron main: dispatches requests
- Electron main → SIQ archive I/O: opens and saves
- Electron main → Publish tools: renders poster
- Pack author → Media center: finds media
- Media center → IPC bridge: requests search
- Electron main → Media providers: searches providers
- Electron main → Downloaded library: stores downloads
- Pack author → Media editor: edits media
- Media editor → IPC bridge: requests processing
- Electron main → Media processing: processes media
- Pack author → Image studio: creates images
- Image studio → IPC bridge: requests generation
- Electron main → Image generation: generates images
- Pack author → Word studio: builds word themes
- Word studio → Word generators: generates words
- Workshop UI → AI chat and settings: uses AI features
- AI chat and settings → AI providers: calls providers
- Pack author → Assistant setup: sets up assistant
- Electron main → Component manager: manages components
- Electron main → Beta service: sends telemetry
- Publish tools → SIGame ecosystem: exports for SIGame
