# enming73/ai-video-studio architecture

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

- Interactive diagram: https://gitdiagram.com/enming73/ai-video-studio
- Repository: https://github.com/enming73/ai-video-studio

## Overview

AI Video Studio is a local video-production application with CLI and React/FastAPI interfaces; the repository also contains VBench and a shared provider package. The main workflow turns a project brief into an approved storyboard, optional character and shared-frame assets, generated or imported shots, and a selected timeline that can be rendered. Studio also provides audio, reference assets, and offline/vision review workflows. Edges reflect cited excerpts, index references, or README statements; unsampled subsystems are included where documented, but their internal call paths are not inferred.

Main entry points: [`ai-video-studio/studio/cli.py`](https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/cli.py) (Studio CLI), [`ai-video-studio/studio/webapp.py`](https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/webapp.py) (Studio API), [`ai-video-studio/studio/guided_web.py`](https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/guided_web.py) (Guided API), [`ai-video-studio/web/src/main.jsx`](https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/web/src/main.jsx) (React Studio)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_studio["Studio Workflow"]
  node_cli["Studio CLI<br/>[cli.py]"]
  node_guided_api["Guided API<br/>[guided_web.py]"]
  node_project[("Project Core<br/>[core.py]")]
  node_storyboard["Storyboard Planning"]
  node_workflow["Approval Workflow<br/>[guided_workflow.py]"]
  node_characters["Character Bible"]
  node_images["Character Images<br/>[guided_images.py]"]
  node_boundaries["Boundary Frames"]
  node_generation["Shot Generation"]
end

subgraph group_production["Production Editor"]
  node_webui["React Studio<br/>[main.jsx]"]
  node_api["Studio API<br/>[webapp.py]"]
  node_timeline["Asset Timeline<br/>[timeline.py]"]
  node_sound["Sound Post<br/>[sound.py]"]
  node_narration["Narration<br/>[narration.py]"]
  node_references["Reference Assets<br/>[references.py]"]
  node_refgen["Reference Generation"]
end

subgraph group_review["Review Workspaces"]
  node_director["Director Analysis<br/>[director.py]"]
  node_director_vision["Director Vision<br/>[director_vision.py]"]
  node_continuity["Continuity Review<br/>[continuity.py]"]
  node_continuity_vision["Visual Continuity"]
end

subgraph group_providers["Provider Core"]
  node_capabilities["Provider Capabilities"]
  node_provider["Video Providers<br/>[providers.py]"]
  node_media["Media Download<br/>[media.py]"]
end

subgraph group_benchmark["Benchmark"]
  node_vbench["VBench<br/>[core.py]"]
end

node_user(("Producer"))

node_user -->|"runs commands"| node_cli
node_user -->|"edits project"| node_webui
node_webui -.->|"sends requests"| node_api
node_cli -->|"uses project core"| node_project
node_cli -->|"proposes storyboard"| node_storyboard
node_cli -->|"manages references"| node_references
node_cli -->|"generates references"| node_refgen
node_cli -->|"manages timeline"| node_timeline
node_cli -->|"manages sound"| node_sound
node_cli -->|"creates narration"| node_narration
node_cli -->|"launches editor"| node_api
node_webui -->|"shows review workspace"| node_continuity
node_webui -->|"shows review workspace"| node_director
node_webui -.->|"uses guided production"| node_guided_api
node_api -->|"accesses projects"| node_project
node_api -->|"routes timeline"| node_timeline
node_api -->|"routes audio"| node_sound
node_api -->|"routes analysis"| node_director
node_api -->|"runs continuity"| node_continuity
node_api -->|"routes visual review"| node_continuity_vision
node_api -->|"mounts guided routes"| node_guided_api
node_guided_api -->|"submits shots"| node_generation
node_guided_api -->|"routes proposals"| node_storyboard
node_guided_api -->|"edits characters"| node_characters
node_guided_api -->|"manages frames"| node_boundaries
node_workflow -->|"loads boundary state"| node_boundaries
node_characters -->|"invalidates frames"| node_boundaries
node_generation -->|"checks models"| node_capabilities
node_generation -->|"downloads results"| node_media
node_generation -.->|"submits generation"| node_provider
node_images -.->|"requests images"| node_provider
node_storyboard -->|"validates durations"| node_capabilities
node_director_vision -->|"reviews reports"| node_director
node_continuity_vision -->|"reviews evidence"| node_continuity
node_narration -->|"adds narration audio"| node_sound
node_refgen -->|"stores generated assets"| node_references
node_timeline -->|"reads project data"| node_project
node_sound -->|"uses timeline data"| node_timeline
node_vbench -->|"uses shared providers"| node_provider

