# ahmadnurfuady/krita-ai-diffusion-hermes architecture

> Architecture diagram of the GitHub repository ahmadnurfuady/krita-ai-diffusion-hermes, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ahmadnurfuady/krita-ai-diffusion-hermes
- Repository: https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes

## Overview

Generative AI for Krita is a plugin for image generation and editing inside Krita. The principal workflow runs from the plugin’s generation UI through a per-document model, which prepares jobs and submits workflows to a connected backend; results can then be reviewed and applied to the canvas. The graph also preserves documented capabilities for regions, control inputs, live painting, upscaling, custom workflows, presets, and job history. Source evidence is limited to the supplied excerpts, SOURCE INDEX references, and README; unsampled subsystem links are omitted where their wiring is not established.

Main entry points: [`ai_diffusion/model/model.py`](https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/model/model.py) (Document Model), [`ai_diffusion/backend/client.py`](https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/backend/client.py) (Backend Client), [`ai_diffusion/model/jobs.py`](https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/model/jobs.py) (Job Queue), [`ai_diffusion/ui/generation.py`](https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/ui/generation.py) (Generation UI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_krita["Krita Integration"]
  node_plugin["Plugin Root<br/>[extension.py]"]
  node_docker["Generation UI<br/>[generation.py]"]
  node_document["Krita Document<br/>[document.py]"]
  node_layers["Canvas Layers<br/>[layer.py]"]
end

subgraph group_generation["Generation Workflow"]
  node_docmodel["Document Model<br/>[model.py]"]
  node_jobs["Job Queue<br/>[jobs.py]"]
  node_workflow["Workflow Builder<br/>[workflow.py]"]
  node_comfygraph["Comfy Workflow<br/>[comfy_workflow.py]"]
  node_upscale["Upscaling<br/>[model.py]"]
end

subgraph group_inputs["Canvas Inputs"]
  node_controls["Control Inputs<br/>[control.py]"]
  node_regions["Prompt Regions<br/>[region.py]"]
  node_custom["Custom Workflows<br/>[custom_workflow.py]"]
  node_live["Live Painting<br/>[model.py]"]
end

subgraph group_backend["Backend Services"]
  node_root["Connection Manager<br/>[root.py]"]
  node_server["Local Server<br/>[server.py]"]
  node_client["Backend Client<br/>[client.py]"]
  node_comfy{{"ComfyUI"}}
  node_cloud{{"Cloud Service"}}
  node_resources["Model Resources<br/>[resources.py]"]
end

subgraph group_state["Settings And History"]
  node_settings["Plugin Settings<br/>[settings.py]"]
  node_styles["Style Presets<br/>[style.py]"]
  node_persistence[("Document Persistence<br/>[persistence.py]")]
  node_artist_history["Generation History<br/>[jobs.py]"]
end

node_artist(("Krita Artist"))

node_artist -->|"uses"| node_docker
node_docker -->|"requests generation"| node_docmodel
node_docmodel -->|"reads canvas"| node_document
node_docmodel -->|"enqueues jobs"| node_jobs
node_docmodel -->|"prepares workflow"| node_workflow
node_workflow -->|"builds graph"| node_comfygraph
node_client -->|"submits workflows"| node_comfy
node_docmodel -->|"dispatches jobs"| node_client
node_root -->|"starts server"| node_server
node_root -->|"connects client"| node_client
node_client -->|"uses model catalog"| node_resources
node_docker -->|"configures controls"| node_controls
node_docmodel -->|"uses control layers"| node_controls
node_docmodel -->|"uses regions"| node_regions
node_docmodel -->|"reads layers"| node_layers
node_custom -->|"runs custom graph"| node_workflow
node_live -->|"tracks results"| node_jobs
node_upscale -->|"queues upscale"| node_jobs
node_jobs -->|"retains results"| node_artist_history
node_settings -->|"configures server"| node_server
node_settings -->|"informs presets"| node_styles
node_docmodel -->|"uses active style"| node_styles
node_persistence -->|"persists job state"| node_jobs
node_client -.->|"supports cloud backend"| node_cloud

click node_plugin "https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/extension.py"
click node_docker "https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/ui/generation.py"
click node_document "https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/document.py"
click node_layers "https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/layer.py"
click node_docmodel "https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/model/model.py"
click node_jobs "https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/model/jobs.py"
click node_workflow "https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/backend/workflow.py"
click node_comfygraph "https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/backend/comfy_workflow.py"
click node_controls "https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/model/control.py"
click node_regions "https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/model/region.py"
click node_custom "https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/model/custom_workflow.py"
click node_live "https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/model/model.py"
click node_upscale "https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/model/model.py"
click node_root "https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/model/root.py"
click node_server "https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/backend/server.py"
click node_client "https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/backend/client.py"
click node_resources "https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/backend/resources.py"
click node_settings "https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/settings.py"
click node_styles "https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/style.py"
click node_persistence "https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/persistence.py"
click node_artist_history "https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/model/jobs.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_plugin,node_docker,node_document,node_layers toneBlue
class node_docmodel,node_jobs,node_workflow,node_comfygraph,node_upscale toneAmber
class node_controls,node_regions,node_custom,node_live toneMint
class node_root,node_server,node_client,node_comfy,node_cloud,node_resources toneRose
class node_settings,node_styles,node_persistence,node_artist_history,node_artist toneIndigo
```

## Components

### Krita Integration

- [Plugin Root](https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/extension.py): `ai_diffusion/extension.py`
- [Generation UI](https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/ui/generation.py): `ai_diffusion/ui/generation.py`
- [Krita Document](https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/document.py): `ai_diffusion/document.py`
- [Canvas Layers](https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/layer.py): `ai_diffusion/layer.py`

### Generation Workflow

- [Document Model](https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/model/model.py): `ai_diffusion/model/model.py`
- [Job Queue](https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/model/jobs.py): `ai_diffusion/model/jobs.py`
- [Workflow Builder](https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/backend/workflow.py): `ai_diffusion/backend/workflow.py`
- [Comfy Workflow](https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/backend/comfy_workflow.py): `ai_diffusion/backend/comfy_workflow.py`
- [Upscaling](https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/model/model.py): `ai_diffusion/model/model.py`

### Canvas Inputs

- [Control Inputs](https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/model/control.py): `ai_diffusion/model/control.py`
- [Prompt Regions](https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/model/region.py): `ai_diffusion/model/region.py`
- [Custom Workflows](https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/model/custom_workflow.py): `ai_diffusion/model/custom_workflow.py`
- [Live Painting](https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/model/model.py): `ai_diffusion/model/model.py`

### Backend Services

- [Connection Manager](https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/model/root.py): `ai_diffusion/model/root.py`
- [Local Server](https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/backend/server.py): `ai_diffusion/backend/server.py`
- [Backend Client](https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/backend/client.py): `ai_diffusion/backend/client.py`
- **ComfyUI**
- **Cloud Service**
- [Model Resources](https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/backend/resources.py): `ai_diffusion/backend/resources.py`

### Settings And History

- [Plugin Settings](https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/settings.py): `ai_diffusion/settings.py`
- [Style Presets](https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/style.py): `ai_diffusion/style.py`
- [Document Persistence](https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/persistence.py): `ai_diffusion/persistence.py`
- [Generation History](https://github.com/ahmadnurfuady/krita-ai-diffusion-hermes/blob/main/ai_diffusion/model/jobs.py): `ai_diffusion/model/jobs.py`

### Other components

- **Krita Artist**

## Connections

- Krita Artist → Generation UI: uses
- Generation UI → Document Model: requests generation (evidence: `ai_diffusion/ui/generation.py`)
- Document Model → Krita Document: reads canvas (evidence: `ai_diffusion/model/model.py`)
- Document Model → Job Queue: enqueues jobs (evidence: `ai_diffusion/model/model.py`)
- Document Model → Workflow Builder: prepares workflow (evidence: `ai_diffusion/model/model.py`)
- Workflow Builder → Comfy Workflow: builds graph (evidence: `ai_diffusion/backend/workflow.py`)
- Backend Client → ComfyUI: submits workflows
- Document Model → Backend Client: dispatches jobs (evidence: `ai_diffusion/model/model.py`)
- Connection Manager → Local Server: starts server (evidence: `ai_diffusion/model/root.py`)
- Connection Manager → Backend Client: connects client (evidence: `ai_diffusion/model/root.py`)
- Backend Client → Model Resources: uses model catalog (evidence: `ai_diffusion/backend/client.py`)
- Generation UI → Control Inputs: configures controls (evidence: `ai_diffusion/ui/generation.py`)
- Document Model → Control Inputs: uses control layers (evidence: `ai_diffusion/model/control.py`)
- Document Model → Prompt Regions: uses regions (evidence: `ai_diffusion/model/region.py`)
- Document Model → Canvas Layers: reads layers (evidence: `ai_diffusion/model/model.py`)
- Custom Workflows → Workflow Builder: runs custom graph (evidence: `ai_diffusion/model/custom_workflow.py`)
- Live Painting → Job Queue: tracks results (evidence: `ai_diffusion/model/model.py`)
- Upscaling → Job Queue: queues upscale (evidence: `ai_diffusion/model/model.py`)
- Job Queue → Generation History: retains results (evidence: `ai_diffusion/model/jobs.py`)
- Plugin Settings → Local Server: configures server (evidence: `ai_diffusion/ui/settings.py`)
- Plugin Settings → Style Presets: informs presets (evidence: `ai_diffusion/style.py`)
- Document Model → Style Presets: uses active style (evidence: `ai_diffusion/model/model.py`)
- Document Persistence → Job Queue: persists job state (evidence: `ai_diffusion/persistence.py`)
- Backend Client → Cloud Service: supports cloud backend
