# olive-editor/olive architecture

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

## Overview

Olive is a desktop non-linear video editor. Its main user workflow is to import media, arrange and modify clips on a sequence timeline, preview the composition, then render and export a finished file. The tree also shows project save/load, audio monitoring, color management, and background conforming and task management as supporting capabilities. Edges are limited to wiring shown in sampled source; several domain components are identified from their paths, but their internal calls were not sampled.

Main entry points: [`app/node/project.cpp`](https://github.com/olive-editor/olive/blob/master/app/node/project.cpp) (Project model), [`app/task/taskmanager.h`](https://github.com/olive-editor/olive/blob/master/app/task/taskmanager.h) (Background task manager), [`app/task/export/export.cpp`](https://github.com/olive-editor/olive/blob/master/app/task/export/export.cpp) (Export task), [`app/render/renderer.cpp`](https://github.com/olive-editor/olive/blob/master/app/render/renderer.cpp) (Renderer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Editing interface"]
  node_project_panel["Project panel<br/>[project.cpp]"]
  node_timeline_panel["Timeline panel<br/>[timeline.cpp]"]
  node_viewer_panel["Viewer panel<br/>[viewer.cpp]"]
  node_sequence_viewer["Sequence viewer<br/>[sequenceviewer.cpp]"]
  node_task_panel["Task manager panel<br/>[taskmanager.cpp]"]
end

subgraph group_project["Project and media"]
  node_project_model["Project model<br/>[project.cpp]"]
  node_footage["Footage assets<br/>[footage.cpp]"]
  node_import_task["Media import<br/>[import.cpp]"]
  node_project_serializer["Project serialization<br/>[serializer.cpp]"]
  node_decoder["Media decoding<br/>[decoder.cpp]"]
  node_conform["Audio conforming<br/>[conformmanager.cpp]"]
end

subgraph group_composition["Timeline composition"]
  node_sequence["Sequence<br/>[sequence.cpp]"]
  node_tracks["Tracks and blocks<br/>[track.cpp]"]
  node_effects["Effects and transforms<br/>[factory.cpp]"]
end

subgraph group_render["Rendering and export"]
  node_color_manager["Color management<br/>[colormanager.cpp]"]
  node_render_manager["Render manager<br/>[rendermanager.cpp]"]
  node_renderer["Renderer<br/>[renderer.cpp]"]
  node_export_task["Export task<br/>[export.cpp]"]
  node_encoder["Media encoding<br/>[encoder.cpp]"]
end

subgraph group_runtime["Runtime services"]
  node_main["Application startup<br/>[main.cpp]"]
  node_disk_cache[("Disk cache<br/>[diskmanager.cpp]")]
  node_audio_manager["Audio monitoring<br/>[audiomanager.cpp]"]
  node_preview_audio["Preview audio device"]
  node_task_manager["Background task manager<br/>[taskmanager.h]"]
end

node_user(("Editor"))
node_media_files["Source media"]
node_export_file["Exported media"]

node_user -->|"manages media"| node_project_panel
node_user -->|"edits sequence"| node_timeline_panel
node_user -->|"previews"| node_viewer_panel
node_media_files -->|"source media"| node_import_task
node_import_task -->|"imports assets"| node_project_model
node_project_model -->|"tracks assets"| node_footage
node_project_model -->|"serializes project"| node_project_serializer
node_project_model -->|"owns sequence"| node_sequence
node_sequence -->|"contains timeline"| node_tracks
node_tracks -->|"composes nodes"| node_effects
node_footage -->|"decodes media"| node_decoder
node_conform -->|"queues conform task"| node_task_manager
node_conform -->|"writes conform files"| node_disk_cache
node_viewer_panel -->|"hosts viewer"| node_sequence_viewer
node_audio_manager -->|"reads preview audio"| node_preview_audio
node_audio_manager -->|"encodes recordings"| node_encoder
node_render_manager -->|"requests rendering"| node_renderer
node_renderer -->|"uses color transforms"| node_color_manager
node_export_task -->|"renders frames"| node_renderer
node_export_task -->|"encodes export"| node_encoder
node_export_task -->|"queues export"| node_task_manager
node_encoder -->|"writes encoded media"| node_export_file
node_task_manager -->|"reports task events"| node_task_panel
node_task_panel -->|"cancels tasks"| node_task_manager

click node_main "https://github.com/olive-editor/olive/blob/master/app/main.cpp"
click node_project_panel "https://github.com/olive-editor/olive/blob/master/app/panel/project/project.cpp"
click node_timeline_panel "https://github.com/olive-editor/olive/blob/master/app/panel/timeline/timeline.cpp"
click node_viewer_panel "https://github.com/olive-editor/olive/blob/master/app/panel/viewer/viewer.cpp"
click node_sequence_viewer "https://github.com/olive-editor/olive/blob/master/app/panel/sequenceviewer/sequenceviewer.cpp"
click node_project_model "https://github.com/olive-editor/olive/blob/master/app/node/project.cpp"
click node_footage "https://github.com/olive-editor/olive/blob/master/app/node/project/footage/footage.cpp"
click node_import_task "https://github.com/olive-editor/olive/blob/master/app/task/project/import/import.cpp"
click node_project_serializer "https://github.com/olive-editor/olive/blob/master/app/node/project/serializer/serializer.cpp"
click node_sequence "https://github.com/olive-editor/olive/blob/master/app/node/project/sequence/sequence.cpp"
click node_tracks "https://github.com/olive-editor/olive/blob/master/app/node/output/track/track.cpp"
click node_effects "https://github.com/olive-editor/olive/blob/master/app/node/factory.cpp"
click node_decoder "https://github.com/olive-editor/olive/blob/master/app/codec/decoder.cpp"
click node_conform "https://github.com/olive-editor/olive/blob/master/app/codec/conformmanager.cpp"
click node_disk_cache "https://github.com/olive-editor/olive/blob/master/app/render/diskmanager.cpp"
click node_color_manager "https://github.com/olive-editor/olive/blob/master/app/node/color/colormanager/colormanager.cpp"
click node_render_manager "https://github.com/olive-editor/olive/blob/master/app/render/rendermanager.cpp"
click node_renderer "https://github.com/olive-editor/olive/blob/master/app/render/renderer.cpp"
click node_export_task "https://github.com/olive-editor/olive/blob/master/app/task/export/export.cpp"
click node_encoder "https://github.com/olive-editor/olive/blob/master/app/codec/encoder.cpp"
click node_audio_manager "https://github.com/olive-editor/olive/blob/master/app/audio/audiomanager.cpp"
click node_preview_audio "https://github.com/olive-editor/olive/blob/master/app/render/previewaudiodevice.cpp"
click node_task_manager "https://github.com/olive-editor/olive/blob/master/app/task/taskmanager.h"
click node_task_panel "https://github.com/olive-editor/olive/blob/master/app/panel/taskmanager/taskmanager.cpp"

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_project_panel,node_timeline_panel,node_viewer_panel,node_sequence_viewer,node_task_panel toneBlue
class node_project_model,node_footage,node_import_task,node_project_serializer,node_decoder,node_conform toneAmber
class node_sequence,node_tracks,node_effects toneMint
class node_color_manager,node_render_manager,node_renderer,node_export_task,node_encoder toneRose
class node_main,node_disk_cache,node_audio_manager,node_preview_audio,node_task_manager,node_user,node_media_files,node_export_file toneIndigo
```

## Components

### Editing interface

- [Project panel](https://github.com/olive-editor/olive/blob/master/app/panel/project/project.cpp): `app/panel/project/project.cpp`
- [Timeline panel](https://github.com/olive-editor/olive/blob/master/app/panel/timeline/timeline.cpp): `app/panel/timeline/timeline.cpp`
- [Viewer panel](https://github.com/olive-editor/olive/blob/master/app/panel/viewer/viewer.cpp): `app/panel/viewer/viewer.cpp`
- [Sequence viewer](https://github.com/olive-editor/olive/blob/master/app/panel/sequenceviewer/sequenceviewer.cpp): `app/panel/sequenceviewer/sequenceviewer.cpp`
- [Task manager panel](https://github.com/olive-editor/olive/blob/master/app/panel/taskmanager/taskmanager.cpp): `app/panel/taskmanager/taskmanager.cpp`

### Project and media

- [Project model](https://github.com/olive-editor/olive/blob/master/app/node/project.cpp): `app/node/project.cpp`
- [Footage assets](https://github.com/olive-editor/olive/blob/master/app/node/project/footage/footage.cpp): `app/node/project/footage/footage.cpp`
- [Media import](https://github.com/olive-editor/olive/blob/master/app/task/project/import/import.cpp): `app/task/project/import/import.cpp`
- [Project serialization](https://github.com/olive-editor/olive/blob/master/app/node/project/serializer/serializer.cpp): `app/node/project/serializer/serializer.cpp`
- [Media decoding](https://github.com/olive-editor/olive/blob/master/app/codec/decoder.cpp): `app/codec/decoder.cpp`
- [Audio conforming](https://github.com/olive-editor/olive/blob/master/app/codec/conformmanager.cpp): `app/codec/conformmanager.cpp`

### Timeline composition

- [Sequence](https://github.com/olive-editor/olive/blob/master/app/node/project/sequence/sequence.cpp): `app/node/project/sequence/sequence.cpp`
- [Tracks and blocks](https://github.com/olive-editor/olive/blob/master/app/node/output/track/track.cpp): `app/node/output/track/track.cpp`
- [Effects and transforms](https://github.com/olive-editor/olive/blob/master/app/node/factory.cpp): `app/node/factory.cpp`

### Rendering and export

- [Color management](https://github.com/olive-editor/olive/blob/master/app/node/color/colormanager/colormanager.cpp): `app/node/color/colormanager/colormanager.cpp`
- [Render manager](https://github.com/olive-editor/olive/blob/master/app/render/rendermanager.cpp): `app/render/rendermanager.cpp`
- [Renderer](https://github.com/olive-editor/olive/blob/master/app/render/renderer.cpp): `app/render/renderer.cpp`
- [Export task](https://github.com/olive-editor/olive/blob/master/app/task/export/export.cpp): `app/task/export/export.cpp`
- [Media encoding](https://github.com/olive-editor/olive/blob/master/app/codec/encoder.cpp): `app/codec/encoder.cpp`

### Runtime services

- [Application startup](https://github.com/olive-editor/olive/blob/master/app/main.cpp): `app/main.cpp`
- [Disk cache](https://github.com/olive-editor/olive/blob/master/app/render/diskmanager.cpp): `app/render/diskmanager.cpp`
- [Audio monitoring](https://github.com/olive-editor/olive/blob/master/app/audio/audiomanager.cpp): `app/audio/audiomanager.cpp`
- [Preview audio device](https://github.com/olive-editor/olive/blob/master/app/render/previewaudiodevice.cpp): `app/render/previewaudiodevice.cpp`
- [Background task manager](https://github.com/olive-editor/olive/blob/master/app/task/taskmanager.h): `app/task/taskmanager.h`

### Other components

- **Editor**
- **Source media**
- **Exported media**

## Connections

- Editor → Project panel: manages media
- Editor → Timeline panel: edits sequence
- Editor → Viewer panel: previews
- Source media → Media import: source media
- Media import → Project model: imports assets
- Project model → Footage assets: tracks assets
- Project model → Project serialization: serializes project
- Project model → Sequence: owns sequence
- Sequence → Tracks and blocks: contains timeline
- Tracks and blocks → Effects and transforms: composes nodes
- Footage assets → Media decoding: decodes media
- Audio conforming → Background task manager: queues conform task
- Audio conforming → Disk cache: writes conform files
- Viewer panel → Sequence viewer: hosts viewer
- Audio monitoring → Preview audio device: reads preview audio
- Audio monitoring → Media encoding: encodes recordings
- Render manager → Renderer: requests rendering
- Renderer → Color management: uses color transforms
- Export task → Renderer: renders frames
- Export task → Media encoding: encodes export
- Export task → Background task manager: queues export
- Media encoding → Exported media: writes encoded media
- Background task manager → Task manager panel: reports task events
- Task manager panel → Background task manager: cancels tasks
