# receyuki/live2pet architecture

> Architecture diagram of the GitHub repository receyuki/live2pet, 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/receyuki/live2pet
- Repository: https://github.com/receyuki/live2pet

## Overview

Live2Pet is a desktop authoring app that turns local or GitHub-hosted Live2D and Spine models into Clawd or Codex pet packages. The main workflow is browse/import, inspect and preview, map animations and visibility, then build and save or install. The graph includes project persistence, preview rendering, build/capture, target-specific output, and runtime setup. Several links reflect README-documented capabilities; unsampled source limits exact wiring for those branches.

Main entry points: [`apps/desktop/main.cjs`](https://github.com/receyuki/live2pet/blob/main/apps/desktop/main.cjs) (Electron main), [`packages/package-build/src/index.cjs`](https://github.com/receyuki/live2pet/blob/main/packages/package-build/src/index.cjs) (Package builder), [`packages/app-host/src/index.cjs`](https://github.com/receyuki/live2pet/blob/main/packages/app-host/src/index.cjs) (App host API), [`apps/desktop/source-library-service.cjs`](https://github.com/receyuki/live2pet/blob/main/apps/desktop/source-library-service.cjs) (Source library)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_authoring["Model authoring"]
  node_source_library["Source library"]
  node_inspector["Source inspector<br/>[index.cjs]"]
  node_project_workspace["Project workspace"]
  node_project_model["Project model<br/>[index.cjs]"]
  node_renderer["Model renderer<br/>[index.cjs]"]
end

subgraph group_desktop["Desktop app"]
  node_desktop_ui["Authoring UI<br/>[App.tsx]"]
  node_preview_ui["Preview session UI<br/>[preview-session.ts]"]
  node_preview_service["Preview service"]
  node_main["Electron main<br/>[main.cjs]"]
  node_preload["IPC bridge<br/>[preload-api.cjs]"]
  node_app_host["App host API<br/>[index.cjs]"]
end

subgraph group_build["Build pipeline"]
  node_package_build["Package builder<br/>[index.cjs]"]
  node_capture["Frame capture"]
  node_build_cache[("Build cache<br/>[cache.cjs]")]
end

subgraph group_targets["Targets and delivery"]
  node_preview_plan["Target preview<br/>[preview.cjs]"]
  node_clawd["Clawd target<br/>[index.cjs]"]
  node_codex["Codex target<br/>[index.cjs]"]
  node_output["Package output"]
  node_installation["Target installation"]
end

subgraph group_runtimes["Runtime support"]
  node_runtime_settings["Runtime settings<br/>[main.cjs]"]
  node_installation_lib["Installation support<br/>[index.cjs]"]
  node_spine_pack["Spine renderer pack"]
end

node_user(("Desktop user"))
node_github(("GitHub collection"))
node_target_apps(("Clawd or Codex"))

node_user -->|"authors in"| node_desktop_ui
node_user -->|"opens source"| node_source_library
node_github -.->|"provides models"| node_source_library
node_source_library -->|"inspects model"| node_inspector
node_desktop_ui -->|"sends commands"| node_preload
node_preload -->|"dispatches IPC"| node_app_host
node_app_host -->|"routes requests"| node_main
node_main -->|"creates library"| node_source_library
node_main -->|"inspects source"| node_inspector
node_main -->|"manages projects"| node_project_workspace
node_project_workspace -->|"loads and validates"| node_project_model
node_desktop_ui -->|"controls preview"| node_preview_ui
node_preview_ui -->|"requests preview"| node_preload
node_main -->|"hosts session"| node_preview_service
node_preview_service -->|"opens renderer"| node_renderer
node_main -->|"resolves renderer"| node_renderer
node_main -->|"builds project"| node_package_build
node_package_build -->|"captures frames"| node_capture
node_package_build -->|"reuses assets"| node_build_cache
node_package_build -->|"builds theme"| node_clawd
node_package_build -->|"builds atlas"| node_codex
node_preview_plan -->|"models behavior"| node_clawd
node_main -->|"previews target"| node_preview_plan
node_app_host -->|"saves package"| node_output
node_app_host -->|"installs package"| node_installation
node_installation -->|"installs target"| node_installation_lib
node_installation -->|"updates pet"| node_target_apps
node_user -->|"configures runtime"| node_runtime_settings
node_main -.->|"resolves Spine pack"| node_spine_pack

click node_desktop_ui "https://github.com/receyuki/live2pet/blob/main/apps/desktop/ui/src/App.tsx"
click node_source_library "https://github.com/receyuki/live2pet/blob/main/apps/desktop/source-library-service.cjs"
click node_inspector "https://github.com/receyuki/live2pet/blob/main/packages/source-inspector/src/index.cjs"
click node_project_workspace "https://github.com/receyuki/live2pet/blob/main/apps/desktop/project-workspace-service.cjs"
click node_project_model "https://github.com/receyuki/live2pet/blob/main/packages/project/src/index.cjs"
click node_preview_ui "https://github.com/receyuki/live2pet/blob/main/apps/desktop/ui/src/preview-session.ts"
click node_preview_service "https://github.com/receyuki/live2pet/blob/main/apps/desktop/preview-session-service.cjs"
click node_renderer "https://github.com/receyuki/live2pet/blob/main/packages/renderer/src/index.cjs"
click node_main "https://github.com/receyuki/live2pet/blob/main/apps/desktop/main.cjs"
click node_preload "https://github.com/receyuki/live2pet/blob/main/packages/app-host/src/preload-api.cjs"
click node_app_host "https://github.com/receyuki/live2pet/blob/main/packages/app-host/src/index.cjs"
click node_package_build "https://github.com/receyuki/live2pet/blob/main/packages/package-build/src/index.cjs"
click node_capture "https://github.com/receyuki/live2pet/blob/main/packages/package-build/src/capture-pipeline.cjs"
click node_build_cache "https://github.com/receyuki/live2pet/blob/main/packages/package-build/src/cache.cjs"
click node_preview_plan "https://github.com/receyuki/live2pet/blob/main/packages/package-build/src/preview.cjs"
click node_clawd "https://github.com/receyuki/live2pet/blob/main/packages/clawd-target/src/index.cjs"
click node_codex "https://github.com/receyuki/live2pet/blob/main/packages/codex-target/src/index.cjs"
click node_output "https://github.com/receyuki/live2pet/blob/main/apps/desktop/package-output-service.cjs"
click node_installation "https://github.com/receyuki/live2pet/blob/main/apps/desktop/target-installation-service.cjs"
click node_runtime_settings "https://github.com/receyuki/live2pet/blob/main/apps/desktop/main.cjs"
click node_installation_lib "https://github.com/receyuki/live2pet/blob/main/packages/installation/src/index.cjs"
click node_spine_pack "https://github.com/receyuki/live2pet/blob/main/apps/desktop/hosted-build-service.cjs"

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_source_library,node_inspector,node_project_workspace,node_project_model,node_renderer,node_user toneBlue
class node_desktop_ui,node_preview_ui,node_preview_service,node_main,node_preload,node_app_host toneAmber
class node_package_build,node_capture,node_build_cache toneMint
class node_preview_plan,node_clawd,node_codex,node_output,node_installation toneRose
class node_runtime_settings,node_installation_lib,node_spine_pack,node_github,node_target_apps toneIndigo
```

## Components

### Model authoring

- [Source library](https://github.com/receyuki/live2pet/blob/main/apps/desktop/source-library-service.cjs): `apps/desktop/source-library-service.cjs`
- [Source inspector](https://github.com/receyuki/live2pet/blob/main/packages/source-inspector/src/index.cjs): `packages/source-inspector/src/index.cjs`
- [Project workspace](https://github.com/receyuki/live2pet/blob/main/apps/desktop/project-workspace-service.cjs): `apps/desktop/project-workspace-service.cjs`
- [Project model](https://github.com/receyuki/live2pet/blob/main/packages/project/src/index.cjs): `packages/project/src/index.cjs`
- [Model renderer](https://github.com/receyuki/live2pet/blob/main/packages/renderer/src/index.cjs): `packages/renderer/src/index.cjs`

### Desktop app

- [Authoring UI](https://github.com/receyuki/live2pet/blob/main/apps/desktop/ui/src/App.tsx): `apps/desktop/ui/src/App.tsx`
- [Preview session UI](https://github.com/receyuki/live2pet/blob/main/apps/desktop/ui/src/preview-session.ts): `apps/desktop/ui/src/preview-session.ts`
- [Preview service](https://github.com/receyuki/live2pet/blob/main/apps/desktop/preview-session-service.cjs): `apps/desktop/preview-session-service.cjs`
- [Electron main](https://github.com/receyuki/live2pet/blob/main/apps/desktop/main.cjs): `apps/desktop/main.cjs`
- [IPC bridge](https://github.com/receyuki/live2pet/blob/main/packages/app-host/src/preload-api.cjs): `packages/app-host/src/preload-api.cjs`
- [App host API](https://github.com/receyuki/live2pet/blob/main/packages/app-host/src/index.cjs): `packages/app-host/src/index.cjs`

### Build pipeline

- [Package builder](https://github.com/receyuki/live2pet/blob/main/packages/package-build/src/index.cjs): `packages/package-build/src/index.cjs`
- [Frame capture](https://github.com/receyuki/live2pet/blob/main/packages/package-build/src/capture-pipeline.cjs): `packages/package-build/src/capture-pipeline.cjs`
- [Build cache](https://github.com/receyuki/live2pet/blob/main/packages/package-build/src/cache.cjs): `packages/package-build/src/cache.cjs`

### Targets and delivery

- [Target preview](https://github.com/receyuki/live2pet/blob/main/packages/package-build/src/preview.cjs): `packages/package-build/src/preview.cjs`
- [Clawd target](https://github.com/receyuki/live2pet/blob/main/packages/clawd-target/src/index.cjs): `packages/clawd-target/src/index.cjs`
- [Codex target](https://github.com/receyuki/live2pet/blob/main/packages/codex-target/src/index.cjs): `packages/codex-target/src/index.cjs`
- [Package output](https://github.com/receyuki/live2pet/blob/main/apps/desktop/package-output-service.cjs): `apps/desktop/package-output-service.cjs`
- [Target installation](https://github.com/receyuki/live2pet/blob/main/apps/desktop/target-installation-service.cjs): `apps/desktop/target-installation-service.cjs`

### Runtime support

- [Runtime settings](https://github.com/receyuki/live2pet/blob/main/apps/desktop/main.cjs): `apps/desktop/main.cjs`
- [Installation support](https://github.com/receyuki/live2pet/blob/main/packages/installation/src/index.cjs): `packages/installation/src/index.cjs`
- [Spine renderer pack](https://github.com/receyuki/live2pet/blob/main/apps/desktop/hosted-build-service.cjs): `apps/desktop/hosted-build-service.cjs`

### Other components

- **Desktop user**
- **GitHub collection**
- **Clawd or Codex**

## Connections

- Desktop user → Authoring UI: authors in
- Desktop user → Source library: opens source
- GitHub collection → Source library: provides models
- Source library → Source inspector: inspects model
- Authoring UI → IPC bridge: sends commands
- IPC bridge → App host API: dispatches IPC
- App host API → Electron main: routes requests
- Electron main → Source library: creates library
- Electron main → Source inspector: inspects source
- Electron main → Project workspace: manages projects
- Project workspace → Project model: loads and validates
- Authoring UI → Preview session UI: controls preview
- Preview session UI → IPC bridge: requests preview
- Electron main → Preview service: hosts session
- Preview service → Model renderer: opens renderer
- Electron main → Model renderer: resolves renderer
- Electron main → Package builder: builds project
- Package builder → Frame capture: captures frames
- Package builder → Build cache: reuses assets
- Package builder → Clawd target: builds theme
- Package builder → Codex target: builds atlas
- Target preview → Clawd target: models behavior
- Electron main → Target preview: previews target
- App host API → Package output: saves package
- App host API → Target installation: installs package
- Target installation → Installation support: installs target
- Target installation → Clawd or Codex: updates pet
- Desktop user → Runtime settings: configures runtime
- Electron main → Spine renderer pack: resolves Spine pack
