| .vscode | ||
| bin | ||
| contrib | ||
| copyparty | ||
| docs | ||
| scripts | ||
| srv | ||
| tests | ||
| .eslintrc.json | ||
| .gitattributes | ||
| .gitignore | ||
| LICENSE | ||
| README.md | ||
| setup.py | ||
⇆🎉 copyparty
- http file sharing hub (py2/py3) (on PyPI)
- MIT-Licensed, 2019-05-26, ed @ irc.rizon.net
summary
turn your phone or raspi into a portable file server with resumable uploads/downloads using IE6 or any other browser
- server runs on anything with
py2.7orpy3.2+ - resumable uploads need
firefox 12+/chrome 6+/safari 6+/IE 10+ - code standard:
black
quickstart
download copyparty-sfx.py and you're all set!
running the sfx without arguments (for example doubleclicking it on Windows) will let anyone access the current folder; see -h for help if you want accounts and volumes etc
you may also want these, especially on servers:
- contrib/systemd/copyparty.service to run copyparty as a systemd service
- contrib/nginx/copyparty.conf to reverse-proxy behind nginx (for legit https)
notes
- iPhone/iPad: use Firefox to download files
- Android-Chrome: set max "parallel uploads" for 200% upload speed (android bug)
- Android-Firefox: takes a while to select files (in order to avoid the above android-chrome issue)
- Desktop-Firefox: may use gigabytes of RAM if your connection is great and your files are massive
- paper-printing is affected by dark/light-mode! use lightmode for color, darkmode for grayscale
- because no browsers currently implement the media-query to do this properly orz
status
- sanic multipart parser
- load balancer (multiprocessing)
- upload (plain multipart, ie6 support)
- upload (js, resumable, multithreaded)
- download
- browser
- media player
- thumbnails
- download as zip
- volumes
- accounts
- markdown viewer
- markdown editor
- FUSE client (read-only)
summary: it works! you can use it! (but technically not even close to beta)
client examples
-
javascript: dump some state into a file (two separate examples)
await fetch('https://127.0.0.1:3923/', {method:"PUT", body: JSON.stringify(foo)});var xhr = new XMLHttpRequest(); xhr.open('POST', 'https://127.0.0.1:3923/msgs?raw'); xhr.send('foo');
-
FUSE: mount a copyparty server as a local filesystem
- cross-platform python client available in ./bin/
- rclone as client can give ~5x performance, see ./docs/rclone.md
dependencies
jinja2- pulls in
markupsafeas of v2.7; use jinja 2.6 on py3.2
- pulls in
optional, enables thumbnails:
Pillow(requires py2.7 or py3.5+)
sfx
currently there are two self-contained binaries:
copyparty-sfx.shfor unix (linux and osx) -- smaller, more robustcopyparty-sfx.pyfor windows (unix too) -- crossplatform, beta
launch either of them (use sfx.py on systemd) and it'll unpack and run copyparty, assuming you have python installed of course
pls note that copyparty-sfx.sh will fail if you rename copyparty-sfx.py to copyparty.py and keep it in the same folder because sys.path is funky
sfx repack
if you don't need all the features you can repack the sfx and save a bunch of space; all you need is an sfx and a copy of this repo (nothing else to download or build, except for either msys2 or WSL if you're on windows)
724Koriginal size as of v0.4.0256Kafter./scripts/make-sfx.sh re no-ogv164Kafter./scripts/make-sfx.sh re no-ogv no-cm
the features you can opt to drop are
ogv.js, the opus/vorbis decoder which is needed by apple devices to play foss audio filescm/easymde, the "fancy" markdown editor
for the repack to work, first run one of the sfx'es once to unpack it
note: you can also just download and run scripts/copyparty-repack.sh -- this will grab the latest copyparty release from github and do a no-ogv no-cm repack; works on linux/macos (and windows with msys2 or WSL)
install on android
install Termux (see ocv.me/termux) and then copy-paste this into Termux (long-tap) all at once:
apt update && apt -y full-upgrade && termux-setup-storage && apt -y install python && python -m ensurepip && python -m pip install -U copyparty
echo $?
after the initial setup, you can launch copyparty at any time by running copyparty anywhere in Termux
dev env setup
python3 -m venv .venv
. .venv/bin/activate
pip install jinja2 # mandatory deps
pip install Pillow # thumbnail deps
pip install black bandit pylint flake8 # vscode tooling
how to release
in the scripts folder:
- run
make -C deps-dockerto build all dependencies - create github release with
make-tgz-release.sh - upload to pypi with
make-pypi-release.(sh|bat) - create sfx with
make-sfx.sh
todo
roughly sorted by priority
os.sendfile(andos.copy_file_rangefor up2k cloning)- reduce up2k roundtrips
- start from a chunk index and just go
- terminate client on bad data
- drop onto folders
- support pillow-simd
- cache sha512 chunks on client
symlink existing files on upload- ok at runtime, up2k db still not persisted
- comment field
look into android thumbnail cache file formatbad idea- figure out the deal with pixel3a not being connectable as hotspot
- pixel3a having unpredictable 3sec latency in general :||||