# palmier-io/palmier-pro architecture

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

- Interactive diagram: https://gitdiagram.com/palmier-io/palmier-pro
- Repository: https://github.com/palmier-io/palmier-pro

## Overview

Palmier Pro is a single macOS Swift application organized as a set of feature modules under one app target. It is a native video editor, not a web app, and it runs locally on Apple Silicon with a UI built from SwiftUI/AppKit-style views, view models, and window controllers.

The top-level app shell lives in `App/` and is responsible for lifecycle, global app state, notifications, menu wiring, and update handling. `main.swift` boots the app, `AppDelegate` and `AppState` coordinate startup and shared state, and `Updater` plus `Changelog` manage in-app release/update behavior.

The core user workflow is project-centric. `Project/` handles home/welcome screens, project cards, registry, sample projects, and project settings mismatch handling. `Models/VideoProject.swift` and related model types define the persisted project structure that the editor, exporter, agent, and MCP server all operate on.

The main editor surface is split into three major interaction zones: the timeline, preview, and inspector/media side panels. `Editor/`, `Timeline/`, `Inspector/`, `MediaPanel/`, `Preview/`, and `Toolbar/` together form the editing workspace, with `EditorViewModel.swift` acting as the central state coordinator for tracks, clips, keyframes, clipboard, ripple edits, linking, relinking, project settings, and preview tabs.

The timeline is where most editing state changes happen. Components such as `TimelineView`, `ClipRenderer`, `SnapEngine`, `OverwriteEngine`, and `RippleEngine` handle clip placement, snapping, drag state, range selection, and destructive vs. ripple-style edits. The preview subsystem renders the current timeline state through `CompositionBuilder`, `TimelineRenderer`, `VideoEngine`, and overlay views for crop/transform/text interactions.

Media is modeled separately from timeline edits. `Models/MediaAsset`, `MediaFolder`, `MediaManifest`, and `MediaResolver` describe imported content and how it is found on disk; `MediaPanel/` provides browsing, search, drag-and-drop, and folder tiles; `StoragePane` and related settings govern local storage behavior. This boundary keeps asset management distinct from timeline composition.

AI generation is a first-class subsystem. `Generation/` contains model catalogs, cost estimation, backend selection, and submission types for image, audio, music, and video generation. `GenerationService` and the submission types bridge the editor UI to a backend, while `Generation/Edit` covers AI-assisted edit actions such as trim extraction and submitter logic. The README makes clear that the generative processing itself is the closed-source part of the product.

The in-app agent is another major subsystem. `Agent/` provides the chat UI, session storage, mention handling, prompt/tool orchestration, and client implementations. It supports two external agent backends through `AnthropicClient` and `PalmierClient`, and the agent panel is wired into editor/project state so it can manipulate the same timeline the user sees.

Palmier Pro exposes its local editor to external agents through an MCP server boundary. `Agent/MCP/MCPHTTPServer.swift` and `MCPService.swift` serve an HTTP MCP endpoint on `127.0.0.1:19789/mcp`, and the app bundles a Claude Desktop extension manifest under `Resources/MCPB` plus a separate `mcpb/server` package. This means external tools like Claude Code, Codex, Cursor, or Claude Desktop can call into the app while it is running.

The agent’s capabilities are implemented as explicit tools rather than free-form access. `Agent/Tools/` defines the tool schema, instructions, results, and concrete tool executors for searches, captions, folders, timeline inspection, text extraction, import/generate operations, and short ID helpers. These tools operate on editor/project state and are the bridge between natural-language requests and deterministic timeline mutations.

Search and transcription are separate local intelligence layers. `Search/` builds an embedding-based visual search index using a model downloader, frame sampler, visual embedder, and query engine; `Transcription/` provides transcript caching and transcript search. These systems feed both the media panel and the agent/tooling so clips can be found semantically, not just by filename.

Export is a distinct output boundary. `Export/` includes a project exporter and XML exporter, and tests indicate round-tripping plus composition generation are important guarantees. This suggests the app can serialize the project for interchange and also render or package it for downstream video workflows.

Account and backend integration are isolated from the editor core. `Account/` manages login, credit summaries, top-off, backend configuration, and identity/account UI; `GenerationBackend` and the agent clients are the main consumers of this configuration. In practice, the free editor path is local-first, while AI generation requires authenticated backend access.

