# danielesavino/imageflow architecture

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

## Overview

ImageFlow is a C image-processing library. An application loads an image, builds an operation flow, and runs it through a selected scheduler; the scheduler may reorder operations, dispatch implementations to available devices, and manage transfers before the result is stored. The graph preserves the documented CPU, CUDA, HIP, image-I/O, and scheduler capabilities. Several runtime relationships are documented in the README but their implementation bodies were not sampled, so those edges cite the README.

Main entry points: [`src/scheduler/scheduler.c`](https://github.com/danielesavino/imageflow/blob/main/src/scheduler/scheduler.c) (Scheduler dispatch), [`src/operations.c`](https://github.com/danielesavino/imageflow/blob/main/src/operations.c) (Operation dispatch), [`src/devices/devices.c`](https://github.com/danielesavino/imageflow/blob/main/src/devices/devices.c) (Device registry), [`include/ImageFlow/devices/img_loader.h`](https://github.com/danielesavino/imageflow/blob/main/include/ImageFlow/devices/img_loader.h) (Image transfers)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_io["Image I/O"]
  node_image_api["Image I/O API<br/>[image.c]"]
  node_stb_codec["stb codecs<br/>[stb_image.c]"]
end

subgraph group_flow["Pipeline and scheduling"]
  node_flow_builder["Flow builder<br/>[pipeline.c]"]
  node_scheduler_api["Scheduler dispatch<br/>[scheduler.c]"]
  node_reorder_scheduler["Reorder scheduler<br/>[reorder.c]"]
  node_linear_scheduler["Linear scheduler<br/>[linear.c]"]
  node_cpu_scheduler["CPU scheduler<br/>[cpu.c]"]
end

subgraph group_dispatch["Runtime dispatch"]
  node_operation_dispatch["Operation dispatch<br/>[operations.c]"]
  node_device_registry["Device registry<br/>[devices.c]"]
  node_image_transfer["Image transfers<br/>[img_loader.h]"]
end

subgraph group_compute["Compute backends"]
  node_cpu_backend["CPU backend<br/>[cpu.c]"]
  node_cuda_backend["CUDA backend<br/>[cuda.cu]"]
  node_hip_backend["HIP backend<br/>[hip.cpp]"]
end

node_application(("Application"))
node_filesystem["Image files"]

node_application -->|"loads image"| node_image_api
node_image_api -->|"reads and writes"| node_filesystem
node_image_api -->|"uses codecs"| node_stb_codec
node_application -->|"builds flow"| node_flow_builder
node_application -->|"runs flow"| node_scheduler_api
node_scheduler_api -->|"dispatches to"| node_reorder_scheduler
node_scheduler_api -->|"dispatches to"| node_linear_scheduler
node_scheduler_api -->|"dispatches to"| node_cpu_scheduler
node_reorder_scheduler -->|"runs linearly"| node_linear_scheduler
node_linear_scheduler -->|"executes operations"| node_operation_dispatch
node_cpu_scheduler -->|"executes operations"| node_operation_dispatch
node_linear_scheduler -->|"manages transfers"| node_image_transfer
node_operation_dispatch -->|"dispatches implementations"| node_cpu_backend
node_operation_dispatch -->|"dispatches implementations"| node_cuda_backend
node_operation_dispatch -->|"dispatches implementations"| node_hip_backend
node_device_registry -->|"registers availability"| node_cpu_backend
node_device_registry -->|"registers availability"| node_cuda_backend
node_device_registry -->|"registers availability"| node_hip_backend
node_image_transfer -.->|"uses device handlers"| node_cpu_backend
node_image_transfer -.->|"uses device handlers"| node_cuda_backend
node_image_transfer -.->|"uses device handlers"| node_hip_backend
node_scheduler_api -->|"checks enabled devices"| node_device_registry
node_flow_builder -->|"hands off flow"| node_scheduler_api
node_operation_dispatch -->|"indexes by device"| node_device_registry

click node_image_api "https://github.com/danielesavino/imageflow/blob/main/src/io/image.c"
click node_stb_codec "https://github.com/danielesavino/imageflow/blob/main/src/stb/stb_image.c"
click node_flow_builder "https://github.com/danielesavino/imageflow/blob/main/src/pipeline.c"
click node_scheduler_api "https://github.com/danielesavino/imageflow/blob/main/src/scheduler/scheduler.c"
click node_reorder_scheduler "https://github.com/danielesavino/imageflow/blob/main/src/scheduler/reorder.c"
click node_linear_scheduler "https://github.com/danielesavino/imageflow/blob/main/src/scheduler/linear.c"
click node_cpu_scheduler "https://github.com/danielesavino/imageflow/blob/main/src/scheduler/cpu.c"
click node_operation_dispatch "https://github.com/danielesavino/imageflow/blob/main/src/operations.c"
click node_device_registry "https://github.com/danielesavino/imageflow/blob/main/src/devices/devices.c"
click node_image_transfer "https://github.com/danielesavino/imageflow/blob/main/include/ImageFlow/devices/img_loader.h"
click node_cpu_backend "https://github.com/danielesavino/imageflow/blob/main/src/backends/cpu.c"
click node_cuda_backend "https://github.com/danielesavino/imageflow/blob/main/src/backends/cuda.cu"
click node_hip_backend "https://github.com/danielesavino/imageflow/blob/main/src/backends/hip.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_image_api,node_stb_codec toneBlue
class node_flow_builder,node_scheduler_api,node_reorder_scheduler,node_linear_scheduler,node_cpu_scheduler toneAmber
class node_operation_dispatch,node_device_registry,node_image_transfer toneMint
class node_cpu_backend,node_cuda_backend,node_hip_backend toneRose
class node_application,node_filesystem toneIndigo
```

## Components

### Image I/O

- [Image I/O API](https://github.com/danielesavino/imageflow/blob/main/src/io/image.c): `src/io/image.c`
- [stb codecs](https://github.com/danielesavino/imageflow/blob/main/src/stb/stb_image.c): `src/stb/stb_image.c`

### Pipeline and scheduling

- [Flow builder](https://github.com/danielesavino/imageflow/blob/main/src/pipeline.c): `src/pipeline.c`
- [Scheduler dispatch](https://github.com/danielesavino/imageflow/blob/main/src/scheduler/scheduler.c): `src/scheduler/scheduler.c`
- [Reorder scheduler](https://github.com/danielesavino/imageflow/blob/main/src/scheduler/reorder.c): `src/scheduler/reorder.c`
- [Linear scheduler](https://github.com/danielesavino/imageflow/blob/main/src/scheduler/linear.c): `src/scheduler/linear.c`
- [CPU scheduler](https://github.com/danielesavino/imageflow/blob/main/src/scheduler/cpu.c): `src/scheduler/cpu.c`

### Runtime dispatch

- [Operation dispatch](https://github.com/danielesavino/imageflow/blob/main/src/operations.c): `src/operations.c`
- [Device registry](https://github.com/danielesavino/imageflow/blob/main/src/devices/devices.c): `src/devices/devices.c`
- [Image transfers](https://github.com/danielesavino/imageflow/blob/main/include/ImageFlow/devices/img_loader.h): `include/ImageFlow/devices/img_loader.h`

### Compute backends

- [CPU backend](https://github.com/danielesavino/imageflow/blob/main/src/backends/cpu.c): `src/backends/cpu.c`
- [CUDA backend](https://github.com/danielesavino/imageflow/blob/main/src/backends/cuda.cu): `src/backends/cuda.cu`
- [HIP backend](https://github.com/danielesavino/imageflow/blob/main/src/backends/hip.cpp): `src/backends/hip.cpp`

### Other components

- **Application**
- **Image files**

## Connections

- Application → Image I/O API: loads image (evidence: `README.md`)
- Image I/O API → Image files: reads and writes (evidence: `README.md`)
- Image I/O API → stb codecs: uses codecs
- Application → Flow builder: builds flow (evidence: `README.md`)
- Application → Scheduler dispatch: runs flow (evidence: `README.md`)
- Scheduler dispatch → Reorder scheduler: dispatches to (evidence: `README.md`)
- Scheduler dispatch → Linear scheduler: dispatches to (evidence: `README.md`)
- Scheduler dispatch → CPU scheduler: dispatches to (evidence: `README.md`)
- Reorder scheduler → Linear scheduler: runs linearly (evidence: `README.md`)
- Linear scheduler → Operation dispatch: executes operations (evidence: `README.md`)
- CPU scheduler → Operation dispatch: executes operations (evidence: `README.md`)
- Linear scheduler → Image transfers: manages transfers (evidence: `README.md`)
- Operation dispatch → CPU backend: dispatches implementations (evidence: `README.md`)
- Operation dispatch → CUDA backend: dispatches implementations (evidence: `README.md`)
- Operation dispatch → HIP backend: dispatches implementations (evidence: `README.md`)
- Device registry → CPU backend: registers availability (evidence: `README.md`)
- Device registry → CUDA backend: registers availability (evidence: `README.md`)
- Device registry → HIP backend: registers availability (evidence: `README.md`)
- Image transfers → CPU backend: uses device handlers
- Image transfers → CUDA backend: uses device handlers
- Image transfers → HIP backend: uses device handlers
- Scheduler dispatch → Device registry: checks enabled devices (evidence: `README.md`)
- Flow builder → Scheduler dispatch: hands off flow (evidence: `README.md`)
- Operation dispatch → Device registry: indexes by device
