# beakerbreaker17025/openmontage architecture

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

- Interactive diagram: https://gitdiagram.com/beakerbreaker17025/openmontage
- Repository: https://github.com/beakerbreaker17025/openmontage

## Overview

OpenMontage is an agentic video-production system: a user can supply a reference video for analysis and planning, then have an agent coordinate media generation or retrieval, audio and other production tools, and final composition. The repository also includes Backlot, a local storyboard board for viewing project state. The README documents the broad workflow; source evidence is sampled, so dashed, uncited links mark orchestration that is not visible in the excerpts. The graph preserves the major production branches without implying a fixed pipeline order.

Main entry points: [`remotion-composer/src/Root.tsx`](https://github.com/beakerbreaker17025/openmontage/blob/main/remotion-composer/src/Root.tsx) (Composition registry), [`remotion-composer/src/Explainer.tsx`](https://github.com/beakerbreaker17025/openmontage/blob/main/remotion-composer/src/Explainer.tsx) (Explainer renderer), [`backlot/server.py`](https://github.com/beakerbreaker17025/openmontage/blob/main/backlot/server.py) (Backlot server), [`tools/base_tool.py`](https://github.com/beakerbreaker17025/openmontage/blob/main/tools/base_tool.py) (Tool contracts)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_planning["Analysis and planning"]
  node_reference_analysis["Reference analysis<br/>[video_analyzer.py]"]
  node_tools_analysis_helpers["Analysis helpers<br/>[frame_sampler.py]"]
  node_media_review["Source media review"]
  node_pipeline_config["Pipeline definitions<br/>[pipeline_loader.py]"]
end

subgraph group_production["Media production"]
  node_stock_retrieval["Stock clip retrieval"]
  node_stock_sources["Stock source adapters<br/>[__init__.py]"]
  node_video_generation["Video generation<br/>[_wan_engine.py]"]
  node_image_generation["Image generation<br/>[image_selector.py]"]
  node_audio_production["Audio production"]
  node_avatar_lipsync["Avatar and lip sync<br/>[kling_lip_sync.py]"]
  node_subtitles["Subtitle generation<br/>[subtitle_gen.py]"]
  node_editing["Video editing<br/>[video_compose.py]"]
end

subgraph group_composition["Composition and review"]
  node_renderer_root["Composition registry<br/>[Root.tsx]"]
  node_explainer["Explainer renderer<br/>[Explainer.tsx]"]
  node_cinematic["Cinematic renderer"]
  node_collage["Collage renderer<br/>[CollageBurst.tsx]"]
  node_caption_overlay["Caption overlay<br/>[CaptionOverlay.tsx]"]
  node_hero_title["Hero title<br/>[HeroTitle.tsx]"]
  node_particle_overlay["Particle overlay"]
  node_screenshot_scene["Screenshot scene"]
  node_resolve_asset["Asset resolver<br/>[resolveAsset.ts]"]
  node_video_result["Rendered video"]
end

subgraph group_backlot["Backlot board"]
  node_backlot_server["Backlot server<br/>[server.py]"]
  node_backlot_state["Project state<br/>[state.py]"]
  node_backlot_board["Storyboard board<br/>[board.js]"]
  node_project_files[("Project files")]
end

subgraph group_runtime["Shared tool runtime"]
  node_tool_registry["Tool registry<br/>[tool_registry.py]"]
  node_shared_tools["Tool contracts<br/>[base_tool.py]"]
  node_events_cache["Events and cache<br/>[events.py]"]
  node_asset_cache[("Asset cache<br/>[asset_cache.py]")]
end

node_creator(("Creator"))
node_agent(("Production agent"))

node_creator -->|"requests production"| node_agent
node_agent -->|"analyzes reference"| node_reference_analysis
node_agent -.->|"reviews media"| node_media_review
node_agent -.->|"loads pipeline"| node_pipeline_config
node_agent -.->|"selects tools"| node_tool_registry
node_reference_analysis -->|"delegates analysis"| node_tools_analysis_helpers
node_agent -->|"retrieves footage"| node_stock_retrieval
node_agent -->|"generates motion"| node_video_generation
node_agent -->|"generates images"| node_image_generation
node_agent -->|"creates soundtrack"| node_audio_production
node_agent -.->|"creates lip sync"| node_avatar_lipsync
node_agent -.->|"adds captions"| node_subtitles
node_agent -->|"edits timeline"| node_editing
node_stock_retrieval -->|"queries adapters"| node_stock_sources
node_shared_tools -->|"emits events"| node_events_cache
node_shared_tools -->|"caches results"| node_asset_cache
node_renderer_root -->|"registers renderer"| node_explainer
node_renderer_root -->|"registers renderer"| node_cinematic
node_renderer_root -->|"registers renderer"| node_collage
node_renderer_root -->|"uses overlay"| node_caption_overlay
node_renderer_root -->|"uses title"| node_hero_title
node_renderer_root -->|"renders video"| node_video_result
node_explainer -->|"renders overlay"| node_caption_overlay
node_explainer -->|"renders title"| node_hero_title
node_cinematic -->|"uses overlay"| node_particle_overlay
node_screenshot_scene -->|"resolves media"| node_resolve_asset
node_backlot_server -->|"reads state"| node_backlot_state
node_backlot_server -->|"watches changes"| node_project_files
node_backlot_board -.->|"fetches board data"| node_backlot_server

click node_reference_analysis "https://github.com/beakerbreaker17025/openmontage/blob/main/tools/analysis/video_analyzer.py"
click node_tools_analysis_helpers "https://github.com/beakerbreaker17025/openmontage/blob/main/tools/analysis/frame_sampler.py"
click node_media_review "https://github.com/beakerbreaker17025/openmontage/blob/main/lib/source_media_review.py"
click node_pipeline_config "https://github.com/beakerbreaker17025/openmontage/blob/main/lib/pipeline_loader.py"
click node_tool_registry "https://github.com/beakerbreaker17025/openmontage/blob/main/tools/tool_registry.py"
click node_shared_tools "https://github.com/beakerbreaker17025/openmontage/blob/main/tools/base_tool.py"
click node_events_cache "https://github.com/beakerbreaker17025/openmontage/blob/main/lib/events.py"
click node_asset_cache "https://github.com/beakerbreaker17025/openmontage/blob/main/lib/asset_cache.py"
click node_stock_retrieval "https://github.com/beakerbreaker17025/openmontage/blob/main/tools/video/direct_clip_search.py"
click node_stock_sources "https://github.com/beakerbreaker17025/openmontage/blob/main/tools/video/stock_sources/__init__.py"
click node_video_generation "https://github.com/beakerbreaker17025/openmontage/blob/main/tools/video/_wan_engine.py"
click node_image_generation "https://github.com/beakerbreaker17025/openmontage/blob/main/tools/graphics/image_selector.py"
click node_audio_production "https://github.com/beakerbreaker17025/openmontage/tree/main/tools/audio"
click node_avatar_lipsync "https://github.com/beakerbreaker17025/openmontage/blob/main/tools/avatar/kling_lip_sync.py"
click node_subtitles "https://github.com/beakerbreaker17025/openmontage/blob/main/tools/subtitle/subtitle_gen.py"
click node_editing "https://github.com/beakerbreaker17025/openmontage/blob/main/tools/video/video_compose.py"
click node_renderer_root "https://github.com/beakerbreaker17025/openmontage/blob/main/remotion-composer/src/Root.tsx"
click node_explainer "https://github.com/beakerbreaker17025/openmontage/blob/main/remotion-composer/src/Explainer.tsx"
click node_cinematic "https://github.com/beakerbreaker17025/openmontage/blob/main/remotion-composer/src/CinematicRenderer.tsx"
click node_collage "https://github.com/beakerbreaker17025/openmontage/blob/main/remotion-composer/src/CollageBurst.tsx"
click node_caption_overlay "https://github.com/beakerbreaker17025/openmontage/blob/main/remotion-composer/src/components/CaptionOverlay.tsx"
click node_hero_title "https://github.com/beakerbreaker17025/openmontage/blob/main/remotion-composer/src/components/HeroTitle.tsx"
click node_particle_overlay "https://github.com/beakerbreaker17025/openmontage/blob/main/remotion-composer/src/components/ParticleOverlay.tsx"
click node_screenshot_scene "https://github.com/beakerbreaker17025/openmontage/blob/main/remotion-composer/src/components/ScreenshotScene.tsx"
click node_resolve_asset "https://github.com/beakerbreaker17025/openmontage/blob/main/remotion-composer/src/lib/resolveAsset.ts"
click node_backlot_server "https://github.com/beakerbreaker17025/openmontage/blob/main/backlot/server.py"
click node_backlot_state "https://github.com/beakerbreaker17025/openmontage/blob/main/backlot/state.py"
click node_backlot_board "https://github.com/beakerbreaker17025/openmontage/blob/main/backlot/ui/board.js"

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_reference_analysis,node_tools_analysis_helpers,node_media_review,node_pipeline_config toneBlue
class node_stock_retrieval,node_stock_sources,node_video_generation,node_image_generation,node_audio_production,node_avatar_lipsync,node_subtitles,node_editing toneAmber
class node_renderer_root,node_explainer,node_cinematic,node_collage,node_caption_overlay,node_hero_title,node_particle_overlay,node_screenshot_scene,node_resolve_asset,node_video_result toneMint
class node_backlot_server,node_backlot_state,node_backlot_board,node_project_files toneRose
class node_tool_registry,node_shared_tools,node_events_cache,node_asset_cache,node_creator,node_agent toneIndigo
```

## Components

### Analysis and planning

- [Reference analysis](https://github.com/beakerbreaker17025/openmontage/blob/main/tools/analysis/video_analyzer.py): `tools/analysis/video_analyzer.py`
- [Analysis helpers](https://github.com/beakerbreaker17025/openmontage/blob/main/tools/analysis/frame_sampler.py): `tools/analysis/frame_sampler.py`
- [Source media review](https://github.com/beakerbreaker17025/openmontage/blob/main/lib/source_media_review.py): `lib/source_media_review.py`
- [Pipeline definitions](https://github.com/beakerbreaker17025/openmontage/blob/main/lib/pipeline_loader.py): `lib/pipeline_loader.py`

### Media production

- [Stock clip retrieval](https://github.com/beakerbreaker17025/openmontage/blob/main/tools/video/direct_clip_search.py): `tools/video/direct_clip_search.py`
- [Stock source adapters](https://github.com/beakerbreaker17025/openmontage/blob/main/tools/video/stock_sources/__init__.py): `tools/video/stock_sources/__init__.py`
- [Video generation](https://github.com/beakerbreaker17025/openmontage/blob/main/tools/video/_wan_engine.py): `tools/video/_wan_engine.py`
- [Image generation](https://github.com/beakerbreaker17025/openmontage/blob/main/tools/graphics/image_selector.py): `tools/graphics/image_selector.py`
- [Audio production](https://github.com/beakerbreaker17025/openmontage/tree/main/tools/audio): `tools/audio`
- [Avatar and lip sync](https://github.com/beakerbreaker17025/openmontage/blob/main/tools/avatar/kling_lip_sync.py): `tools/avatar/kling_lip_sync.py`
- [Subtitle generation](https://github.com/beakerbreaker17025/openmontage/blob/main/tools/subtitle/subtitle_gen.py): `tools/subtitle/subtitle_gen.py`
- [Video editing](https://github.com/beakerbreaker17025/openmontage/blob/main/tools/video/video_compose.py): `tools/video/video_compose.py`

### Composition and review

- [Composition registry](https://github.com/beakerbreaker17025/openmontage/blob/main/remotion-composer/src/Root.tsx): `remotion-composer/src/Root.tsx`
- [Explainer renderer](https://github.com/beakerbreaker17025/openmontage/blob/main/remotion-composer/src/Explainer.tsx): `remotion-composer/src/Explainer.tsx`
- [Cinematic renderer](https://github.com/beakerbreaker17025/openmontage/blob/main/remotion-composer/src/CinematicRenderer.tsx): `remotion-composer/src/CinematicRenderer.tsx`
- [Collage renderer](https://github.com/beakerbreaker17025/openmontage/blob/main/remotion-composer/src/CollageBurst.tsx): `remotion-composer/src/CollageBurst.tsx`
- [Caption overlay](https://github.com/beakerbreaker17025/openmontage/blob/main/remotion-composer/src/components/CaptionOverlay.tsx): `remotion-composer/src/components/CaptionOverlay.tsx`
- [Hero title](https://github.com/beakerbreaker17025/openmontage/blob/main/remotion-composer/src/components/HeroTitle.tsx): `remotion-composer/src/components/HeroTitle.tsx`
- [Particle overlay](https://github.com/beakerbreaker17025/openmontage/blob/main/remotion-composer/src/components/ParticleOverlay.tsx): `remotion-composer/src/components/ParticleOverlay.tsx`
- [Screenshot scene](https://github.com/beakerbreaker17025/openmontage/blob/main/remotion-composer/src/components/ScreenshotScene.tsx): `remotion-composer/src/components/ScreenshotScene.tsx`
- [Asset resolver](https://github.com/beakerbreaker17025/openmontage/blob/main/remotion-composer/src/lib/resolveAsset.ts): `remotion-composer/src/lib/resolveAsset.ts`
- **Rendered video**

### Backlot board

- [Backlot server](https://github.com/beakerbreaker17025/openmontage/blob/main/backlot/server.py): `backlot/server.py`
- [Project state](https://github.com/beakerbreaker17025/openmontage/blob/main/backlot/state.py): `backlot/state.py`
- [Storyboard board](https://github.com/beakerbreaker17025/openmontage/blob/main/backlot/ui/board.js): `backlot/ui/board.js`
- **Project files**

### Shared tool runtime

- [Tool registry](https://github.com/beakerbreaker17025/openmontage/blob/main/tools/tool_registry.py): `tools/tool_registry.py`
- [Tool contracts](https://github.com/beakerbreaker17025/openmontage/blob/main/tools/base_tool.py): `tools/base_tool.py`
- [Events and cache](https://github.com/beakerbreaker17025/openmontage/blob/main/lib/events.py): `lib/events.py`
- [Asset cache](https://github.com/beakerbreaker17025/openmontage/blob/main/lib/asset_cache.py): `lib/asset_cache.py`

### Other components

- **Creator**
- **Production agent**

## Connections

- Creator → Production agent: requests production (evidence: `README.md`)
- Production agent → Reference analysis: analyzes reference (evidence: `README.md`)
- Production agent → Source media review: reviews media
- Production agent → Pipeline definitions: loads pipeline
- Production agent → Tool registry: selects tools
- Reference analysis → Analysis helpers: delegates analysis (evidence: `tools/analysis/video_analyzer.py`)
- Production agent → Stock clip retrieval: retrieves footage (evidence: `README.md`)
- Production agent → Video generation: generates motion (evidence: `README.md`)
- Production agent → Image generation: generates images (evidence: `README.md`)
- Production agent → Audio production: creates soundtrack (evidence: `README.md`)
- Production agent → Avatar and lip sync: creates lip sync
- Production agent → Subtitle generation: adds captions
- Production agent → Video editing: edits timeline (evidence: `README.md`)
- Stock clip retrieval → Stock source adapters: queries adapters (evidence: `tools/video/direct_clip_search.py`)
- Tool contracts → Events and cache: emits events (evidence: `tools/base_tool.py`)
- Tool contracts → Asset cache: caches results (evidence: `tools/base_tool.py`)
- Composition registry → Explainer renderer: registers renderer (evidence: `remotion-composer/src/Root.tsx`)
- Composition registry → Cinematic renderer: registers renderer (evidence: `remotion-composer/src/Root.tsx`)
- Composition registry → Collage renderer: registers renderer (evidence: `remotion-composer/src/Root.tsx`)
- Composition registry → Caption overlay: uses overlay (evidence: `remotion-composer/src/Root.tsx`)
- Composition registry → Hero title: uses title (evidence: `remotion-composer/src/Root.tsx`)
- Composition registry → Rendered video: renders video (evidence: `README.md`)
- Explainer renderer → Caption overlay: renders overlay (evidence: `remotion-composer/src/Explainer.tsx`)
- Explainer renderer → Hero title: renders title (evidence: `remotion-composer/src/Explainer.tsx`)
- Cinematic renderer → Particle overlay: uses overlay
- Screenshot scene → Asset resolver: resolves media (evidence: `remotion-composer/src/components/ScreenshotScene.tsx`)
- Backlot server → Project state: reads state (evidence: `backlot/server.py`)
- Backlot server → Project files: watches changes (evidence: `backlot/server.py`)
- Storyboard board → Backlot server: fetches board data