Cross-cutting support lives in utility and infrastructure modules. `Utilities/` provides disk caching, keychain storage, logging, async throttling, formatting, and bundled font support; `Telemetry/` tracks usage; `Help/` and `Settings/` expose onboarding, shortcuts, privacy, model, storage, notification, and agent configuration. `scripts/`, `mcpb/`, and `.github/workflows/ci.yml` show the project is built and packaged as a distributable macOS app with CI, release automation, and MCP desktop-extension packaging.

Overall, the architecture is a local native editor with three major external boundaries: a closed generative AI backend, a local MCP server for agent integration, and the user’s local filesystem/media library. Most feature modules feed one shared project/timeline state, which is the central data model that everything else reads from or mutates.

Main entry points: [`Sources/PalmierPro/Editor/ViewModel/EditorViewModel.swift`](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Editor/ViewModel/EditorViewModel.swift) (Editor state), [`Sources/PalmierPro/Project/VideoProject.swift`](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Project/VideoProject.swift) (Video project), [`Sources/PalmierPro/Agent/Tools/ToolExecutor.swift`](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Agent/Tools/ToolExecutor.swift) (Agent tools), [`Sources/PalmierPro/Agent/AgentService.swift`](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Agent/AgentService.swift) (Agent)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_group_app["App shell"]
  node_node_main(("App entry<br/>swift entrypoint<br/>[main.swift]"))
  node_node_delegate["App delegate<br/>lifecycle<br/>[AppDelegate.swift]"]
  node_node_state[("App state<br/>shared state<br/>[AppState.swift]")]
  node_node_menu["Main menu<br/>menu wiring<br/>[MainMenu.swift]"]
  node_node_updater["Updater<br/>release update<br/>[Updater.swift]"]
  node_node_changelog["Changelog<br/>release notes<br/>[Changelog.swift]"]
end

subgraph group_group_project["Projects"]
  node_node_project_registry[("Project registry<br/>project index")]
  node_node_video_project["Video project<br/>project model<br/>[VideoProject.swift]"]
  node_node_home["Home screen<br/>project ui<br/>[HomeView.swift]"]
end

subgraph group_group_editor["Editor workspace"]
  node_node_editor_vm[("Editor state<br/>view model")]
  node_node_editor_view["Editor shell<br/>workspace ui<br/>[EditorView.swift]"]
  node_node_timeline["Timeline<br/>edit surface<br/>[TimelineView.swift]"]
  node_node_clip_engines{{"Edit engines<br/>timeline logic"}}
  node_node_inspector["Inspector<br/>properties panel"]
end

subgraph group_group_media["Media and preview"]
  node_node_preview["Preview<br/>render surface<br/>[PreviewView.swift]"]
  node_node_preview_engine{{"Render pipeline<br/>preview pipeline"}}
  node_node_media_panel["Media panel<br/>asset browser"]
  node_node_media_model["Media model<br/>asset model<br/>[MediaAsset.swift]"]
  node_node_search["Visual search<br/>search index"]
  node_node_transcription["Transcription<br/>caption search"]
end

subgraph group_group_ai["AI systems"]
  node_node_generation["Generation<br/>ai backend"]
  node_node_generation_edit["AI edits<br/>edit generation"]
  node_node_agent["Agent<br/>chat orchestration<br/>[AgentService.swift]"]
  node_node_mcp["MCP server<br/>local integration<br/>[MCPService.swift]"]
  node_node_tools{{"Agent tools<br/>tooling bridge<br/>[ToolExecutor.swift]"}}
end

subgraph group_group_support["Support"]
  node_node_account["Account<br/>billing/auth"]
  node_node_export["Export<br/>output boundary"]
  node_node_settings["Settings<br/>preferences<br/>[SettingsView.swift]"]
  node_node_telemetry["Telemetry<br/>usage tracking<br/>[Telemetry.swift]"]
  node_node_utils["Utilities<br/>infrastructure<br/>[Log.swift]"]
end

