{"id":42578468,"url":"https://github.com/eremef/bandcamp-player","last_synced_at":"2026-03-10T19:01:30.374Z","repository":{"id":334288390,"uuid":"1140062945","full_name":"eremef/bandcamp-player","owner":"eremef","description":"Unofficial multi-platform Bandcamp desktop player with mobile remote controller \u0026 standalone app","archived":false,"fork":false,"pushed_at":"2026-03-02T22:44:01.000Z","size":16730,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-03T01:28:06.555Z","etag":null,"topics":["ai-generated","bandcamp","desktop","mobile","multi-platform","remote"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eremef.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/funding.yml","license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"eremef","buy_me_a_coffee":"eremef.xyz","custom":["https://buycoffee.to/eremef.xyz"]}},"created_at":"2026-01-22T19:25:20.000Z","updated_at":"2026-03-02T22:44:04.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/eremef/bandcamp-player","commit_stats":null,"previous_names":["eremef/bandcamp-player"],"tags_count":63,"template":false,"template_full_name":null,"purl":"pkg:github/eremef/bandcamp-player","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eremef%2Fbandcamp-player","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eremef%2Fbandcamp-player/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eremef%2Fbandcamp-player/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eremef%2Fbandcamp-player/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eremef","download_url":"https://codeload.github.com/eremef/bandcamp-player/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eremef%2Fbandcamp-player/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30348852,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T15:55:29.454Z","status":"ssl_error","status_checked_at":"2026-03-10T15:54:58.440Z","response_time":106,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-generated","bandcamp","desktop","mobile","multi-platform","remote"],"created_at":"2026-01-28T22:02:30.169Z","updated_at":"2026-03-10T19:01:30.362Z","avatar_url":"https://github.com/eremef.png","language":"TypeScript","funding_links":["https://github.com/sponsors/eremef","https://buymeacoffee.com/eremef.xyz","https://buycoffee.to/eremef.xyz"],"categories":[],"sub_categories":[],"readme":"# Bandcamp Experimental Transport Assistant\n\nThe Unofficial multi-platform Bandcamp desktop player with mobile remote controller \u0026 standalone app\n\n![Presentation of both desktop and mobile apps](https://github.com/user-attachments/assets/488a5523-8cd5-4094-9d17-07aa135553e6 \"Beta Player (desktop and mobile apps)\")\n\n## Download\n\n**Download links**\n- https://github.com/eremef/bandcamp-player/releases/latest - raw release files\n- https://eremef.xyz/beta-player - more convenient download page\n\n## Desktop App\n\n\nAI-generated\\* feature-rich Electron desktop application for playing Bandcamp music with fan account integration, offline caching, playlist management, native media controls, and many more!\n\n\u003e⚠️ **Attention** ⚠️\n\u003e\n\u003eMay violate Bandcamp terms and policies.\n\u003e\n\u003eUse at your own risk.\n\u003e\n\u003eApplication is designed for personal use, allowing users, aka fans, to listen to and cache only the tracks they have collected, as well as listen to freely available BC radio shows.\n\n\\*not with one prompt, but hundreds of them (to be more precise, so far, over 101 conversations and 900 user prompts), a few weeks of designing, prompting, testing on different devices/virtual machines, re-designing, prompting, testing, etc., a full-time job. Still, not a traditional craft programming, and not as eco-friendly.\n\n### Features\n\n- 🎵 **Collection Browser** - Browse and play your purchased Bandcamp music\n- 📺 **Chromecast Support** - Cast music to Google Cast-enabled devices\n- 📝 **Playlist Management** - Create and manage custom playlists\n- 📥 **Offline Caching** - Download tracks for offline playback\n- 📻 **Bandcamp Radio** - Listen to curated Bandcamp radio shows\n- 🔍 **Smart Search** - Filter your collection instantly\n- 🎛️ **Windows Media Controls** - Control playback with system media keys\n- 🔊 **Natural Volume Control** - Exponential volume scaling for precise control at lower levels\n- 📋 **Queue Management** - Manage your playback queue with drag-and-drop reordering\n- 🔀 **Shuffle \u0026 Repeat** - Various playback modes\n- 🎧 **Last.fm Scrobbling** - Track your listening history (bring your own API token)\n- ⚡ **Persistent Caching** - Blazing fast startup with database-backed collection caching and daily background updates\n- ⏳ **Smart Buffering** - Smooth loading for large collections with visual feedback\n- 🌐 **Web Remote Control** - Control playback via any web browser on the local network\n- 📡 **Connection Management** - Manage remote sessions with device identification\n- 🖥️ **Mini Player** - Compact floating player window\n- 💾 **System Tray** - Minimize to tray with quick controls\n- 🔄 **Auto-Updates** - Stay updated with the latest versions\n\n\u003e **Note**: The applications have been tested primarily on Windows 11 and Android 14. Linux, macOS, and iOS builds are available but experimental.\n\n### Tech Stack\n\n- **Electron** - Desktop application framework\n- **React 19** - UI library\n- **TypeScript** - Type-safe development\n- **Zustand** - State management\n- **SQLite** (better-sqlite3) - Local database\n- **Vite** - Build tool for renderer\n- **Cheerio** - Web scraping\n- **Axios** - HTTP client\n- **chromecast-api** - Casting support\n- **Electron Updater** - Auto-update support\n\n### Getting Started\n\n#### Prerequisites\n\n- Node.js 18+\n- npm or yarn\n\n#### Installation\n\n```bash\n# Clone the repository\ncd Bandcamp-player\n\n# Install dependencies (automatically runs native rebuilds)\nnpm install\n\n# Run in development mode (starts watchers + Electron)\nnpm run dev\n\n# Run in simulation mode (mocks 5000 items + errors)\nnpm run dev:large\n```\n\n#### Building\n\n```bash\n# Build for production\nnpm run build\n\n# Create an installer package (runs tests + build + electron-builder)\nnpm run package\n```\n\n### Settings \u0026 Configuration\n\n#### Application Settings\n\nAccess the settings menu (gear icon) to configure:\n\n- **Offline Cache**\n  - Toggle caching on/off\n  - Set maximum cache size (1-50 GB)\n  - View cache usage statistics\n  - Clear cache to free up space\n\n- **Last.fm**\n  - Connect/disconnect Last.fm account\n  - Toggle automatic scrobbling\n\n- **Window**\n  - Minimize to Tray: Keep the app running in the background when closed\n  - Show Notifications: Desktop notifications on track change\n\n### Project Structure\n\n```text\nsrc/\n├── main/                    # Electron main process\n│   ├── main.ts             # Entry point\n│   ├── preload.ts          # Preload script\n│   ├── ipc-handlers.ts     # IPC communication\n│   ├── services/           # Backend services\n│   │   ├── auth.service.ts\n│   │   ├── cache.service.ts\n│   │   ├── player.service.ts\n│   │   ├── playlist.service.ts\n│   │   ├── scraper.service.ts\n│   │   ├── scrobbler.service.ts\n│   │   ├── remote.service.ts\n│   │   ├── updater.service.ts\n│   │   └── tray.service.ts\n│   └── database/           # SQLite database\n├── renderer/               # React frontend\n│   ├── components/         # UI components\n│   │   ├── Auth/           # Auth Components\n│   │   ├── Collection/     # Collection Views\n│   │   ├── Layout/         # Layout Components\n│   │   ├── Player/         # Player Controls\n│   │   ├── Playlist/       # Playlist Management\n│   │   ├── Radio/          # Radio Player\n│   │   ├── Settings/       # Settings Modal\n│   │   └── UI/             # Common UI elements\n│   ├── store/             # Zustand store\n│   └── styles/            # CSS styles\n├── shared/                # Shared types\n└── assets/                # Static assets\n    ├── icons/             # Application icons\n    └── remote/            # Web Remote Interface (index.html, client.js, styles.css)\n```\n\n### Usage\n\n1. **Login** - Click \"Login with Bandcamp\" to authenticate with your fan account\n2. **Browse Collection** - Your purchased albums and tracks appear in the Collection view. Large collections (\u003e100 items) are automatically cached for instant loading on subsequent launches.\n3. **Daily Refresh** - The app automatically keeps your collection up-to-date in the background every 24 hours. Use the \"Refresh\" button for a manual update.\n4. **Play Music** - Click on an album to start playing\n5. **Create Playlists** - Use the + button in the sidebar to create playlists\n6. **Add to Queue** - Right-click on albums/tracks or use the \"More options\" button to add to queue\n7. **Open Context Menus** - Access advanced options (Play Next, Add to Playlist) via right-click or menu buttons in both Collection and Radio views\n8. **Offline Mode** - Download tracks via the context menu for offline playback\n\n## Mobile App (Remote control \u0026 Standalone Player)\n\nThe project includes a companion mobile application (Android/iOS) in the `mobile/` directory.\n\n### Features\n\n- 📱 **Hybrid Mode** - Seamlessly switch between Remote Control and Standalone playback\n- 🎵 **Standalone Player** - Use the mobile app as an independent Bandcamp player with background audio\n- 📂 **Collection Browser** - Browse and play from Collection, Playlists, and Radio\n- 🎤 **Artists Tab** - Browse your collection by Artist with cached SQLite performance\n- 📋 **Queue Management** - View and manage the playback queue\n- 🖱️ **Context Menus** - Long-press for Queue and Playlist management\n- 🔄 **Swipe to Refresh** - Pull-to-refresh support for all main tabs\n- 📜 **Infinite Scroll** - Efficiently browse large collections with paginated SQLite storage\n- 🔍 **Auto Discovery** - Automatic local network discovery\n- 🔊 **Volume Sync** - Uses device hardware volume in Remote mode and independent volume in Standalone\n- 🎧 **Last.fm Scrobbling** - Track your listening history with native scrobbling in standalone mode (do mot use Last.Fm's *Scrobble from...* as it might behave unstably)\n- 🎨 **Theme Support** - Persistent System/Light/Dark theme modes\n\n### Tech Stack\n\n- **React Native** - Cross-platform mobile framework\n- **Expo** - Build and development platform\n- **Expo Router** - File-based routing\n- **Zustand** - State management\n- **React Native Track Player** - Native audio playback \u0026 media controls\n- **React Native Volume Manager** - System volume synchronization\n\n### Building\n\n**Prerequisites**:\n\n- **Java 17** (Required for Android builds. Java 24+ is currently incompatible).\n- **Android SDK** with **CMake 3.22.1** installed.\n- **Android NDK** (Side-by-side versions).\n\n#### **Build Android**\n\n   ```properties\n   # Configure SDK Create a local.properties file in mobile/android/ pointing to your SDK:\n   sdk.dir=C:\\\\Users\\\\\u003cuser\u003e\\\\AppData\\\\Local\\\\Android\\\\Sdk\n   ```\n\n   ```bash\n   cd mobile\n   npm install\n   \n   # Build and run on connected Android device/emulator\n   npm run android:build\n   ```\n\n#### **Build iOS** (macOS only)\n\n   ```bash\n   cd mobile\n   npm install\n   npx expo prebuild --platform ios\n   \n   # Open in Xcode and build\n   open ios/BandcampRemote.xcworkspace\n   ```\n\n### Project Structure\n\n```text\nmobile/\n├── app/                       # Expo Router app directory\n│   ├── (tabs)/                # Main tab navigation\n│   ├── modal/                 # Modal screens\n│   └── _layout.tsx            # Root layout\n├── components/                # React Native components\n├── services/                  # Mobile services (Player, API, WebSocket)\n├── store/                     # Zustand store for mobile\n├── assets/                    # Mobile assets (images, fonts)\n├── android/                   # Android native project\n└── ios/                       # iOS native project\n```\n\n## Roadmap\n\n| What                                           | Size | Status |\n| :--------------------------------------------- | ---- | :----: |\n| Bug finding and fixing                         | XL   | 🟡     |\n| Refine the design                              | L    | 🟡     |\n| View/edit playlist/ drag-to-reorder - mobile   | L    | 🔴     |\n| Chromecast for standalone mobile mode          | L    | 🔴     |\n\n**Legend**:\n🟢 finished (waiting for release)\n🟡 in the middle\n🟠 just started\n🔴 not started\n\n## Star History (just for fun)\n\n\u003ca href=\"https://www.star-history.com/#eremef/bandcamp-player\u0026type=date\u0026legend=bottom-right\"\u003e\n \u003cpicture\u003e\n   \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/svg?repos=eremef/bandcamp-player\u0026type=date\u0026theme=dark\u0026legend=bottom-right\" /\u003e\n   \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/svg?repos=eremef/bandcamp-player\u0026type=date\u0026legend=bottom-right\" /\u003e\n   \u003cimg alt=\"Star History Chart\" src=\"https://api.star-history.com/svg?repos=eremef/bandcamp-player\u0026type=date\u0026legend=bottom-right\" /\u003e\n \u003c/picture\u003e\n\u003c/a\u003e\n\n## Also-Known-As\n\n- Bandcamp Eccentric Transport App\n- Browse Every Track Anywhere\n- Bandcamp Equivalent Third-party App\n- Bandcamp Enhanced Transmitting Anywhere\n- Bugs Everywhere, Try Anyway\n- Bandcamp Explorer, Totally Alpha\n- Built Exclusively To Audition\n- Better Every Time, Almost\n- Beats Echoing Through Air\n- Bandcamp Experience Through App\n- Bandcamp Embedded Track Aggregator\n\n## License\n\n[MIT](LICENSE.txt)\n\n### Disclaimer\n\nThis application is an unofficial project intended for personal use only. It is not affiliated with, authorized, maintained, sponsored, or endorsed by Bandcamp Ventures LLC. Users are responsible for complying with Bandcamp's Terms of Service and all applicable local and international laws regarding digital content and copyright.\n\n***\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feremef%2Fbandcamp-player","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feremef%2Fbandcamp-player","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feremef%2Fbandcamp-player/lists"}