# morpheapp/morphe-patches architecture

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

- Interactive diagram: https://gitdiagram.com/morpheapp/morphe-patches
- Repository: https://github.com/morpheapp/morphe-patches

## Overview

Morphe Patches is a set of modifications for YouTube, YouTube Music, Reddit and related Android apps. Users select/apply patches to a supported app, then use the resulting features and settings in playback, browsing and media workflows. The tree shows patch definitions alongside runtime extension code; the excerpts reveal only selected integrations, so uncertain wiring is omitted or marked dashed rather than treated as inspected.

Main entry points: [`extensions/music/src/main/java/app/morphe/extension/music/patches/lyrics/LyricsManager.java`](https://github.com/morpheapp/morphe-patches/blob/main/extensions/music/src/main/java/app/morphe/extension/music/patches/lyrics/LyricsManager.java) (Lyrics manager), [`patches/src/main/kotlin/app/morphe/patches`](https://github.com/morpheapp/morphe-patches/tree/main/patches/src/main/kotlin/app/morphe/patches) (Patch definitions), [`extensions/music/src/main/java/app/morphe/extension/music/settings/Settings.java`](https://github.com/morpheapp/morphe-patches/blob/main/extensions/music/src/main/java/app/morphe/extension/music/settings/Settings.java) (Music settings), [`extensions/youtube/src/main/java/app/morphe/extension/youtube/settings/Settings.java`](https://github.com/morpheapp/morphe-patches/blob/main/extensions/youtube/src/main/java/app/morphe/extension/youtube/settings/Settings.java) (YouTube settings)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_patching["App modifications"]
  node_patchdefs["Patch definitions"]
  node_musicext["Music extension"]
  node_youtubeext["YouTube extension"]
end

subgraph group_youtube["YouTube features"]
  node_series["Series tracker"]
  node_comments["Niconico comments"]
  node_sponsor["SponsorBlock"]
  node_tts["Voice translation<br/>[TTSEngine.java]"]
  node_tts_cache[("Speech cache<br/>[TTSCache.java]")]
end

subgraph group_music["Music features"]
  node_lyrics["Lyrics manager<br/>[LyricsManager.java]"]
  node_lyricsformat["Lyrics formatting"]
  node_offline["Offline playback"]
  node_offlinefiles[("Offline storage")]
  node_jam["Jam bridge"]
  node_queue["Jam queue model<br/>[QueueModel.java]"]
end

subgraph group_shared["Shared services"]
  node_external{{"External services"}}
end

subgraph group_settings["Configuration"]
  node_musicsettings["Music settings<br/>[Settings.java]"]
  node_ytsettings["YouTube settings<br/>[Settings.java]"]
  node_preferences["Preference UI"]
end

node_user(("App user"))

node_user -.->|"selects patches"| node_patchdefs
node_patchdefs -.->|"enables runtime"| node_musicext
node_patchdefs -.->|"enables runtime"| node_youtubeext
node_user -.->|"configures"| node_musicsettings
node_user -.->|"configures"| node_ytsettings
node_preferences -.->|"binds settings"| node_musicsettings
node_preferences -.->|"binds settings"| node_ytsettings
node_series -->|"reads settings"| node_ytsettings
node_series -.->|"syncs catalog"| node_external
node_comments -.->|"shows comments"| node_user
node_sponsor -.->|"fetches segments"| node_external
node_lyrics -.->|"fetches lyrics"| node_external
node_lyrics -->|"uses formatter"| node_lyricsformat
node_lyrics -.->|"reads settings"| node_musicsettings
node_offline -->|"loads tracks"| node_offlinefiles
node_jam -->|"uses queue model"| node_queue
node_jam -.->|"bridges companion"| node_external
node_tts -->|"reads and writes"| node_tts_cache
node_tts -.->|"synthesizes speech"| node_external

click node_patchdefs "https://github.com/morpheapp/morphe-patches/tree/main/patches/src/main/kotlin/app/morphe/patches"
click node_musicext "https://github.com/morpheapp/morphe-patches/tree/main/extensions/music/src/main/java/app/morphe/extension/music/patches"
click node_youtubeext "https://github.com/morpheapp/morphe-patches/tree/main/extensions/youtube/src/main/java/app/morphe/extension/youtube"
click node_series "https://github.com/morpheapp/morphe-patches/blob/main/extensions/youtube/src/main/java/app/morphe/extension/youtube/series/TrackerService.java"
click node_comments "https://github.com/morpheapp/morphe-patches/blob/main/extensions/youtube/src/main/java/app/morphe/extension/youtube/niconicocomments/NiconicoCommentsController.java"
click node_sponsor "https://github.com/morpheapp/morphe-patches/blob/main/extensions/shared-youtube/library/src/main/java/app/morphe/extension/shared/sponsorblock/SegmentPlaybackController.java"
click node_lyrics "https://github.com/morpheapp/morphe-patches/blob/main/extensions/music/src/main/java/app/morphe/extension/music/patches/lyrics/LyricsManager.java"
click node_lyricsformat "https://github.com/morpheapp/morphe-patches/blob/main/extensions/music/src/main/java/app/morphe/extension/music/patches/lyrics/model/MiniLyricsFormatter.java"
click node_offline "https://github.com/morpheapp/morphe-patches/blob/main/extensions/music/src/main/java/app/morphe/extension/music/patches/downloads/OfflinePlaybackService.java"
click node_offlinefiles "https://github.com/morpheapp/morphe-patches/blob/main/extensions/music/src/main/java/app/morphe/extension/music/patches/downloads/OfflineStorage.java"
click node_jam "https://github.com/morpheapp/morphe-patches/blob/main/extensions/music/src/main/java/app/morphe/extension/music/patches/jam/JamBridgeService.java"
click node_queue "https://github.com/morpheapp/morphe-patches/blob/main/extensions/music/src/main/java/app/morphe/extension/music/patches/jam/QueueModel.java"
click node_tts "https://github.com/morpheapp/morphe-patches/blob/main/extensions/youtube/src/main/java/app/morphe/extension/youtube/patches/voiceovertranslation/TTSEngine.java"
click node_tts_cache "https://github.com/morpheapp/morphe-patches/blob/main/extensions/youtube/src/main/java/app/morphe/extension/youtube/patches/voiceovertranslation/TTSCache.java"
click node_musicsettings "https://github.com/morpheapp/morphe-patches/blob/main/extensions/music/src/main/java/app/morphe/extension/music/settings/Settings.java"
click node_ytsettings "https://github.com/morpheapp/morphe-patches/blob/main/extensions/youtube/src/main/java/app/morphe/extension/youtube/settings/Settings.java"
click node_preferences "https://github.com/morpheapp/morphe-patches/blob/main/extensions/shared/library/src/main/java/app/morphe/extension/shared/settings/preference/AbstractPreferenceFragment.java"

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_patchdefs,node_musicext,node_youtubeext,node_user toneBlue
class node_series,node_comments,node_sponsor,node_tts,node_tts_cache toneAmber
class node_lyrics,node_lyricsformat,node_offline,node_offlinefiles,node_jam,node_queue toneMint
class node_external toneRose
class node_musicsettings,node_ytsettings,node_preferences toneIndigo
```

## Components

### App modifications

- [Patch definitions](https://github.com/morpheapp/morphe-patches/tree/main/patches/src/main/kotlin/app/morphe/patches): `patches/src/main/kotlin/app/morphe/patches`
- [Music extension](https://github.com/morpheapp/morphe-patches/tree/main/extensions/music/src/main/java/app/morphe/extension/music/patches): `extensions/music/src/main/java/app/morphe/extension/music/patches`
- [YouTube extension](https://github.com/morpheapp/morphe-patches/tree/main/extensions/youtube/src/main/java/app/morphe/extension/youtube): `extensions/youtube/src/main/java/app/morphe/extension/youtube`

### YouTube features

- [Series tracker](https://github.com/morpheapp/morphe-patches/blob/main/extensions/youtube/src/main/java/app/morphe/extension/youtube/series/TrackerService.java): `extensions/youtube/src/main/java/app/morphe/extension/youtube/series/TrackerService.java`
- [Niconico comments](https://github.com/morpheapp/morphe-patches/blob/main/extensions/youtube/src/main/java/app/morphe/extension/youtube/niconicocomments/NiconicoCommentsController.java): `extensions/youtube/src/main/java/app/morphe/extension/youtube/niconicocomments/NiconicoCommentsController.java`
- [SponsorBlock](https://github.com/morpheapp/morphe-patches/blob/main/extensions/shared-youtube/library/src/main/java/app/morphe/extension/shared/sponsorblock/SegmentPlaybackController.java): `extensions/shared-youtube/library/src/main/java/app/morphe/extension/shared/sponsorblock/SegmentPlaybackController.java`
- [Voice translation](https://github.com/morpheapp/morphe-patches/blob/main/extensions/youtube/src/main/java/app/morphe/extension/youtube/patches/voiceovertranslation/TTSEngine.java): `extensions/youtube/src/main/java/app/morphe/extension/youtube/patches/voiceovertranslation/TTSEngine.java`
- [Speech cache](https://github.com/morpheapp/morphe-patches/blob/main/extensions/youtube/src/main/java/app/morphe/extension/youtube/patches/voiceovertranslation/TTSCache.java): `extensions/youtube/src/main/java/app/morphe/extension/youtube/patches/voiceovertranslation/TTSCache.java`

### Music features

- [Lyrics manager](https://github.com/morpheapp/morphe-patches/blob/main/extensions/music/src/main/java/app/morphe/extension/music/patches/lyrics/LyricsManager.java): `extensions/music/src/main/java/app/morphe/extension/music/patches/lyrics/LyricsManager.java`
- [Lyrics formatting](https://github.com/morpheapp/morphe-patches/blob/main/extensions/music/src/main/java/app/morphe/extension/music/patches/lyrics/model/MiniLyricsFormatter.java): `extensions/music/src/main/java/app/morphe/extension/music/patches/lyrics/model/MiniLyricsFormatter.java`
- [Offline playback](https://github.com/morpheapp/morphe-patches/blob/main/extensions/music/src/main/java/app/morphe/extension/music/patches/downloads/OfflinePlaybackService.java): `extensions/music/src/main/java/app/morphe/extension/music/patches/downloads/OfflinePlaybackService.java`
- [Offline storage](https://github.com/morpheapp/morphe-patches/blob/main/extensions/music/src/main/java/app/morphe/extension/music/patches/downloads/OfflineStorage.java): `extensions/music/src/main/java/app/morphe/extension/music/patches/downloads/OfflineStorage.java`
- [Jam bridge](https://github.com/morpheapp/morphe-patches/blob/main/extensions/music/src/main/java/app/morphe/extension/music/patches/jam/JamBridgeService.java): `extensions/music/src/main/java/app/morphe/extension/music/patches/jam/JamBridgeService.java`
- [Jam queue model](https://github.com/morpheapp/morphe-patches/blob/main/extensions/music/src/main/java/app/morphe/extension/music/patches/jam/QueueModel.java): `extensions/music/src/main/java/app/morphe/extension/music/patches/jam/QueueModel.java`

### Shared services

- **External services**

### Configuration

- [Music settings](https://github.com/morpheapp/morphe-patches/blob/main/extensions/music/src/main/java/app/morphe/extension/music/settings/Settings.java): `extensions/music/src/main/java/app/morphe/extension/music/settings/Settings.java`
- [YouTube settings](https://github.com/morpheapp/morphe-patches/blob/main/extensions/youtube/src/main/java/app/morphe/extension/youtube/settings/Settings.java): `extensions/youtube/src/main/java/app/morphe/extension/youtube/settings/Settings.java`
- [Preference UI](https://github.com/morpheapp/morphe-patches/blob/main/extensions/shared/library/src/main/java/app/morphe/extension/shared/settings/preference/AbstractPreferenceFragment.java): `extensions/shared/library/src/main/java/app/morphe/extension/shared/settings/preference/AbstractPreferenceFragment.java`

### Other components

- **App user**

## Connections

- App user → Patch definitions: selects patches (evidence: `README.md`)
- Patch definitions → Music extension: enables runtime
- Patch definitions → YouTube extension: enables runtime
- App user → Music settings: configures
- App user → YouTube settings: configures
- Preference UI → Music settings: binds settings
- Preference UI → YouTube settings: binds settings
- Series tracker → YouTube settings: reads settings (evidence: `extensions/youtube/src/main/java/app/morphe/extension/youtube/series/TrackerService.java`)
- Series tracker → External services: syncs catalog
- Niconico comments → App user: shows comments
- SponsorBlock → External services: fetches segments
- Lyrics manager → External services: fetches lyrics
- Lyrics manager → Lyrics formatting: uses formatter (evidence: `extensions/music/src/main/java/app/morphe/extension/music/patches/lyrics/LyricsManager.java`)
- Lyrics manager → Music settings: reads settings (evidence: `extensions/music/src/main/java/app/morphe/extension/music/patches/lyrics/LyricsManager.java`)
- Offline playback → Offline storage: loads tracks (evidence: `extensions/music/src/main/java/app/morphe/extension/music/patches/downloads/OfflinePlaybackService.java`)
- Jam bridge → Jam queue model: uses queue model (evidence: `extensions/music/src/main/java/app/morphe/extension/music/patches/jam/JamBridgeService.java`)
- Jam bridge → External services: bridges companion
- Voice translation → Speech cache: reads and writes (evidence: `extensions/youtube/src/main/java/app/morphe/extension/youtube/patches/voiceovertranslation/TTSEngine.java`)
- Voice translation → External services: synthesizes speech