node_node_main -->|"launches"| node_node_delegate
node_node_delegate -->|"initializes"| node_node_state
node_node_delegate -->|"wires"| node_node_menu
node_node_delegate -->|"checks updates"| node_node_updater
node_node_updater -->|"reads"| node_node_changelog
node_node_state -->|"tracks"| node_node_project_registry
node_node_project_registry -->|"loads"| node_node_video_project
node_node_home -->|"surfaces"| node_node_project_registry
node_node_home -->|"creates"| node_node_video_project
node_node_editor_view -->|"binds"| node_node_editor_vm
node_node_editor_vm -->|"mutates"| node_node_video_project
node_node_editor_vm -->|"coordinates"| node_node_timeline
node_node_editor_vm -->|"drives"| node_node_inspector
node_node_editor_vm -->|"feeds"| node_node_preview
node_node_editor_vm -->|"connects"| node_node_media_panel
node_node_timeline -->|"uses"| node_node_clip_engines
node_node_clip_engines -->|"rewrites"| node_node_video_project
node_node_preview -->|"renders through"| node_node_preview_engine
node_node_preview_engine -->|"reads"| node_node_video_project
node_node_media_panel -->|"browses"| node_node_media_model
node_node_search -->|"powers"| node_node_media_panel
node_node_search -->|"caches"| node_node_utils
node_node_transcription -->|"feeds captions"| node_node_media_panel
node_node_generation -->|"uses backend"| node_node_account
node_node_generation_edit -->|"submits"| node_node_generation
node_node_agent -->|"orchestrates"| node_node_tools
node_node_agent -->|"requests"| node_node_generation
node_node_agent -->|"operates on"| node_node_video_project
node_node_mcp -->|"exposes"| node_node_agent
node_node_mcp -->|"invokes"| node_node_tools
node_node_tools -->|"mutates"| node_node_editor_vm
node_node_tools -->|"queries"| node_node_search
node_node_tools -->|"queries"| node_node_transcription
node_node_export -->|"serializes"| node_node_video_project
node_node_settings -->|"configures"| node_node_account
node_node_settings -->|"configures"| node_node_generation
node_node_telemetry -->|"observes"| node_node_agent
node_node_telemetry -->|"observes"| node_node_generation
node_node_utils -->|"supports"| node_node_account

