# shynobisuikast/kaaninhos-mp3 architecture

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

- Interactive diagram: https://gitdiagram.com/shynobisuikast/kaaninhos-mp3
- Repository: https://github.com/shynobisuikast/kaaninhos-mp3

## Overview

kaaninho’s mp3 is an Electron desktop music player. The renderer presents playback, search, queue and playlist workflows; it requests YouTube search and stream resolution from the main process, then plays tracks through AudioManager. Local files, playlist importing, mini-player controls, themes, global shortcuts and the basketball mini-game are additional capabilities. Edges follow excerpted calls or README descriptions; unsampled renderer and main-process details limit some connections.

Main entry points: [`src/js/renderer.js`](https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/src/js/renderer.js) (Player UI), [`main.js`](https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/main.js) (Electron main), [`src/js/playlistImporter.js`](https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/src/js/playlistImporter.js) (Playlist importer), [`src/js/playlist.js`](https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/src/js/playlist.js) (Playlist manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_desktop["Desktop shell"]
  node_electron["Electron main<br/>[main.js]"]
  node_youtube["YouTube search"]
  node_shortcuts["Global shortcuts<br/>[main.js]"]
  node_miniplayer["Mini-player window<br/>[main.js]"]
end

subgraph group_playback["Playback experience"]
  node_view["Player UI<br/>[renderer.js]"]
  node_audio["Audio engine<br/>[audioManager.js]"]
  node_queue["Playback queue<br/>[renderer.js]"]
  node_effects["Audio effects<br/>[audioManager.js]"]
  node_themes["Themes<br/>[renderer.js]"]
end

subgraph group_library["Music library"]
  node_local["Local music<br/>[renderer.js]"]
  node_cover["Cover extraction<br/>[main.js]"]
  node_playlists["Playlist manager<br/>[playlist.js]"]
  node_playliststore[("Playlist files<br/>[playlist.js]")]
  node_importui["Playlist import UI<br/>[renderer.js]"]
  node_importer["Playlist importer"]
end

subgraph group_extras["Player extras"]
  node_game["Basketball game<br/>[game.js]"]
end

node_listener(("Listener"))
node_ytdlp["yt-dlp streams"]
node_spotify["Spotify playlists"]
node_youtubepl["YouTube playlists"]

node_listener -->|"uses"| node_view
node_view -->|"requests search"| node_electron
node_electron -->|"searches tracks"| node_youtube
node_view -->|"requests stream"| node_electron
node_electron -->|"resolves stream"| node_ytdlp
node_view -->|"plays tracks"| node_audio
node_view -->|"manages tracks"| node_queue
node_view -->|"selects files"| node_local
node_view -->|"requests cover"| node_electron
node_electron -->|"extracts artwork"| node_cover
node_view -->|"manages playlists"| node_playlists
node_playlists -->|"reads and writes"| node_playliststore
node_view -->|"imports playlists"| node_importui
node_importui -->|"requests import"| node_electron
node_electron -->|"dispatches import"| node_importer
node_importer -->|"fetches playlist"| node_spotify
node_importer -->|"extracts tracks"| node_youtubepl
node_view -->|"receives controls"| node_shortcuts
node_shortcuts -->|"dispatches keys"| node_view
node_view -->|"resizes window"| node_miniplayer
node_view -->|"sets effects"| node_effects
node_listener -->|"chooses theme"| node_themes
node_listener -->|"plays mini-game"| node_game

click node_electron "https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/main.js"
click node_view "https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/src/js/renderer.js"
click node_audio "https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/src/js/audioManager.js"
click node_queue "https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/src/js/renderer.js"
click node_local "https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/src/js/renderer.js"
click node_cover "https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/main.js"
click node_playlists "https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/src/js/playlist.js"
click node_playliststore "https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/src/js/playlist.js"
click node_importui "https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/src/js/renderer.js"
click node_importer "https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/src/js/playlistImporter.js"
click node_shortcuts "https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/main.js"
click node_miniplayer "https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/main.js"
click node_effects "https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/src/js/audioManager.js"
click node_themes "https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/src/js/renderer.js"
click node_game "https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/src/js/game.js"

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_electron,node_youtube,node_shortcuts,node_miniplayer toneBlue
class node_view,node_audio,node_queue,node_effects,node_themes toneAmber
class node_local,node_cover,node_playlists,node_playliststore,node_importui,node_importer toneMint
class node_game toneRose
class node_listener,node_ytdlp,node_spotify,node_youtubepl toneIndigo
```

## Components

### Desktop shell

- [Electron main](https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/main.js): `main.js`
- **YouTube search**
- [Global shortcuts](https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/main.js): `main.js`
- [Mini-player window](https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/main.js): `main.js`

### Playback experience

- [Player UI](https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/src/js/renderer.js): `src/js/renderer.js`
- [Audio engine](https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/src/js/audioManager.js): `src/js/audioManager.js`
- [Playback queue](https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/src/js/renderer.js): `src/js/renderer.js`
- [Audio effects](https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/src/js/audioManager.js): `src/js/audioManager.js`
- [Themes](https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/src/js/renderer.js): `src/js/renderer.js`

### Music library

- [Local music](https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/src/js/renderer.js): `src/js/renderer.js`
- [Cover extraction](https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/main.js): `main.js`
- [Playlist manager](https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/src/js/playlist.js): `src/js/playlist.js`
- [Playlist files](https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/src/js/playlist.js): `src/js/playlist.js`
- [Playlist import UI](https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/src/js/renderer.js): `src/js/renderer.js`
- [Playlist importer](https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/src/js/playlistImporter.js): `src/js/playlistImporter.js`

### Player extras

- [Basketball game](https://github.com/shynobisuikast/kaaninhos-mp3/blob/master/src/js/game.js): `src/js/game.js`

### Other components

- **Listener**
- **yt-dlp streams**
- **Spotify playlists**
- **YouTube playlists**

## Connections

- Listener → Player UI: uses (evidence: `README.md`)
- Player UI → Electron main: requests search (evidence: `README.md`)
- Electron main → YouTube search: searches tracks (evidence: `main.js`)
- Player UI → Electron main: requests stream (evidence: `main.js`)
- Electron main → yt-dlp streams: resolves stream (evidence: `main.js`)
- Player UI → Audio engine: plays tracks (evidence: `src/js/renderer.js`)
- Player UI → Playback queue: manages tracks (evidence: `README.md`)
- Player UI → Local music: selects files (evidence: `README.md`)
- Player UI → Electron main: requests cover (evidence: `src/js/renderer.js`)
- Electron main → Cover extraction: extracts artwork (evidence: `main.js`)
- Player UI → Playlist manager: manages playlists (evidence: `src/js/renderer.js`)
- Playlist manager → Playlist files: reads and writes (evidence: `src/js/playlist.js`)
- Player UI → Playlist import UI: imports playlists (evidence: `README.md`)
- Playlist import UI → Electron main: requests import (evidence: `main.js`)
- Electron main → Playlist importer: dispatches import (evidence: `main.js`)
- Playlist importer → Spotify playlists: fetches playlist (evidence: `src/js/playlistImporter.js`)
- Playlist importer → YouTube playlists: extracts tracks (evidence: `src/js/playlistImporter.js`)
- Player UI → Global shortcuts: receives controls (evidence: `README.md`)
- Global shortcuts → Player UI: dispatches keys (evidence: `main.js`)
- Player UI → Mini-player window: resizes window (evidence: `main.js`)
- Player UI → Audio effects: sets effects (evidence: `README.md`)
- Listener → Themes: chooses theme (evidence: `README.md`)
- Listener → Basketball game: plays mini-game (evidence: `README.md`)
