# ritz0007/cresca architecture

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

- Interactive diagram: https://gitdiagram.com/ritz0007/cresca
- Repository: https://github.com/ritz0007/cresca

## Overview

Cresca is an Android music player whose main workflow is discovering YouTube music, resolving a track to playable audio, and controlling playback in the app or through Android media controls. It also supports lyrics, video, playlists, downloads, YouTube sign-in, and update notifications. The README documents several subsystem responsibilities; sampled source confirms parts of playback, session storage, InnerTube access, and lyrics. Some UI-to-subsystem wiring is therefore represented only where documented, not inferred from co-location.

Main entry points: [`app/src/main/java/com/cresca/app/MainActivity.kt`](https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/MainActivity.kt) (App screens), [`app/src/main/java/com/cresca/app/innertube/InnerTubeApi.kt`](https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/innertube/InnerTubeApi.kt) (InnerTube API), [`app/src/main/java/com/cresca/app/YoutubeRepository.kt`](https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/YoutubeRepository.kt) (YouTube data), [`app/src/main/java/com/cresca/app/PlaybackService.kt`](https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/PlaybackService.kt) (Playback service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_discovery["Discovery and streams"]
  node_app["App screens<br/>[MainActivity.kt]"]
  node_home["Home feed<br/>[HomeFeed.kt]"]
  node_youtube["YouTube data"]
  node_innertube["InnerTube API<br/>[InnerTubeApi.kt]"]
  node_ytclients["YouTube clients<br/>[InnerTubeClient.kt]"]
end

subgraph group_playback["Playback and library"]
  node_queue["Queue engine<br/>[PlayerQueue.kt]"]
  node_service["Playback service<br/>[PlaybackService.kt]"]
  node_cache[("Audio cache<br/>[ExoCache.kt]")]
  node_downloads[("Offline downloads<br/>[DownloadStore.kt]")]
  node_playlists[("Playlists<br/>[PlaylistStore.kt]")]
  node_liked[("Liked songs<br/>[LikedStore.kt]")]
  node_recents[("Listening history<br/>[RecentStore.kt]")]
end

subgraph group_experience["Listening experience"]
  node_lyricsui["Karaoke lyrics<br/>[LyricsFlow.kt]"]
  node_lyrics["Lyrics providers"]
  node_video["Music video<br/>[VideoSheet.kt]"]
end

subgraph group_platform["Account and platform"]
  node_login["Sign-in surface<br/>[LoginWebView.kt]"]
  node_session[("Encrypted session")]
  node_updates["Update checks<br/>[UpdateCheck.kt]"]
  node_updatenotify["Update notices<br/>[UpdateNotify.kt]"]
end

node_listener(("Listener"))
node_ytservice{{"YouTube Music"}}
node_lyricsservices{{"Lyrics services"}}
node_androidmedia{{"Android media controls"}}
node_github{{"Release service"}}

node_listener -->|"uses"| node_app
node_app -->|"shows"| node_home
node_app -->|"requests tracks"| node_youtube
node_home -->|"loads shelves"| node_youtube
node_youtube -->|"queries"| node_innertube
node_innertube -->|"configures requests"| node_ytclients
node_innertube -->|"requests data"| node_ytservice
node_youtube -.->|"resolves streams"| node_ytservice
node_app -->|"manages queue"| node_queue
node_queue -->|"controls playback"| node_service
node_service -->|"reads and writes"| node_cache
node_app -->|"manages offline songs"| node_downloads
node_app -->|"manages playlists"| node_playlists
node_app -->|"updates likes"| node_liked
node_app -->|"tracks plays"| node_recents
node_app -->|"opens lyrics"| node_lyricsui
node_lyricsui -->|"requests lyrics"| node_lyrics
node_lyrics -->|"fetches captions"| node_innertube
node_lyrics -->|"searches providers"| node_lyricsservices
node_app -->|"opens video"| node_video
node_app -->|"starts sign-in"| node_login
node_login -->|"captures session"| node_session
node_innertube -->|"reads credentials"| node_session
node_service -->|"publishes controls"| node_androidmedia
node_app -->|"checks updates"| node_updates
node_updates -->|"checks releases"| node_github
node_updates -->|"dispatches notices"| node_updatenotify

click node_app "https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/MainActivity.kt"
click node_home "https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/HomeFeed.kt"
click node_youtube "https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/YoutubeRepository.kt"
click node_innertube "https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/innertube/InnerTubeApi.kt"
click node_ytclients "https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/innertube/InnerTubeClient.kt"
click node_queue "https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/PlayerQueue.kt"
click node_service "https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/PlaybackService.kt"
click node_cache "https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/ExoCache.kt"
click node_downloads "https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/DownloadStore.kt"
click node_playlists "https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/PlaylistStore.kt"
click node_liked "https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/LikedStore.kt"
click node_recents "https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/RecentStore.kt"
click node_lyricsui "https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/LyricsFlow.kt"
click node_lyrics "https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/LyricsRepository.kt"
click node_video "https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/VideoSheet.kt"
click node_login "https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/LoginWebView.kt"
click node_session "https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/YtSessionManager.kt"
click node_updates "https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/UpdateCheck.kt"
click node_updatenotify "https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/UpdateNotify.kt"

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_app,node_home,node_youtube,node_innertube,node_ytclients toneBlue
class node_queue,node_service,node_cache,node_downloads,node_playlists,node_liked,node_recents toneAmber
class node_lyricsui,node_lyrics,node_video toneMint
class node_login,node_session,node_updates,node_updatenotify toneRose
class node_listener,node_ytservice,node_lyricsservices,node_androidmedia,node_github toneIndigo
```

## Components

### Discovery and streams

- [App screens](https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/MainActivity.kt): `app/src/main/java/com/cresca/app/MainActivity.kt`
- [Home feed](https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/HomeFeed.kt): `app/src/main/java/com/cresca/app/HomeFeed.kt`
- [YouTube data](https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/YoutubeRepository.kt): `app/src/main/java/com/cresca/app/YoutubeRepository.kt`
- [InnerTube API](https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/innertube/InnerTubeApi.kt): `app/src/main/java/com/cresca/app/innertube/InnerTubeApi.kt`
- [YouTube clients](https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/innertube/InnerTubeClient.kt): `app/src/main/java/com/cresca/app/innertube/InnerTubeClient.kt`

### Playback and library

- [Queue engine](https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/PlayerQueue.kt): `app/src/main/java/com/cresca/app/PlayerQueue.kt`
- [Playback service](https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/PlaybackService.kt): `app/src/main/java/com/cresca/app/PlaybackService.kt`
- [Audio cache](https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/ExoCache.kt): `app/src/main/java/com/cresca/app/ExoCache.kt`
- [Offline downloads](https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/DownloadStore.kt): `app/src/main/java/com/cresca/app/DownloadStore.kt`
- [Playlists](https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/PlaylistStore.kt): `app/src/main/java/com/cresca/app/PlaylistStore.kt`
- [Liked songs](https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/LikedStore.kt): `app/src/main/java/com/cresca/app/LikedStore.kt`
- [Listening history](https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/RecentStore.kt): `app/src/main/java/com/cresca/app/RecentStore.kt`

### Listening experience

- [Karaoke lyrics](https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/LyricsFlow.kt): `app/src/main/java/com/cresca/app/LyricsFlow.kt`
- [Lyrics providers](https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/LyricsRepository.kt): `app/src/main/java/com/cresca/app/LyricsRepository.kt`
- [Music video](https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/VideoSheet.kt): `app/src/main/java/com/cresca/app/VideoSheet.kt`

### Account and platform

- [Sign-in surface](https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/LoginWebView.kt): `app/src/main/java/com/cresca/app/LoginWebView.kt`
- [Encrypted session](https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/YtSessionManager.kt): `app/src/main/java/com/cresca/app/YtSessionManager.kt`
- [Update checks](https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/UpdateCheck.kt): `app/src/main/java/com/cresca/app/UpdateCheck.kt`
- [Update notices](https://github.com/ritz0007/cresca/blob/main/app/src/main/java/com/cresca/app/UpdateNotify.kt): `app/src/main/java/com/cresca/app/UpdateNotify.kt`

### Other components

- **Listener**
- **YouTube Music**
- **Lyrics services**
- **Android media controls**
- **Release service**

## Connections

- Listener → App screens: uses
- App screens → Home feed: shows
- App screens → YouTube data: requests tracks
- Home feed → YouTube data: loads shelves
- YouTube data → InnerTube API: queries
- InnerTube API → YouTube clients: configures requests
- InnerTube API → YouTube Music: requests data
- YouTube data → YouTube Music: resolves streams
- App screens → Queue engine: manages queue
- Queue engine → Playback service: controls playback
- Playback service → Audio cache: reads and writes
- App screens → Offline downloads: manages offline songs
- App screens → Playlists: manages playlists
- App screens → Liked songs: updates likes
- App screens → Listening history: tracks plays
- App screens → Karaoke lyrics: opens lyrics
- Karaoke lyrics → Lyrics providers: requests lyrics
- Lyrics providers → InnerTube API: fetches captions
- Lyrics providers → Lyrics services: searches providers
- App screens → Music video: opens video
- App screens → Sign-in surface: starts sign-in
- Sign-in surface → Encrypted session: captures session
- InnerTube API → Encrypted session: reads credentials
- Playback service → Android media controls: publishes controls
- App screens → Update checks: checks updates
- Update checks → Release service: checks releases
- Update checks → Update notices: dispatches notices
