# mathewsachin/captura architecture

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

## Overview

Captura is a Windows desktop screen recorder and screenshot tool, with a command-line entry point. The main workflow selects screen, window, region, webcam, and audio inputs; captures and overlays frames; then records or saves screenshots as files or uploads. The tree documents additional AVI/GIF/MP4, replay, steps, hotkey, and localization capabilities. Sampled source confirms CLI recording and screenshot calls, Windows capture providers, preview handling, and FFmpeg process/log behavior; other subsystem links reflect documented capabilities and tree structure.

Main entry points: [`src/Captura.Core/ViewModels/RecordingModel.cs`](https://github.com/mathewsachin/captura/blob/master/src/Captura.Core/ViewModels/RecordingModel.cs) (Recording model), [`src/Captura/App.xaml.cs`](https://github.com/mathewsachin/captura/blob/master/src/Captura/App.xaml.cs) (Desktop app), [`src/Captura.Console/ConsoleManager.cs`](https://github.com/mathewsachin/captura/blob/master/src/Captura.Console/ConsoleManager.cs) (CLI manager), [`src/Captura.Core/ViewModels/ScreenShotModel.cs`](https://github.com/mathewsachin/captura/blob/master/src/Captura.Core/ViewModels/ScreenShotModel.cs) (Screenshot model)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["User entry points"]
  node_desktop["Desktop app<br/>[App.xaml.cs]"]
  node_cli["CLI manager<br/>[ConsoleManager.cs]"]
end

subgraph group_capture["Capture inputs"]
  node_shotmodel["Screenshot model<br/>[ScreenShotModel.cs]"]
  node_screna["Capture orchestration<br/>[Recorder.cs]"]
  node_sources["Screen sources"]
  node_overlays["Frame overlays"]
  node_audio["Audio capture<br/>[NAudioSource.cs]"]
  node_webcam["Webcam capture<br/>[WebcamCapture.cs]"]
end

subgraph group_record["Recording and output"]
  node_recmodel["Recording model<br/>[RecordingModel.cs]"]
  node_ffwriter["FFmpeg writers"]
  node_aviwriter["AVI writers"]
  node_imagewriters["Image outputs<br/>[ImageWriterItems]"]
  node_ffmpeg["FFmpeg service<br/>[FFmpegService.cs]"]
  node_imgur["Imgur uploader<br/>[ImgurUploader.cs]"]
  node_youtube["YouTube uploader<br/>[YouTubeUploader.cs]"]
end

subgraph group_features["Controls and features"]
  node_mousekeys["Mouse and keys<br/>[MouseKeyHook.cs]"]
  node_preview["Recording preview"]
  node_hotkeys["Hotkey manager<br/>[HotKeyManager.cs]"]
  node_settings["Settings<br/>[Settings.cs]"]
end

subgraph group_platform["Platform services"]
  node_windows["Windows capture"]
end

node_user(("User"))
node_filesystem[("Local files")]
node_ffmpegapp["FFmpeg executable"]
node_uploadservices["Upload services"]

node_user -->|"uses"| node_desktop
node_user -->|"invokes"| node_cli
node_desktop -->|"records through"| node_recmodel
node_cli -->|"starts recording"| node_recmodel
node_cli -->|"requests screenshot"| node_shotmodel
node_windows -->|"provides capture"| node_sources
node_recmodel -->|"orchestrates capture"| node_screna
node_recmodel -->|"selects writer"| node_ffwriter
node_recmodel -->|"selects writer"| node_aviwriter
node_shotmodel -->|"captures image"| node_windows
node_screna -->|"composes frames"| node_overlays
node_screna -->|"displays frames"| node_preview
node_recmodel -->|"captures audio"| node_audio
node_recmodel -->|"captures webcam"| node_webcam
node_mousekeys -->|"supplies annotations"| node_overlays
node_ffwriter -->|"starts process"| node_ffmpeg
node_ffmpeg -->|"runs"| node_ffmpegapp
node_ffmpeg -->|"writes logs"| node_filesystem
node_shotmodel -->|"saves or uploads"| node_imagewriters
node_imagewriters -->|"writes images"| node_filesystem
node_imgur -.->|"uploads images"| node_uploadservices
node_youtube -.->|"uploads video"| node_uploadservices
node_desktop -->|"loads settings"| node_settings
node_hotkeys -->|"dispatches actions"| node_recmodel

click node_desktop "https://github.com/mathewsachin/captura/blob/master/src/Captura/App.xaml.cs"
click node_cli "https://github.com/mathewsachin/captura/blob/master/src/Captura.Console/ConsoleManager.cs"
click node_recmodel "https://github.com/mathewsachin/captura/blob/master/src/Captura.Core/ViewModels/RecordingModel.cs"
click node_shotmodel "https://github.com/mathewsachin/captura/blob/master/src/Captura.Core/ViewModels/ScreenShotModel.cs"
click node_windows "https://github.com/mathewsachin/captura/blob/master/src/Captura.Windows/WindowsPlatformServices.cs"
click node_screna "https://github.com/mathewsachin/captura/blob/master/src/Screna/Recorder.cs"
click node_sources "https://github.com/mathewsachin/captura/tree/master/src/Screna/VideoSourceProviders"
click node_overlays "https://github.com/mathewsachin/captura/tree/master/src/Screna/Overlays"
click node_mousekeys "https://github.com/mathewsachin/captura/blob/master/src/Captura.MouseKeyHook/MouseKeyHook.cs"
click node_audio "https://github.com/mathewsachin/captura/blob/master/src/Captura.NAudio/NAudioSource.cs"
click node_webcam "https://github.com/mathewsachin/captura/blob/master/src/Captura.Windows/Webcam/WebcamCapture.cs"
click node_ffwriter "https://github.com/mathewsachin/captura/blob/master/src/Captura.FFmpeg/Video/FFmpegVideoWriter.cs"
click node_aviwriter "https://github.com/mathewsachin/captura/blob/master/src/Captura.SharpAvi/SharpAviWriterProvider.cs"
click node_imagewriters "https://github.com/mathewsachin/captura/tree/master/src/Captura.Core/Models/ImageWriterItems"
click node_ffmpeg "https://github.com/mathewsachin/captura/blob/master/src/Captura.FFmpeg/FFmpegService.cs"
click node_preview "https://github.com/mathewsachin/captura/blob/master/src/Captura/Models/PreviewWindowService.cs"
click node_hotkeys "https://github.com/mathewsachin/captura/blob/master/src/Captura.Hotkeys/HotKeyManager.cs"
click node_settings "https://github.com/mathewsachin/captura/blob/master/src/Captura.Core/Settings/Settings.cs"
click node_imgur "https://github.com/mathewsachin/captura/blob/master/src/Captura.Imgur/ImgurUploader.cs"
click node_youtube "https://github.com/mathewsachin/captura/blob/master/src/Captura.YouTube/YouTubeUploader.cs"

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_desktop,node_cli,node_user toneBlue
class node_shotmodel,node_screna,node_sources,node_overlays,node_audio,node_webcam,node_filesystem toneAmber
class node_recmodel,node_ffwriter,node_aviwriter,node_imagewriters,node_ffmpeg,node_imgur,node_youtube toneMint
class node_mousekeys,node_preview,node_hotkeys,node_settings toneRose
class node_windows,node_ffmpegapp,node_uploadservices toneIndigo
```

## Components

### User entry points

- [Desktop app](https://github.com/mathewsachin/captura/blob/master/src/Captura/App.xaml.cs): `src/Captura/App.xaml.cs`
- [CLI manager](https://github.com/mathewsachin/captura/blob/master/src/Captura.Console/ConsoleManager.cs): `src/Captura.Console/ConsoleManager.cs`

### Capture inputs

- [Screenshot model](https://github.com/mathewsachin/captura/blob/master/src/Captura.Core/ViewModels/ScreenShotModel.cs): `src/Captura.Core/ViewModels/ScreenShotModel.cs`
- [Capture orchestration](https://github.com/mathewsachin/captura/blob/master/src/Screna/Recorder.cs): `src/Screna/Recorder.cs`
- [Screen sources](https://github.com/mathewsachin/captura/tree/master/src/Screna/VideoSourceProviders): `src/Screna/VideoSourceProviders`
- [Frame overlays](https://github.com/mathewsachin/captura/tree/master/src/Screna/Overlays): `src/Screna/Overlays`
- [Audio capture](https://github.com/mathewsachin/captura/blob/master/src/Captura.NAudio/NAudioSource.cs): `src/Captura.NAudio/NAudioSource.cs`
- [Webcam capture](https://github.com/mathewsachin/captura/blob/master/src/Captura.Windows/Webcam/WebcamCapture.cs): `src/Captura.Windows/Webcam/WebcamCapture.cs`

### Recording and output

- [Recording model](https://github.com/mathewsachin/captura/blob/master/src/Captura.Core/ViewModels/RecordingModel.cs): `src/Captura.Core/ViewModels/RecordingModel.cs`
- [FFmpeg writers](https://github.com/mathewsachin/captura/blob/master/src/Captura.FFmpeg/Video/FFmpegVideoWriter.cs): `src/Captura.FFmpeg/Video/FFmpegVideoWriter.cs`
- [AVI writers](https://github.com/mathewsachin/captura/blob/master/src/Captura.SharpAvi/SharpAviWriterProvider.cs): `src/Captura.SharpAvi/SharpAviWriterProvider.cs`
- [Image outputs](https://github.com/mathewsachin/captura/tree/master/src/Captura.Core/Models/ImageWriterItems): `src/Captura.Core/Models/ImageWriterItems`
- [FFmpeg service](https://github.com/mathewsachin/captura/blob/master/src/Captura.FFmpeg/FFmpegService.cs): `src/Captura.FFmpeg/FFmpegService.cs`
- [Imgur uploader](https://github.com/mathewsachin/captura/blob/master/src/Captura.Imgur/ImgurUploader.cs): `src/Captura.Imgur/ImgurUploader.cs`
- [YouTube uploader](https://github.com/mathewsachin/captura/blob/master/src/Captura.YouTube/YouTubeUploader.cs): `src/Captura.YouTube/YouTubeUploader.cs`

### Controls and features

- [Mouse and keys](https://github.com/mathewsachin/captura/blob/master/src/Captura.MouseKeyHook/MouseKeyHook.cs): `src/Captura.MouseKeyHook/MouseKeyHook.cs`
- [Recording preview](https://github.com/mathewsachin/captura/blob/master/src/Captura/Models/PreviewWindowService.cs): `src/Captura/Models/PreviewWindowService.cs`
- [Hotkey manager](https://github.com/mathewsachin/captura/blob/master/src/Captura.Hotkeys/HotKeyManager.cs): `src/Captura.Hotkeys/HotKeyManager.cs`
- [Settings](https://github.com/mathewsachin/captura/blob/master/src/Captura.Core/Settings/Settings.cs): `src/Captura.Core/Settings/Settings.cs`

### Platform services

- [Windows capture](https://github.com/mathewsachin/captura/blob/master/src/Captura.Windows/WindowsPlatformServices.cs): `src/Captura.Windows/WindowsPlatformServices.cs`

### Other components

- **User**
- **Local files**
- **FFmpeg executable**
- **Upload services**

## Connections

- User → Desktop app: uses
- User → CLI manager: invokes
- Desktop app → Recording model: records through
- CLI manager → Recording model: starts recording
- CLI manager → Screenshot model: requests screenshot
- Windows capture → Screen sources: provides capture
- Recording model → Capture orchestration: orchestrates capture
- Recording model → FFmpeg writers: selects writer
- Recording model → AVI writers: selects writer
- Screenshot model → Windows capture: captures image
- Capture orchestration → Frame overlays: composes frames
- Capture orchestration → Recording preview: displays frames
- Recording model → Audio capture: captures audio
- Recording model → Webcam capture: captures webcam
- Mouse and keys → Frame overlays: supplies annotations
- FFmpeg writers → FFmpeg service: starts process
- FFmpeg service → FFmpeg executable: runs
- FFmpeg service → Local files: writes logs
- Screenshot model → Image outputs: saves or uploads
- Image outputs → Local files: writes images
- Imgur uploader → Upload services: uploads images
- YouTube uploader → Upload services: uploads video
- Desktop app → Settings: loads settings
- Hotkey manager → Recording model: dispatches actions
