You choose sign-in
The app opens Discord OAuth with openid, identify, and sdk.social_layer_presence scopes.
This page mirrors the project privacy notice for the Android ArchiveTune app and adds a focused Discord Privacy section based on the current source code. It explains what stays on your device, what can leave your device when you choose optional integrations, and what controls are available.
This notice covers the Android ArchiveTune app. It explains what the app stores on your device, what it can send to external services when you use specific features, and what Android permissions it requests.
This notice is based on the current source code and build configuration. It does not replace the privacy terms of YouTube or YouTube Music, Last.fm, ListenBrainz, Discord, GitHub, lyrics providers, the ArchiveTune canvas service, or any Together server you choose to use.
ArchiveTune stores data locally to provide playback, library, search, lyrics, sync, and customization features.
| Category | Examples visible in the codebase | Why it is stored |
|---|---|---|
| Library and playback data | Song, artist, album, playlist, like state, download state, total play time, audio format metadata | Library management, playback, downloads, and statistics |
| Search and lyrics data | Search queries and cached lyrics | Search history and lyrics features |
| Listening history data | Playback event records with song ID, timestamp, and play time | Listening stats and history-related features |
| App settings | Language, country, UI settings, audio settings, proxy settings, cache settings, history pause toggles, Together settings | Personalization and feature configuration |
| Optional account and session data | YouTube account name, email, channel handle, visitor data, data sync ID, cookie, PO token values | Signed-in YouTube and YouTube Music functionality |
| Optional third-party integration data | Last.fm session and username, ListenBrainz token, Discord OAuth access and refresh tokens plus related profile fields, Together display name, Together client ID, last join link | External integrations you choose to enable |
| Cached files | Streaming cache, download cache, and other app-managed files | Faster playback, offline use, and feature performance |
ArchiveTune does not silently forward your data to unrelated services. It contacts external services when you use online features, and the exact payload depends on the feature you use and how you configure it.
| Service or feature | Data that may be sent | When it happens |
|---|---|---|
| YouTube or YouTube Music | Search terms, media playback requests, library or playlist requests, and signed-in session values such as visitor data, sync identifiers, cookies, or token values | When you browse, stream, sync, or sign in |
| Lyrics providers | Song title, artist name, album identifiers, or similar lookup data needed to fetch lyrics | When lyrics features are enabled or lyrics are requested |
| ArchiveTune canvas service | Song and artist names, album ID, or album URL, plus a bearer token if configured in the app build | When canvas or artwork lookup features are used |
| Last.fm | Now playing and scrobble metadata, plus your Last.fm session information | When Last.fm scrobbling is enabled |
| ListenBrainz | Playback history or scrobble metadata and your ListenBrainz token | When ListenBrainz sync is enabled |
| Discord Rich Presence | Current track, artist, album, images, configured URLs or labels for presence cards, and Discord OAuth tokens required by the official Social SDK | When Discord Rich Presence is enabled |
| GitHub releases | Update-check requests and cached release metadata used to show new versions | When the app checks for updates |
| Together | Display name, client ID, session code or keys, playback state, queue metadata, and room actions | When you host or join a Together session |
Discord integration is optional. The current codebase uses Discord OAuth and the Discord Social SDK to show Rich Presence when you sign in and enable the feature. The app does not need Discord for core music playback.
Plain-language behavior: ArchiveTune stores Discord login tokens locally so it can refresh your session, stores basic account display fields so the settings screen can show the connected account, and sends the selected Rich Presence activity details to Discord while the integration is active.
The app opens Discord OAuth with openid, identify, and sdk.social_layer_presence scopes.
The authorization code is exchanged for access and refresh tokens, then stored in app preferences.
The app requests Discord's current-user endpoint to show username, display name, and avatar in settings.
When enabled, current playback metadata and selected card options are sent through the Discord Social SDK.
| Data | Where it appears in the codebase | Purpose |
|---|---|---|
| Discord access token | DiscordTokenKey |
Authenticate Discord Social SDK requests and fetch account details. |
| Discord refresh token | DiscordRefreshTokenKey |
Refresh the access token when it is near expiry. |
| Token expiry timestamp | DiscordTokenExpiresAtKey |
Decide whether the app should reuse or refresh the current access token. |
| Username, display name, and avatar URL | DiscordUsernameKey, DiscordNameKey, DiscordAvatarUrlKey |
Show the connected Discord account in the ArchiveTune settings UI. |
| Rich Presence settings | Activity name, details, state, image, button, status, platform, interval, and paused-state preference keys | Remember how you want Discord Rich Presence to look and when it should update. |
| Artwork URLs resolved for a song | DiscordImageResolver and artwork storage helpers |
Reuse thumbnail or artist artwork URLs for Discord presence images without resolving them repeatedly. |
OAuth state, authorization code, code verifier, access token, refresh token, client ID, redirect URI, and requested OAuth scopes are used for Discord sign-in and token refresh.
The access token is sent to Discord's current-user endpoint. The response can include user ID, username, global name or display name, avatar hash, picture URL, and discriminator values.
Presence name, details, and state may include the app name, song title, artist name, album name, or translated versions of those fields, depending on your settings.
Large and small image URLs, image hover text, YouTube Music song or artist or album URLs, and custom URLs may be attached to the presence card.
Activity type, online status, supported platform, pause state, start timestamp, and end timestamp may be sent so Discord can render progress and status.
Up to two button labels and URLs can be sent, such as "Listen on YouTube Music", "Go to ArchiveTune", or your custom labels and links.
Discord receives and processes the data needed to authenticate the integration and display Rich Presence. Discord's own privacy practices, logs, token handling, account controls, and retention rules are controlled by Discord, not by this website or the Android app.
The app declares the following Android permissions in the current manifest. If you deny a permission, the related feature may stop working or provide reduced functionality.
| Permission | Why the app requests it |
|---|---|
INTERNET |
Connect to YouTube, lyrics services, update endpoints, canvas services, Together, and other network-backed features. |
POST_NOTIFICATIONS |
Show playback and download notifications. |
ACCESS_NETWORK_STATE |
Detect connectivity and adapt network behavior. |
READ_MEDIA_AUDIO |
Read local audio files on supported Android versions. |
READ_EXTERNAL_STORAGE on Android 12 and below |
Support local audio access on older Android versions. |
RECORD_AUDIO |
Support music-recognition features. |
BLUETOOTH_CONNECT |
Integrate with Bluetooth audio devices and playback controls. |
RECEIVE_BOOT_COMPLETED |
Restore playback-related behavior after a device restart when supported by the app. |
WAKE_LOCK |
Keep playback-related work running when needed. |
FOREGROUND_SERVICE, FOREGROUND_SERVICE_MEDIA_PLAYBACK, FOREGROUND_SERVICE_DATA_SYNC |
Support background playback, downloads, and related foreground work. |
ArchiveTune currently enables Android backup support. The backup and data-transfer rules exclude some cache and download paths, including the ExoPlayer cache, the download directory, and exoplayer_internal.db. Other app data, including local database content and app preferences, may still be included in Android cloud backup or device transfer depending on your Android settings and device behavior.
The app also provides a manual backup feature that creates a ZIP archive containing app settings and database files. This is a user-triggered export action.
For Together and other third-party services, remote retention depends on the service you use. This notice focuses on the Android app behavior in this repository.
This notice should be reviewed whenever ArchiveTune changes its permissions, storage model, external integrations, backup behavior, or network architecture.
For questions or corrections, use the project repository and issue tracker.
This appendix maps the main statements above to concrete implementation surfaces in the codebase.
| Topic | What the code shows | Main files |
|---|---|---|
| Permissions and backup behavior | The manifest declares network, media, microphone, Bluetooth, notification, boot, wake-lock, and foreground-service permissions. It also enables backup, cleartext traffic, and audio playback capture. Separate XML files exclude selected caches and internal playback database files from Android backup and device transfer. | app/src/main/AndroidManifest.xml, app/src/main/res/xml/data_extraction_rules.xml, app/src/main/res/xml/backup_rules.xml |
| Local database contents | The Room schema includes songs, artists, albums, playlists, search history, lyrics, audio format metadata, and playback event records. | app/schemas/moe.koiverse.archivetune.db.InternalDatabase/9.json |
| Settings and tokens stored locally | DataStore preference keys include UI settings, proxy settings, history toggles, Together values, YouTube session values, account name or email fields, Last.fm session values, ListenBrainz token values, Discord values, and update-cache keys. | app/src/main/kotlin/moe/koiverse/archivetune/constants/PreferenceKeys.kt |
| YouTube signed-in state | The Innertube layer exposes visitor data, data sync ID, cookie, PO token values, proxy state, and login-for-browse behavior as part of the current playback auth state. | innertube/src/main/kotlin/moe/koiverse/archivetune/innertube/YouTube.kt |
| Manual backup export | The backup view model writes app settings plus database files into a ZIP archive chosen by the user. | app/src/main/kotlin/moe/koiverse/archivetune/viewmodels/BackupRestoreViewModel.kt |
| External network integrations | Build configuration defines keys for Last.fm, Together, and canvas services. The updater fetches release information and caches related metadata in app preferences. | app/build.gradle.kts, app/src/main/kotlin/moe/koiverse/archivetune/utils/Updater.kt |
| Discord OAuth and Rich Presence | Discord OAuth requests sign-in scopes, exchanges authorization codes for tokens, stores token/profile fields, refreshes tokens, resolves Rich Presence text/images/buttons/timestamps, and sends activity data through the Discord Social SDK native bridge. | DiscordOAuthRepository.kt, DiscordRPC.kt, DiscordPresenceManager.kt, discord_social_bridge.cpp |
| Canvas service requests | The canvas module sends song and artist names, album IDs, or album URLs to https://artwork-archivetune.koiiverse.cloud/ and can attach a bearer token. |
canvas/src/main/kotlin/moe/koiverse/archivetune/canvas/ArchiveTuneCanvas.kt |
| Public feature claims | The repository README and store metadata describe privacy, YouTube integration, lyrics, music recognition, Last.fm, ListenBrainz, Discord Rich Presence, and other network-backed features that must stay aligned with this notice. | README.md, fastlane/metadata/android/en-US/full_description.txt |
| Current dependency posture | The current Android dependency declarations show Compose, Room, Hilt, Ktor, Media3, Coil, Timber, and related libraries. They do not currently show Firebase, Crashlytics, Sentry, mobile ad SDKs, or mobile analytics SDKs in the Android app dependency definitions reviewed for this notice. | app/build.gradle.kts, gradle/libs.versions.toml |