# otplrepository/psphotovalidator architecture

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

## Overview

This is a .NET passport-photo validation library. A caller creates a validator, supplies an image stream and filename, and receives a validity flag plus validation errors. The service handles JPEG, optional file-size and dimension checks, then delegates background, face-detection, and image-quality checks to its internal validation helper. Face detection uses the bundled ONNX model. The graph reflects the sampled implementation; the README is empty, and the signature-validation excerpt does not establish a connection to the photo-validation workflow.

Main entry points: [`src/Internal/PassportPhotoValidatorService .cs`](https://github.com/otplrepository/psphotovalidator/blob/main/src/Internal/PassportPhotoValidatorService%20.cs) (Photo validation service), [`src/Internal/checkValidation.cs`](https://github.com/otplrepository/psphotovalidator/blob/main/src/Internal/checkValidation.cs) (Image checks), [`src/Public/ValidatorFactory.cs`](https://github.com/otplrepository/psphotovalidator/blob/main/src/Public/ValidatorFactory.cs) (Validator factory), [`src/Public/IPhotoValidator.cs`](https://github.com/otplrepository/psphotovalidator/blob/main/src/Public/IPhotoValidator.cs) (Photo validator API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["Public API"]
  node_factory["Validator factory"]
  node_interface["Photo validator API<br/>[IPhotoValidator.cs]"]
end

subgraph group_runtime["Validation runtime"]
  node_validator["Photo validation service"]
  node_checks["Image checks<br/>[checkValidation.cs]"]
end

subgraph group_assets["Model and diagnostics"]
  node_model["Face detection model"]
  node_logger["Safe logger<br/>[SafeLogger.cs]"]
end

node_caller(("Library caller"))
node_image["Input photo"]
node_outcome["Validation result"]
node_onnx["ONNX Runtime"]

node_caller -->|"creates via"| node_factory
node_factory -->|"creates"| node_validator
node_caller -->|"calls"| node_interface
node_interface -->|"implemented by"| node_validator
node_caller -->|"provides"| node_image
node_validator -->|"reads"| node_image
node_validator -->|"delegates checks"| node_checks
node_checks -->|"loads"| node_model
node_checks -->|"runs inference"| node_onnx
node_validator -->|"returns"| node_outcome
node_validator -->|"logs errors"| node_logger

click node_factory "https://github.com/otplrepository/psphotovalidator/blob/main/src/Public/ValidatorFactory.cs"
click node_interface "https://github.com/otplrepository/psphotovalidator/blob/main/src/Public/IPhotoValidator.cs"
click node_validator "https://github.com/otplrepository/psphotovalidator/blob/main/src/Internal/PassportPhotoValidatorService%20.cs"
click node_checks "https://github.com/otplrepository/psphotovalidator/blob/main/src/Internal/checkValidation.cs"
click node_model "https://github.com/otplrepository/psphotovalidator/blob/main/HelperUtility/version-RFB-640.onnx"
click node_logger "https://github.com/otplrepository/psphotovalidator/blob/main/src/cls/SafeLogger.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_factory,node_interface toneBlue
class node_validator,node_checks toneAmber
class node_model,node_logger toneMint
class node_caller,node_image,node_outcome,node_onnx toneIndigo
```

## Components

### Public API

- [Validator factory](https://github.com/otplrepository/psphotovalidator/blob/main/src/Public/ValidatorFactory.cs): `src/Public/ValidatorFactory.cs`
- [Photo validator API](https://github.com/otplrepository/psphotovalidator/blob/main/src/Public/IPhotoValidator.cs): `src/Public/IPhotoValidator.cs`

### Validation runtime

- [Photo validation service](https://github.com/otplrepository/psphotovalidator/blob/main/src/Internal/PassportPhotoValidatorService%20.cs): `src/Internal/PassportPhotoValidatorService .cs`
- [Image checks](https://github.com/otplrepository/psphotovalidator/blob/main/src/Internal/checkValidation.cs): `src/Internal/checkValidation.cs`

### Model and diagnostics

- [Face detection model](https://github.com/otplrepository/psphotovalidator/blob/main/HelperUtility/version-RFB-640.onnx): `HelperUtility/version-RFB-640.onnx`
- [Safe logger](https://github.com/otplrepository/psphotovalidator/blob/main/src/cls/SafeLogger.cs): `src/cls/SafeLogger.cs`

### Other components

- **Library caller**
- **Input photo**
- **Validation result**
- **ONNX Runtime**

## Connections

- Library caller → Validator factory: creates via
- Validator factory → Photo validation service: creates
- Library caller → Photo validator API: calls
- Photo validator API → Photo validation service: implemented by
- Library caller → Input photo: provides
- Photo validation service → Input photo: reads
- Photo validation service → Image checks: delegates checks
- Image checks → Face detection model: loads
- Image checks → ONNX Runtime: runs inference
- Photo validation service → Validation result: returns
- Photo validation service → Safe logger: logs errors
