# pomercier/sickshift architecture

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

- Interactive diagram: https://gitdiagram.com/pomercier/sickshift
- Repository: https://github.com/pomercier/sickshift

## Overview

SickShift is a SickGear-derived TV-library manager with a cinema-styled web experience and a dedicated dashboard. Users manage shows and episodes, track library and airing status, search for missing episodes, and can preview local video clips before watching. The graph separates the inherited management engine, dashboard and web experience, and external integrations. The README documents several capabilities whose implementation files were not sampled; those branches are shown at their supported directory level, and unverified internal links are omitted or marked dashed.

Main entry points: [`SickBeard.py`](https://github.com/pomercier/sickshift/blob/main/SickBeard.py) (Application), [`sickshift/search.py`](https://github.com/pomercier/sickshift/blob/main/sickshift/search.py) (Episode search), [`sickshift_dashboard/routes.py`](https://github.com/pomercier/sickshift/blob/main/sickshift_dashboard/routes.py) (Dashboard routes), [`sickshift_dashboard/app.py`](https://github.com/pomercier/sickshift/blob/main/sickshift_dashboard/app.py) (Dashboard app)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web experience"]
  node_webui["Show management UI"]
end

subgraph group_dashboard["Dashboard"]
  node_dashboard_app["Dashboard app<br/>[app.py]"]
  node_dashboard_routes["Dashboard routes<br/>[routes.py]"]
  node_dashboard_services["Dashboard services<br/>[services.py]"]
  node_dashboard_state["Dashboard state<br/>[state.py]"]
  node_preview["Local previews"]
end

subgraph group_engine["TV management engine"]
  node_app["Application<br/>[SickBeard.py]"]
  node_search["Episode search<br/>[search.py]"]
  node_search_queue["Search queue<br/>[search_queue.py]"]
  node_name_parser["Release parser<br/>[parser.py]"]
  node_main_db[("TV database<br/>[mainDB.py]")]
end

subgraph group_integrations["External integrations"]
  node_ffmpeg["FFmpeg tools"]
  node_providers["Search providers<br/>[generic.py]"]
  node_metadata["Show metadata"]
  node_notifications["Notifications"]
  node_download_clients["Download clients"]
end

node_user(("TV library user"))

node_user -->|"manages shows"| node_webui
node_user -->|"views library"| node_dashboard_app
node_dashboard_app -->|"registers routes"| node_dashboard_routes
node_dashboard_app -->|"initializes state"| node_dashboard_state
node_dashboard_routes -->|"calls services"| node_dashboard_services
node_dashboard_routes -->|"reads snapshot"| node_dashboard_state
node_dashboard_routes -->|"requests preview"| node_preview
node_preview -.->|"encodes clips"| node_ffmpeg
node_app -.->|"uses search engine"| node_search
node_search -->|"queries providers"| node_providers
node_search -->|"uses TV data"| node_main_db
node_search -.->|"dispatches searches"| node_search_queue
node_app -.->|"uses metadata"| node_metadata
node_app -.->|"supports notifications"| node_notifications
node_app -.->|"supports download clients"| node_download_clients
node_app -.->|"manages library data"| node_main_db
node_search -.->|"parses releases"| node_name_parser

click node_app "https://github.com/pomercier/sickshift/blob/main/SickBeard.py"
click node_webui "https://github.com/pomercier/sickshift/tree/main/gui/slick/js"
click node_dashboard_app "https://github.com/pomercier/sickshift/blob/main/sickshift_dashboard/app.py"
click node_dashboard_routes "https://github.com/pomercier/sickshift/blob/main/sickshift_dashboard/routes.py"
click node_dashboard_services "https://github.com/pomercier/sickshift/blob/main/sickshift_dashboard/services.py"
click node_dashboard_state "https://github.com/pomercier/sickshift/blob/main/sickshift_dashboard/state.py"
click node_preview "https://github.com/pomercier/sickshift/tree/main/sickshift_dashboard"
click node_search "https://github.com/pomercier/sickshift/blob/main/sickshift/search.py"
click node_search_queue "https://github.com/pomercier/sickshift/blob/main/sickshift/search_queue.py"
click node_providers "https://github.com/pomercier/sickshift/blob/main/sickshift/providers/generic.py"
click node_name_parser "https://github.com/pomercier/sickshift/blob/main/sickshift/name_parser/parser.py"
click node_main_db "https://github.com/pomercier/sickshift/blob/main/sickshift/databases/mainDB.py"
click node_metadata "https://github.com/pomercier/sickshift/tree/main/lib/api_tvdb"
click node_notifications "https://github.com/pomercier/sickshift/tree/main/lib/apprise"
click node_download_clients "https://github.com/pomercier/sickshift/tree/main/sickshift/clients"

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_webui,node_user toneBlue
class node_dashboard_app,node_dashboard_routes,node_dashboard_services,node_dashboard_state,node_preview toneAmber
class node_app,node_search,node_search_queue,node_name_parser,node_main_db toneMint
class node_ffmpeg,node_providers,node_metadata,node_notifications,node_download_clients toneRose
```

## Components

### Web experience

- [Show management UI](https://github.com/pomercier/sickshift/tree/main/gui/slick/js): `gui/slick/js`

### Dashboard

- [Dashboard app](https://github.com/pomercier/sickshift/blob/main/sickshift_dashboard/app.py): `sickshift_dashboard/app.py`
- [Dashboard routes](https://github.com/pomercier/sickshift/blob/main/sickshift_dashboard/routes.py): `sickshift_dashboard/routes.py`
- [Dashboard services](https://github.com/pomercier/sickshift/blob/main/sickshift_dashboard/services.py): `sickshift_dashboard/services.py`
- [Dashboard state](https://github.com/pomercier/sickshift/blob/main/sickshift_dashboard/state.py): `sickshift_dashboard/state.py`
- [Local previews](https://github.com/pomercier/sickshift/tree/main/sickshift_dashboard): `sickshift_dashboard`

### TV management engine

- [Application](https://github.com/pomercier/sickshift/blob/main/SickBeard.py): `SickBeard.py`
- [Episode search](https://github.com/pomercier/sickshift/blob/main/sickshift/search.py): `sickshift/search.py`
- [Search queue](https://github.com/pomercier/sickshift/blob/main/sickshift/search_queue.py): `sickshift/search_queue.py`
- [Release parser](https://github.com/pomercier/sickshift/blob/main/sickshift/name_parser/parser.py): `sickshift/name_parser/parser.py`
- [TV database](https://github.com/pomercier/sickshift/blob/main/sickshift/databases/mainDB.py): `sickshift/databases/mainDB.py`

### External integrations

- **FFmpeg tools**
- [Search providers](https://github.com/pomercier/sickshift/blob/main/sickshift/providers/generic.py): `sickshift/providers/generic.py`
- [Show metadata](https://github.com/pomercier/sickshift/tree/main/lib/api_tvdb): `lib/api_tvdb`
- [Notifications](https://github.com/pomercier/sickshift/tree/main/lib/apprise): `lib/apprise`
- [Download clients](https://github.com/pomercier/sickshift/tree/main/sickshift/clients): `sickshift/clients`

### Other components

- **TV library user**

## Connections

- TV library user → Show management UI: manages shows
- TV library user → Dashboard app: views library
- Dashboard app → Dashboard routes: registers routes (evidence: `sickshift_dashboard/app.py`)
- Dashboard app → Dashboard state: initializes state (evidence: `sickshift_dashboard/app.py`)
- Dashboard routes → Dashboard services: calls services (evidence: `sickshift_dashboard/routes.py`)
- Dashboard routes → Dashboard state: reads snapshot (evidence: `sickshift_dashboard/routes.py`)
- Dashboard routes → Local previews: requests preview (evidence: `sickshift_dashboard/routes.py`)
- Local previews → FFmpeg tools: encodes clips
- Application → Episode search: uses search engine
- Episode search → Search providers: queries providers (evidence: `sickshift/search.py`)
- Episode search → TV database: uses TV data (evidence: `sickshift/search.py`)
- Episode search → Search queue: dispatches searches
- Application → Show metadata: uses metadata
- Application → Notifications: supports notifications
- Application → Download clients: supports download clients
- Application → TV database: manages library data
- Episode search → Release parser: parses releases
