# smolkar/lateralvision-public- architecture

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

- Interactive diagram: https://gitdiagram.com/smolkar/lateralvision-public-
- Repository: https://github.com/smolkar/lateralvision-public-
- Video tour (about a minute): https://gitdiagram.com/smolkar/lateralvision-public-/video

## Overview

Lateral Vision ingests Windows event-log files, normalizes and groups events into domain/device/user and session-related data, then exposes graph queries and database import through a Flask API. Users select a processed dataset and retrieve connections for interactive directed-graph visualization; the API also provides domain summaries and workstation/IP correlation. The README describes anomaly detection, and the processor excerpt includes anomaly scoring and HTML report generation. Several processor sections are unsampled, so only documented or directly evidenced wiring is shown.

Main entry points: [`utils/processor.py`](https://github.com/smolkar/lateralvision-public-/blob/main/utils/processor.py) (Log Processor), [`api/api.py`](https://github.com/smolkar/lateralvision-public-/blob/main/api/api.py) (Flask API), [`force-graph/src/main/index.js`](https://github.com/smolkar/lateralvision-public-/blob/main/force-graph/src/main/index.js) (Browser UI), [`classes/compilation.py`](https://github.com/smolkar/lateralvision-public-/blob/main/classes/compilation.py) (Session Compilation)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ingest["Ingestion and Analysis"]
  node_processor["Log Processor<br/>[processor.py]"]
  node_formats["Format Utilities<br/>[utils.py]"]
  node_domainmodel["Domain Model<br/>[domain.py]"]
  node_devicemodel["Device Model<br/>[device.py]"]
  node_usermodel["User Model<br/>[user.py]"]
  node_compilationmodel["Session Compilation<br/>[compilation.py]"]
  node_eventmodel["Windows Event<br/>[event.py]"]
  node_sessionmodel["Session Model<br/>[session.py]"]
  node_anomalyreport["Anomaly Report"]
end

subgraph group_api["API and Selection"]
  node_apiapp["Flask API<br/>[api.py]"]
  node_uploads[("Uploads")]
  node_processed[("Processed Data")]
  node_selected[("Selected Dataset")]
end

subgraph group_storage["Graph Data"]
  node_dbaccess["Graph Persistence<br/>[database.py]"]
  node_neo4j[("Neo4j")]
end

subgraph group_visual["Visualization"]
  node_webbrowser["Browser UI<br/>[index.js]"]
  node_graphui["Directed Graph<br/>[directedgraph.js]"]
end

node_analyst(("Analyst"))
node_eventfile["Event Log File"]

node_analyst -->|"uses"| node_webbrowser
node_eventfile -->|"uploads"| node_apiapp
node_webbrowser -->|"requests"| node_apiapp
node_apiapp -->|"saves file"| node_uploads
node_apiapp -->|"processes upload"| node_processor
node_processor -->|"reads upload"| node_uploads
node_processor -->|"normalizes"| node_formats
node_processor -->|"writes results"| node_processed
node_apiapp -->|"selects dataset"| node_processed
node_apiapp -->|"stores selection"| node_selected
node_apiapp -->|"reads selected data"| node_processed
node_apiapp -->|"queries connections"| node_processor
node_processor -->|"builds domain data"| node_domainmodel
node_processor -->|"builds device data"| node_devicemodel
node_processor -->|"builds user data"| node_usermodel
node_processor -->|"groups events"| node_compilationmodel
node_processor -->|"creates events"| node_eventmodel
node_compilationmodel -->|"contains events"| node_eventmodel
node_sessionmodel -->|"collects compilations"| node_compilationmodel
node_apiapp -->|"imports graph data"| node_dbaccess
node_apiapp -->|"requests correlation"| node_dbaccess
node_dbaccess -->|"writes and queries"| node_neo4j
node_webbrowser -->|"draws results"| node_graphui
node_apiapp -->|"serves pages"| node_webbrowser
node_processor -->|"generates report"| node_anomalyreport

click node_webbrowser "https://github.com/smolkar/lateralvision-public-/blob/main/force-graph/src/main/index.js"
click node_apiapp "https://github.com/smolkar/lateralvision-public-/blob/main/api/api.py"
click node_processor "https://github.com/smolkar/lateralvision-public-/blob/main/utils/processor.py"
click node_formats "https://github.com/smolkar/lateralvision-public-/blob/main/utils/utils.py"
click node_domainmodel "https://github.com/smolkar/lateralvision-public-/blob/main/classes/domain.py"
click node_devicemodel "https://github.com/smolkar/lateralvision-public-/blob/main/classes/device.py"
click node_usermodel "https://github.com/smolkar/lateralvision-public-/blob/main/classes/user.py"
click node_compilationmodel "https://github.com/smolkar/lateralvision-public-/blob/main/classes/compilation.py"
click node_eventmodel "https://github.com/smolkar/lateralvision-public-/blob/main/classes/event.py"
click node_sessionmodel "https://github.com/smolkar/lateralvision-public-/blob/main/classes/session.py"
click node_uploads "https://github.com/smolkar/lateralvision-public-/tree/main/resources/uploads"
click node_processed "https://github.com/smolkar/lateralvision-public-/tree/main/resources/processed"
click node_selected "https://github.com/smolkar/lateralvision-public-/tree/main/resources"
click node_dbaccess "https://github.com/smolkar/lateralvision-public-/blob/main/utils/database.py"
click node_graphui "https://github.com/smolkar/lateralvision-public-/blob/main/force-graph/src/main/scripts/directedgraph.js"
click node_anomalyreport "https://github.com/smolkar/lateralvision-public-/blob/main/anomaly_detector_results.html"

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_processor,node_formats,node_domainmodel,node_devicemodel,node_usermodel,node_compilationmodel,node_eventmodel,node_sessionmodel,node_anomalyreport toneBlue
class node_apiapp,node_uploads,node_processed,node_selected toneAmber
class node_dbaccess,node_neo4j toneMint
class node_webbrowser,node_graphui toneRose
class node_analyst,node_eventfile toneIndigo
```

## Components

### Ingestion and Analysis

- [Log Processor](https://github.com/smolkar/lateralvision-public-/blob/main/utils/processor.py): `utils/processor.py`
- [Format Utilities](https://github.com/smolkar/lateralvision-public-/blob/main/utils/utils.py): `utils/utils.py`
- [Domain Model](https://github.com/smolkar/lateralvision-public-/blob/main/classes/domain.py): `classes/domain.py`
- [Device Model](https://github.com/smolkar/lateralvision-public-/blob/main/classes/device.py): `classes/device.py`
- [User Model](https://github.com/smolkar/lateralvision-public-/blob/main/classes/user.py): `classes/user.py`
- [Session Compilation](https://github.com/smolkar/lateralvision-public-/blob/main/classes/compilation.py): `classes/compilation.py`
- [Windows Event](https://github.com/smolkar/lateralvision-public-/blob/main/classes/event.py): `classes/event.py`
- [Session Model](https://github.com/smolkar/lateralvision-public-/blob/main/classes/session.py): `classes/session.py`
- [Anomaly Report](https://github.com/smolkar/lateralvision-public-/blob/main/anomaly_detector_results.html): `anomaly_detector_results.html`

### API and Selection

- [Flask API](https://github.com/smolkar/lateralvision-public-/blob/main/api/api.py): `api/api.py`
- [Uploads](https://github.com/smolkar/lateralvision-public-/tree/main/resources/uploads): `resources/uploads`
- [Processed Data](https://github.com/smolkar/lateralvision-public-/tree/main/resources/processed): `resources/processed`
- [Selected Dataset](https://github.com/smolkar/lateralvision-public-/tree/main/resources): `resources`

### Graph Data

- [Graph Persistence](https://github.com/smolkar/lateralvision-public-/blob/main/utils/database.py): `utils/database.py`
- **Neo4j**

### Visualization

- [Browser UI](https://github.com/smolkar/lateralvision-public-/blob/main/force-graph/src/main/index.js): `force-graph/src/main/index.js`
- [Directed Graph](https://github.com/smolkar/lateralvision-public-/blob/main/force-graph/src/main/scripts/directedgraph.js): `force-graph/src/main/scripts/directedgraph.js`

### Other components

- **Analyst**
- **Event Log File**

## Connections

- Analyst → Browser UI: uses
- Event Log File → Flask API: uploads
- Browser UI → Flask API: requests
- Flask API → Uploads: saves file
- Flask API → Log Processor: processes upload
- Log Processor → Uploads: reads upload
- Log Processor → Format Utilities: normalizes
- Log Processor → Processed Data: writes results
- Flask API → Processed Data: selects dataset
- Flask API → Selected Dataset: stores selection
- Flask API → Processed Data: reads selected data
- Flask API → Log Processor: queries connections
- Log Processor → Domain Model: builds domain data
- Log Processor → Device Model: builds device data
- Log Processor → User Model: builds user data
- Log Processor → Session Compilation: groups events
- Log Processor → Windows Event: creates events
- Session Compilation → Windows Event: contains events
- Session Model → Session Compilation: collects compilations
- Flask API → Graph Persistence: imports graph data
- Flask API → Graph Persistence: requests correlation
- Graph Persistence → Neo4j: writes and queries
- Browser UI → Directed Graph: draws results
- Flask API → Browser UI: serves pages
- Log Processor → Anomaly Report: generates report
