copyparty 1.13.3__tar.gz → 1.13.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. {copyparty-1.13.3 → copyparty-1.13.5}/PKG-INFO +45 -10
  2. {copyparty-1.13.3 → copyparty-1.13.5}/README.md +43 -8
  3. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/__main__.py +80 -41
  4. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/__version__.py +2 -2
  5. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/authsrv.py +68 -9
  6. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/broker_util.py +3 -3
  7. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/cert.py +10 -6
  8. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/cfg.py +3 -0
  9. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/ftpd.py +44 -7
  10. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/httpcli.py +224 -96
  11. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/httpsrv.py +3 -3
  12. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/mdns.py +1 -1
  13. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/mtag.py +3 -0
  14. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/smbd.py +1 -1
  15. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/ssdp.py +1 -1
  16. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/svchub.py +4 -2
  17. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/tcpsrv.py +4 -1
  18. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/tftpd.py +5 -10
  19. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/th_cli.py +3 -2
  20. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/th_srv.py +16 -8
  21. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/up2k.py +124 -40
  22. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/util.py +45 -15
  23. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/a/u2c.py +117 -38
  24. copyparty-1.13.5/copyparty/web/baguettebox.js.gz +0 -0
  25. copyparty-1.13.5/copyparty/web/browser.js.gz +0 -0
  26. copyparty-1.13.5/copyparty/web/deps/marked.js.gz +0 -0
  27. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/svcs.html +11 -10
  28. copyparty-1.13.5/copyparty/web/ui.css.gz +0 -0
  29. copyparty-1.13.5/copyparty/web/up2k.js.gz +0 -0
  30. copyparty-1.13.5/copyparty/web/util.js.gz +0 -0
  31. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/w.hash.js.gz +0 -0
  32. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty.egg-info/PKG-INFO +45 -10
  33. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty.egg-info/requires.txt +1 -1
  34. {copyparty-1.13.3 → copyparty-1.13.5}/pyproject.toml +1 -1
  35. copyparty-1.13.3/copyparty/web/baguettebox.js.gz +0 -0
  36. copyparty-1.13.3/copyparty/web/browser.js.gz +0 -0
  37. copyparty-1.13.3/copyparty/web/deps/marked.js.gz +0 -0
  38. copyparty-1.13.3/copyparty/web/ui.css.gz +0 -0
  39. copyparty-1.13.3/copyparty/web/up2k.js.gz +0 -0
  40. copyparty-1.13.3/copyparty/web/util.js.gz +0 -0
  41. {copyparty-1.13.3 → copyparty-1.13.5}/LICENSE +0 -0
  42. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/__init__.py +0 -0
  43. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/bos/__init__.py +0 -0
  44. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/bos/bos.py +0 -0
  45. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/bos/path.py +0 -0
  46. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/broker_mp.py +0 -0
  47. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/broker_mpw.py +0 -0
  48. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/broker_thr.py +0 -0
  49. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/dxml.py +0 -0
  50. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/fsutil.py +0 -0
  51. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/httpconn.py +0 -0
  52. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/ico.py +0 -0
  53. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/metrics.py +0 -0
  54. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/multicast.py +0 -0
  55. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/pwhash.py +0 -0
  56. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/res/COPYING.txt +0 -0
  57. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/res/__init__.py +0 -0
  58. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/res/insecure.pem +0 -0
  59. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/star.py +0 -0
  60. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/stolen/__init__.py +0 -0
  61. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/stolen/dnslib/__init__.py +0 -0
  62. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/stolen/dnslib/bimap.py +0 -0
  63. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/stolen/dnslib/bit.py +0 -0
  64. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/stolen/dnslib/buffer.py +0 -0
  65. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/stolen/dnslib/dns.py +0 -0
  66. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/stolen/dnslib/label.py +0 -0
  67. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/stolen/dnslib/lex.py +0 -0
  68. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/stolen/dnslib/ranges.py +0 -0
  69. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/stolen/ifaddr/__init__.py +0 -0
  70. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/stolen/ifaddr/_posix.py +0 -0
  71. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/stolen/ifaddr/_shared.py +0 -0
  72. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/stolen/ifaddr/_win32.py +0 -0
  73. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/stolen/qrcodegen.py +0 -0
  74. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/stolen/surrogateescape.py +0 -0
  75. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/sutil.py +0 -0
  76. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/szip.py +0 -0
  77. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/u2idx.py +0 -0
  78. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/a/__init__.py +0 -0
  79. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/a/partyfuse.py +0 -0
  80. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/a/webdav-cfg.bat +0 -0
  81. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/browser.css.gz +0 -0
  82. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/browser.html +0 -0
  83. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/browser2.html +0 -0
  84. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/cf.html +0 -0
  85. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/dbg-audio.js.gz +0 -0
  86. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/dd/2.png +0 -0
  87. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/dd/3.png +0 -0
  88. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/dd/4.png +0 -0
  89. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/dd/5.png +0 -0
  90. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/dd/__init__.py +0 -0
  91. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/deps/__init__.py +0 -0
  92. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/deps/busy.mp3.gz +0 -0
  93. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/deps/easymde.css.gz +0 -0
  94. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/deps/easymde.js.gz +0 -0
  95. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/deps/mini-fa.css.gz +0 -0
  96. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/deps/mini-fa.woff +0 -0
  97. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/deps/prism.css.gz +0 -0
  98. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/deps/prism.js.gz +0 -0
  99. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/deps/prismd.css.gz +0 -0
  100. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/deps/scp.woff2 +0 -0
  101. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/deps/sha512.ac.js.gz +0 -0
  102. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/deps/sha512.hw.js.gz +0 -0
  103. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/md.css.gz +0 -0
  104. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/md.html +0 -0
  105. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/md.js.gz +0 -0
  106. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/md2.css.gz +0 -0
  107. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/md2.js.gz +0 -0
  108. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/mde.css.gz +0 -0
  109. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/mde.html +0 -0
  110. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/mde.js.gz +0 -0
  111. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/msg.css.gz +0 -0
  112. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/msg.html +0 -0
  113. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/splash.css.gz +0 -0
  114. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/splash.html +0 -0
  115. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/splash.js.gz +0 -0
  116. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty/web/svcs.js.gz +0 -0
  117. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty.egg-info/SOURCES.txt +0 -0
  118. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty.egg-info/dependency_links.txt +0 -0
  119. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty.egg-info/entry_points.txt +0 -0
  120. {copyparty-1.13.3 → copyparty-1.13.5}/copyparty.egg-info/top_level.txt +0 -0
  121. {copyparty-1.13.3 → copyparty-1.13.5}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: copyparty
