# cadenbrannan2004-pixel/sekiro-tracker architecture

> Architecture diagram of the GitHub repository cadenbrannan2004-pixel/sekiro-tracker, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-10-19). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/cadenbrannan2004-pixel/sekiro-tracker
- Repository: https://github.com/cadenbrannan2004-pixel/sekiro-tracker

## Overview

Sekiro Achievement Tracker reads save slots, derives collectible, inventory, and stat progress, then publishes per-slot snapshots to a local dashboard; endings remain a manually maintained checklist. The graph also preserves the documented flag-discovery workflow. Source excerpts establish the main parsing and report flow; some module relationships are supported only by the SOURCE INDEX, and the browser-to-API link is not directly shown in the sampled frontend source.

Main entry points: [`tracker.py`](https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/tracker.py) (Save Watcher), [`achievements.py`](https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/achievements.py) (Report Builder), [`server.py`](https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/server.py) (Flask Server), [`bead_map.py`](https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/bead_map.py) (Prayer Beads)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Save Tracking"]
  node_launcher["App Launcher<br/>[SekiroApp.py]"]
  node_watcher["Save Watcher<br/>[tracker.py]"]
  node_saveparser["Save Parser<br/>[save_reader.py]"]
  node_snapshot["Progress Snapshot"]
end

subgraph group_progress["Progress Categories"]
  node_report["Report Builder<br/>[achievements.py]"]
  node_beads["Prayer Beads<br/>[bead_map.py]"]
  node_gourds["Gourd Seeds<br/>[gourd_map.py]"]
  node_flags["Event Flags<br/>[event_flags.py]"]
  node_prosthetics["Prosthetic Tools<br/>[prosthetic_map.py]"]
  node_inventory["Inventory Reader"]
  node_quantities["Quantity Targets"]
  node_stats["Slot Stats<br/>[stats_reader.py]"]
  node_endings["Ending Checklist<br/>[endings.py]"]
end

subgraph group_web["Dashboard"]
  node_server["Flask Server<br/>[server.py]"]
  node_frontend["Web Dashboard<br/>[app.js]"]
  node_html["Dashboard Page<br/>[index.html]"]
end

subgraph group_research["Flag Discovery"]
  node_flagresearch["Offset Scanner<br/>[find_offset.py]"]
  node_flagscan["Flag Snapshot Scan<br/>[scan_offset.py]"]
end

node_player(("Player"))
node_savefile["Sekiro Save"]

node_player -->|"updates"| node_savefile
node_launcher -->|"starts"| node_watcher
node_watcher -->|"loads slots"| node_saveparser
node_savefile -->|"read by"| node_watcher
node_watcher -->|"builds report"| node_report
node_watcher -->|"reads stats"| node_stats
node_watcher -->|"writes JSON"| node_snapshot
node_report -->|"reads state"| node_beads
node_report -->|"reads state"| node_gourds
node_report -->|"reads ownership"| node_prosthetics
node_report -->|"reads counts"| node_quantities
node_beads -->|"checks flags"| node_flags
node_gourds -->|"checks flags"| node_flags
node_prosthetics -->|"reads items"| node_inventory
node_quantities -->|"reads quantities"| node_inventory
node_server -->|"reads JSON"| node_snapshot
node_server -->|"loads definitions"| node_endings
node_server -->|"serves page"| node_html
node_frontend -.->|"requests API"| node_server
node_player -.->|"views progress"| node_frontend
node_flagresearch -->|"loads slots"| node_saveparser
node_flagscan -->|"loads slots"| node_saveparser
node_flagscan -->|"uses known flags"| node_beads

