# fraoustin/nocp architecture

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

- Interactive diagram: https://gitdiagram.com/fraoustin/nocp
- Repository: https://github.com/fraoustin/nocp

## Overview

NOCP is a terminal music player for Navidrome, with configurable podcast feeds. The principal workflow is keyboard-driven browsing of server catalogs or podcast episodes, selecting audio, and playing it through VLC; users can also adjust volume and download items. The sampled implementation places the client, browser, and interaction logic in one module, so those responsibilities share its path. Some playback, download, and podcast-fetching details were omitted from the excerpts; only documented capabilities and clearly supported connections are shown.

Main entry points: [`nocp/__main__.py`](https://github.com/fraoustin/nocp/blob/main/nocp/__main__.py) (Music browser), [`nocp/locales`](https://github.com/fraoustin/nocp/tree/main/nocp/locales) (Translations)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["Terminal interface"]
  node_cli["CLI entry<br/>[__main__.py]"]
  node_browser["Music browser<br/>[__main__.py]"]
  node_help["Help overlay<br/>[__main__.py]"]
  node_volume["Volume controls<br/>[__main__.py]"]
  node_locales["Translations"]
end

subgraph group_catalog["Catalog browsing"]
  node_navclient["Navidrome client<br/>[__main__.py]"]
  node_music["Artist albums<br/>[__main__.py]"]
  node_radios["Radio stations<br/>[__main__.py]"]
  node_playlists["Playlists<br/>[__main__.py]"]
  node_podcasts["Podcast episodes<br/>[__main__.py]"]
end

subgraph group_audio["Playback and downloads"]
  node_player["Audio playback<br/>[__main__.py]"]
  node_downloads["Audio downloads<br/>[__main__.py]"]
end

subgraph group_services["External services"]
  node_server[("Navidrome server")]
  node_vlc["VLC engine"]
  node_feeds["Podcast feeds"]
end

node_user(("Listener"))

node_user -->|"starts"| node_cli
node_cli -->|"opens"| node_browser
node_user -->|"controls"| node_browser
node_browser -->|"opens"| node_help
node_browser -->|"opens"| node_volume
node_browser -->|"requests catalogs"| node_navclient
node_navclient -->|"fetches catalog"| node_server
node_browser -->|"browses"| node_music
node_browser -->|"browses"| node_radios
node_browser -->|"browses"| node_playlists
node_browser -->|"loads"| node_podcasts
node_podcasts -->|"reads episodes"| node_feeds
node_browser -->|"selects audio"| node_player
node_player -->|"gets stream URL"| node_navclient
node_player -->|"plays audio"| node_vlc
node_browser -->|"dispatches download"| node_downloads
node_cli -.->|"selects language"| node_locales

click node_cli "https://github.com/fraoustin/nocp/blob/main/nocp/__main__.py"
click node_browser "https://github.com/fraoustin/nocp/blob/main/nocp/__main__.py"
click node_help "https://github.com/fraoustin/nocp/blob/main/nocp/__main__.py"
click node_volume "https://github.com/fraoustin/nocp/blob/main/nocp/__main__.py"
click node_locales "https://github.com/fraoustin/nocp/tree/main/nocp/locales"
click node_navclient "https://github.com/fraoustin/nocp/blob/main/nocp/__main__.py"
click node_music "https://github.com/fraoustin/nocp/blob/main/nocp/__main__.py"
click node_radios "https://github.com/fraoustin/nocp/blob/main/nocp/__main__.py"
click node_playlists "https://github.com/fraoustin/nocp/blob/main/nocp/__main__.py"
click node_podcasts "https://github.com/fraoustin/nocp/blob/main/nocp/__main__.py"
click node_player "https://github.com/fraoustin/nocp/blob/main/nocp/__main__.py"
click node_downloads "https://github.com/fraoustin/nocp/blob/main/nocp/__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_browser,node_help,node_volume,node_locales toneBlue
class node_navclient,node_music,node_radios,node_playlists,node_podcasts toneAmber
class node_player,node_downloads toneMint
class node_server,node_vlc,node_feeds toneRose
class node_user toneIndigo
```

## Components

### Terminal interface

- [CLI entry](https://github.com/fraoustin/nocp/blob/main/nocp/__main__.py): `nocp/__main__.py`
- [Music browser](https://github.com/fraoustin/nocp/blob/main/nocp/__main__.py): `nocp/__main__.py`
- [Help overlay](https://github.com/fraoustin/nocp/blob/main/nocp/__main__.py): `nocp/__main__.py`
- [Volume controls](https://github.com/fraoustin/nocp/blob/main/nocp/__main__.py): `nocp/__main__.py`
- [Translations](https://github.com/fraoustin/nocp/tree/main/nocp/locales): `nocp/locales`

### Catalog browsing

- [Navidrome client](https://github.com/fraoustin/nocp/blob/main/nocp/__main__.py): `nocp/__main__.py`
- [Artist albums](https://github.com/fraoustin/nocp/blob/main/nocp/__main__.py): `nocp/__main__.py`
- [Radio stations](https://github.com/fraoustin/nocp/blob/main/nocp/__main__.py): `nocp/__main__.py`
- [Playlists](https://github.com/fraoustin/nocp/blob/main/nocp/__main__.py): `nocp/__main__.py`
- [Podcast episodes](https://github.com/fraoustin/nocp/blob/main/nocp/__main__.py): `nocp/__main__.py`

### Playback and downloads

- [Audio playback](https://github.com/fraoustin/nocp/blob/main/nocp/__main__.py): `nocp/__main__.py`
- [Audio downloads](https://github.com/fraoustin/nocp/blob/main/nocp/__main__.py): `nocp/__main__.py`

### External services

- **Navidrome server**
- **VLC engine**
- **Podcast feeds**

### Other components

- **Listener**

## Connections

- Listener → CLI entry: starts
- CLI entry → Music browser: opens
- Listener → Music browser: controls
- Music browser → Help overlay: opens
- Music browser → Volume controls: opens
- Music browser → Navidrome client: requests catalogs
- Navidrome client → Navidrome server: fetches catalog
- Music browser → Artist albums: browses
- Music browser → Radio stations: browses
- Music browser → Playlists: browses
- Music browser → Podcast episodes: loads
- Podcast episodes → Podcast feeds: reads episodes
- Music browser → Audio playback: selects audio
- Audio playback → Navidrome client: gets stream URL
- Audio playback → VLC engine: plays audio
- Music browser → Audio downloads: dispatches download
- CLI entry → Translations: selects language
