How nyanarchive/purpletv works
PurpleTV is an open-source modification of the Twitch Android application. Its runtime workflow extends Twitch startup with PurpleTV initialization, then applies user-configured changes to chat, playback/network behavior, and settings; additional feature branches include moderation-related tools, VOD chapters, logs, and a timer. The graph emphasizes these app capabilities and the sampled integration points. Several feature paths are inferred only from the file tree, so their connections are left unasserted; relationships shown are limited to explicit excerpts or source-index references.
Main entry points: PurpleTVAppContainer.kt PurpleTV container · PurpleTVSettingsController.kt PurpleTV settings · ChatConnectionController.java Chat connection · PrefManager.kt Preferences
Components 20
App integration
- Application lifecycle
app/app/src/main/java/tv/twitch/android/app/consumer/ApplicationLifecycleController.java - PurpleTV container
app/monolith/src/main/java/tv/purple/monolith/bridge/PurpleTVAppContainer.kt - Preferences
app/monolith/src/main/java/tv/purple/monolith/core/PrefManager.kt - Feature flags
app/monolith/src/main/java/tv/purple/monolith/core/models/flag/Flag.kt - Resource lookup
app/monolith/src/main/java/tv/purple/monolith/core/ResManager.kt
Chat features
- Chat connection
app/app/src/main/java/tv/twitch/android/shared/chat/observables/ChatConnectionController.java - Chat hook provider
app/monolith/src/main/java/tv/purple/monolith/features/chat/ChatHookProvider.kt - Chat logs
app/monolith/src/main/java/tv/purple/monolith/features/logs/ChatLogs.kt - Chat UI
app/app/src/main/java/tv/twitch/android/shared/chat/ChatViewDelegate.java
Playback and proxy
- Theatre player
app/app/src/main/java/tv/twitch/android/feature/theatre/common/PlayerCoordinatorPresenter.java - Manifest fetching
app/app/src/main/java/tv/twitch/android/shared/manifest/fetcher/StreamManifestFetcher.java - Stream proxy
app/monolith/src/main/java/tv/purple/monolith/features/proxy/Proxy.kt - Proxy repository
app/monolith/src/main/java/tv/purple/monolith/component/api/repository/ProxyRepository.kt
Settings and tools
- PurpleTV settings
app/monolith/src/main/java/tv/purple/monolith/features/settings/component/PurpleTVSettingsController.kt - Blacklist
app/monolith/src/main/java/tv/purple/monolith/component/blacklist/data/repository/BlacklistRepository.kt - Chat highlighter
app/monolith/src/main/java/tv/purple/monolith/component/highlighter/data/repository/HighlighterRepository.kt
Data and extras
- VOD chapters
app/monolith/src/main/java/tv/purple/monolith/features/chapters/component/data/repository/ChaptersRepository.kt - App updater
app/monolith/src/main/java/tv/purple/monolith/features/updater/component/data/repository/UpdaterRepository.kt - Playback timer
app/monolith/src/main/java/tv/purple/monolith/features/timer/service/TimerService.kt
Other components
- Twitch user
Connections 19
- Twitch user → Application lifecycle: uses app
- Application lifecycle → PurpleTV container: integrates
app/app/src/main/java/tv/twitch/android/app/consumer/ApplicationLifecycleController.java - PurpleTV container → Preferences: initializes
app/monolith/src/main/java/tv/purple/monolith/bridge/PurpleTVAppContainer.kt - PurpleTV container → Chat hook provider: initializes
app/monolith/src/main/java/tv/purple/monolith/bridge/PurpleTVAppContainer.kt - Chat connection → Chat hook provider: filters messages
app/app/src/main/java/tv/twitch/android/shared/chat/observables/ChatConnectionController.java - Chat connection → Chat hook provider: handles clear events
app/app/src/main/java/tv/twitch/android/shared/chat/observables/ChatConnectionController.java - Chat connection → Chat logs: subscribes logs
- PurpleTV container → Chat logs: provides
app/monolith/src/main/java/tv/purple/monolith/bridge/PurpleTVAppContainer.kt - PurpleTV settings → Blacklist: creates settings UI
app/monolith/src/main/java/tv/purple/monolith/features/settings/component/PurpleTVSettingsController.kt - PurpleTV settings → Chat highlighter: creates settings UI
app/monolith/src/main/java/tv/purple/monolith/features/settings/component/PurpleTVSettingsController.kt - PurpleTV settings → Stream proxy: opens proxy settings
app/monolith/src/main/java/tv/purple/monolith/features/settings/component/PurpleTVSettingsController.kt - Stream proxy → Proxy repository: requests proxy playlists
app/monolith/src/main/java/tv/purple/monolith/features/proxy/Proxy.kt - Theatre player → Manifest fetching: fetches stream manifest
- Manifest fetching → Stream proxy: may rewrite response
- PurpleTV container → Playback timer: registers lifecycle feature
- PurpleTV container → VOD chapters: provides chapters
app/monolith/src/main/java/tv/purple/monolith/bridge/PurpleTVAppContainer.kt - PurpleTV settings → Preferences: updates preferences
- Preferences → Feature flags: loads flag values
app/monolith/src/main/java/tv/purple/monolith/core/PrefManager.kt - Playback timer → Resource lookup: resolves notification text
app/monolith/src/main/java/tv/purple/monolith/features/timer/service/TimerService.kt