diffuse-A music player which connects to your cloud/distributed storage.

How to use it ?
1. download the blockstack browser from ]www.blockstack.org[/url] and get a blockstack id just like get a google id or facebook id
2. type https://diffuse.sh/ into the brower, and login with your blockstack id ,then you can click the "sources" button and then "add a new source" to select the storage which you can upload .For instance ,I choose dropbox,and then I click the green button to rename the folder name and the be redirected to official dropbox webpage.


I renamed the folder blockstackmp3 and that name as same as the dropbox folder which I store my mp3 format music.

3.click the "Process sources" button and then it would sync itself,now ,back to the homepage ,you can find the music name on your browser ,just click it and listen to it.
Links:
]Web Version[/url]
]Native version(window, linux and macOS )[/url]
]Source Code Address[/url]
Which services does it use?
Diffuse uses two layers of services, these layers are:
- User layer
- Music layer
User layer
This layer will use a service to store data from a user, such as the user’s favourites, their playlists and data from the processed music files.
You can choose between these services:
- Blockstack
- RemoteStorage
- IndexedDB (ie. anonymous mode)
Music layer
This layer connects with the services the user has on which music can be found. No data is written to these services. You can combine all of the following services:
- Amazon S3
- Azure Blob Storage
- Dropbox
- Google Drive
- IPFS
- Local Filesystem (native only)
- WebDAV (native only)
How does it work?
Diffuse locates all the music files on the given services, extracts the metadata and then stores it via the user layer (which was explained before).
Supported File Formats
- MP3
- MP4/M4A
- FLAC
CORS
There’s only one thing you need to do yourself so that your service will work with the application, and that’s setting up CORS (Cross-Origin Resource Sharing). Here are the instructions you’ll need for each service:
Amazon S3
<?xml version="1.0" encoding="UTF-8"?>Dropbox
<CORSConfiguration xmlns="[url=http://s3.amazonaws.com/doc/2006-03-01/">]http://s3.amazonaws.com/doc/2006-03-01/">[/url]
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>HEAD</AllowedMethod>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>31536000</MaxAgeSeconds>
<ExposeHeader>Accept-Ranges</ExposeHeader>
<ExposeHeader>Content-Encoding</ExposeHeader>
<ExposeHeader>Content-Length</ExposeHeader>
<ExposeHeader>Content-Range</ExposeHeader>
<AllowedHeader>If-Modified-Since</AllowedHeader>
<AllowedHeader>Origin</AllowedHeader>
<AllowedHeader>Range</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Not necessary.
Locally
Not necessary.
IPFS
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'
ipfs config --json Gateway.HTTPHeaders.Access-Control-Allow-Origin '["*"]'
ipfs config --json Gateway.HTTPHeaders.Access-Control-Allow-Headers '["X-Requested-With", "Range", "Content-Range"]'
Microsoft Azure Storage
<Cors>
<CorsRule>
<AllowedOrigins>*</AllowedOrigins>
<AllowedMethods>HEAD,GET</AllowedMethods>
<AllowedHeaders>If-Modified-Since,Origin,Range</AllowedHeaders>
<ExposedHeaders>Accept-Ranges,Content-Encoding,Content-Length,Content-Range</ExposedHeaders>
</CorsRule>
<Cors>
Search
Searching is powered by lunr.js, which means you can use all these wildcards and other stuff to refine your search. A few examples:
# "Parkway Drive" or "Iron Maiden".
# The non-escaped space (ie. ` `, not `\ `) indicates a new term.
Parkway\ Drive Iron\ Maiden
# Show me every track of which the artist's name starts with 'park'.
artist:park*
# Show me every track from Parkway Drive's "Deep Blue" album.
artist:Parkway\ Drive + album:Deep\ Blue
# Show me every track from Parkway Drive but not their "Atlas" album.
artist:Parkway\ Drive - album:Atlas