# mainakadak02/shiftdrop architecture

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

- Interactive diagram: https://gitdiagram.com/mainakadak02/shiftdrop
- Repository: https://github.com/mainakadak02/shiftdrop

## Overview

ShiftDrop is a native Windows drag-and-drop conversion and editing app: users invoke a cursor wheel, choose an applicable recipe, and receive a safely named output while the original remains untouched. Its feature engines cover media conversion, editing, privacy, documents, archives, and file actions; jobs and staged outputs support progress, history, and undo. The README documents the user workflow and capabilities; source excerpts establish shared engine and output mechanics, but much feature wiring is unsampled, so those links are omitted.

Main entry points: [`src/keyboard/KeyboardController.cpp`](https://github.com/mainakadak02/shiftdrop/blob/main/src/keyboard/KeyboardController.cpp) (Action wheel), [`src/PipelineRunner.cpp`](https://github.com/mainakadak02/shiftdrop/blob/main/src/PipelineRunner.cpp) (Pipeline runner), [`src/StagedOutput.h`](https://github.com/mainakadak02/shiftdrop/blob/main/src/StagedOutput.h) (Staged output), [`src/Recipe.h`](https://github.com/mainakadak02/shiftdrop/blob/main/src/Recipe.h) (Recipes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interaction["User interaction"]
  node_wheel["Action wheel"]
  node_preview["Action preview<br/>[PreviewCard.cpp]"]
end

subgraph group_execution["Recipes and execution"]
  node_recipe["Recipes<br/>[Recipe.h]"]
  node_engine["Engine contract<br/>[Engine.h]"]
  node_runner["Pipeline runner<br/>[PipelineRunner.cpp]"]
end

subgraph group_media["Media tools"]
  node_image["Image conversion<br/>[ImagePipeline.cpp]"]
  node_photo["Photo editor<br/>[PhotoEngine.cpp]"]
  node_video["Video tools<br/>[VideoEngine.cpp]"]
  node_audio["Audio tools<br/>[AudioEngine.cpp]"]
  node_canvas["Picture editing<br/>[PictureEngine.h]"]
  node_redact["Redaction<br/>[RedactEngine.cpp]"]
end

subgraph group_documents["Documents and files"]
  node_pdf["PDF tools<br/>[PdfEngine.cpp]"]
  node_archives["Archive tools<br/>[ArchiveModule.cpp]"]
  node_inspect["Metadata inspection<br/>[MetadataReader.cpp]"]
  node_ocr["OCR tools<br/>[OcrEngine.cpp]"]
  node_fileactions["File actions<br/>[FileActions.cpp]"]
end

subgraph group_state["Output and history"]
  node_staging["Staged output<br/>[StagedOutput.h]"]
  node_outputpath["Output naming<br/>[OutputPath.h]"]
  node_history[("Run history<br/>[HistoryStore.h]")]
  node_updates["Update check"]
end

node_user(("File user"))

node_user -->|"invokes"| node_wheel
node_user -->|"drops files"| node_wheel
node_wheel -.->|"selects"| node_recipe
node_engine -->|"runs"| node_recipe
node_runner -->|"names outputs"| node_outputpath
node_runner -->|"uses staging"| node_staging
node_staging -->|"records results"| node_history
node_photo -->|"edits pictures"| node_canvas
node_redact -->|"uses picture editing"| node_canvas
node_user -.->|"checks updates"| node_updates

click node_wheel "https://github.com/mainakadak02/shiftdrop/blob/main/src/keyboard/KeyboardController.cpp"
click node_preview "https://github.com/mainakadak02/shiftdrop/blob/main/src/preview/PreviewCard.cpp"
click node_recipe "https://github.com/mainakadak02/shiftdrop/blob/main/src/Recipe.h"
click node_engine "https://github.com/mainakadak02/shiftdrop/blob/main/src/Engine.h"
click node_runner "https://github.com/mainakadak02/shiftdrop/blob/main/src/PipelineRunner.cpp"
click node_image "https://github.com/mainakadak02/shiftdrop/blob/main/src/ImagePipeline.cpp"
click node_photo "https://github.com/mainakadak02/shiftdrop/blob/main/src/photo/PhotoEngine.cpp"
click node_video "https://github.com/mainakadak02/shiftdrop/blob/main/src/videotools/VideoEngine.cpp"
click node_audio "https://github.com/mainakadak02/shiftdrop/blob/main/src/audiotools/AudioEngine.cpp"
click node_canvas "https://github.com/mainakadak02/shiftdrop/blob/main/src/canvas/PictureEngine.h"
click node_redact "https://github.com/mainakadak02/shiftdrop/blob/main/src/redact/RedactEngine.cpp"
click node_pdf "https://github.com/mainakadak02/shiftdrop/blob/main/src/pdf/PdfEngine.cpp"
click node_archives "https://github.com/mainakadak02/shiftdrop/blob/main/src/archive/ArchiveModule.cpp"
click node_inspect "https://github.com/mainakadak02/shiftdrop/blob/main/src/inspect/MetadataReader.cpp"
click node_ocr "https://github.com/mainakadak02/shiftdrop/blob/main/src/ocr/OcrEngine.cpp"
click node_fileactions "https://github.com/mainakadak02/shiftdrop/blob/main/src/FileActions.cpp"
click node_staging "https://github.com/mainakadak02/shiftdrop/blob/main/src/StagedOutput.h"
click node_outputpath "https://github.com/mainakadak02/shiftdrop/blob/main/src/OutputPath.h"
click node_history "https://github.com/mainakadak02/shiftdrop/blob/main/src/HistoryStore.h"
click node_updates "https://github.com/mainakadak02/shiftdrop/blob/main/src/updates/UpdateController.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_wheel,node_preview,node_user toneBlue
class node_recipe,node_engine,node_runner toneAmber
class node_image,node_photo,node_video,node_audio,node_canvas,node_redact toneMint
class node_pdf,node_archives,node_inspect,node_ocr,node_fileactions toneRose
class node_staging,node_outputpath,node_history,node_updates toneIndigo
```

## Components

### User interaction

- [Action wheel](https://github.com/mainakadak02/shiftdrop/blob/main/src/keyboard/KeyboardController.cpp): `src/keyboard/KeyboardController.cpp`
- [Action preview](https://github.com/mainakadak02/shiftdrop/blob/main/src/preview/PreviewCard.cpp): `src/preview/PreviewCard.cpp`

### Recipes and execution

- [Recipes](https://github.com/mainakadak02/shiftdrop/blob/main/src/Recipe.h): `src/Recipe.h`
- [Engine contract](https://github.com/mainakadak02/shiftdrop/blob/main/src/Engine.h): `src/Engine.h`
- [Pipeline runner](https://github.com/mainakadak02/shiftdrop/blob/main/src/PipelineRunner.cpp): `src/PipelineRunner.cpp`

### Media tools

- [Image conversion](https://github.com/mainakadak02/shiftdrop/blob/main/src/ImagePipeline.cpp): `src/ImagePipeline.cpp`
- [Photo editor](https://github.com/mainakadak02/shiftdrop/blob/main/src/photo/PhotoEngine.cpp): `src/photo/PhotoEngine.cpp`
- [Video tools](https://github.com/mainakadak02/shiftdrop/blob/main/src/videotools/VideoEngine.cpp): `src/videotools/VideoEngine.cpp`
- [Audio tools](https://github.com/mainakadak02/shiftdrop/blob/main/src/audiotools/AudioEngine.cpp): `src/audiotools/AudioEngine.cpp`
- [Picture editing](https://github.com/mainakadak02/shiftdrop/blob/main/src/canvas/PictureEngine.h): `src/canvas/PictureEngine.h`
- [Redaction](https://github.com/mainakadak02/shiftdrop/blob/main/src/redact/RedactEngine.cpp): `src/redact/RedactEngine.cpp`

### Documents and files

- [PDF tools](https://github.com/mainakadak02/shiftdrop/blob/main/src/pdf/PdfEngine.cpp): `src/pdf/PdfEngine.cpp`
- [Archive tools](https://github.com/mainakadak02/shiftdrop/blob/main/src/archive/ArchiveModule.cpp): `src/archive/ArchiveModule.cpp`
- [Metadata inspection](https://github.com/mainakadak02/shiftdrop/blob/main/src/inspect/MetadataReader.cpp): `src/inspect/MetadataReader.cpp`
- [OCR tools](https://github.com/mainakadak02/shiftdrop/blob/main/src/ocr/OcrEngine.cpp): `src/ocr/OcrEngine.cpp`
- [File actions](https://github.com/mainakadak02/shiftdrop/blob/main/src/FileActions.cpp): `src/FileActions.cpp`

### Output and history

- [Staged output](https://github.com/mainakadak02/shiftdrop/blob/main/src/StagedOutput.h): `src/StagedOutput.h`
- [Output naming](https://github.com/mainakadak02/shiftdrop/blob/main/src/OutputPath.h): `src/OutputPath.h`
- [Run history](https://github.com/mainakadak02/shiftdrop/blob/main/src/HistoryStore.h): `src/HistoryStore.h`
- [Update check](https://github.com/mainakadak02/shiftdrop/blob/main/src/updates/UpdateController.cpp): `src/updates/UpdateController.cpp`

### Other components

- **File user**

## Connections

- File user → Action wheel: invokes
- File user → Action wheel: drops files
- Action wheel → Recipes: selects
- Engine contract → Recipes: runs (evidence: `src/Engine.h`)
- Pipeline runner → Output naming: names outputs (evidence: `src/PipelineRunner.cpp`)
- Pipeline runner → Staged output: uses staging (evidence: `src/PipelineRunner.cpp`)
- Staged output → Run history: records results (evidence: `src/StagedOutput.h`)
- Photo editor → Picture editing: edits pictures
- Redaction → Picture editing: uses picture editing
- File user → Update check: checks updates
