At one point in his demo, he uploads a file but terminates the upload more or less halfway. Then he begins downloading the file - which only progresses to the point it had been uploaded, and subsequently stalls indefinitely. And, finally, he finishes uploading the file (which gracefully resumes) and the file download (which is still running) seamlessly completes.
I found that particularly impressive.
That’s because BitTorrent was immediately useful and empowering.
Edit: Source: https://en.wikipedia.org/wiki/File_eXchange_Protocol#Technic...
1. You connect to servers A and B.
2. Tell B to receive a PASV transfer. It replies with the IP address and port it's receiving on.
3. Tell A to send to that address and port.
This is documented in RFC 959, starting with
"In another situation a user might wish to transfer files between two hosts, neither of which is a local host."(also a great app to download everything you wanted from a site, regex selections, etc.)
Makes several connections and downloads chunks in parallel, for some sites with limited upload (their, your download) speeds per session it really speeds up the downloads.
Sadly, not much development recently (9 months ago was the last commit)
Finding that piece of software around 2001-2002 was what allowed me to finally download a specific piece of, ahem, 'shareware', that was about 400 MB, zipped, that I would never have been able to finish on a 14.4kbps modem on a single very noisy phone line that usually dropped the call every 2 hours or so. It eventually took three days but the file came across uncorrupted. It wouldn't have been possible without the ability to resume downloads after dropped connections.
And that software download went on to allow me to start the path learning what I wanted to learn about, and that paved the way for my engineering degrees and thus setting me up for the last 20-some years. Wild how little pieces of the puzzle like that drive so much of your life.
i used to use that feature to run several downloads from several different sites of different sections of linux distro isos when new releases were put up
Sometimes there are server-side problems: some dynamic responses (i.e. files that are behind a user account so need the right to access checked before sending) are badly designed so that they uneccesarily break sub-range downloads. This could be seen as a “poor server” issue, but I think it is more a “daft dev/admin” or “bad choice of software” problem.
--------
[1] admittedly not all, but…
[2] wget and curl do, though not automatically without a wrapper script
But also likely I didn't have FlashGet on my cousin's computer which was the computer we were using to play it.
That’s really cool. I’ve never seen that work before.
IIRC webtorrent /can/ do streaming though....
By the way, the youtube video showcases this project really well.
(You know, like the neighbourhood "take-a-book, leave-a-book" little libraries, except for... digital content... It would fly an appropriate "skull + crossbones" flag...)
I created a PirateBox on a little GliNet router a while back with the intention of sharing public domain content but didn't do so beyond having a quick play around with it myself.
Have debated making it "read-only", but then I would be culpable for the curation of content...
That and perhaps I just don't want to encourage people loitering around in front of my house for long-transfers...
OTOH - this could be useful for essentially a "dead-drop" independent standalone box for, uh... "civil disobedience" reasons... (or a free alternative to those "prepper-internet-in-a-box" devices they are currently selling...)
Which sounds like alot, but if we factor in the extended family and cross-media sharing and the number of separate streaming services we all subscribe to across many many years, then this is a "deal"...
OTOH - I don't want to be the first case/person to help determine what precedent will be set if something actually gets taken to the end-state statutory damages..
So yeah - this is probably one of those half-baked ideas that just wouldn't be a good one to actually implement "in-the-wild".
https://github.com/Emeryth/openwrt-zsun
https://wiki.hackerspace.pl/projects:zsun-wifi-card-reader
I got them in bulk from China for ~$6 each.
Resumable, can queue, send directories, drag & drop, LAN (without account) & WAN (hybrid p2p), all transfers + metadata are e2ee. Linux, Windows, Mac, iOS, Android.
Disclaimer: I’m the creator
> inverse linux philosophy -- do all the things, and do an okay job
Seriously considering replacing my navidrome/subsonic service and try my music library trough this. I used to play music straight from the directory tree a long time ago anyway, this might feel right at home.
> NOTE: full bidirectional sync, like what nextcloud and syncthing does, will never be supported! Only single-direction sync (server-to-client, or client-to-server) is possible with copyparty
Worth noting that if you're considering using Nextcloud this may be a dealbreaker... But if it's not, I would also recommend not using Nextcloud!
I took a glance at the code and it's... not great. It's absolutely full of short, meaningless 1-2 letter variable and function names that make it very hard to read and understand if you're not the original author. Wouldn't be surprised if it's full of security holes that will never be found.
> i want to learn python and/or programming and am considering looking at the copyparty source code in that occasion
> do not
> inverse linux philosophy -- do all the things, and do an okay job > - quick drop-in service to get a lot of features in a pinch > - some of the alternatives might be a better fit for you
This includes a link to this doco in the repo which is an incredible source of info: https://github.com/9001/copyparty/blob/hovudstraum/docs/vers...
I don’t think I’ve ever used a piece of software in my life that had no bugs. At least with no deps (vs say a nodejs project with 500 of them) then the bugs will only be in one place, the main software so ideally they can be fixed quickly.
(For others, it’s a method to follow people across multiple services without being a normal feed. A person who updates only shows up once.)
Amazing.
Now I am wondering, would it be technically possible to build a similar app but based on the syncthing protocol?
I really like syncthing but it would be cool to have a version where you could just easily share specific files with peers.
I've also seen quite a few semi-technical youtubers make videos about it but not mentioning that it uses public relay and discovery servers usually by default (but maybe that depends on the distro). It's not a bad thing but something one should know before using it.
Never mine, it's back now.
This is underselling it by at least three orders of magnitude. This is astonishing tool, you have to watch the demo video: https://www.youtube.com/watch?v=15_-hgsX2V0
Didn't happen.
[keeps watching video] what the fuck
> i want to learn python and/or programming and am considering looking at the copyparty source code
> do not
If the author is lurking here, are you doing all by yourself? Do you use any LLM/agent?
It really is impressive.
Yup, this is 97% just me hacking away in vscode -- I use pylance and the debugger but have everything else disabled, easier to focus that way. The only time I use any sort of AI/LLM is for translating new strings into Chinese, since it seems decently capable at that :-)
The remaining 2% is friends coming up with new usecases/features, and sometimes finding bugs.
But now that the project got way more attention than I'd anticipated, pullrequests have started appearing, so it doesn't look like those statistics will stay true for much longer! Really cool having more eyes on it spotting the things I overlooked, really enjoying that.
The only thing I'd like is some way to run it behind a cgnat. I was on starlink and I'm on an 5g device now.
If there was a way to integrate with Google drive mega Dropbox, githubs etc where I could drop a file list request document one of those services, and your server is pinging that (intermediate) storage service, detects the file listing request or file push request, or file upload request doc, and then does it.
I know each of those is an integration headache but man that would be useful.
Ok so GitHub has a built in markdown editor, so the request docs could be markdown templates. Or maybe static html/js files that generate markdown request docs, and file listing responses can be markdown or more static html docs.
Tailscale: I don't want to install a corporation's client.
Yggdrisil: "The current implementation of Yggdrasil is a lightweight userspace software router which is easy to configure and supported on a wide range of platforms. It provides end-to-end encrypted IPv6 routing between all network participants." Yeah, not what I need and too-much-access.
No corporation, fully endorsed by Tailscale.
Were you a part of the efnet ansi/ascii scene?
There's still some of us floating around!
Great project btw, nice work!
I noticed this which brought a SMB question to mind:
>login doesn't work on winxp, but anonymous access is ok -- remove all accounts from copyparty config for that to work
>win10 onwards does not allow connecting anonymously / without accounts
Is this an intentional limitation in copyparty itself, or maybe just the progressive difference in Windows versions?
Now I feel like crap seeing how amazing this project is.
You'll likely need to root the phone to get the OS not to kill the termux process due to idleness though.
For example, access over OPDS, which one could then configure as the store backend on Kobo eReaders (yes, that's possible).
> seafile … and nextcloud … their license is problematic
There’s nothing problematic about the AGPL, really. It protects users. It protects developers against someone taking over their projects. The only people it bothers are those who wish to take a free software project and integrate with an unfree one. That seems like a feature to me!
I even emailed Stallman about it. The only way to make a proprietary version of an AGPLv3 project is to pay the original copyright holders for a special proprietary licensing deal, thereby supporting its development. Forks don't have the same privilege.
I had been using serverultimate on my phone for a few years, and recently limitations made the port binding not work anymore. Copyparty using termux on Android worked amazing!
Thanks!
aredox•6mo ago
*It already has no deps
Great job there. A nice tool you've made.
Edit: already adressed: https://github.com/9001/copyparty?tab=readme-ov-file#copypar...
9029•6mo ago
[0] https://github.com/jart/cosmopolitan
[1] https://ahgamut.github.io/2021/07/13/ape-python/
leobuskin•6mo ago
noman-land•6mo ago
sull•6mo ago
collinmanderson•6mo ago
Yes when I heard it was python I immediately checked the dependencies expecting a ginormous list and found basically nothing. Incredibly impressive, just a few "stolen" libs here: https://github.com/9001/copyparty/tree/hovudstraum/copyparty...
Worth scrolling through util.py to see lots of hand-implemented code: MultipartParser, read_header(), read_socket_chunked(), html_escape(), atomic_move(), killtree ("still racy but i tried"), termsize(), etc
https://github.com/9001/copyparty/blob/hovudstraum/copyparty...
6k loc for http server/client handling transferring files, rss feed, etc. See `def run(self)` for main request parsing.
https://github.com/9001/copyparty/blob/hovudstraum/copyparty...