Spotify for Nintendo 3DS (homebrew)
Spotify
TechnologyNative C/C++ port (engine reimplementation)
View official projectAbout the project
El término null, nulo o nil es a menudo utilizado en la computación para hacer referencia a la nada. Su significado y uso varía según el lenguaje de programación.
Official project information
Nota: Esta documentación también está disponible en español: README_es.md
Spotify 3DS
Unofficial Spotify client for the Nintendo 3DS (proxy + 3DS application).
<div style="display: flex; gap: 10px"> <img src="https://i.imgur.com/BiwIS82.png" alt="Top playing" width="350"> <img src="https://i.imgur.com/ppvuOb7.png" alt="Bottom playing" width="350"> </div>Overview
This repository contains:
- A proxy server (FastAPI) that handles Spotify authentication and exposes endpoints for the console: server/server.py. See also server/Dockerfile and server/spotify_config.json.
- The 3DS client application (source and assets) in the
clientfolder: client/Makefile, client/source/main.c and the display interface client/include/image_display.h (e.g.initNetwork).
Requirements
- Docker or Python (depending on whether you choose step 1.a or 1.b)
- To build the client from source: devkitARM/3DS homebrew toolchain (see
client/Makefile) - A Spotify Developer application (Client ID / Client Secret)
Quick start
1) Deploy the proxy server
You can deploy the server with Docker (recommended) or run it directly with Python.
1.a) Proxy server with Docker
- Download the release
spotify3ds-proxy.tarfrom the project's Releases. - Load the Docker image:
docker load -i spotify3ds-proxy.tar - Run the container:
docker run -d --name spotify3ds-proxy -p 8000:8000 spotify3ds-proxy - Check container status:
docker ps - Enter the container to edit configuration:
Filldocker exec -it spotify3ds-proxy bash apt update && apt install nano -y nano spotify_config.jsonclient_idandclient_secret(from the Spotify dashboard) and save. - On the first run the server will try to open the authorization URL from the container host; if it doesn't open you will see the URL in the container or host console. Open it in a browser and authorize. After authorization the server will store the
code/refresh_tokeninspotify_config.json.
1.b) Proxy server directly with Python
-
Clone the repo and enter the server folder:
git clone https://github.com/davidabejon/spotify-3ds.git cd spotify-3ds/server -
Create and activate a virtual environment (Windows):
python -m venv .venv .venv\Scripts\activate -
Install dependencies:
pip install -r requirements.txt(If there is no requirements.txt, install FastAPI and Uvicorn:
pip install fastapi uvicorn requests.) -
Edit
spotify_config.jsonand addclient_idandclient_secretfrom the Spotify Dashboard. Optionally adjustredirect_uri. -
Run the server with Uvicorn (from the
serverfolder):uvicorn server:app --host 0.0.0.0 --port 8000 --reload --reload-include spotify_config.json- If the main module name differs adjust
module:appaccordingly. - On first run the server will show or open the authorization URL; complete the flow in the browser so the
refresh_tokenis saved tospotify_config.json.
- If the main module name differs adjust
2) 3DS Application
- Easiest: download
Spotify3DS.ciafrom Releases, copy to the SD card and install with FBI or another CIA installer - Alternatively download
spotify-3ds.zippackage from Releases: extract into/3dson the SD card and run via the Homebrew Launcher.
On first run the app will prompt you to enter the proxy server's IP address; after submitting it will attempt to connect automatically.
To change the IP later, press Y to reopen the on-screen keyboard and enter a new address.
Controls
- A — Play / Pause
- Y — Open IP entry (on-screen keyboard)
- D-Pad Right — Next track
- D-Pad Left — Previous track
- D-Pad Up — Volume up
- D-Pad Down — Volume down
- START — Exit the app
License and credits
- License: Apache License 2.0 — see the
LICENSEfile at the repository root. - Original author: David Abejón.
- Included libraries: stbi (stb_image) at
client/include/stb_image.hand other dependencies listed in Docker/requirements.