# mg-chao/snow-apps architecture

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

- Interactive diagram: https://gitdiagram.com/mg-chao/snow-apps
- Repository: https://github.com/mg-chao/snow-apps

## Overview

Snow Apps is a multi-product repository. The README identifies Snow Shot and Snow Image Viewer; sampled source also exposes reusable Ant Design Qt widgets and a drawing engine, so the graph emphasizes those substantial runtime products rather than release tooling. Snow Shot’s visible workflow includes capture and scrolling capture, OCR and recognition, editing/pinning, export, and persistent settings/history. Source excerpts provide only partial wiring, so uncertain cross-product links are omitted.

Main entry points: [`snow_shot/src/app/applicationcontroller.cpp`](https://github.com/mg-chao/snow-apps/blob/main/snow_shot/src/app/applicationcontroller.cpp) (Application controller), [`snow_shot/src/presentation/capture/screenshotscrollingpipeline.cpp`](https://github.com/mg-chao/snow-apps/blob/main/snow_shot/src/presentation/capture/screenshotscrollingpipeline.cpp) (Scrolling capture), [`ant_design_qt/packages/ant_design_qt/src/widgets/button.cpp`](https://github.com/mg-chao/snow-apps/blob/main/ant_design_qt/packages/ant_design_qt/src/widgets/button.cpp) (Widget library), [`snow_image_viewer/src/editing/edit_pipeline_controller.cpp`](https://github.com/mg-chao/snow-apps/blob/main/snow_image_viewer/src/editing/edit_pipeline_controller.cpp) (Edit pipeline)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_shot["Snow Shot"]
  node_app["Application controller"]
  node_scroll["Scrolling capture"]
  node_save["Save and export"]
  node_ocr["Screenshot OCR"]
  node_recognition["Recognition session"]
  node_pinned["Pinned editing"]
  node_recording["Screen recording"]
  node_storage[("Application storage")]
  node_status["Storage status UI"]
end

subgraph group_viewer["Image Viewer"]
  node_edit["Edit pipeline"]
  node_image["Image processing<br/>[service.cpp]"]
end

subgraph group_ui["Qt UI"]
  node_icons["Icon rendering<br/>[icon_renderer.cpp]"]
  node_antdicons["Ant Design icons<br/>[antd_icons.cpp]"]
  node_widgets["Widget library<br/>[button.cpp]"]
  node_popup["Popup controller"]
end

subgraph group_draw["Drawing Engine"]
  node_draw["Annotation engine<br/>[engine.rs]"]
  node_drawapi["Drawing C API<br/>[snow_draw_engine.h]"]
end

subgraph group_capture["Capture and OCR"]
  node_capture["Desktop capture<br/>[region_pipeline.rs]"]
  node_detect["Visual region detection<br/>[pipeline.rs]"]
end

node_user(("Desktop user"))
node_vieweruser(("Image editor user"))

node_user -.->|"uses"| node_app
node_app -.->|"initializes"| node_storage
node_app -.->|"starts capture"| node_scroll
node_scroll -->|"captures frames"| node_capture
node_scroll -.->|"exports result"| node_save
node_app -.->|"requests OCR"| node_ocr
node_app -.->|"starts recognition"| node_recognition
node_app -.->|"opens pinned edit"| node_pinned
node_app -.->|"controls recording"| node_recording
node_status -->|"reads status"| node_storage
node_capture -.->|"detects regions"| node_detect
node_user -.->|"edits images"| node_vieweruser
node_vieweruser -->|"submits edits"| node_edit
node_edit -.->|"processes raster"| node_image
node_user -.->|"annotates image"| node_draw
node_drawapi -.->|"exposes engine"| node_draw
node_widgets -.->|"uses popup control"| node_popup
node_widgets -.->|"uses icons"| node_antdicons
node_antdicons -.->|"renders icons"| node_icons

click node_app "https://github.com/mg-chao/snow-apps/blob/main/snow_shot/src/app/applicationcontroller.cpp"
click node_scroll "https://github.com/mg-chao/snow-apps/blob/main/snow_shot/src/presentation/capture/screenshotscrollingpipeline.cpp"
click node_save "https://github.com/mg-chao/snow-apps/blob/main/snow_shot/src/presentation/services/screenshotsaveexportpipeline.cpp"
click node_ocr "https://github.com/mg-chao/snow-apps/blob/main/snow_shot/include/snow_shot/presentation/screenshotocrcontroller.h"
click node_recognition "https://github.com/mg-chao/snow-apps/blob/main/snow_shot/src/presentation/ocr/screenshotrecognitionsessioncontroller.cpp"
click node_pinned "https://github.com/mg-chao/snow-apps/blob/main/snow_shot/src/presentation/pinned/screenshotpinnededitcontroller.cpp"
click node_recording "https://github.com/mg-chao/snow-apps/blob/main/snow_shot/src/presentation/recording/screenrecordingcontroller.cpp"
click node_storage "https://github.com/mg-chao/snow-apps/blob/main/snow_shot/src/storage/applicationstorage.cpp"
click node_status "https://github.com/mg-chao/snow-apps/blob/main/snow_shot/src/presentation/components/storagestatussettingswidget.cpp"
click node_capture "https://github.com/mg-chao/snow-apps/blob/main/snow-crates/crates/snow-capture/src/platform/windows/region_pipeline.rs"
click node_detect "https://github.com/mg-chao/snow-apps/blob/main/snow-crates/crates/visual-region-detector/src/pipeline.rs"
click node_draw "https://github.com/mg-chao/snow-apps/blob/main/snow_draw_engine_qt/crates/snow-draw-engine/src/engine.rs"
click node_drawapi "https://github.com/mg-chao/snow-apps/blob/main/snow_draw_engine_qt/crates/snow-draw-engine-c/include/snow_draw_engine.h"
click node_icons "https://github.com/mg-chao/snow-apps/blob/main/ant_design_qt/packages/adqt_icon_core/src/icon_renderer.cpp"
click node_antdicons "https://github.com/mg-chao/snow-apps/blob/main/ant_design_qt/packages/ant_design_icons_qt/src/antd_icons.cpp"
click node_widgets "https://github.com/mg-chao/snow-apps/blob/main/ant_design_qt/packages/ant_design_qt/src/widgets/button.cpp"
click node_popup "https://github.com/mg-chao/snow-apps/blob/main/ant_design_qt/packages/ant_design_qt/src/widgets/detail/overlay_popup_controller.cpp"
click node_edit "https://github.com/mg-chao/snow-apps/blob/main/snow_image_viewer/src/editing/edit_pipeline_controller.cpp"
click node_image "https://github.com/mg-chao/snow-apps/blob/main/snow_image/src/service.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_app,node_scroll,node_save,node_ocr,node_recognition,node_pinned,node_recording,node_storage,node_status,node_user,node_vieweruser toneBlue
class node_edit,node_image toneAmber
class node_icons,node_antdicons,node_widgets,node_popup toneMint
class node_draw,node_drawapi toneRose
class node_capture,node_detect toneIndigo
```

## Components

### Snow Shot

- [Application controller](https://github.com/mg-chao/snow-apps/blob/main/snow_shot/src/app/applicationcontroller.cpp): `snow_shot/src/app/applicationcontroller.cpp`
- [Scrolling capture](https://github.com/mg-chao/snow-apps/blob/main/snow_shot/src/presentation/capture/screenshotscrollingpipeline.cpp): `snow_shot/src/presentation/capture/screenshotscrollingpipeline.cpp`
- [Save and export](https://github.com/mg-chao/snow-apps/blob/main/snow_shot/src/presentation/services/screenshotsaveexportpipeline.cpp): `snow_shot/src/presentation/services/screenshotsaveexportpipeline.cpp`
- [Screenshot OCR](https://github.com/mg-chao/snow-apps/blob/main/snow_shot/include/snow_shot/presentation/screenshotocrcontroller.h): `snow_shot/include/snow_shot/presentation/screenshotocrcontroller.h`
- [Recognition session](https://github.com/mg-chao/snow-apps/blob/main/snow_shot/src/presentation/ocr/screenshotrecognitionsessioncontroller.cpp): `snow_shot/src/presentation/ocr/screenshotrecognitionsessioncontroller.cpp`
- [Pinned editing](https://github.com/mg-chao/snow-apps/blob/main/snow_shot/src/presentation/pinned/screenshotpinnededitcontroller.cpp): `snow_shot/src/presentation/pinned/screenshotpinnededitcontroller.cpp`
- [Screen recording](https://github.com/mg-chao/snow-apps/blob/main/snow_shot/src/presentation/recording/screenrecordingcontroller.cpp): `snow_shot/src/presentation/recording/screenrecordingcontroller.cpp`
- [Application storage](https://github.com/mg-chao/snow-apps/blob/main/snow_shot/src/storage/applicationstorage.cpp): `snow_shot/src/storage/applicationstorage.cpp`
- [Storage status UI](https://github.com/mg-chao/snow-apps/blob/main/snow_shot/src/presentation/components/storagestatussettingswidget.cpp): `snow_shot/src/presentation/components/storagestatussettingswidget.cpp`

### Image Viewer

- [Edit pipeline](https://github.com/mg-chao/snow-apps/blob/main/snow_image_viewer/src/editing/edit_pipeline_controller.cpp): `snow_image_viewer/src/editing/edit_pipeline_controller.cpp`
- [Image processing](https://github.com/mg-chao/snow-apps/blob/main/snow_image/src/service.cpp): `snow_image/src/service.cpp`

### Qt UI

- [Icon rendering](https://github.com/mg-chao/snow-apps/blob/main/ant_design_qt/packages/adqt_icon_core/src/icon_renderer.cpp): `ant_design_qt/packages/adqt_icon_core/src/icon_renderer.cpp`
- [Ant Design icons](https://github.com/mg-chao/snow-apps/blob/main/ant_design_qt/packages/ant_design_icons_qt/src/antd_icons.cpp): `ant_design_qt/packages/ant_design_icons_qt/src/antd_icons.cpp`
- [Widget library](https://github.com/mg-chao/snow-apps/blob/main/ant_design_qt/packages/ant_design_qt/src/widgets/button.cpp): `ant_design_qt/packages/ant_design_qt/src/widgets/button.cpp`
- [Popup controller](https://github.com/mg-chao/snow-apps/blob/main/ant_design_qt/packages/ant_design_qt/src/widgets/detail/overlay_popup_controller.cpp): `ant_design_qt/packages/ant_design_qt/src/widgets/detail/overlay_popup_controller.cpp`

### Drawing Engine

- [Annotation engine](https://github.com/mg-chao/snow-apps/blob/main/snow_draw_engine_qt/crates/snow-draw-engine/src/engine.rs): `snow_draw_engine_qt/crates/snow-draw-engine/src/engine.rs`
- [Drawing C API](https://github.com/mg-chao/snow-apps/blob/main/snow_draw_engine_qt/crates/snow-draw-engine-c/include/snow_draw_engine.h): `snow_draw_engine_qt/crates/snow-draw-engine-c/include/snow_draw_engine.h`

### Capture and OCR

- [Desktop capture](https://github.com/mg-chao/snow-apps/blob/main/snow-crates/crates/snow-capture/src/platform/windows/region_pipeline.rs): `snow-crates/crates/snow-capture/src/platform/windows/region_pipeline.rs`
- [Visual region detection](https://github.com/mg-chao/snow-apps/blob/main/snow-crates/crates/visual-region-detector/src/pipeline.rs): `snow-crates/crates/visual-region-detector/src/pipeline.rs`

### Other components

- **Desktop user**
- **Image editor user**

## Connections

- Desktop user → Application controller: uses (evidence: `README.md`)
- Application controller → Application storage: initializes
- Application controller → Scrolling capture: starts capture
- Scrolling capture → Desktop capture: captures frames (evidence: `snow_shot/src/presentation/capture/screenshotscrollingpipeline.cpp`)
- Scrolling capture → Save and export: exports result
- Application controller → Screenshot OCR: requests OCR
- Application controller → Recognition session: starts recognition
- Application controller → Pinned editing: opens pinned edit
- Application controller → Screen recording: controls recording
- Storage status UI → Application storage: reads status (evidence: `snow_shot/src/presentation/components/storagestatussettingswidget.cpp`)
- Desktop capture → Visual region detection: detects regions
- Desktop user → Image editor user: edits images (evidence: `README.md`)
- Image editor user → Edit pipeline: submits edits (evidence: `snow_image_viewer/src/editing/edit_pipeline_controller.cpp`)
- Edit pipeline → Image processing: processes raster
- Desktop user → Annotation engine: annotates image
- Drawing C API → Annotation engine: exposes engine
- Widget library → Popup controller: uses popup control
- Widget library → Ant Design icons: uses icons
- Ant Design icons → Icon rendering: renders icons
