I made a video about copyparty, the selfhosted fileserver I’ve been making for the past 5 years.
The main focus of the video is the features, but it also touches upon configuration. Was hoping it would be easier to follow than the readme on github… not sure how well that went, but hey :D
This video is also available to watch on the copyparty demo server, as a high-quality AV1 file and a lower-quality h264.
Thank you so very much. I needed to transfer some files locally yesterday and didn’t have a NAS set up. So I thought I would quickly set up a samba share on my pop-os media server so my spouse (windows) and I (mint) could swap/store files on the fly in the future. It took me 25 minutes and I almost gave up because my config file was having issues.
This looks sooooo much nicer. May every road rise up to meet you
Have been playing around with it for a bit and it’s AMAZING.
The video are amazing. It’s entertaining and explains everything so it’s easily understood.
Don’t believe it. This is easily too good to be true.
This is cool. Idk if it’s just me but the h.264 version of your video has no sound!
man… that’s really unexpected, I went with h264+mp3 which should be the most conservative / broadly-supported combination you could possibly use, yet still (ノ ゚ヮ゚)ノ ~┻━┻
what webbrowser / device / player are you using?
Everyone loves CP. Tell all your friends about CP.
Are China Parties like Tupperware Parties, where friends get together and one shills a pyramid scheme? That’s what CP is, right?
Elderly raspberry pi B [✓]
Large portable drive gathering dust [✓]
Guess I’m setting up a locally hosted file server in the near future.
🤯
I have a question, and I want to emphasise thar this is not criticism but a request for dive into technicalities.
In the video you mentioned copyparty has an one-way sync tool. Is there a good reason why it’s not two-way, or is this just something you weren’t motivated to do?
No worries, good question :>
The problem with bidirectional filesync is that it’s an absolutely massive can of worms, very easy to mess up, and the consequences of messing up are usually the worst kind (loss of data). There’s an insane amount of edgecases to keep in mind, and you need to get every edgecase right every single time, otherwise you might wipe someone’s vacation photos, or suddenly downgrade someone’s keepass database to an older version… And stuff like syncing multiple devices to the same server makes it balloon further.
I’ve started becoming more confident in copyparty’s filesystem-index database, but it’s still just a hint/guideline, with the filesystem being the only source of truth – it’s still not something I’d trust with tracking sync-state against one or more clients.
The bigger guys who offer bidirectional sync (nextcloud, syncthing, etc.) have spent years perfecting their logic, so I’d like to leave this in their capable hands.
Sync is one of those things that seems like it should be trivial but is actually super complicated.
Thank you for your answer! Do you think copyparty would work together with Syncthing on the same backing directory, or would they compete for changes etc? Copyparty in this scenario would be for sharing content with friends and occasional remote upload
that should be totally fine, I think a lot of people are doing that :>
Great software!
Now it would be interesting to setup a raspberry pi with harddrives plugged in the USB 3 ports💡
Look cool! I think you should consider putting a screenshot of the UI somewhere near the top of the README
Oh my gawd what a README!! I’m on my phone and I was trying to scroll back to the top of it from the bottom and I just kept on scrolling… Holy shit I’m going to put this on my kanban board give it proper attention
At this rate might be faster to read code than a read me. Or convert to a wiki style if this much details are really needed.
Haven’t looked at the project yet, but that’s just the greatest name for a fileserver…
Can you point me to the WebDAV code? I’m interested to see your implementation. There are some parts of the spec that are ambiguous, and I like to see how those are implemented in different servers.
sure! my implementation is really basic, just the stuff that’s needed to make the clients i’ve tested happy, so there’s probably still clients that won’t be able to connect (And i’ll fix those as soon as I hear about them!)
httpcli.py is the http methods handler, and the webdav-specific handlers are all next to eachother, propfind // proppatch // lock // unlock // mkcol // and there’s also put for the uploads, but that’s not entirely webdav-specific, just webdav-aware.
Thanks! So you put in the
displayname
prop even if it’s not set by the client. For the life of me, I can’t figure out what that prop is supposed to be in the spec. It calls it a live prop, but doesn’t give an explanation or an equivalent HTTP header.I love how you named the error for 400 statuses, “Pebkac”! xD
Very sleek project. The language switcher bit was brilliant hahaha. Seriously, good job.