click node_node_main "https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/App/main.swift"
click node_node_delegate "https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/App/AppDelegate.swift"
click node_node_state "https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/App/AppState.swift"
click node_node_menu "https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/App/MainMenu.swift"
click node_node_updater "https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/App/Updater.swift"
click node_node_changelog "https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/App/Changelog.swift"
click node_node_project_registry "https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Project/ProjectRegistry.swift"
click node_node_video_project "https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Project/VideoProject.swift"
click node_node_home "https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Project/HomeView.swift"
click node_node_editor_vm "https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Editor/ViewModel/EditorViewModel.swift"
click node_node_editor_view "https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Editor/EditorView.swift"
click node_node_timeline "https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Timeline/TimelineView.swift"
click node_node_clip_engines "https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Editor/OverwriteEngine.swift"
click node_node_preview "https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Preview/PreviewView.swift"
click node_node_preview_engine "https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Preview/CompositionBuilder.swift"
click node_node_inspector "https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Inspector/InspectorView.swift"
click node_node_media_panel "https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/MediaPanel/MediaPanelView.swift"
click node_node_media_model "https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Models/MediaAsset.swift"
click node_node_search "https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Search/SearchIndexCoordinator.swift"
click node_node_transcription "https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Transcription/Transcription.swift"
click node_node_generation "https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Generation/GenerationService.swift"
click node_node_generation_edit "https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Generation/Edit/EditSubmitter.swift"
click node_node_agent "https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Agent/AgentService.swift"
click node_node_mcp "https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Agent/MCP/MCPService.swift"
click node_node_tools "https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Agent/Tools/ToolExecutor.swift"
click node_node_account "https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Account/AccountService.swift"
click node_node_export "https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Export/ExportService.swift"
click node_node_settings "https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Settings/SettingsView.swift"
click node_node_telemetry "https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Telemetry/Telemetry.swift"
click node_node_utils "https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Utilities/Log.swift"

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_node_main,node_node_delegate,node_node_state,node_node_menu,node_node_updater,node_node_changelog toneBlue
class node_node_project_registry,node_node_video_project,node_node_home toneAmber
class node_node_editor_vm,node_node_editor_view,node_node_timeline,node_node_clip_engines,node_node_inspector toneMint
class node_node_preview,node_node_preview_engine,node_node_media_panel,node_node_media_model,node_node_search,node_node_transcription toneRose
class node_node_generation,node_node_generation_edit,node_node_agent,node_node_mcp,node_node_tools toneIndigo
class node_node_account,node_node_export,node_node_settings,node_node_telemetry,node_node_utils toneTeal
```

## Components

### App shell

Lifecycle, global state, menus, updates, and app startup.

- [App entry](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/App/main.swift): swift entrypoint · Bootstraps the macOS application. · `Sources/PalmierPro/App/main.swift`
- [App delegate](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/App/AppDelegate.swift): lifecycle · Coordinates startup and lifecycle events. · `Sources/PalmierPro/App/AppDelegate.swift`
- [App state](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/App/AppState.swift): shared state · Global application state and wiring. · `Sources/PalmierPro/App/AppState.swift`
- [Main menu](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/App/MainMenu.swift): menu wiring · Builds app menu commands and actions. · `Sources/PalmierPro/App/MainMenu.swift`
- [Updater](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/App/Updater.swift): release update · Handles in-app update checks and application of releases. · `Sources/PalmierPro/App/Updater.swift`
- [Changelog](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/App/Changelog.swift): release notes · Loads and presents release history. · `Sources/PalmierPro/App/Changelog.swift`

### Projects

Welcome flow and project registry around the persisted project model.

- [Project registry](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Project/ProjectRegistry.swift): project index · Tracks projects and home screen entries. · `Sources/PalmierPro/Project/ProjectRegistry.swift`
- [Video project](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Project/VideoProject.swift): project model · Persisted project structure shared across editor, export, agent, and MCP. · `Sources/PalmierPro/Project/VideoProject.swift`
- [Home screen](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Project/HomeView.swift): project ui · Welcome, project cards, sample projects, and mismatch handling. · `Sources/PalmierPro/Project/HomeView.swift`

### Editor workspace

Core editing surface and timeline mutation logic.

- [Editor state](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Editor/ViewModel/EditorViewModel.swift): view model · Central coordinator for timeline, clips, keyframes, clipboard, ripple, linking, and preview tabs. · `Sources/PalmierPro/Editor/ViewModel/EditorViewModel.swift`
- [Editor shell](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Editor/EditorView.swift): workspace ui · Main editor surface and window framing. · `Sources/PalmierPro/Editor/EditorView.swift`
- [Timeline](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Timeline/TimelineView.swift): edit surface · Clip placement, snapping, drag state, and range selection. · `Sources/PalmierPro/Timeline/TimelineView.swift`
- [Edit engines](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Editor/OverwriteEngine.swift): timeline logic · Overwrite and ripple edit behavior for destructive and non-destructive changes. · `Sources/PalmierPro/Editor/OverwriteEngine.swift`
- [Inspector](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Inspector/InspectorView.swift): properties panel · Text, keyframes, generation references, and clip property editing. · `Sources/PalmierPro/Inspector/InspectorView.swift`

### Media and preview

Asset browsing, search, transcription, and playback composition.

- [Preview](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Preview/PreviewView.swift): render surface · Composition building, timeline rendering, and overlay interaction. · `Sources/PalmierPro/Preview/PreviewView.swift`
- [Render pipeline](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Preview/CompositionBuilder.swift): preview pipeline · Builds compositions, normalizes media, and renders the current timeline state. · `Sources/PalmierPro/Preview/CompositionBuilder.swift`
- [Media panel](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/MediaPanel/MediaPanelView.swift): asset browser · Browsing, search, drag-and-drop, captions, and folder tiles. · `Sources/PalmierPro/MediaPanel/MediaPanelView.swift`
- [Media model](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Models/MediaAsset.swift): asset model · Imported assets, folders, manifests, and on-disk resolution. · `Sources/PalmierPro/Models/MediaAsset.swift`
- [Visual search](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Search/SearchIndexCoordinator.swift): search index · Embedding-based local semantic search over media frames. · `Sources/PalmierPro/Search/SearchIndexCoordinator.swift`
- [Transcription](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Transcription/Transcription.swift): caption search · Transcript caching and transcript search for media and agent tools. · `Sources/PalmierPro/Transcription/Transcription.swift`

### AI systems

Generation and agent subsystems, including MCP exposure.

- [Generation](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Generation/GenerationService.swift): ai backend · Model catalog, cost estimation, backend selection, and submission types. · `Sources/PalmierPro/Generation/GenerationService.swift`
- [AI edits](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Generation/Edit/EditSubmitter.swift): edit generation · AI-assisted edit actions such as trim extraction and submitter orchestration. · `Sources/PalmierPro/Generation/Edit/EditSubmitter.swift`
- [Agent](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Agent/AgentService.swift): chat orchestration · Chat UI, sessions, mentions, prompt/tool orchestration, and client backends. · `Sources/PalmierPro/Agent/AgentService.swift`
- [MCP server](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Agent/MCP/MCPService.swift): local integration · Local HTTP MCP endpoint and desktop extension packaging. · `Sources/PalmierPro/Agent/MCP/MCPService.swift`
- [Agent tools](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Agent/Tools/ToolExecutor.swift): tooling bridge · Explicit tools that inspect and mutate editor state deterministically. · `Sources/PalmierPro/Agent/Tools/ToolExecutor.swift`

### Support

Cross-cutting settings, account, export, telemetry, and utilities.

- [Account](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Account/AccountService.swift): billing/auth · Login, credits, top-off, backend configuration, and identity UI. · `Sources/PalmierPro/Account/AccountService.swift`
- [Export](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Export/ExportService.swift): output boundary · Project exporter and XML export for interchange and downstream workflows. · `Sources/PalmierPro/Export/ExportService.swift`
- [Settings](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Settings/SettingsView.swift): preferences · Application settings panes for account, agent, models, privacy, storage, and notifications. · `Sources/PalmierPro/Settings/SettingsView.swift`
- [Telemetry](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Telemetry/Telemetry.swift): usage tracking · Cross-cutting usage instrumentation. · `Sources/PalmierPro/Telemetry/Telemetry.swift`
- [Utilities](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Utilities/Log.swift): infrastructure · Caching, keychain, logging, formatting, and bundled fonts. · `Sources/PalmierPro/Utilities/Log.swift`

## Connections

- App entry → App delegate: launches · App entry hands off lifecycle control.
- App delegate → App state: initializes · Creates and maintains shared app state.
- App delegate → Main menu: wires · Connects app commands and menu actions.
- App delegate → Updater: checks updates · Startup and foreground flows trigger update handling.
- Updater → Changelog: reads · Uses release notes for update presentation.
- App state → Project registry: tracks · Holds project-level navigation and selection state.
- Project registry → Video project: loads · Registry manages persisted project records.
- Home screen → Project registry: surfaces · Home UI presents the project registry.
- Home screen → Video project: creates · Welcome and sample flows open or create projects.
- Editor shell → Editor state: binds · Editor UI is driven by the central view model.
- Editor state → Video project: mutates · View model reads and updates the shared project model.
- Editor state → Timeline: coordinates · Timeline interactions flow through editor state.
- Editor state → Inspector: drives · Inspector state derives from current selection and edits.
- Editor state → Preview: feeds · Preview reflects current timeline and selection state.
- Editor state → Media panel: connects · Media browser actions affect the editor workspace.
- Timeline → Edit engines: uses · Timeline gestures dispatch to edit engines.
- Edit engines → Video project: rewrites · Edit engines transform the persisted timeline/project data.
- Preview → Render pipeline: renders through · Preview UI delegates composition and frame generation.
- Render pipeline → Video project: reads · Rendering is built from project timeline state.
- Media panel → Media model: browses · Media browser is organized around imported assets and folders.
- Visual search → Media panel: powers · Semantic search feeds the media browser.
- Visual search → Utilities: caches · Search relies on shared local caching and loading utilities.
- Transcription → Media panel: feeds captions · Transcript data supports media browsing and caption workflows.
- Generation → Account: uses backend · Authenticated backend selection and credits inform generation.
- AI edits → Generation: submits · AI edit actions are prepared and sent through generation services.
- Agent → Agent tools: orchestrates · Agent chat uses explicit tools for deterministic actions.
- Agent → Generation: requests · Agent can invoke generation-backed capabilities.
- Agent → Video project: operates on · Agent manipulates the same project and timeline as the editor.
- MCP server → Agent: exposes · MCP endpoint bridges external clients into the app.
- MCP server → Agent tools: invokes · External tool calls execute through the tool layer.
- Agent tools → Editor state: mutates · Tools coordinate with editor state for timeline changes.
- Agent tools → Visual search: queries · Tooling can perform semantic search over media.
- Agent tools → Transcription: queries · Tooling can access transcripts and transcript search.
- Export → Video project: serializes · Export reads the project model for interchange/output.
- Settings → Account: configures · Settings exposes account and backend preferences.
- Settings → Generation: configures · Model and generation preferences are surfaced in settings.
- Telemetry → Agent: observes · Usage tracking captures agent activity.
- Telemetry → Generation: observes · Usage tracking captures generation usage.
- Utilities → Account: supports · Shared utilities back secure storage and formatting.