3
- Version: 1.13.3
3
+ Version: 1.13.5
4
4
  Summary: Portable file server with accelerated resumable uploads, deduplication, WebDAV, FTP, zeroconf, media indexer, video thumbnails, audio transcoding, and write-only folders
5
5
  Author-email: ed <copyparty@ocv.me>
6
6
  License: MIT
@@ -48,7 +48,7 @@ Provides-Extra: ftps
48
48
  Requires-Dist: pyftpdlib; extra == "ftps"
49
49
  Requires-Dist: pyopenssl; extra == "ftps"
50
50
  Provides-Extra: tftpd
51
- Requires-Dist: partftpy>=0.3.1; extra == "tftpd"
51
+ Requires-Dist: partftpy>=0.4.0; extra == "tftpd"
52
52
  Provides-Extra: pwhash
53
53
  Requires-Dist: argon2-cffi; extra == "pwhash"
54
54
 
@@ -137,6 +137,8 @@ turn almost any device into a file server with resumable uploads/downloads using
137
137
  * [reverse-proxy](#reverse-proxy) - running copyparty next to other websites
138
138
  * [real-ip](#real-ip) - teaching copyparty how to see client IPs
139
139
  * [prometheus](#prometheus) - metrics/stats can be enabled
140
+ * [other extremely specific features](#other-extremely-specific-features) - you'll never find a use for these
141
+ * [custom mimetypes](#custom-mimetypes) - change the association of a file extension
140
142
  * [packages](#packages) - the party might be closer than you think
141
143
  * [arch package](#arch-package) - now [available on aur](https://aur.archlinux.org/packages/copyparty) maintained by [@icxes](https://github.com/icxes)
142
144
  * [fedora package](#fedora-package) - does not exist yet
@@ -261,7 +263,7 @@ also see [comparison to similar software](./docs/versus.md)
261
263
  * upload
262
264
  * ☑ basic: plain multipart, ie6 support
263
265
  * ☑ [up2k](#uploading): js, resumable, multithreaded
264
- * unaffected by cloudflare's max-upload-size (100 MiB)
266
+ * **no filesize limit!** ...unless you use Cloudflare, then it's 383.9 GiB
265
267
  * ☑ stash: simple PUT filedropper
266
268
  * ☑ filename randomizer
267
269
  * ☑ write-only folders
@@ -277,6 +279,7 @@ also see [comparison to similar software](./docs/versus.md)
277
279
  * ☑ [navpane](#navpane) (directory tree sidebar)
278
280
  * ☑ file manager (cut/paste, delete, [batch-rename](#batch-rename))
279
281
  * ☑ audio player (with [OS media controls](https://user-images.githubusercontent.com/241032/215347492-b4250797-6c90-4e09-9a4c-721edf2fb15c.png) and opus/mp3 transcoding)
282
+ * ☑ play video files as audio (converted on server)
280
283
  * ☑ image gallery with webm player
281
284
  * ☑ textfile browser with syntax hilighting
282
285
  * ☑ [thumbnails](#thumbnails)
@@ -627,6 +630,7 @@ it does static images with Pillow / pyvips / FFmpeg, and uses FFmpeg for video f
627
630
  audio files are covnerted into spectrograms using FFmpeg unless you `--no-athumb` (and some FFmpeg builds may need `--th-ff-swr`)
628
631
 
629
632
  images with the following names (see `--th-covers`) become the thumbnail of the folder they're in: `folder.png`, `folder.jpg`, `cover.png`, `cover.jpg`
633
+ * the order is significant, so if both `cover.png` and `folder.jpg` exist in a folder, it will pick the first matching `--th-covers` entry (`folder.jpg`)
630
634
  * and, if you enable [file indexing](#file-indexing), it will also try those names as dotfiles (`.folder.jpg` and so), and then fallback on the first picture in the folder (if it has any pictures at all)
631
635
 
632
636
  in the grid/thumbnail view, if the audio player panel is open, songs will start playing when clicked
@@ -634,6 +638,7 @@ in the grid/thumbnail view, if the audio player panel is open, songs will start
634
638
 
635
639
  enabling `multiselect` lets you click files to select them, and then shift-click another file for range-select
636
640
  * `multiselect` is mostly intended for phones/tablets, but the `sel` option in the `[⚙️] settings` tab is better suited for desktop use, allowing selection by CTRL-clicking and range-selection with SHIFT-click, all without affecting regular clicking
641
+ * the `sel` option can be made default globally with `--gsel` or per-volume with volflag `gsel`
637
642
 
638
643
 
639
644
  ## zip downloads
@@ -696,6 +701,7 @@ up2k has several advantages:
696
701
  * uploads resume if you reboot your browser or pc, just upload the same files again
697
702
  * server detects any corruption; the client reuploads affected chunks
698
703
  * the client doesn't upload anything that already exists on the server
704
+ * no filesize limit unless imposed by a proxy, for example Cloudflare, which blocks uploads over 383.9 GiB
699
705
  * much higher speeds than ftp/scp/tarpipe on some internet connections (mainly american ones) thanks to parallel connections
700
706
  * the last-modified timestamp of the file is preserved
701
707
 
@@ -763,7 +769,7 @@ uploads can be given a lifetime, afer which they expire / self-destruct
763
769
 
764
770
  the feature must be enabled per-volume with the `lifetime` [upload rule](#upload-rules) which sets the upper limit for how long a file gets to stay on the server
765
771
 
766
- clients can specify a shorter expiration time using the [up2k ui](#uploading) -- the relevant options become visible upon navigating into a folder with `lifetimes` enabled -- or by using the `life` [upload modifier](#write)
772
+ clients can specify a shorter expiration time using the [up2k ui](#uploading) -- the relevant options become visible upon navigating into a folder with `lifetimes` enabled -- or by using the `life` [upload modifier](./docs/devnotes.md#write)
767
773
 
768
774
  specifying a custom expiration time client-side will affect the timespan in which unposts are permitted, so keep an eye on the estimates in the up2k ui
769
775
 
@@ -850,6 +856,7 @@ some hilights:
850
856
  * OS integration; control playback from your phone's lockscreen ([windows](https://user-images.githubusercontent.com/241032/233213022-298a98ba-721a-4cf1-a3d4-f62634bc53d5.png) // [iOS](https://user-images.githubusercontent.com/241032/142711926-0700be6c-3e31-47b3-9928-53722221f722.png) // [android](https://user-images.githubusercontent.com/241032/233212311-a7368590-08c7-4f9f-a1af-48ccf3f36fad.png))
851
857
  * shows the audio waveform in the seekbar
852
858
  * not perfectly gapless but can get really close (see settings + eq below); good enough to enjoy gapless albums as intended
859
+ * videos can be played as audio, without wasting bandwidth on the video
853
860
 
854
861
  click the `play` link next to an audio file, or copy the link target to [share it](https://a.ocv.me/pub/demo/music/Ubiktune%20-%20SOUNDSHOCK%202%20-%20FM%20FUNK%20TERRROR!!/#af-1fbfba61&t=18) (optionally with a timestamp to start playing from, like that example does)
855
862
 
@@ -931,6 +938,8 @@ see [./srv/expand/](./srv/expand/) for usage and examples
931
938
 
932
939
  * files named `.prologue.html` / `.epilogue.html` will be rendered before/after directory listings unless `--no-logues`
933
940
 
941
+ * files named `descript.ion` / `DESCRIPT.ION` are parsed and displayed in the file listing, or as the epilogue if nonstandard
942
+
934
943
  * files named `README.md` / `readme.md` will be rendered after directory listings unless `--no-readme` (but `.epilogue.html` takes precedence)
935
944
 
936
945
  * `README.md` and `*logue.html` can contain placeholder values which are replaced server-side before embedding into directory listings; see `--help-exp`
@@ -1035,7 +1044,7 @@ some recommended FTP / FTPS clients; `wark` = example password:
1035
1044
 
1036
1045
  ## webdav server
1037
1046
 
1038
- with read-write support, supports winXP and later, macos, nautilus/gvfs
1047
+ with read-write support, supports winXP and later, macos, nautilus/gvfs ... a greay way to [access copyparty straight from the file explorer in your OS](#mount-as-drive)
1039
1048
 
1040
1049
  click the [connect](http://127.0.0.1:3923/?hc) button in the control-panel to see connection instructions for windows, linux, macos
1041
1050
 
@@ -1499,8 +1508,9 @@ you can either:
1499
1508
  * or do location-based proxying, using `--rp-loc=/stuff` to tell copyparty where it is mounted -- has a slight performance cost and higher chance of bugs
1500
1509
  * if copyparty says `incorrect --rp-loc or webserver config; expected vpath starting with [...]` it's likely because the webserver is stripping away the proxy location from the request URLs -- see the `ProxyPass` in the apache example below
1501
1510
 
1502
- some reverse proxies (such as [Caddy](https://caddyserver.com/)) can automatically obtain a valid https/tls certificate for you, and some support HTTP/2 and QUIC which could be a nice speed boost
1503
- * **warning:** nginx-QUIC is still experimental and can make uploads much slower, so HTTP/2 is recommended for now
1511
+ some reverse proxies (such as [Caddy](https://caddyserver.com/)) can automatically obtain a valid https/tls certificate for you, and some support HTTP/2 and QUIC which *could* be a nice speed boost, depending on a lot of factors
1512
+ * **warning:** nginx-QUIC (HTTP/3) is still experimental and can make uploads much slower, so HTTP/1.1 is recommended for now
1513
+ * depending on server/client, HTTP/1.1 can also be 5x faster than HTTP/2
1504
1514
 
1505
1515
  example webserver configs:
1506
1516
 
@@ -1580,6 +1590,28 @@ the following options are available to disable some of the metrics:
1580
1590
  note: the following metrics are counted incorrectly if multiprocessing is enabled with `-j`: `cpp_http_conns`, `cpp_http_reqs`, `cpp_sus_reqs`, `cpp_active_bans`, `cpp_total_bans`
1581
1591
 
1582
1592
 
1593
+ ## other extremely specific features
1594
+
1595
+ you'll never find a use for these:
1596
+
1597
+
1598
+ ### custom mimetypes
1599
+
1600
+ change the association of a file extension
1601
+
1602
+ using commandline args, you can do something like `--mime gif=image/jif` and `--mime ts=text/x.typescript` (can be specified multiple times)
1603
+
1604
+ in a config-file, this is the same as:
1605
+
1606
+ ```yaml
1607
+ [global]
1608
+ mime: gif=image/jif
1609
+ mime: ts=text/x.typescript
1610
+ ```
1611
+
1612
+ run copyparty with `--mimes` to list all the default mappings
1613
+
1614
+
1583
1615
  # packages
1584
1616
 
1585
1617
  the party might be closer than you think
@@ -1823,12 +1855,14 @@ alternatively, some alternatives roughly sorted by speed (unreproducible benchma
1823
1855
  * [rclone-http](./docs/rclone.md) (26s), read-only
1824
1856
  * [partyfuse.py](./bin/#partyfusepy) (35s), read-only
1825
1857
  * [rclone-ftp](./docs/rclone.md) (47s), read/WRITE
1826
- * davfs2 (103s), read/WRITE, *very fast* on small files
1858
+ * davfs2 (103s), read/WRITE
1827
1859
  * [win10-webdav](#webdav-server) (138s), read/WRITE
1828
1860
  * [win10-smb2](#smb-server) (387s), read/WRITE
1829
1861
 
1830
1862
  most clients will fail to mount the root of a copyparty server unless there is a root volume (so you get the admin-panel instead of a browser when accessing it) -- in that case, mount a specific volume instead
1831
1863
 
1864
+ if you have volumes that are accessible without a password, then some webdav clients (such as davfs2) require the global-option `--dav-auth` to access any password-protected areas
1865
+
1832
1866
 
1833
1867
  # android app
1834
1868
 
@@ -1857,6 +1891,7 @@ defaults are usually fine - expect `8 GiB/s` download, `1 GiB/s` upload
1857
1891
 
1858
1892
  below are some tweaks roughly ordered by usefulness:
1859
1893
 
1894
+ * disabling HTTP/2 and HTTP/3 can make uploads 5x faster, depending on server/client software
1860
1895
  * `-q` disables logging and can help a bunch, even when combined with `-lo` to redirect logs to file
1861
1896
  * `--hist` pointing to a fast location (ssd) will make directory listings and searches faster when `-e2d` or `-e2t` is set
1862
1897
  * and also makes thumbnails load faster, regardless of e2d/e2t
@@ -1972,7 +2007,7 @@ volflag `dk` generates dirkeys (per-directory accesskeys) for all folders, grant
1972
2007
 
1973
2008
  volflag `dky` disables the actual key-check, meaning anyone can see the contents of a folder where they have `g` access, but not its subdirectories
1974
2009
 
1975
- * `dk` + `dky` gives the same behavior as if all users with `g` access have full read-access, but subfolders are hidden files (their names start with a dot), so `dky` is an alternative to renaming all the folders for that purpose, maybe just for some users
2010
+ * `dk` + `dky` gives the same behavior as if all users with `g` access have full read-access, but subfolders are hidden files (as if their names start with a dot), so `dky` is an alternative to renaming all the folders for that purpose, maybe just for some users
1976
2011
 
1977
2012
  volflag `dks` lets people enter subfolders as well, and also enables download-as-zip/tar
1978
2013
 
@@ -1997,7 +2032,7 @@ the default configs take about 0.4 sec and 256 MiB RAM to process a new password
1997
2032
 
1998
2033
  both HTTP and HTTPS are accepted by default, but letting a [reverse proxy](#reverse-proxy) handle the https/tls/ssl would be better (probably more secure by default)
1999
2034
 
2000
- copyparty doesn't speak HTTP/2 or QUIC, so using a reverse proxy would solve that as well
2035
+ copyparty doesn't speak HTTP/2 or QUIC, so using a reverse proxy would solve that as well -- but note that HTTP/1 is usually faster than both HTTP/2 and HTTP/3
2001
2036
 
2002
2037
  if [cfssl](https://github.com/cloudflare/cfssl/releases/latest) is installed, copyparty will automatically create a CA and server-cert on startup
2003
2038
  * the certs are written to `--crt-dir` for distribution, see `--help` for the other `--crt` options
@@ -83,6 +83,8 @@ turn almost any device into a file server with resumable uploads/downloads using
83
83
  * [reverse-proxy](#reverse-proxy) - running copyparty next to other websites
84
84
  * [real-ip](#real-ip) - teaching copyparty how to see client IPs
85
85
  * [prometheus](#prometheus) - metrics/stats can be enabled
86
+ * [other extremely specific features](#other-extremely-specific-features) - you'll never find a use for these
87
+ * [custom mimetypes](#custom-mimetypes) - change the association of a file extension
86
88
  * [packages](#packages) - the party might be closer than you think
87
89
  * [arch package](#arch-package) - now [available on aur](https://aur.archlinux.org/packages/copyparty) maintained by [@icxes](https://github.com/icxes)
88
90
  * [fedora package](#fedora-package) - does not exist yet
@@ -207,7 +209,7 @@ also see [comparison to similar software](./docs/versus.md)
207
209
  * upload
208
210
  * ☑ basic: plain multipart, ie6 support
209
211
  * ☑ [up2k](#uploading): js, resumable, multithreaded
210
- * unaffected by cloudflare's max-upload-size (100 MiB)
212
+ * **no filesize limit!** ...unless you use Cloudflare, then it's 383.9 GiB
211
213
  * ☑ stash: simple PUT filedropper
212
214
  * ☑ filename randomizer
213
215
  * ☑ write-only folders
@@ -223,6 +225,7 @@ also see [comparison to similar software](./docs/versus.md)
223
225
  * ☑ [navpane](#navpane) (directory tree sidebar)
224
226
  * ☑ file manager (cut/paste, delete, [batch-rename](#batch-rename))
225
227
  * ☑ audio player (with [OS media controls](https://user-images.githubusercontent.com/241032/215347492-b4250797-6c90-4e09-9a4c-721edf2fb15c.png) and opus/mp3 transcoding)
228
+ * ☑ play video files as audio (converted on server)
226
229
  * ☑ image gallery with webm player
227
230
  * ☑ textfile browser with syntax hilighting
228
231
  * ☑ [thumbnails](#thumbnails)
@@ -573,6 +576,7 @@ it does static images with Pillow / pyvips / FFmpeg, and uses FFmpeg for video f
573
576
  audio files are covnerted into spectrograms using FFmpeg unless you `--no-athumb` (and some FFmpeg builds may need `--th-ff-swr`)
574
577
 
575
578
  images with the following names (see `--th-covers`) become the thumbnail of the folder they're in: `folder.png`, `folder.jpg`, `cover.png`, `cover.jpg`
579
+ * the order is significant, so if both `cover.png` and `folder.jpg` exist in a folder, it will pick the first matching `--th-covers` entry (`folder.jpg`)
576
580
  * and, if you enable [file indexing](#file-indexing), it will also try those names as dotfiles (`.folder.jpg` and so), and then fallback on the first picture in the folder (if it has any pictures at all)
577
581
 
578
582
  in the grid/thumbnail view, if the audio player panel is open, songs will start playing when clicked
@@ -580,6 +584,7 @@ in the grid/thumbnail view, if the audio player panel is open, songs will start
580
584
 
581
585
  enabling `multiselect` lets you click files to select them, and then shift-click another file for range-select
582
586
  * `multiselect` is mostly intended for phones/tablets, but the `sel` option in the `[⚙️] settings` tab is better suited for desktop use, allowing selection by CTRL-clicking and range-selection with SHIFT-click, all without affecting regular clicking
587
+ * the `sel` option can be made default globally with `--gsel` or per-volume with volflag `gsel`
583
588
 
584
589
 
585
590
  ## zip downloads
@@ -642,6 +647,7 @@ up2k has several advantages:
642
647
  * uploads resume if you reboot your browser or pc, just upload the same files again
643
648
  * server detects any corruption; the client reuploads affected chunks
644
649
  * the client doesn't upload anything that already exists on the server
650
+ * no filesize limit unless imposed by a proxy, for example Cloudflare, which blocks uploads over 383.9 GiB
645
651
  * much higher speeds than ftp/scp/tarpipe on some internet connections (mainly american ones) thanks to parallel connections
646
652
  * the last-modified timestamp of the file is preserved
647
653
 
@@ -709,7 +715,7 @@ uploads can be given a lifetime, afer which they expire / self-destruct
709
715
 
710
716
  the feature must be enabled per-volume with the `lifetime` [upload rule](#upload-rules) which sets the upper limit for how long a file gets to stay on the server
711
717
 
712
- clients can specify a shorter expiration time using the [up2k ui](#uploading) -- the relevant options become visible upon navigating into a folder with `lifetimes` enabled -- or by using the `life` [upload modifier](#write)
718
+ clients can specify a shorter expiration time using the [up2k ui](#uploading) -- the relevant options become visible upon navigating into a folder with `lifetimes` enabled -- or by using the `life` [upload modifier](./docs/devnotes.md#write)
713
719
 
714
720
  specifying a custom expiration time client-side will affect the timespan in which unposts are permitted, so keep an eye on the estimates in the up2k ui
715
721
 
@@ -796,6 +802,7 @@ some hilights:
796
802
  * OS integration; control playback from your phone's lockscreen ([windows](https://user-images.githubusercontent.com/241032/233213022-298a98ba-721a-4cf1-a3d4-f62634bc53d5.png) // [iOS](https://user-images.githubusercontent.com/241032/142711926-0700be6c-3e31-47b3-9928-53722221f722.png) // [android](https://user-images.githubusercontent.com/241032/233212311-a7368590-08c7-4f9f-a1af-48ccf3f36fad.png))
797
803
  * shows the audio waveform in the seekbar
798
804
  * not perfectly gapless but can get really close (see settings + eq below); good enough to enjoy gapless albums as intended
805
+ * videos can be played as audio, without wasting bandwidth on the video
799
806
 
800
807
  click the `play` link next to an audio file, or copy the link target to [share it](https://a.ocv.me/pub/demo/music/Ubiktune%20-%20SOUNDSHOCK%202%20-%20FM%20FUNK%20TERRROR!!/#af-1fbfba61&t=18) (optionally with a timestamp to start playing from, like that example does)
801
808
 
@@ -877,6 +884,8 @@ see [./srv/expand/](./srv/expand/) for usage and examples
877
884
 
878
885
  * files named `.prologue.html` / `.epilogue.html` will be rendered before/after directory listings unless `--no-logues`
879
886
 
887
+ * files named `descript.ion` / `DESCRIPT.ION` are parsed and displayed in the file listing, or as the epilogue if nonstandard
888
+
880
889
  * files named `README.md` / `readme.md` will be rendered after directory listings unless `--no-readme` (but `.epilogue.html` takes precedence)
881
890
 
882
891
  * `README.md` and `*logue.html` can contain placeholder values which are replaced server-side before embedding into directory listings; see `--help-exp`
@@ -981,7 +990,7 @@ some recommended FTP / FTPS clients; `wark` = example password:
981
990
 
982
991
  ## webdav server
983
992
 
984
- with read-write support, supports winXP and later, macos, nautilus/gvfs
993
+ with read-write support, supports winXP and later, macos, nautilus/gvfs ... a greay way to [access copyparty straight from the file explorer in your OS](#mount-as-drive)
985
994
 
986
995
  click the [connect](http://127.0.0.1:3923/?hc) button in the control-panel to see connection instructions for windows, linux, macos
987
996
 
@@ -1445,8 +1454,9 @@ you can either:
1445
1454
  * or do location-based proxying, using `--rp-loc=/stuff` to tell copyparty where it is mounted -- has a slight performance cost and higher chance of bugs
1446
1455
  * if copyparty says `incorrect --rp-loc or webserver config; expected vpath starting with [...]` it's likely because the webserver is stripping away the proxy location from the request URLs -- see the `ProxyPass` in the apache example below
1447
1456
 
1448
- some reverse proxies (such as [Caddy](https://caddyserver.com/)) can automatically obtain a valid https/tls certificate for you, and some support HTTP/2 and QUIC which could be a nice speed boost
1449
- * **warning:** nginx-QUIC is still experimental and can make uploads much slower, so HTTP/2 is recommended for now
1457
+ some reverse proxies (such as [Caddy](https://caddyserver.com/)) can automatically obtain a valid https/tls certificate for you, and some support HTTP/2 and QUIC which *could* be a nice speed boost, depending on a lot of factors
1458
+ * **warning:** nginx-QUIC (HTTP/3) is still experimental and can make uploads much slower, so HTTP/1.1 is recommended for now
1459
+ * depending on server/client, HTTP/1.1 can also be 5x faster than HTTP/2
1450
1460
 
1451
1461
  example webserver configs:
1452
1462
 
@@ -1526,6 +1536,28 @@ the following options are available to disable some of the metrics:
1526
1536
  note: the following metrics are counted incorrectly if multiprocessing is enabled with `-j`: `cpp_http_conns`, `cpp_http_reqs`, `cpp_sus_reqs`, `cpp_active_bans`, `cpp_total_bans`
1527
1537
 
1528
1538
 
1539
+ ## other extremely specific features
1540
+
1541
+ you'll never find a use for these:
1542
+
1543
+
1544
+ ### custom mimetypes
1545
+
1546
+ change the association of a file extension
1547
+
1548
+ using commandline args, you can do something like `--mime gif=image/jif` and `--mime ts=text/x.typescript` (can be specified multiple times)
1549
+
1550
+ in a config-file, this is the same as:
1551
+
1552
+ ```yaml
1553
+ [global]
1554
+ mime: gif=image/jif
1555
+ mime: ts=text/x.typescript
1556
+ ```
1557
+
1558
+ run copyparty with `--mimes` to list all the default mappings
1559
+
1560
+
1529
1561
  # packages
1530
1562
 
1531
1563
  the party might be closer than you think
@@ -1769,12 +1801,14 @@ alternatively, some alternatives roughly sorted by speed (unreproducible benchma
1769
1801
  * [rclone-http](./docs/rclone.md) (26s), read-only
1770
1802
  * [partyfuse.py](./bin/#partyfusepy) (35s), read-only
1771
1803
  * [rclone-ftp](./docs/rclone.md) (47s), read/WRITE
1772
- * davfs2 (103s), read/WRITE, *very fast* on small files
1804
+ * davfs2 (103s), read/WRITE
1773
1805
  * [win10-webdav](#webdav-server) (138s), read/WRITE
1774
1806
  * [win10-smb2](#smb-server) (387s), read/WRITE
1775
1807
 
1776
1808
  most clients will fail to mount the root of a copyparty server unless there is a root volume (so you get the admin-panel instead of a browser when accessing it) -- in that case, mount a specific volume instead
1777
1809
 
1810
+ if you have volumes that are accessible without a password, then some webdav clients (such as davfs2) require the global-option `--dav-auth` to access any password-protected areas
1811
+
1778
1812
 
1779
1813
  # android app
1780
1814
 
@@ -1803,6 +1837,7 @@ defaults are usually fine - expect `8 GiB/s` download, `1 GiB/s` upload
1803
1837
 
1804
1838
  below are some tweaks roughly ordered by usefulness:
1805
1839
 
1840
+ * disabling HTTP/2 and HTTP/3 can make uploads 5x faster, depending on server/client software
1806
1841
  * `-q` disables logging and can help a bunch, even when combined with `-lo` to redirect logs to file
1807
1842
  * `--hist` pointing to a fast location (ssd) will make directory listings and searches faster when `-e2d` or `-e2t` is set
1808
1843
  * and also makes thumbnails load faster, regardless of e2d/e2t
@@ -1918,7 +1953,7 @@ volflag `dk` generates dirkeys (per-directory accesskeys) for all folders, grant
1918
1953
 
1919
1954
  volflag `dky` disables the actual key-check, meaning anyone can see the contents of a folder where they have `g` access, but not its subdirectories
1920
1955
 
1921
- * `dk` + `dky` gives the same behavior as if all users with `g` access have full read-access, but subfolders are hidden files (their names start with a dot), so `dky` is an alternative to renaming all the folders for that purpose, maybe just for some users
1956
+ * `dk` + `dky` gives the same behavior as if all users with `g` access have full read-access, but subfolders are hidden files (as if their names start with a dot), so `dky` is an alternative to renaming all the folders for that purpose, maybe just for some users
1922
1957
 
1923
1958
  volflag `dks` lets people enter subfolders as well, and also enables download-as-zip/tar
1924
1959
 
@@ -1943,7 +1978,7 @@ the default configs take about 0.4 sec and 256 MiB RAM to process a new password
1943
1978
 
1944
1979
  both HTTP and HTTPS are accepted by default, but letting a [reverse proxy](#reverse-proxy) handle the https/tls/ssl would be better (probably more secure by default)
1945
1980
 
1946
- copyparty doesn't speak HTTP/2 or QUIC, so using a reverse proxy would solve that as well
1981
+ copyparty doesn't speak HTTP/2 or QUIC, so using a reverse proxy would solve that as well -- but note that HTTP/1 is usually faster than both HTTP/2 and HTTP/3
1947
1982
 
1948
1983
  if [cfssl](https://github.com/cloudflare/cfssl/releases/latest) is installed, copyparty will automatically create a CA and server-cert on startup
1949
1984
  * the certs are written to `--crt-dir` for distribution, see `--help` for the other `--crt` options