A better WiFi Transfer for your Shanling M1 Plus
Upload whole folders, pick up interrupted batches where they stopped, and copy albums straight from your NAS to the player. It’s a small web app you run on a computer, server or NAS on your home network.
What the built-in page can and can’t do
When you open WiFi Transfer, the player serves a small upload page. It’s Chinese-only, takes one file at a time and doesn’t know about folders. Dapload talks to the same server on the player, so there’s nothing to install on the device.
Both have the same limits where the firmware sets them: no rename or move, and no free-space figure. The built-in page has a rename button, but it has never worked.
Try it before you install it
This is the real app, running against a pretend player and NAS in your browser. Drop in some music, make folders, delete things, copy an album from the NAS.
- Drop a folder of music, then drop it again to see it skipped.
- Open Add from NAS and copy Northern Transit, which is partly on the player already.
- Turn the player off above, then back on, and watch it reconnect.
What it does
Whole folders
Drop a folder or pick one. The folder structure is recreated on the player, one level at a time, the way the firmware needs it.
Resumes where it stopped
Files already on the player with the same name and size are skipped, so re-running an interrupted batch only sends what’s missing.
Straight from your NAS
Connect an SMB share and copy albums from it to the player. The server streams the files, so they don’t go through your browser. The share is only read.
Bulk select and delete
Tick as many files and folders as you like and delete them in one go, with a confirmation first.
Sort and filter
Sort by name, date added or size, and filter the current folder as you type. Useful with a few hundred albums.
Approximate space used
The player doesn’t report its capacity, so the app adds up file sizes on the card and shows ≈ X used.
Dark mode
Follows your system setting, or switch it by hand.
Works on a phone
On a small screen the side panel folds into a top bar, rows show size and date on a second line, and dialogs open from the bottom.
A small server between your browser and the player
The player’s upload server doesn’t accept requests from other web pages, so the app runs its own small server on your network and passes requests on to the player.
Computer, tablet or phone
\\nas\music, read only
Docker or python3 proxy.py on a NAS, Raspberry Pi or always-on computer
WiFi Transfer open, e.g. 192.168.1.23:8888
Uploads from your computer
Your browser sends each file to the server, which forwards it to the player. Folders are created first, and files that are already there are skipped.
Copies from your NAS
Your browser only says which albums to copy. The server reads them from the share in 1 MB chunks and streams them to the player, so large DSD and ISO files are fine.
When the player is off
The player only runs its server while the WiFi Transfer screen is open. The app shows a “can’t reach” screen and reconnects on its own when you open it again.
Run it on something that’s always on
A NAS, a Raspberry Pi or a home server works well. Any computer on the same network as the player will do.
$ docker run -d --name dapload --restart unless-stopped \
-p 8899:8899 \
-v dapload-data:/data \
ghcr.io/admonish/dapload:latest
Music on the same machine? Use a local folder instead
If the music is on the machine running the app, or you’ve already mounted the share there, point the app at the folder. This also works for NFS shares.
$ docker run -d --name dapload --restart unless-stopped \
-p 8899:8899 \
-v dapload-data:/data \
-v /path/to/music:/music:ro \
-e LIBRARY_DIR=/music \
-e LIBRARY_NAME=NAS \
ghcr.io/admonish/dapload:latest
When LIBRARY_DIR is set, it replaces the NAS connection from the web page, which can’t be changed from the web page any more.
services:
dapload:
image: ghcr.io/admonish/dapload:latest
# or build from source instead:
# build: .
container_name: dapload
restart: unless-stopped
ports:
- "8899:8899"
# Optional settings. To use any of them, uncomment "environment:" too.
# environment:
# You can also enter (and later change) the player's address in the web UI.
# DEVICE: "192.168.1.23:8888"
# You can connect a NAS from the web page instead. Use these only to
# serve a folder on this machine (e.g. an NFS mount) as the library.
# LIBRARY_DIR: "/music"
# LIBRARY_NAME: "NAS"
volumes:
- dapload-data:/data
# - /path/to/your/music:/music:ro
volumes:
dapload-data:
$ docker compose up -d
You need Python 3.8 or newer.
$ git clone https://github.com/admonish/dapload.git $ cd dapload $ pip install -r requirements.txt # optional, only needed for connecting a NAS $ python3 proxy.py
You can also pass the address and port as arguments: python3 proxy.py 192.168.1.23:8888 8899.
- On the player, open WiFi Transfer.
It shows an address like
http://192.168.1.23:8888. - Open
http://<the machine running this>:8899in a browser. - Enter the player’s address when asked.
It’s remembered. If the player’s IP changes later, update it from the button or the “can’t reach” screen.
Limitations and security
Use it on your home network only
The app has no login. Anyone who can reach port 8899 can browse, upload to and delete from the player (while WiFi Transfer is open), browse the connected library, and change the settings.
The NAS password is never sent back to the browser, but it is stored in plain text on the server. That’s the same trust model as the player’s own WiFi Transfer page. Don’t expose it to the internet.
What the firmware doesn’t allow
- No rename or move. The firmware doesn’t implement it.
- No free-space figure. The player doesn’t report capacity, so the “≈ used” number is calculated by adding up file sizes.
- Only certain file types are accepted. The player silently drops anything else, so the app filters those files out up front and tells you.
Questions
Does it work with my player?
It’s tested on the Shanling M1 Plus. Other Shanling players with WiFi Transfer probably use the same server software and may work. If you try one, please open an issue saying whether it worked.
Is my music uploaded anywhere?
No. Files go from your browser to the app on your own network, and from there to the player. There are no accounts, no analytics and no cloud service involved.
Does it change anything on my NAS?
No. The share is only read, never modified. It’s a good idea to create a NAS user that only has read access to your music.
Which NAS devices work?
Any NAS or computer that shares folders over SMB (Windows file sharing). That covers Synology, QNAP, TrueNAS, Unraid, Windows and macOS shares. For NFS, mount the share on the machine running the app and use a local folder.
Do I need to install anything on the player?
No. Open WiFi Transfer on the player and the app talks to the same built-in server the stock page uses.
Why does the player have to stay on the WiFi Transfer screen?
The player only runs its web server while that screen is open. When it’s closed, the app shows a “can’t reach” screen and reconnects automatically when you open it again.
A transfer was interrupted. Do I start over?
Just run the same upload or copy again. Files that are already on the player with the same name and size are skipped.
Why can’t I rename files or see free space?
The player’s firmware doesn’t support either. There’s no move or rename command, and no way to ask for the card’s capacity, so the app shows an approximate “used” figure instead.
Is this made by Shanling?
No. It’s an unofficial community project, not affiliated with or endorsed by Shanling.