# maurycyliebner/enve architecture

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

- Interactive diagram: https://gitdiagram.com/maurycyliebner/enve
- Repository: https://github.com/maurycyliebner/enve

## Overview

enve is a desktop 2D animation application for vector and raster animation, with sound and video support. A user works through the main window and timeline to create or edit scenes and animated objects, then previews or renders output. The tree identifies distinct authoring, animation, media, and rendering subsystems; sampled code confirms render coordination, video-frame caching, task execution, and external paint-app exchange. The README states the product capabilities, but implementation details for several branches were not sampled, so their internal wiring is left unspecified.

Main entry points: [`src/app/renderhandler.cpp`](https://github.com/maurycyliebner/enve/blob/master/src/app/renderhandler.cpp) (Render coordinator), [`src/app/GUI/mainwindow.cpp`](https://github.com/maurycyliebner/enve/blob/master/src/app/GUI/mainwindow.cpp) (Main window), [`src/app/GUI/layouthandler.h`](https://github.com/maurycyliebner/enve/blob/master/src/app/GUI/layouthandler.h) (Scene layouts), [`src/core/FileCacheHandlers/videocachehandler.cpp`](https://github.com/maurycyliebner/enve/blob/master/src/core/FileCacheHandlers/videocachehandler.cpp) (Video frame cache)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_authoring["Authoring"]
  node_main["Application entry<br/>[main.cpp]"]
  node_window["Main window<br/>[mainwindow.cpp]"]
  node_timeline["Timeline UI<br/>[timelinewidget.cpp]"]
  node_layout["Scene layouts<br/>[layouthandler.h]"]
end

subgraph group_animation["Animation model"]
  node_document["Document<br/>[document.h]"]
  node_canvas["Canvas scenes<br/>[canvas.h]"]
  node_boxes["Scene objects<br/>[animationbox.h]"]
  node_animators["Property animation<br/>[animator.h]"]
  node_smartpath["Smart paths"]
  node_paint["Raster painting<br/>[animatedsurface.h]"]
end

subgraph group_media["Media and sound"]
  node_video["Video frame cache"]
  node_sound["Sound composition<br/>[soundcomposition.h]"]
  node_audio["Audio handler<br/>[audiohandler.cpp]"]
end

subgraph group_rendering["Rendering and effects"]
  node_render["Render coordinator<br/>[renderhandler.cpp]"]
  node_tasks["Task execution<br/>[execcontroller.cpp]"]
  node_encoder["Video encoder<br/>[videoencoder.cpp]"]
  node_shader["Shader effects<br/>[shadereffect.h]"]
end

subgraph group_extensions["Extensions"]
  node_custom["Custom effects<br/>[customhandler.h]"]
end

node_artist(("Artist"))
node_paintapp(("External paint app"))

node_artist -->|"edits in"| node_window
node_main -->|"creates"| node_window
node_window -->|"opens file"| node_document
node_window -->|"starts render"| node_render
node_window -->|"initializes audio"| node_audio
node_layout -->|"lays out"| node_canvas
node_layout -->|"lays out"| node_timeline
node_render -->|"renders scene"| node_canvas
node_render -->|"schedules audio range"| node_sound
node_render -->|"starts encoding"| node_encoder
node_render -->|"checks task queue"| node_tasks
node_video -->|"caches frames"| node_video
node_paint -.->|"exchanges paint file"| node_paintapp

click node_main "https://github.com/maurycyliebner/enve/blob/master/src/app/main.cpp"
click node_window "https://github.com/maurycyliebner/enve/blob/master/src/app/GUI/mainwindow.cpp"
click node_timeline "https://github.com/maurycyliebner/enve/blob/master/src/app/GUI/timelinewidget.cpp"
click node_layout "https://github.com/maurycyliebner/enve/blob/master/src/app/GUI/layouthandler.h"
click node_document "https://github.com/maurycyliebner/enve/blob/master/include/enveCore/document.h"
click node_canvas "https://github.com/maurycyliebner/enve/blob/master/include/enveCore/canvas.h"
click node_boxes "https://github.com/maurycyliebner/enve/blob/master/include/enveCore/Boxes/animationbox.h"
click node_animators "https://github.com/maurycyliebner/enve/blob/master/include/enveCore/Animators/animator.h"
click node_smartpath "https://github.com/maurycyliebner/enve/blob/master/include/enveCore/Animators/SmartPath/smartpathanimator.h"
click node_paint "https://github.com/maurycyliebner/enve/blob/master/include/enveCore/Paint/animatedsurface.h"
click node_video "https://github.com/maurycyliebner/enve/blob/master/src/core/FileCacheHandlers/videocachehandler.cpp"
click node_sound "https://github.com/maurycyliebner/enve/blob/master/include/enveCore/Sound/soundcomposition.h"
click node_audio "https://github.com/maurycyliebner/enve/blob/master/src/app/GUI/audiohandler.cpp"
click node_render "https://github.com/maurycyliebner/enve/blob/master/src/app/renderhandler.cpp"
click node_tasks "https://github.com/maurycyliebner/enve/blob/master/src/core/Private/Tasks/execcontroller.cpp"
click node_encoder "https://github.com/maurycyliebner/enve/blob/master/src/app/videoencoder.cpp"
click node_shader "https://github.com/maurycyliebner/enve/blob/master/include/enveCore/ShaderEffects/shadereffect.h"
click node_custom "https://github.com/maurycyliebner/enve/blob/master/src/core/customhandler.h"

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_main,node_window,node_timeline,node_layout toneBlue
class node_document,node_canvas,node_boxes,node_animators,node_smartpath,node_paint toneAmber
class node_video,node_sound,node_audio toneMint
class node_render,node_tasks,node_encoder,node_shader toneRose
class node_custom,node_artist,node_paintapp toneIndigo
```

## Components

### Authoring

- [Application entry](https://github.com/maurycyliebner/enve/blob/master/src/app/main.cpp): `src/app/main.cpp`
- [Main window](https://github.com/maurycyliebner/enve/blob/master/src/app/GUI/mainwindow.cpp): `src/app/GUI/mainwindow.cpp`
- [Timeline UI](https://github.com/maurycyliebner/enve/blob/master/src/app/GUI/timelinewidget.cpp): `src/app/GUI/timelinewidget.cpp`
- [Scene layouts](https://github.com/maurycyliebner/enve/blob/master/src/app/GUI/layouthandler.h): `src/app/GUI/layouthandler.h`

### Animation model

- [Document](https://github.com/maurycyliebner/enve/blob/master/include/enveCore/document.h): `include/enveCore/document.h`
- [Canvas scenes](https://github.com/maurycyliebner/enve/blob/master/include/enveCore/canvas.h): `include/enveCore/canvas.h`
- [Scene objects](https://github.com/maurycyliebner/enve/blob/master/include/enveCore/Boxes/animationbox.h): `include/enveCore/Boxes/animationbox.h`
- [Property animation](https://github.com/maurycyliebner/enve/blob/master/include/enveCore/Animators/animator.h): `include/enveCore/Animators/animator.h`
- [Smart paths](https://github.com/maurycyliebner/enve/blob/master/include/enveCore/Animators/SmartPath/smartpathanimator.h): `include/enveCore/Animators/SmartPath/smartpathanimator.h`
- [Raster painting](https://github.com/maurycyliebner/enve/blob/master/include/enveCore/Paint/animatedsurface.h): `include/enveCore/Paint/animatedsurface.h`

### Media and sound

- [Video frame cache](https://github.com/maurycyliebner/enve/blob/master/src/core/FileCacheHandlers/videocachehandler.cpp): `src/core/FileCacheHandlers/videocachehandler.cpp`
- [Sound composition](https://github.com/maurycyliebner/enve/blob/master/include/enveCore/Sound/soundcomposition.h): `include/enveCore/Sound/soundcomposition.h`
- [Audio handler](https://github.com/maurycyliebner/enve/blob/master/src/app/GUI/audiohandler.cpp): `src/app/GUI/audiohandler.cpp`

### Rendering and effects

- [Render coordinator](https://github.com/maurycyliebner/enve/blob/master/src/app/renderhandler.cpp): `src/app/renderhandler.cpp`
- [Task execution](https://github.com/maurycyliebner/enve/blob/master/src/core/Private/Tasks/execcontroller.cpp): `src/core/Private/Tasks/execcontroller.cpp`
- [Video encoder](https://github.com/maurycyliebner/enve/blob/master/src/app/videoencoder.cpp): `src/app/videoencoder.cpp`
- [Shader effects](https://github.com/maurycyliebner/enve/blob/master/include/enveCore/ShaderEffects/shadereffect.h): `include/enveCore/ShaderEffects/shadereffect.h`

### Extensions

- [Custom effects](https://github.com/maurycyliebner/enve/blob/master/src/core/customhandler.h): `src/core/customhandler.h`

### Other components

- **Artist**
- **External paint app**

## Connections

- Artist → Main window: edits in
- Application entry → Main window: creates
- Main window → Document: opens file
- Main window → Render coordinator: starts render
- Main window → Audio handler: initializes audio
- Scene layouts → Canvas scenes: lays out
- Scene layouts → Timeline UI: lays out
- Render coordinator → Canvas scenes: renders scene
- Render coordinator → Sound composition: schedules audio range
- Render coordinator → Video encoder: starts encoding
- Render coordinator → Task execution: checks task queue
- Video frame cache → Video frame cache: caches frames
- Raster painting → External paint app: exchanges paint file
