Dapload
Unofficial · Open source · MIT

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.

Docker: amd64 · arm64 · armv7 or Python 3.8+
Why

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.

Built-in WiFi Transfer page Dapload
LanguageChinese onlyEnglish
UploadingOne file at a timeMany files, or whole folders by drag and drop or folder picker
FoldersCan’t upload a folderFolder structure preserved on the player
Interrupted batchStart again and pick what’s missing by handFiles already on the player are skipped
Music on a NASCopy it to your computer first, then uploadCopied from the share to the player directly
DeletingOne item at a timeSelect many, delete once
Space usedNot shownApproximate figure, added up from file sizes
On a phoneDesktop layoutLayout made for small screens

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.

Live demo

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.

Loading the demo…
Your files stay on your computer. The demo only reads the names and sizes of files you add, keeps them in this tab until you close it, and simulates the transfer. Nothing is uploaded anywhere, and downloads are turned off.
  • 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.
Features

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.

How it works

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.

Your browser

Computer, tablet or phone

HTTP · :8899uploads, commands
NAS share

\\nas\music, read only

SMBalbum files
Dapload

Docker or python3 proxy.py on a NAS, Raspberry Pi or always-on computer

WiFi · :8888files, listings
Shanling M1 Plus

WiFi Transfer open, e.g. 192.168.1.23:8888

Browser to server Copying from the NAS: share to server to player, without your browser

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.

Install

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.

terminal
$ docker run -d --name dapload --restart unless-stopped \
  -p 8899:8899 \
  -v dapload-data:/data \
  ghcr.io/admonish/dapload:latest
Images for amd64arm64armv7 so it runs on a Raspberry Pi or on most NAS devices that support Docker (Synology, Unraid, TrueNAS and so on).
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.

terminal
$ 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.

Then
  1. On the player, open WiFi Transfer.

    It shows an address like http://192.168.1.23:8888.

  2. Open http://<the machine running this>:8899 in a browser.
  3. 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.

Good to know

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.
ISODFFDSFAPEFLACAIF(F)WAVM4AAACMP2AC3DTSMP3OGGWMACUEM3U(8)PNGJPGLRCBIN
FAQ

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.