# damantha126/anki-vector-music architecture

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

- Interactive diagram: https://gitdiagram.com/damantha126/anki-vector-music
- Repository: https://github.com/damantha126/anki-vector-music

## Overview

Anki Vector Music is a Telegram bot for playing requested music in group and channel voice chats. Users request or search for tracks; the bot obtains audio, converts it for streaming, and controls playback and queued tracks. Separate command modules provide playback controls, channel playback and administration, alongside userbot joining and song lookup. The README also advertises Deezer/Saavn, playlists, thumbnails and a settings panel; their implementations were not sampled, so those capabilities are represented only where documented. Relationships involving unsampled modules are omitted unless documented.

Main entry points: [`AnkiVectorMusic/modules/play.py`](https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/modules/play.py) (Group playback), [`AnkiVectorMusic/modules/channelplay.py`](https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/modules/channelplay.py) (Channel playback), [`AnkiVectorMusic/services/callsmusic/callsmusic.py`](https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/services/callsmusic/callsmusic.py) (Voice-chat playback), [`AnkiVectorMusic/services/queues/queues.py`](https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/services/queues/queues.py) (Track queues)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_requests["Requests and commands"]
  node_play["Group playback<br/>[play.py]"]
  node_channelplay["Channel playback<br/>[channelplay.py]"]
  node_song["Song lookup<br/>[song.py]"]
  node_ytsearch["YouTube search<br/>[ytsearch.py]"]
  node_admincmd["Playback administration<br/>[admins.py]"]
  node_channeladmin["Channel administration<br/>[channeladmin.py]"]
end

subgraph group_audio["Audio preparation"]
  node_download["YouTube downloader<br/>[youtube.py]"]
  node_converter["Audio converter<br/>[converter.py]"]
  node_cover["Track artwork<br/>[play.py]"]
end

subgraph group_stream["Streaming and queues"]
  node_player["Voice-chat playback<br/>[callsmusic.py]"]
  node_queues["Track queues<br/>[queues.py]"]
end

subgraph group_support["Access and channel support"]
  node_channelhelper["Channel music routing<br/>[channelmusic.py]"]
  node_userbot["Userbot joining<br/>[userbotjoin.py]"]
  node_auth["Admin authorization<br/>[admins.py]"]
  node_admincache[("Admin cache<br/>[admins.py]")]
  node_voiceend["Voice-chat end handler"]
end

node_users(("Telegram users"))
node_telegram(("Telegram"))
node_deezer(("Deezer / Saavn"))

node_users -->|"send commands"| node_telegram
node_telegram -.->|"routes commands"| node_play
node_play -->|"downloads audio"| node_download
node_play -->|"converts audio"| node_converter
node_play -->|"generates artwork"| node_cover
node_play -->|"enqueues tracks"| node_queues
node_play -->|"starts stream"| node_player
node_channelplay -->|"downloads audio"| node_download
node_channelplay -->|"converts audio"| node_converter
node_channelplay -->|"enqueues tracks"| node_queues
node_channelplay -->|"starts stream"| node_player
node_player -->|"advances tracks"| node_queues
node_song -->|"uses playback"| node_play
node_admincmd -->|"controls playback"| node_player
node_channeladmin -->|"controls playback"| node_player
node_play -->|"checks access"| node_auth
node_auth -->|"reads and updates"| node_admincache
node_channelplay -->|"resolves chat"| node_channelhelper
node_voiceend -->|"handles ended call"| node_player
node_users -.->|"searches tracks"| node_song
node_channelplay -.->|"may join voice chat"| node_userbot
node_deezer -.->|"provides playback"| node_play