click node_cli "https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/cli.py"
click node_webui "https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/web/src/main.jsx"
click node_api "https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/webapp.py"
click node_guided_api "https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/guided_web.py"
click node_project "https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/core.py"
click node_storyboard "https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/guided_storyboard.py"
click node_workflow "https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/guided_workflow.py"
click node_characters "https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/guided_characters.py"
click node_images "https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/guided_images.py"
click node_boundaries "https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/guided_boundaries.py"
click node_generation "https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/guided_generation.py"
click node_capabilities "https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/provider_capabilities.py"
click node_timeline "https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/timeline.py"
click node_sound "https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/sound.py"
click node_narration "https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/narration.py"
click node_references "https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/references.py"
click node_refgen "https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/reference_generation.py"
click node_director "https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/director.py"
click node_director_vision "https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/director_vision.py"
click node_continuity "https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/continuity.py"
click node_continuity_vision "https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/continuity_vision.py"
click node_provider "https://github.com/enming73/ai-video-studio/blob/main/video-provider-core/src/video_provider_core/providers.py"
click node_media "https://github.com/enming73/ai-video-studio/blob/main/video-provider-core/src/video_provider_core/media.py"
click node_vbench "https://github.com/enming73/ai-video-studio/blob/main/vbench/benchmark/core.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_cli,node_guided_api,node_project,node_storyboard,node_workflow,node_characters,node_images,node_boundaries,node_generation toneBlue
class node_webui,node_api,node_timeline,node_sound,node_narration,node_references,node_refgen toneAmber
class node_director,node_director_vision,node_continuity,node_continuity_vision toneMint
class node_capabilities,node_provider,node_media toneRose
class node_vbench,node_user toneIndigo
```

## Components

### Studio Workflow

- [Studio CLI](https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/cli.py): `ai-video-studio/studio/cli.py`
- [Guided API](https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/guided_web.py): `ai-video-studio/studio/guided_web.py`
- [Project Core](https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/core.py): `ai-video-studio/studio/core.py`
- [Storyboard Planning](https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/guided_storyboard.py): `ai-video-studio/studio/guided_storyboard.py`
- [Approval Workflow](https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/guided_workflow.py): `ai-video-studio/studio/guided_workflow.py`
- [Character Bible](https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/guided_characters.py): `ai-video-studio/studio/guided_characters.py`
- [Character Images](https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/guided_images.py): `ai-video-studio/studio/guided_images.py`
- [Boundary Frames](https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/guided_boundaries.py): `ai-video-studio/studio/guided_boundaries.py`
- [Shot Generation](https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/guided_generation.py): `ai-video-studio/studio/guided_generation.py`

### Production Editor

- [React Studio](https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/web/src/main.jsx): `ai-video-studio/web/src/main.jsx`
- [Studio API](https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/webapp.py): `ai-video-studio/studio/webapp.py`
- [Asset Timeline](https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/timeline.py): `ai-video-studio/studio/timeline.py`
- [Sound Post](https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/sound.py): `ai-video-studio/studio/sound.py`
- [Narration](https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/narration.py): `ai-video-studio/studio/narration.py`
- [Reference Assets](https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/references.py): `ai-video-studio/studio/references.py`
- [Reference Generation](https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/reference_generation.py): `ai-video-studio/studio/reference_generation.py`

### Review Workspaces

- [Director Analysis](https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/director.py): `ai-video-studio/studio/director.py`
- [Director Vision](https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/director_vision.py): `ai-video-studio/studio/director_vision.py`
- [Continuity Review](https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/continuity.py): `ai-video-studio/studio/continuity.py`
- [Visual Continuity](https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/continuity_vision.py): `ai-video-studio/studio/continuity_vision.py`

### Provider Core

- [Provider Capabilities](https://github.com/enming73/ai-video-studio/blob/main/ai-video-studio/studio/provider_capabilities.py): `ai-video-studio/studio/provider_capabilities.py`
- [Video Providers](https://github.com/enming73/ai-video-studio/blob/main/video-provider-core/src/video_provider_core/providers.py): `video-provider-core/src/video_provider_core/providers.py`
- [Media Download](https://github.com/enming73/ai-video-studio/blob/main/video-provider-core/src/video_provider_core/media.py): `video-provider-core/src/video_provider_core/media.py`

### Benchmark

- [VBench](https://github.com/enming73/ai-video-studio/blob/main/vbench/benchmark/core.py): `vbench/benchmark/core.py`

### Other components

- **Producer**

## Connections

- Producer → Studio CLI: runs commands (evidence: `README.md`)
- Producer → React Studio: edits project (evidence: `README.md`)
- React Studio → Studio API: sends requests
- Studio CLI → Project Core: uses project core (evidence: `ai-video-studio/studio/cli.py`)
- Studio CLI → Storyboard Planning: proposes storyboard (evidence: `ai-video-studio/studio/cli.py`)
- Studio CLI → Reference Assets: manages references (evidence: `ai-video-studio/studio/cli.py`)
- Studio CLI → Reference Generation: generates references (evidence: `ai-video-studio/studio/cli.py`)
- Studio CLI → Asset Timeline: manages timeline (evidence: `ai-video-studio/studio/cli.py`)
- Studio CLI → Sound Post: manages sound (evidence: `ai-video-studio/studio/cli.py`)
- Studio CLI → Narration: creates narration (evidence: `ai-video-studio/studio/cli.py`)
- Studio CLI → Studio API: launches editor (evidence: `ai-video-studio/studio/cli.py`)
- React Studio → Continuity Review: shows review workspace (evidence: `ai-video-studio/web/src/main.jsx`)
- React Studio → Director Analysis: shows review workspace (evidence: `ai-video-studio/web/src/main.jsx`)
- React Studio → Guided API: uses guided production
- Studio API → Project Core: accesses projects (evidence: `ai-video-studio/studio/webapp.py`)
- Studio API → Asset Timeline: routes timeline (evidence: `ai-video-studio/studio/webapp.py`)
- Studio API → Sound Post: routes audio (evidence: `ai-video-studio/studio/webapp.py`)
- Studio API → Director Analysis: routes analysis (evidence: `ai-video-studio/studio/cli.py`)
- Studio API → Continuity Review: runs continuity (evidence: `ai-video-studio/studio/webapp.py`)
- Studio API → Visual Continuity: routes visual review (evidence: `ai-video-studio/studio/webapp.py`)
- Studio API → Guided API: mounts guided routes (evidence: `ai-video-studio/studio/webapp.py`)
- Guided API → Shot Generation: submits shots (evidence: `ai-video-studio/studio/guided_web.py`)
- Guided API → Storyboard Planning: routes proposals (evidence: `ai-video-studio/studio/guided_web.py`)
- Guided API → Character Bible: edits characters (evidence: `ai-video-studio/studio/guided_web.py`)
- Guided API → Boundary Frames: manages frames (evidence: `ai-video-studio/studio/guided_web.py`)
- Approval Workflow → Boundary Frames: loads boundary state (evidence: `ai-video-studio/studio/guided_workflow.py`)
- Character Bible → Boundary Frames: invalidates frames (evidence: `ai-video-studio/studio/guided_characters.py`)
- Shot Generation → Provider Capabilities: checks models (evidence: `ai-video-studio/studio/guided_generation.py`)
- Shot Generation → Media Download: downloads results (evidence: `ai-video-studio/studio/guided_generation.py`)
- Shot Generation → Video Providers: submits generation
- Character Images → Video Providers: requests images
- Storyboard Planning → Provider Capabilities: validates durations (evidence: `ai-video-studio/studio/guided_storyboard.py`)
- Director Vision → Director Analysis: reviews reports (evidence: `ai-video-studio/studio/director_vision.py`)
- Visual Continuity → Continuity Review: reviews evidence (evidence: `ai-video-studio/studio/continuity_vision.py`)
- Narration → Sound Post: adds narration audio (evidence: `ai-video-studio/studio/narration.py`)
- Reference Generation → Reference Assets: stores generated assets (evidence: `ai-video-studio/studio/reference_generation.py`)
- Asset Timeline → Project Core: reads project data (evidence: `ai-video-studio/studio/timeline.py`)
- Sound Post → Asset Timeline: uses timeline data (evidence: `ai-video-studio/studio/sound.py`)
- VBench → Video Providers: uses shared providers (evidence: `README.md`)
