# chrischen667788/wind-comic architecture

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

## Overview

Wind Comic is an AI studio for turning a short idea into an editable, publishable drama. The main workflow runs from creation through script, cast, storyboards, generated media, voice, editing, and export; projects can also be split into seasons, collaborated on, and published. The README documents the agent handoffs and provider architecture; sampled source excerpts confirm selected orchestration, persistence, job, and storage behavior. Other subsystem connections are included only where the README or tree supports them.

Main entry points: [`lib/create-pipeline.ts`](https://github.com/chrischen667788/wind-comic/blob/main/lib/create-pipeline.ts) (Pipeline orchestration), [`app/create/page.tsx`](https://github.com/chrischen667788/wind-comic/blob/main/app/create/page.tsx) (Creation studio), [`app/projects/[id]/page.tsx`](https://github.com/chrischen667788/wind-comic/blob/main/app/projects/%5Bid%5D/page.tsx) (Project workbench), [`lib/image-router.ts`](https://github.com/chrischen667788/wind-comic/blob/main/lib/image-router.ts) (Image generation)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["Studio experience"]
  node_studio["Creation studio<br/>[page.tsx]"]
  node_project_workbench["Project workbench<br/>[page.tsx]"]
  node_collaboration["Live collaboration<br/>[yjs-broadcast.ts]"]
end

subgraph group_creation["Story creation"]
  node_intake["Story intake<br/>[story-intake.ts]"]
  node_pipeline["Pipeline orchestration<br/>[create-pipeline.ts]"]
  node_writer["Writer<br/>[writer-enhance.ts]"]
  node_director["Director"]
  node_style_bible["Style bible<br/>[style-bible.ts]"]
  node_character_design["Character design"]
  node_storyboard["Storyboard design"]
  node_llm["LLM gateway<br/>[llm-client.ts]"]
end

subgraph group_production["Media production"]
  node_image_generation["Image generation<br/>[image-router.ts]"]
  node_video_generation["Video generation"]
  node_voice["Voice and narration<br/>[narration-synth.ts]"]
  node_lipsync["Lip sync<br/>[lipsync-plan.ts]"]
  node_editor["Timeline editor<br/>[timeline-tracks.ts]"]
end

subgraph group_delivery["Review and delivery"]
  node_quality["Vision and quality review<br/>[vision-audit.ts]"]
  node_export["Film export<br/>[video-export.ts]"]
  node_series["Series management"]
  node_publishing["Publish and distribute"]
end

subgraph group_platform["Platform services"]
  node_jobs[("Pipeline jobs")]
  node_assets["Asset persistence<br/>[asset-storage.ts]"]
  node_storage["Storage adapter<br/>[storage.ts]"]
  node_project_data[("Project data<br/>[project-repo.ts]")]
end

node_user(("Creator"))
node_media_providers{{"Media providers"}}
node_published_channels{{"Publishing channels"}}

node_user -->|"starts creation"| node_studio
node_studio -->|"submits story"| node_intake
node_studio -->|"starts pipeline"| node_pipeline
node_intake -->|"provides story"| node_pipeline
node_pipeline -->|"invokes"| node_writer
node_pipeline -->|"invokes"| node_director
node_pipeline -->|"invokes"| node_style_bible
node_pipeline -->|"invokes"| node_character_design
node_pipeline -->|"invokes"| node_storyboard
node_writer -->|"requests text"| node_llm
node_director -->|"requests text"| node_llm
node_style_bible -->|"requests text"| node_llm
node_character_design -->|"generates imagery"| node_image_generation
node_storyboard -->|"generates imagery"| node_image_generation
node_pipeline -->|"generates shots"| node_video_generation
node_pipeline -->|"generates voice"| node_voice
node_pipeline -->|"produces lip sync"| node_lipsync
node_pipeline -->|"assembles timeline"| node_editor
node_pipeline -->|"requests audit"| node_quality
node_quality -->|"flags shots"| node_pipeline
node_editor -->|"renders film"| node_export
node_project_workbench -->|"manages project"| node_pipeline
node_project_workbench -->|"collaborates"| node_collaboration
node_studio -->|"creates season"| node_series
node_series -->|"generates episodes"| node_pipeline
node_project_workbench -->|"publishes project"| node_publishing
node_publishing -->|"dispatches package"| node_published_channels
node_pipeline -->|"tracks lifecycle"| node_jobs
node_pipeline -->|"reads project"| node_project_data
node_pipeline -->|"persists artifacts"| node_assets
node_assets -->|"writes files"| node_storage
node_storage -.->|"stores remotely"| node_media_providers
node_image_generation -->|"requests images"| node_media_providers
node_video_generation -->|"requests video"| node_media_providers
node_voice -->|"requests speech"| node_media_providers
node_lipsync -->|"requests lip sync"| node_media_providers

click node_studio "https://github.com/chrischen667788/wind-comic/blob/main/app/create/page.tsx"
click node_project_workbench "https://github.com/chrischen667788/wind-comic/blob/main/app/projects/%5Bid%5D/page.tsx"
click node_collaboration "https://github.com/chrischen667788/wind-comic/blob/main/lib/yjs-broadcast.ts"
click node_intake "https://github.com/chrischen667788/wind-comic/blob/main/lib/story-intake.ts"
click node_pipeline "https://github.com/chrischen667788/wind-comic/blob/main/lib/create-pipeline.ts"
click node_writer "https://github.com/chrischen667788/wind-comic/blob/main/lib/writer-enhance.ts"
click node_director "https://github.com/chrischen667788/wind-comic/blob/main/lib/director-enhance.ts"
click node_style_bible "https://github.com/chrischen667788/wind-comic/blob/main/lib/style-bible.ts"
click node_character_design "https://github.com/chrischen667788/wind-comic/blob/main/lib/character-studio.ts"
click node_storyboard "https://github.com/chrischen667788/wind-comic/blob/main/lib/storyboard-sketch.ts"
click node_llm "https://github.com/chrischen667788/wind-comic/blob/main/lib/llm-client.ts"
click node_image_generation "https://github.com/chrischen667788/wind-comic/blob/main/lib/image-router.ts"
click node_video_generation "https://github.com/chrischen667788/wind-comic/blob/main/lib/video-engine-chain.ts"
click node_voice "https://github.com/chrischen667788/wind-comic/blob/main/lib/narration-synth.ts"
click node_lipsync "https://github.com/chrischen667788/wind-comic/blob/main/lib/lipsync-plan.ts"
click node_editor "https://github.com/chrischen667788/wind-comic/blob/main/lib/timeline-tracks.ts"
click node_quality "https://github.com/chrischen667788/wind-comic/blob/main/lib/vision-audit.ts"
click node_export "https://github.com/chrischen667788/wind-comic/blob/main/lib/video-export.ts"
click node_series "https://github.com/chrischen667788/wind-comic/blob/main/lib/season-orchestrator.ts"
click node_publishing "https://github.com/chrischen667788/wind-comic/blob/main/lib/publish-dispatch.ts"
click node_jobs "https://github.com/chrischen667788/wind-comic/blob/main/lib/repos/pipeline-job-repo.ts"
click node_assets "https://github.com/chrischen667788/wind-comic/blob/main/lib/asset-storage.ts"
click node_storage "https://github.com/chrischen667788/wind-comic/blob/main/lib/storage.ts"
click node_project_data "https://github.com/chrischen667788/wind-comic/blob/main/lib/repos/project-repo.ts"

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_studio,node_project_workbench,node_collaboration toneBlue
class node_intake,node_pipeline,node_writer,node_director,node_style_bible,node_character_design,node_storyboard,node_llm toneAmber
class node_image_generation,node_video_generation,node_voice,node_lipsync,node_editor toneMint
class node_quality,node_export,node_series,node_publishing toneRose
class node_jobs,node_assets,node_storage,node_project_data,node_user,node_media_providers,node_published_channels toneIndigo
```

## Components

### Studio experience

- [Creation studio](https://github.com/chrischen667788/wind-comic/blob/main/app/create/page.tsx): `app/create/page.tsx`
- [Project workbench](https://github.com/chrischen667788/wind-comic/blob/main/app/projects/%5Bid%5D/page.tsx): `app/projects/[id]/page.tsx`
- [Live collaboration](https://github.com/chrischen667788/wind-comic/blob/main/lib/yjs-broadcast.ts): `lib/yjs-broadcast.ts`

### Story creation

- [Story intake](https://github.com/chrischen667788/wind-comic/blob/main/lib/story-intake.ts): `lib/story-intake.ts`
- [Pipeline orchestration](https://github.com/chrischen667788/wind-comic/blob/main/lib/create-pipeline.ts): `lib/create-pipeline.ts`
- [Writer](https://github.com/chrischen667788/wind-comic/blob/main/lib/writer-enhance.ts): `lib/writer-enhance.ts`
- [Director](https://github.com/chrischen667788/wind-comic/blob/main/lib/director-enhance.ts): `lib/director-enhance.ts`
- [Style bible](https://github.com/chrischen667788/wind-comic/blob/main/lib/style-bible.ts): `lib/style-bible.ts`
- [Character design](https://github.com/chrischen667788/wind-comic/blob/main/lib/character-studio.ts): `lib/character-studio.ts`
- [Storyboard design](https://github.com/chrischen667788/wind-comic/blob/main/lib/storyboard-sketch.ts): `lib/storyboard-sketch.ts`
- [LLM gateway](https://github.com/chrischen667788/wind-comic/blob/main/lib/llm-client.ts): `lib/llm-client.ts`

### Media production

- [Image generation](https://github.com/chrischen667788/wind-comic/blob/main/lib/image-router.ts): `lib/image-router.ts`
- [Video generation](https://github.com/chrischen667788/wind-comic/blob/main/lib/video-engine-chain.ts): `lib/video-engine-chain.ts`
- [Voice and narration](https://github.com/chrischen667788/wind-comic/blob/main/lib/narration-synth.ts): `lib/narration-synth.ts`
- [Lip sync](https://github.com/chrischen667788/wind-comic/blob/main/lib/lipsync-plan.ts): `lib/lipsync-plan.ts`
- [Timeline editor](https://github.com/chrischen667788/wind-comic/blob/main/lib/timeline-tracks.ts): `lib/timeline-tracks.ts`

### Review and delivery

- [Vision and quality review](https://github.com/chrischen667788/wind-comic/blob/main/lib/vision-audit.ts): `lib/vision-audit.ts`
- [Film export](https://github.com/chrischen667788/wind-comic/blob/main/lib/video-export.ts): `lib/video-export.ts`
- [Series management](https://github.com/chrischen667788/wind-comic/blob/main/lib/season-orchestrator.ts): `lib/season-orchestrator.ts`
- [Publish and distribute](https://github.com/chrischen667788/wind-comic/blob/main/lib/publish-dispatch.ts): `lib/publish-dispatch.ts`

### Platform services

- [Pipeline jobs](https://github.com/chrischen667788/wind-comic/blob/main/lib/repos/pipeline-job-repo.ts): `lib/repos/pipeline-job-repo.ts`
- [Asset persistence](https://github.com/chrischen667788/wind-comic/blob/main/lib/asset-storage.ts): `lib/asset-storage.ts`
- [Storage adapter](https://github.com/chrischen667788/wind-comic/blob/main/lib/storage.ts): `lib/storage.ts`
- [Project data](https://github.com/chrischen667788/wind-comic/blob/main/lib/repos/project-repo.ts): `lib/repos/project-repo.ts`

### Other components

- **Creator**
- **Media providers**
- **Publishing channels**

## Connections

- Creator → Creation studio: starts creation
- Creation studio → Story intake: submits story
- Creation studio → Pipeline orchestration: starts pipeline
- Story intake → Pipeline orchestration: provides story
- Pipeline orchestration → Writer: invokes
- Pipeline orchestration → Director: invokes
- Pipeline orchestration → Style bible: invokes
- Pipeline orchestration → Character design: invokes
- Pipeline orchestration → Storyboard design: invokes
- Writer → LLM gateway: requests text
- Director → LLM gateway: requests text
- Style bible → LLM gateway: requests text
- Character design → Image generation: generates imagery
- Storyboard design → Image generation: generates imagery
- Pipeline orchestration → Video generation: generates shots
- Pipeline orchestration → Voice and narration: generates voice
- Pipeline orchestration → Lip sync: produces lip sync
- Pipeline orchestration → Timeline editor: assembles timeline
- Pipeline orchestration → Vision and quality review: requests audit
- Vision and quality review → Pipeline orchestration: flags shots
- Timeline editor → Film export: renders film
- Project workbench → Pipeline orchestration: manages project
- Project workbench → Live collaboration: collaborates
- Creation studio → Series management: creates season
- Series management → Pipeline orchestration: generates episodes
- Project workbench → Publish and distribute: publishes project
- Publish and distribute → Publishing channels: dispatches package
- Pipeline orchestration → Pipeline jobs: tracks lifecycle
- Pipeline orchestration → Project data: reads project
- Pipeline orchestration → Asset persistence: persists artifacts
- Asset persistence → Storage adapter: writes files
- Storage adapter → Media providers: stores remotely
- Image generation → Media providers: requests images
- Video generation → Media providers: requests video
- Voice and narration → Media providers: requests speech
- Lip sync → Media providers: requests lip sync