click node_play "https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/modules/play.py"
click node_channelplay "https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/modules/channelplay.py"
click node_song "https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/modules/song.py"
click node_ytsearch "https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/modules/ytsearch.py"
click node_admincmd "https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/modules/admins.py"
click node_channeladmin "https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/modules/channeladmin.py"
click node_download "https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/services/downloaders/youtube.py"
click node_converter "https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/services/converter/converter.py"
click node_cover "https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/modules/play.py"
click node_player "https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/services/callsmusic/callsmusic.py"
click node_queues "https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/services/queues/queues.py"
click node_channelhelper "https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/helpers/channelmusic.py"
click node_userbot "https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/modules/userbotjoin.py"
click node_auth "https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/helpers/admins.py"
click node_admincache "https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/function/admins.py"
click node_voiceend "https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/modules/voice_chat_ended.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_play,node_channelplay,node_song,node_ytsearch,node_admincmd,node_channeladmin,node_users toneBlue
class node_download,node_converter,node_cover toneAmber
class node_player,node_queues toneMint
class node_channelhelper,node_userbot,node_auth,node_admincache,node_voiceend toneRose
class node_telegram,node_deezer toneIndigo
```

## Components

### Requests and commands

- [Group playback](https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/modules/play.py): `AnkiVectorMusic/modules/play.py`
- [Channel playback](https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/modules/channelplay.py): `AnkiVectorMusic/modules/channelplay.py`
- [Song lookup](https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/modules/song.py): `AnkiVectorMusic/modules/song.py`
- [YouTube search](https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/modules/ytsearch.py): `AnkiVectorMusic/modules/ytsearch.py`
- [Playback administration](https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/modules/admins.py): `AnkiVectorMusic/modules/admins.py`
- [Channel administration](https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/modules/channeladmin.py): `AnkiVectorMusic/modules/channeladmin.py`

### Audio preparation

- [YouTube downloader](https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/services/downloaders/youtube.py): `AnkiVectorMusic/services/downloaders/youtube.py`
- [Audio converter](https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/services/converter/converter.py): `AnkiVectorMusic/services/converter/converter.py`
- [Track artwork](https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/modules/play.py): `AnkiVectorMusic/modules/play.py`

### Streaming and queues

- [Voice-chat playback](https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/services/callsmusic/callsmusic.py): `AnkiVectorMusic/services/callsmusic/callsmusic.py`
- [Track queues](https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/services/queues/queues.py): `AnkiVectorMusic/services/queues/queues.py`

### Access and channel support

- [Channel music routing](https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/helpers/channelmusic.py): `AnkiVectorMusic/helpers/channelmusic.py`
- [Userbot joining](https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/modules/userbotjoin.py): `AnkiVectorMusic/modules/userbotjoin.py`
- [Admin authorization](https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/helpers/admins.py): `AnkiVectorMusic/helpers/admins.py`
- [Admin cache](https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/function/admins.py): `AnkiVectorMusic/function/admins.py`
- [Voice-chat end handler](https://github.com/damantha126/anki-vector-music/blob/main/AnkiVectorMusic/modules/voice_chat_ended.py): `AnkiVectorMusic/modules/voice_chat_ended.py`

### Other components

- **Telegram users**
- **Telegram**
- **Deezer / Saavn**

## Connections

- Telegram users → Telegram: send commands (evidence: `README.md`)
- Telegram → Group playback: routes commands
- Group playback → YouTube downloader: downloads audio (evidence: `AnkiVectorMusic/modules/play.py`)
- Group playback → Audio converter: converts audio (evidence: `AnkiVectorMusic/modules/play.py`)
- Group playback → Track artwork: generates artwork (evidence: `AnkiVectorMusic/modules/play.py`)
- Group playback → Track queues: enqueues tracks (evidence: `AnkiVectorMusic/modules/play.py`)
- Group playback → Voice-chat playback: starts stream (evidence: `AnkiVectorMusic/modules/play.py`)
- Channel playback → YouTube downloader: downloads audio (evidence: `AnkiVectorMusic/modules/channelplay.py`)
- Channel playback → Audio converter: converts audio (evidence: `AnkiVectorMusic/modules/channelplay.py`)
- Channel playback → Track queues: enqueues tracks (evidence: `AnkiVectorMusic/modules/channelplay.py`)
- Channel playback → Voice-chat playback: starts stream (evidence: `AnkiVectorMusic/modules/channelplay.py`)
- Voice-chat playback → Track queues: advances tracks (evidence: `AnkiVectorMusic/services/callsmusic/callsmusic.py`)
- Song lookup → Group playback: uses playback (evidence: `AnkiVectorMusic/modules/song.py`)
- Playback administration → Voice-chat playback: controls playback (evidence: `AnkiVectorMusic/modules/admins.py`)
- Channel administration → Voice-chat playback: controls playback (evidence: `AnkiVectorMusic/modules/channeladmin.py`)
- Group playback → Admin authorization: checks access (evidence: `AnkiVectorMusic/modules/play.py`)
- Admin authorization → Admin cache: reads and updates (evidence: `AnkiVectorMusic/helpers/admins.py`)
- Channel playback → Channel music routing: resolves chat (evidence: `AnkiVectorMusic/modules/channelplay.py`)
- Voice-chat end handler → Voice-chat playback: handles ended call (evidence: `AnkiVectorMusic/modules/voice_chat_ended.py`)
- Telegram users → Song lookup: searches tracks
- Channel playback → Userbot joining: may join voice chat
- Deezer / Saavn → Group playback: provides playback (evidence: `README.md`)
