That works. Not sure how I missed the instructions the last time around. Thanks for pointing it out so kindly.
As a simple music player, your site is nice, clean, and easy, even if it isnāt packed full of features. Itās good work. Can I ask where you go from here? Whatās the intended use?
You now have a bunch of ID3 and filename data correlated to hashes. Will you make that usable to others? If so, how?
Iām not 100% sure where Iāll go from here, but I do know that:
Iāll add the ability to upload files as well
It should be really easy for people to copy their IPFS hashes, share it with people and then play the music with the app
Proper integration with the Blockstack platform (currently in development)
Add more features like playlists and a album-art view
As far as the data goes (the id3 and filenames which you mentioned), I donāt have access to that at all. The application is completely client-side and the data collected is completely in the userās control.
@flyingzumwalt already answered it well, but one addendum, because you asked for the publishing key. Thatās the key a user would generate in his client software to publish metadata, playlists etc. (maybe even songs for download) on ipns. The go-ipfs equivalent is ipfs key gen --type=rsa --size=2048 mykey. The key āmykeyā will then be saved to your ~/.ipfs directory, and you can then publish using that key, instead of using your PeerID. You can create as many keys as you like, e.g. if you want to share metadata/playlists etc. with different friends, you can create one publishing key & one ipns publication per friend sharing linkup. Then you just need to share that publishing key with the people youāve linked up, and for that key-sharing operation, the key needs to be transferred encrypted, and for that a public-private key cryptography would be the best way. (Simple S/MIME with openssl would probably suffice.) You also need to account for the situation when one user leaves or is kicked out of a sharing group: then your app needs to remove that key again, i.e. it has to be stored locally in encrypted form as well, but this time the encryption is only known to your app, not to the user, i.e. the user wonāt be able to just snatch the key from the Application Support folder before leaving the group.
PS: what you put into the ipns directory should be encrypted too. And that would complicate things, if multiple users share that directory, if users are added, if others leave etc.
Thanks for the awesome explanation @JayBrown! I really appreciate it!
Itāll be quite a challenge to implement this, but Iāll see what I can do
It certainly has a lot of potential
Ok, hereās my first attempt at writing down something that would work for my application. Itās definitely not as refined as what you described, but Iām slowly getting there
Thoughts?
PS. I know that it isnāt very secure (yet), but Iām trying to wrap my head around the basic idea
Iām still very excited for this! Iāve been wanting something similar.
A) Is there a way for my server to add files to my library? Use case: having my mqtt-controlled cloud-dwelling bestie receive a song web address, rip it via youtube-dl or similar, push it to ipfs/AWS, and put it in my library. Only required input is sharing the link on the relevant mqtt topic.
b) could a server modify my queue on my phone or laptop? I.e. have a recommender system of my own on my server be able to dynamically live-recommend songs into my queue
C) could this run on a phone? I.e possibly by
using pre-populated local storage in a folder, and other software (synching) actually batch updating the folder when on WiFi & plugged in
pulling from AWS, caching locally
using IPFS on the phone (not yet afaik)
D) the songs are stored not-encrypted, correct? Itās only the personal info that is encrypted like AWS keys and blockstack stuff?
A - Part 1 :: Iām not sure what you mean by āserverā, this application is client-side only (html + javascript). There is no backend/server. It connects to remote sources in the browser itself, finds all the music files on it, gets the metadata from those files and then stores that metadata somewhere (ie. localStorage, Blockstack storage or something else). Iām also working on IPNS support, but IPNS in go-ipfs is hella slow at the momentā¦
A - Part 2 :: Iām not sure if I understand your use case entirely, I have no idea what āmqttā is. But I can say that file uploading is planned for the future. Then youāll be able to upload files from inside the app directly to your storage. Does that answer your question?
B :: Thatās not possible no. Maybe someday?
C :: Only using the āanonymousā mode at the moment. Blockstack is still working on iOS support. So at the moment you can login using the anonymous mode, and then add a remote ipfs hash or AWS S3 bucket/directory.
D :: Like I described in my answer for A, the songs are not copied/stored, the app only extracts the metadata and stores that. Your files stay where they are.
Thanks for all the questions! Let me know if I missed something or if something wasnāt clear.
PS. Thereās also the about page, which you can find here http://ongakuryoho.com/about/ But I now realize that I probably should explain it a bit better.
This is an awesome project a little bit ago I was working on something similar with videos it only incorporates the local storage solution you have with the anonymous login.
I wonder if it wouldnāt be worth while to incorporate video into your project too.
Thanks! I donāt plan on adding support for videos, but feel free to fork the project and customise it however you see fit: https://github.com/icidasset/diffuse
I made a [REC] Machine for wedradio streams recording (https://www.copylaradio.com French as we pay a tax for keeping our private copy right, this machine is legal). It uses youtube-dl on a Pi Zero W
I am looking for a way to make that Radios interconnected.
I am gonna try ipfs-cluster.
I still try to figure out how to use your song meta indexā¦
Even sharing same secret, cluster nodes didnāt connect.
ipfs-cluster-ctl peers ls
QmYQJExSsv29GFJ3U59jgozAbUvDoF6VUFMWNeAnj89ed3 | rock64 | Sees 0 other peers
Maybe I didnāt wait enough, or architecture storage and processors are too different (16GB RpiZeroW, 32GB RPI3B+, 5TB Rock64, 200GB amd64)
The more I discover IPFS, the more I think this is ENORMOUS! It can really replace so much tools in one.
Now I am trying to share my Music library between my computers with CLI first.
I wanted to use cluster to have an automatic sync, but I mostly need to have repository CID distributed.
I must figure out how to keep a permanent reference to a changing datasetā¦
And how to host a Web GUI for it
diffuse.sh is a So Great Network Magic?
Some browser based executed code (js) which files are hosted inside IPFS swarms and redirected by DNSLink?
Am I right?
Difuse is a static html page (aka. a static site) with javascript, hosted on Netlify. Alternatively, thereās a native app which is basically the same but you can use it offline. Nothing fancy. In the application you can add a āsourceā of music, which can be IPFS, among other options. It scans the metadata from files/directories you added (or linked if you will), you get a list of all the music you added and then you can play the music.
In V2, youāll be able to store the application data as well on IPFS, encrypted that is.
No further associations with IPFS.
I hope that clears things up
Yes I followed itā¦ But I didnāt investigate enough to know where the problem was.
ipfs dht findpeer QmYQJExSsv29GFJ3U59jgozAbUvDoF6VUFMWNeAnj89ed3 could have helped
Iāll come back later on that cluster modeā¦
I am studying how to add a directory to IPFS and still be able to change files in it but be sure to keep access with same CID to all sub datastructureā¦ https://docs.ipfs.io/guides/examples/websites/