click node_launcher "https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/SekiroApp.py"
click node_watcher "https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/tracker.py"
click node_saveparser "https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/save_reader.py"
click node_report "https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/achievements.py"
click node_beads "https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/bead_map.py"
click node_gourds "https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/gourd_map.py"
click node_flags "https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/event_flags.py"
click node_prosthetics "https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/prosthetic_map.py"
click node_inventory "https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/inventory_reader.py"
click node_quantities "https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/quantity_targets.py"
click node_stats "https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/stats_reader.py"
click node_endings "https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/endings.py"
click node_server "https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/server.py"
click node_frontend "https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/web/app.js"
click node_html "https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/web/index.html"
click node_flagresearch "https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/find_offset.py"
click node_flagscan "https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/scan_offset.py"

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_launcher,node_watcher,node_saveparser,node_snapshot toneBlue
class node_report,node_beads,node_gourds,node_flags,node_prosthetics,node_inventory,node_quantities,node_stats,node_endings toneAmber
class node_server,node_frontend,node_html toneMint
class node_flagresearch,node_flagscan toneRose
class node_player,node_savefile toneIndigo
```

## Components

### Save Tracking

- [App Launcher](https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/SekiroApp.py): `SekiroApp.py`
- [Save Watcher](https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/tracker.py): `tracker.py`
- [Save Parser](https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/save_reader.py): `save_reader.py`
- **Progress Snapshot**

### Progress Categories

- [Report Builder](https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/achievements.py): `achievements.py`
- [Prayer Beads](https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/bead_map.py): `bead_map.py`
- [Gourd Seeds](https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/gourd_map.py): `gourd_map.py`
- [Event Flags](https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/event_flags.py): `event_flags.py`
- [Prosthetic Tools](https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/prosthetic_map.py): `prosthetic_map.py`
- [Inventory Reader](https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/inventory_reader.py): `inventory_reader.py`
- [Quantity Targets](https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/quantity_targets.py): `quantity_targets.py`
- [Slot Stats](https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/stats_reader.py): `stats_reader.py`
- [Ending Checklist](https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/endings.py): `endings.py`

### Dashboard

- [Flask Server](https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/server.py): `server.py`
- [Web Dashboard](https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/web/app.js): `web/app.js`
- [Dashboard Page](https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/web/index.html): `web/index.html`

### Flag Discovery

- [Offset Scanner](https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/find_offset.py): `find_offset.py`
- [Flag Snapshot Scan](https://github.com/cadenbrannan2004-pixel/sekiro-tracker/blob/main/scan_offset.py): `scan_offset.py`

### Other components

- **Player**
- **Sekiro Save**

## Connections

- Player → Sekiro Save: updates (evidence: `README.md`)
- App Launcher → Save Watcher: starts (evidence: `SekiroApp.py`)
- Save Watcher → Save Parser: loads slots (evidence: `tracker.py`)
- Sekiro Save → Save Watcher: read by (evidence: `tracker.py`)
- Save Watcher → Report Builder: builds report (evidence: `tracker.py`)
- Save Watcher → Slot Stats: reads stats (evidence: `tracker.py`)
- Save Watcher → Progress Snapshot: writes JSON (evidence: `tracker.py`)
- Report Builder → Prayer Beads: reads state (evidence: `achievements.py`)
- Report Builder → Gourd Seeds: reads state (evidence: `achievements.py`)
- Report Builder → Prosthetic Tools: reads ownership (evidence: `achievements.py`)
- Report Builder → Quantity Targets: reads counts (evidence: `achievements.py`)
- Prayer Beads → Event Flags: checks flags (evidence: `bead_map.py`)
- Gourd Seeds → Event Flags: checks flags (evidence: `gourd_map.py`)
- Prosthetic Tools → Inventory Reader: reads items (evidence: `prosthetic_map.py`)
- Quantity Targets → Inventory Reader: reads quantities (evidence: `quantity_targets.py`)
- Flask Server → Progress Snapshot: reads JSON (evidence: `server.py`)
- Flask Server → Ending Checklist: loads definitions (evidence: `server.py`)
- Flask Server → Dashboard Page: serves page (evidence: `server.py`)
- Web Dashboard → Flask Server: requests API
- Player → Web Dashboard: views progress
- Offset Scanner → Save Parser: loads slots (evidence: `find_offset.py`)
- Flag Snapshot Scan → Save Parser: loads slots (evidence: `scan_offset.py`)
- Flag Snapshot Scan → Prayer Beads: uses known flags (evidence: `scan_offset.py`)
