# chris0jeky/local-asset-studio architecture

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

- Interactive diagram: https://gitdiagram.com/chris0jeky/local-asset-studio
- Repository: https://github.com/chris0jeky/local-asset-studio

## Overview

Local Asset Studio is a local-first creative application layered over ComfyUI: users choose a goal or recipe, configure prompts and references, submit and monitor work, then review and retain outputs with reproducibility evidence. Its documented surface also includes reference analysis, workflow authoring and saved runs, model research and qualification, workspace management, and native finishing. The sampled files show selected storage, client, UI, and server behavior; several capability links below reflect README descriptions and repository paths rather than inspected implementation wiring.

Main entry points: [`app/server.py`](https://github.com/chris0jeky/local-asset-studio/blob/main/app/server.py) (Studio server), [`app/static/app.js`](https://github.com/chris0jeky/local-asset-studio/blob/main/app/static/app.js) (Studio browser), [`app/workspace.py`](https://github.com/chris0jeky/local-asset-studio/blob/main/app/workspace.py) (Workspace assets), [`studio_workflow/execution.py`](https://github.com/chris0jeky/local-asset-studio/blob/main/studio_workflow/execution.py) (Workflow execution)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_creation["Guided creation"]
  node_browser["Studio browser<br/>[app.js]"]
  node_recipes["Recipes and settings<br/>[backends.py]"]
  node_models["Model intake<br/>[model_intake.py]"]
end

subgraph group_reference["References and prompts"]
  node_reference_ui["Reference Atelier<br/>[references.js]"]
  node_reference_analysis["Reference analysis"]
  node_prompt["Prompt projects<br/>[projects.py]"]
end

subgraph group_workflow["Workflow and evidence"]
  node_workflow_ui["Workflow Studio<br/>[workflow-studio.js]"]
  node_workflow["Workflow execution<br/>[execution.py]"]
  node_saved_runs["Saved runs<br/>[saved_dispatch.py]"]
  node_qualification["Route qualification<br/>[qualification.py]"]
  node_experiments[("Experiment records")]
end

subgraph group_workspace["Workspace and finishing"]
  node_review["Output review<br/>[review_desk.py]"]
  node_workspace_store[("Workspace assets<br/>[workspace.py]")]
  node_project_store[("Project plans<br/>[project_storage.py]")]
  node_native["Native finishing<br/>[native_edit.py]"]
  node_blender["Blender integration<br/>[av_job.py]"]
  node_godot["Godot export"]
end

subgraph group_runtime["Local execution"]
  node_server["Studio server<br/>[server.py]"]
  node_jobs["Job lifecycle<br/>[job_cancel.py]"]
  node_resource["Resource admission"]
end

node_operator(("Artist or agent"))
node_comfy["ComfyUI"]

node_operator -->|"uses"| node_browser
node_browser -->|"submits requests"| node_server
node_server -->|"loads routes"| node_recipes
node_server -->|"inspects intake"| node_models
node_server -->|"checks capacity"| node_resource
node_server -->|"manages jobs"| node_jobs
node_server -->|"submits workflow"| node_comfy
node_comfy -->|"returns execution"| node_server
node_browser -->|"assigns references"| node_reference_ui
node_reference_ui -->|"requests analysis"| node_reference_analysis
node_browser -->|"edits prompt projects"| node_prompt
node_browser -->|"opens workflows"| node_workflow_ui
node_workflow_ui -->|"executes workflows"| node_workflow
node_workflow -->|"dispatches graph"| node_comfy
node_workflow -->|"records run"| node_saved_runs
node_saved_runs -->|"supports qualification"| node_qualification
node_server -->|"records history"| node_experiments
node_browser -->|"reviews outputs"| node_review
node_server -->|"manages assets"| node_workspace_store
node_server -->|"publishes plans"| node_project_store
node_workspace_store -.->|"exports to Krita"| node_native
node_workspace_store -.->|"hands off assets"| node_blender
node_workspace_store -.->|"exports sprites"| node_godot

click node_browser "https://github.com/chris0jeky/local-asset-studio/blob/main/app/static/app.js"
click node_server "https://github.com/chris0jeky/local-asset-studio/blob/main/app/server.py"
click node_recipes "https://github.com/chris0jeky/local-asset-studio/blob/main/app/backends.py"
click node_jobs "https://github.com/chris0jeky/local-asset-studio/blob/main/app/job_cancel.py"
click node_resource "https://github.com/chris0jeky/local-asset-studio/blob/main/app/resource_admission.py"
click node_models "https://github.com/chris0jeky/local-asset-studio/blob/main/app/model_intake.py"
click node_reference_ui "https://github.com/chris0jeky/local-asset-studio/blob/main/app/static/references.js"
click node_reference_analysis "https://github.com/chris0jeky/local-asset-studio/blob/main/studio_prompt/reference_analysis.py"
click node_prompt "https://github.com/chris0jeky/local-asset-studio/blob/main/studio_prompt/projects.py"
click node_workflow_ui "https://github.com/chris0jeky/local-asset-studio/blob/main/app/static/workflow-studio.js"
click node_workflow "https://github.com/chris0jeky/local-asset-studio/blob/main/studio_workflow/execution.py"
click node_saved_runs "https://github.com/chris0jeky/local-asset-studio/blob/main/studio_workflow/saved_dispatch.py"
click node_qualification "https://github.com/chris0jeky/local-asset-studio/blob/main/studio_workflow/qualification.py"
click node_experiments "https://github.com/chris0jeky/local-asset-studio/blob/main/app/performance_history.py"
click node_review "https://github.com/chris0jeky/local-asset-studio/blob/main/app/review_desk.py"
click node_workspace_store "https://github.com/chris0jeky/local-asset-studio/blob/main/app/workspace.py"
click node_project_store "https://github.com/chris0jeky/local-asset-studio/blob/main/app/project_storage.py"
click node_native "https://github.com/chris0jeky/local-asset-studio/blob/main/integrations/krita/native_edit.py"
click node_blender "https://github.com/chris0jeky/local-asset-studio/blob/main/integrations/blender/av_job.py"
click node_godot "https://github.com/chris0jeky/local-asset-studio/blob/main/scripts/godot_asset_adapter.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_browser,node_recipes,node_models,node_comfy toneBlue
class node_reference_ui,node_reference_analysis,node_prompt toneAmber
class node_workflow_ui,node_workflow,node_saved_runs,node_qualification,node_experiments toneMint
class node_review,node_workspace_store,node_project_store,node_native,node_blender,node_godot toneRose
class node_server,node_jobs,node_resource,node_operator toneIndigo
```

## Components

### Guided creation

- [Studio browser](https://github.com/chris0jeky/local-asset-studio/blob/main/app/static/app.js): `app/static/app.js`
- [Recipes and settings](https://github.com/chris0jeky/local-asset-studio/blob/main/app/backends.py): `app/backends.py`
- [Model intake](https://github.com/chris0jeky/local-asset-studio/blob/main/app/model_intake.py): `app/model_intake.py`

### References and prompts

- [Reference Atelier](https://github.com/chris0jeky/local-asset-studio/blob/main/app/static/references.js): `app/static/references.js`
- [Reference analysis](https://github.com/chris0jeky/local-asset-studio/blob/main/studio_prompt/reference_analysis.py): `studio_prompt/reference_analysis.py`
- [Prompt projects](https://github.com/chris0jeky/local-asset-studio/blob/main/studio_prompt/projects.py): `studio_prompt/projects.py`

### Workflow and evidence

- [Workflow Studio](https://github.com/chris0jeky/local-asset-studio/blob/main/app/static/workflow-studio.js): `app/static/workflow-studio.js`
- [Workflow execution](https://github.com/chris0jeky/local-asset-studio/blob/main/studio_workflow/execution.py): `studio_workflow/execution.py`
- [Saved runs](https://github.com/chris0jeky/local-asset-studio/blob/main/studio_workflow/saved_dispatch.py): `studio_workflow/saved_dispatch.py`
- [Route qualification](https://github.com/chris0jeky/local-asset-studio/blob/main/studio_workflow/qualification.py): `studio_workflow/qualification.py`
- [Experiment records](https://github.com/chris0jeky/local-asset-studio/blob/main/app/performance_history.py): `app/performance_history.py`

### Workspace and finishing

- [Output review](https://github.com/chris0jeky/local-asset-studio/blob/main/app/review_desk.py): `app/review_desk.py`
- [Workspace assets](https://github.com/chris0jeky/local-asset-studio/blob/main/app/workspace.py): `app/workspace.py`
- [Project plans](https://github.com/chris0jeky/local-asset-studio/blob/main/app/project_storage.py): `app/project_storage.py`
- [Native finishing](https://github.com/chris0jeky/local-asset-studio/blob/main/integrations/krita/native_edit.py): `integrations/krita/native_edit.py`
- [Blender integration](https://github.com/chris0jeky/local-asset-studio/blob/main/integrations/blender/av_job.py): `integrations/blender/av_job.py`
- [Godot export](https://github.com/chris0jeky/local-asset-studio/blob/main/scripts/godot_asset_adapter.py): `scripts/godot_asset_adapter.py`

### Local execution

- [Studio server](https://github.com/chris0jeky/local-asset-studio/blob/main/app/server.py): `app/server.py`
- [Job lifecycle](https://github.com/chris0jeky/local-asset-studio/blob/main/app/job_cancel.py): `app/job_cancel.py`
- [Resource admission](https://github.com/chris0jeky/local-asset-studio/blob/main/app/resource_admission.py): `app/resource_admission.py`

### Other components

- **Artist or agent**
- **ComfyUI**

## Connections

- Artist or agent → Studio browser: uses
- Studio browser → Studio server: submits requests
- Studio server → Recipes and settings: loads routes
- Studio server → Model intake: inspects intake
- Studio server → Resource admission: checks capacity
- Studio server → Job lifecycle: manages jobs
- Studio server → ComfyUI: submits workflow
- ComfyUI → Studio server: returns execution
- Studio browser → Reference Atelier: assigns references
- Reference Atelier → Reference analysis: requests analysis
- Studio browser → Prompt projects: edits prompt projects
- Studio browser → Workflow Studio: opens workflows
- Workflow Studio → Workflow execution: executes workflows
- Workflow execution → ComfyUI: dispatches graph
- Workflow execution → Saved runs: records run
- Saved runs → Route qualification: supports qualification
- Studio server → Experiment records: records history
- Studio browser → Output review: reviews outputs
- Studio server → Workspace assets: manages assets
- Studio server → Project plans: publishes plans
- Workspace assets → Native finishing: exports to Krita
- Workspace assets → Blender integration: hands off assets
- Workspace assets → Godot export: exports sprites
