# cjb900/of-scraper-gui architecture

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

## Overview

OF-Scraper GUI Patch adds a PyQt6 front end to supported OF-Scraper installations. The documented user workflow is to choose a scrape action, content areas and filters, select models, review or run the scrape, then browse results or selectively download items. The graph combines that documented flow with the sampled manager’s GUI dispatch and plugin manager behavior; most GUI-to-backend wiring was not sampled, so those links reflect documented responsibilities rather than inspected call sites.

Main entry points: [`OF-Scraper-3.14.7/ofscraper/gui/utils/workflow.py`](https://github.com/cjb900/of-scraper-gui/blob/main/OF-Scraper-3.14.7/ofscraper/gui/utils/workflow.py) (GUI workflow), [`OF-Scraper-3.14.7/ofscraper/managers/sessionmanager/sessionmanager.py`](https://github.com/cjb900/of-scraper-gui/blob/main/OF-Scraper-3.14.7/ofscraper/managers/sessionmanager/sessionmanager.py) (Request sessions), [`OF-Scraper-3.14.7/ofscraper/gui/pages/action_page.py`](https://github.com/cjb900/of-scraper-gui/blob/main/OF-Scraper-3.14.7/ofscraper/gui/pages/action_page.py) (Workflow pages), [`OF-Scraper-3.14.7/ofscraper/managers/manager.py`](https://github.com/cjb900/of-scraper-gui/blob/main/OF-Scraper-3.14.7/ofscraper/managers/manager.py) (CLI manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Entry and GUI"]
  node_cli["CLI manager<br/>[manager.py]"]
  node_gui["GUI app<br/>[app.py]"]
  node_pages["Workflow pages<br/>[action_page.py]"]
  node_workflow["GUI workflow<br/>[workflow.py]"]
  node_dialogs["Settings dialogs<br/>[config_dialog.py]"]
end

subgraph group_scrape["Scrape workflow"]
  node_check["Check tables<br/>[table_page.py]"]
  node_scrape["Scrape commands"]
  node_data["Content APIs<br/>[timeline.py]"]
  node_filter["Media filters"]
  node_metadata["Metadata actions"]
  node_download["Download actions"]
  node_like["Like actions"]
end

subgraph group_backend["Scraper runtime"]
  node_session["Request sessions<br/>[sessionmanager.py]"]
  node_auth["Authentication<br/>[request.py]"]
end

subgraph group_integrations["State and extensions"]
  node_database[("Local database<br/>[operations.py]")]
  node_files[("Media files")]
  node_plugins["Plugin manager<br/>[manager.py]"]
  node_plugin["Optional plugins<br/>[main.py]"]
end

node_user(("User"))
node_onlyfans{{"OnlyFans service"}}

node_user -->|"starts"| node_cli
node_cli -->|"launches"| node_gui
node_user -->|"selects options"| node_pages
node_gui -->|"presents"| node_pages
node_pages -->|"configures run"| node_workflow
node_workflow -->|"dispatches"| node_scrape
node_workflow -->|"opens settings"| node_dialogs
node_workflow -->|"opens checks"| node_check
node_scrape -->|"fetches content"| node_data
node_scrape -->|"filters media"| node_filter
node_scrape -->|"dispatches metadata"| node_metadata
node_scrape -->|"dispatches downloads"| node_download
node_scrape -->|"dispatches likes"| node_like
node_data -->|"requests through"| node_session
node_metadata -->|"updates records"| node_database
node_download -->|"writes media"| node_files
node_session -->|"signs requests"| node_auth
node_session -->|"requests content"| node_onlyfans
node_plugins -.->|"loads plugin"| node_plugin
node_plugin -.->|"probes service"| node_onlyfans

click node_cli "https://github.com/cjb900/of-scraper-gui/blob/main/OF-Scraper-3.14.7/ofscraper/managers/manager.py"
click node_gui "https://github.com/cjb900/of-scraper-gui/blob/main/OF-Scraper-3.14.7/ofscraper/gui/app.py"
click node_pages "https://github.com/cjb900/of-scraper-gui/blob/main/OF-Scraper-3.14.7/ofscraper/gui/pages/action_page.py"
click node_workflow "https://github.com/cjb900/of-scraper-gui/blob/main/OF-Scraper-3.14.7/ofscraper/gui/utils/workflow.py"
click node_dialogs "https://github.com/cjb900/of-scraper-gui/blob/main/OF-Scraper-3.14.7/ofscraper/gui/dialogs/config_dialog.py"
click node_check "https://github.com/cjb900/of-scraper-gui/blob/main/OF-Scraper-3.14.7/ofscraper/gui/pages/table_page.py"
click node_data "https://github.com/cjb900/of-scraper-gui/blob/main/OF-Scraper-3.14.7/ofscraper/data/api/timeline.py"
click node_session "https://github.com/cjb900/of-scraper-gui/blob/main/OF-Scraper-3.14.7/ofscraper/managers/sessionmanager/sessionmanager.py"
click node_auth "https://github.com/cjb900/of-scraper-gui/blob/main/OF-Scraper-3.14.7/ofscraper/utils/auth/request.py"
click node_database "https://github.com/cjb900/of-scraper-gui/blob/main/OF-Scraper-3.14.7/ofscraper/db/operations.py"
click node_plugins "https://github.com/cjb900/of-scraper-gui/blob/main/OF-Scraper-3.14.7/ofscraper/plugins/manager.py"
click node_plugin "https://github.com/cjb900/of-scraper-gui/blob/main/Available%20Plugins/live_stream_monitor/main.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_cli,node_gui,node_pages,node_workflow,node_dialogs,node_user toneBlue
class node_check,node_scrape,node_data,node_filter,node_metadata,node_download,node_like toneAmber
class node_session,node_auth toneMint
class node_database,node_files,node_plugins,node_plugin toneRose
class node_onlyfans toneIndigo
```

## Components

### Entry and GUI

- [CLI manager](https://github.com/cjb900/of-scraper-gui/blob/main/OF-Scraper-3.14.7/ofscraper/managers/manager.py): `OF-Scraper-3.14.7/ofscraper/managers/manager.py`
- [GUI app](https://github.com/cjb900/of-scraper-gui/blob/main/OF-Scraper-3.14.7/ofscraper/gui/app.py): `OF-Scraper-3.14.7/ofscraper/gui/app.py`
- [Workflow pages](https://github.com/cjb900/of-scraper-gui/blob/main/OF-Scraper-3.14.7/ofscraper/gui/pages/action_page.py): `OF-Scraper-3.14.7/ofscraper/gui/pages/action_page.py`
- [GUI workflow](https://github.com/cjb900/of-scraper-gui/blob/main/OF-Scraper-3.14.7/ofscraper/gui/utils/workflow.py): `OF-Scraper-3.14.7/ofscraper/gui/utils/workflow.py`
- [Settings dialogs](https://github.com/cjb900/of-scraper-gui/blob/main/OF-Scraper-3.14.7/ofscraper/gui/dialogs/config_dialog.py): `OF-Scraper-3.14.7/ofscraper/gui/dialogs/config_dialog.py`

### Scrape workflow

- [Check tables](https://github.com/cjb900/of-scraper-gui/blob/main/OF-Scraper-3.14.7/ofscraper/gui/pages/table_page.py): `OF-Scraper-3.14.7/ofscraper/gui/pages/table_page.py`
- **Scrape commands**
- [Content APIs](https://github.com/cjb900/of-scraper-gui/blob/main/OF-Scraper-3.14.7/ofscraper/data/api/timeline.py): `OF-Scraper-3.14.7/ofscraper/data/api/timeline.py`
- **Media filters**
- **Metadata actions**
- **Download actions**
- **Like actions**

### Scraper runtime

- [Request sessions](https://github.com/cjb900/of-scraper-gui/blob/main/OF-Scraper-3.14.7/ofscraper/managers/sessionmanager/sessionmanager.py): `OF-Scraper-3.14.7/ofscraper/managers/sessionmanager/sessionmanager.py`
- [Authentication](https://github.com/cjb900/of-scraper-gui/blob/main/OF-Scraper-3.14.7/ofscraper/utils/auth/request.py): `OF-Scraper-3.14.7/ofscraper/utils/auth/request.py`

### State and extensions

- [Local database](https://github.com/cjb900/of-scraper-gui/blob/main/OF-Scraper-3.14.7/ofscraper/db/operations.py): `OF-Scraper-3.14.7/ofscraper/db/operations.py`
- **Media files**
- [Plugin manager](https://github.com/cjb900/of-scraper-gui/blob/main/OF-Scraper-3.14.7/ofscraper/plugins/manager.py): `OF-Scraper-3.14.7/ofscraper/plugins/manager.py`
- [Optional plugins](https://github.com/cjb900/of-scraper-gui/blob/main/Available%20Plugins/live_stream_monitor/main.py): `Available Plugins/live_stream_monitor/main.py`

### Other components

- **User**
- **OnlyFans service**

## Connections

- User → CLI manager: starts
- CLI manager → GUI app: launches
- User → Workflow pages: selects options
- GUI app → Workflow pages: presents
- Workflow pages → GUI workflow: configures run
- GUI workflow → Scrape commands: dispatches
- GUI workflow → Settings dialogs: opens settings
- GUI workflow → Check tables: opens checks
- Scrape commands → Content APIs: fetches content
- Scrape commands → Media filters: filters media
- Scrape commands → Metadata actions: dispatches metadata
- Scrape commands → Download actions: dispatches downloads
- Scrape commands → Like actions: dispatches likes
- Content APIs → Request sessions: requests through
- Metadata actions → Local database: updates records
- Download actions → Media files: writes media
- Request sessions → Authentication: signs requests
- Request sessions → OnlyFans service: requests content
- Plugin manager → Optional plugins: loads plugin
- Optional plugins → OnlyFans service: probes service
