mirror of
https://github.com/9001/copyparty.git
synced 2025-10-02 14:42:28 -06:00
cleanup README.md a bit; fix some broken markdown links due to capital letters; correct certain inconsistencies
Signed-off-by: oreo <77515999+dopreo@users.noreply.github.com>
This commit is contained in:
parent
e270fe60ed
commit
161b39946f
252
README.md
252
README.md
|
@ -8,7 +8,7 @@ turn almost any device into a file server with resumable uploads/downloads using
|
||||||
* 🔌 protocols: [http](#the-browser) // [webdav](#webdav-server) // [ftp](#ftp-server) // [tftp](#tftp-server) // [smb/cifs](#smb-server)
|
* 🔌 protocols: [http](#the-browser) // [webdav](#webdav-server) // [ftp](#ftp-server) // [tftp](#tftp-server) // [smb/cifs](#smb-server)
|
||||||
* 📱 [android app](#android-app) // [iPhone shortcuts](#ios-shortcuts)
|
* 📱 [android app](#android-app) // [iPhone shortcuts](#ios-shortcuts)
|
||||||
|
|
||||||
👉 **[Get started](#quickstart)!** or visit the **[read-only demo server](https://a.ocv.me/pub/demo/)** 👀 running on a nuc in my basement
|
👉 **[get started](#quickstart)!** or visit the **[read-only demo server](https://a.ocv.me/pub/demo/)** 👀 running on a nuc in my basement
|
||||||
|
|
||||||
📷 **screenshots:** [browser](#the-browser) // [upload](#uploading) // [unpost](#unpost) // [thumbnails](#thumbnails) // [search](#searching) // [fsearch](#file-search) // [zip-DL](#zip-downloads) // [md-viewer](#markdown-viewer)
|
📷 **screenshots:** [browser](#the-browser) // [upload](#uploading) // [unpost](#unpost) // [thumbnails](#thumbnails) // [search](#searching) // [fsearch](#file-search) // [zip-DL](#zip-downloads) // [md-viewer](#markdown-viewer)
|
||||||
|
|
||||||
|
@ -17,137 +17,157 @@ turn almost any device into a file server with resumable uploads/downloads using
|
||||||
made in Norway 🇳🇴
|
made in Norway 🇳🇴
|
||||||
|
|
||||||
|
|
||||||
## readme toc
|
# readme table of contents
|
||||||
|
|
||||||
* top
|
### 1. TOP ([START HERE](#quickstart))
|
||||||
* [quickstart](#quickstart) - just run **[copyparty-sfx.py](https://github.com/9001/copyparty/releases/latest/download/copyparty-sfx.py)** -- that's it! 🎉
|
* [**quickstart**](#quickstart) - just run **[copyparty-sfx.py](https://github.com/9001/copyparty/releases/latest/download/copyparty-sfx.py)** — that's it! 🎉
|
||||||
* [at home](#at-home) - make it accessible over the internet
|
* [at home](#at-home) - make it accessible over the internet
|
||||||
* [on servers](#on-servers) - you may also want these, especially on servers
|
* [on servers](#on-servers) - you may also want these, especially on servers
|
||||||
* [features](#features) - also see [comparison to similar software](./docs/versus.md)
|
* [features](#features) - also see [comparison to similar software](./docs/versus.md)
|
||||||
* [testimonials](#testimonials) - small collection of user feedback
|
* [testimonials](#testimonials) - small collection of user feedback
|
||||||
* [motivations](#motivations) - project goals / philosophy
|
|
||||||
* [notes](#notes) - general notes
|
### 2. [MOTIVATIONS](#motivations) - project goals / philosophy
|
||||||
* [bugs](#bugs) - roughly sorted by chance of encounter
|
* [notes](#notes) - general notes
|
||||||
* [not my bugs](#not-my-bugs) - same order here too
|
|
||||||
* [breaking changes](#breaking-changes) - upgrade notes
|
### 3. [BUGS](#bugs) - roughly sorted by chance of encounter
|
||||||
* [FAQ](#FAQ) - "frequently" asked questions
|
* [not my bugs](#not-my-bugs) - same order here too
|
||||||
* [accounts and volumes](#accounts-and-volumes) - per-folder, per-user permissions
|
|
||||||
* [shadowing](#shadowing) - hiding specific subfolders
|
### 4. [BREAKING CHANGES](#breaking-changes) - upgrade notes
|
||||||
* [dotfiles](#dotfiles) - unix-style hidden files/folders
|
|
||||||
* [the browser](#the-browser) - accessing a copyparty server using a web-browser
|
### 5. [FAQ](#faq) - "frequently" asked questions
|
||||||
* [tabs](#tabs) - the main tabs in the ui
|
|
||||||
* [hotkeys](#hotkeys) - the browser has the following hotkeys
|
### 6. [ACCOUNTS & VOLUMES](#accounts-and-volumes) - per-folder, per-user permissions
|
||||||
* [navpane](#navpane) - switching between breadcrumbs or navpane
|
* [shadowing](#shadowing) - hiding specific subfolders
|
||||||
* [thumbnails](#thumbnails) - press `g` or `田` to toggle grid-view instead of the file listing
|
* [dotfiles](#dotfiles) - unix-style hidden files/folders
|
||||||
* [zip downloads](#zip-downloads) - download folders (or file selections) as `zip` or `tar` files
|
|
||||||
* [uploading](#uploading) - drag files/folders into the web-browser to upload
|
### 7. [THE BROWSER](#the-browser) - accessing a copyparty server using a web browser
|
||||||
|
* [tabs](#tabs) - the main tabs in the ui
|
||||||
|
* [hotkeys](#hotkeys) - the browser has the following hotkeys
|
||||||
|
* [navpane](#navpane) - switching between breadcrumbs or navpane
|
||||||
|
* [thumbnails](#thumbnails) - press `g` or `田` to toggle grid-view instead of the file listing
|
||||||
|
* [zip downloads](#zip-downloads) - download folders (or file selections) as `zip` or `tar` files
|
||||||
|
* [uploading](#uploading) - drag files/folders into the web-browser to upload
|
||||||
* [file-search](#file-search) - dropping files into the browser also lets you see if they exist on the server
|
* [file-search](#file-search) - dropping files into the browser also lets you see if they exist on the server
|
||||||
* [unpost](#unpost) - undo/delete accidental uploads
|
* [unpost](#unpost) - undo/delete accidental uploads
|
||||||
* [self-destruct](#self-destruct) - uploads can be given a lifetime
|
* [self-destruct](#self-destruct) - uploads can be given a lifetime
|
||||||
* [race the beam](#race-the-beam) - download files while they're still uploading ([demo video](http://a.ocv.me/pub/g/nerd-stuff/cpp/2024-0418-race-the-beam.webm))
|
* [race the beam](#race-the-beam) - download files while they're still uploading ([demo video](http://a.ocv.me/pub/g/nerd-stuff/cpp/2024-0418-race-the-beam.webm))
|
||||||
* [incoming files](#incoming-files) - the control-panel shows the ETA for all incoming files
|
* [incoming files](#incoming-files) - the control-panel shows the ETA for all incoming files
|
||||||
* [file manager](#file-manager) - cut/paste, rename, and delete files/folders (if you have permission)
|
* [file manager](#file-manager) - cut/paste, rename, and delete files/folders (if you have permission)
|
||||||
* [shares](#shares) - share a file or folder by creating a temporary link
|
* [shares](#shares) - share a file or folder by creating a temporary link
|
||||||
* [batch rename](#batch-rename) - select some files and press `F2` to bring up the rename UI
|
* [batch rename](#batch-rename) - select some files and press `F2` to bring up the rename UI
|
||||||
* [rss feeds](#rss-feeds) - monitor a folder with your RSS reader
|
* [rss feeds](#rss-feeds) - monitor a folder with your RSS reader
|
||||||
* [recent uploads](#recent-uploads) - list all recent uploads
|
* [recent uploads](#recent-uploads) - list all recent uploads
|
||||||
* [media player](#media-player) - plays almost every audio format there is
|
* [media player](#media-player) - plays almost every audio format there is
|
||||||
* [playlists](#playlists) - create and play [m3u8](https://en.wikipedia.org/wiki/M3U) playlists
|
* [playlists](#playlists) - create and play [m3u8](https://en.wikipedia.org/wiki/M3U) playlists
|
||||||
* [creating a playlist](#creating-a-playlist) - with a standalone mediaplayer or copyparty
|
* [creating a playlist](#creating-a-playlist) - with a standalone mediaplayer or copyparty
|
||||||
* [audio equalizer](#audio-equalizer) - and [dynamic range compressor](https://en.wikipedia.org/wiki/Dynamic_range_compression)
|
* [audio equalizer](#audio-equalizer) - and [dynamic range compressor](https://en.wikipedia.org/wiki/Dynamic_range_compression)
|
||||||
* [fix unreliable playback on android](#fix-unreliable-playback-on-android) - due to phone / app settings
|
* [fix unreliable playback on android](#fix-unreliable-playback-on-android) - due to phone / app settings
|
||||||
* [textfile viewer](#textfile-viewer) - with realtime streaming of logfiles and such ([demo](https://a.ocv.me/pub/demo/logtail/))
|
* [textfile viewer](#textfile-viewer) - with realtime streaming of logfiles and such ([demo](https://a.ocv.me/pub/demo/logtail/))
|
||||||
* [markdown viewer](#markdown-viewer) - and there are *two* editors
|
* [markdown viewer](#markdown-viewer) - and there are *two* editors
|
||||||
* [markdown vars](#markdown-vars) - dynamic docs with serverside variable expansion
|
* [markdown vars](#markdown-vars) - dynamic docs with serverside variable expansion
|
||||||
* [other tricks](#other-tricks)
|
* [other tricks](#other-tricks)
|
||||||
* [searching](#searching) - search by size, date, path/name, mp3-tags, ...
|
* [searching](#searching) - search by size, date, path/name, mp3-tags, ...
|
||||||
* [server config](#server-config) - using arguments or config files, or a mix of both
|
|
||||||
|
### 8. [SERVER CONFIG](#server-config) - using arguments or config files, or a mix of both
|
||||||
* [zeroconf](#zeroconf) - announce enabled services on the LAN ([pic](https://user-images.githubusercontent.com/241032/215344737-0eae8d98-9496-4256-9aa8-cd2f6971810d.png))
|
* [zeroconf](#zeroconf) - announce enabled services on the LAN ([pic](https://user-images.githubusercontent.com/241032/215344737-0eae8d98-9496-4256-9aa8-cd2f6971810d.png))
|
||||||
* [mdns](#mdns) - LAN domain-name and feature announcer
|
* [mdns](#mdns) - LAN domain-name and feature announcer
|
||||||
* [ssdp](#ssdp) - windows-explorer announcer
|
* [ssdp](#ssdp) - windows-explorer announcer
|
||||||
* [qr-code](#qr-code) - print a qr-code [(screenshot)](https://user-images.githubusercontent.com/241032/194728533-6f00849b-c6ac-43c6-9359-83e454d11e00.png) for quick access
|
* [qr-code](#qr-code) - print a qr code [(screenshot)](https://user-images.githubusercontent.com/241032/194728533-6f00849b-c6ac-43c6-9359-83e454d11e00.png) for quick access
|
||||||
* [ftp server](#ftp-server) - an FTP server can be started using `--ftp 3921`
|
* [ftp server](#ftp-server) - an FTP server can be started using `--ftp 3921`
|
||||||
* [webdav server](#webdav-server) - with read-write support
|
* [webdav server](#webdav-server) - with read-write support
|
||||||
* [connecting to webdav from windows](#connecting-to-webdav-from-windows) - using the GUI
|
* [connecting to webdav from windows](#connecting-to-webdav-from-windows) - using the GUI
|
||||||
* [tftp server](#tftp-server) - a TFTP server (read/write) can be started using `--tftp 3969`
|
* [tftp server](#tftp-server) - a TFTP server (read/write) can be started using `--tftp 3969`
|
||||||
* [smb server](#smb-server) - unsafe, slow, not recommended for wan
|
* [smb server](#smb-server) - unsafe, slow, not recommended for wan
|
||||||
* [browser ux](#browser-ux) - tweaking the ui
|
* [browser ux](#browser-ux) - tweaking the ui
|
||||||
* [opengraph](#opengraph) - discord and social-media embeds
|
* [opengraph](#opengraph) - discord and social-media embeds
|
||||||
* [file deduplication](#file-deduplication) - enable symlink-based upload deduplication
|
* [file deduplication](#file-deduplication) - enable symlink-based upload deduplication
|
||||||
* [file indexing](#file-indexing) - enable music search, upload-undo, and better dedup
|
* [file indexing](#file-indexing) - enable music search, upload-undo, and better dedup
|
||||||
* [exclude-patterns](#exclude-patterns) - to save some time
|
* [exclude-patterns](#exclude-patterns) - to save some time
|
||||||
* [filesystem guards](#filesystem-guards) - avoid traversing into other filesystems
|
* [filesystem guards](#filesystem-guards) - avoid traversing into other filesystems
|
||||||
* [periodic rescan](#periodic-rescan) - filesystem monitoring
|
* [periodic rescan](#periodic-rescan) - filesystem monitoring
|
||||||
* [upload rules](#upload-rules) - set upload rules using volflags
|
* [upload rules](#upload-rules) - set upload rules using volflags
|
||||||
* [compress uploads](#compress-uploads) - files can be autocompressed on upload
|
* [compress uploads](#compress-uploads) - files can be autocompressed on upload
|
||||||
* [chmod and chown](#chmod-and-chown) - per-volume filesystem-permissions and ownership
|
* [`chmod` and `chown`](#chmod-and-chown) - per-volume filesystem-permissions and ownership
|
||||||
* [other flags](#other-flags)
|
* [other flags](#other-flags)
|
||||||
* [database location](#database-location) - in-volume (`.hist/up2k.db`, default) or somewhere else
|
* [database location](#database-location) - in-volume (`.hist/up2k.db`, default) or somewhere else
|
||||||
* [metadata from audio files](#metadata-from-audio-files) - set `-e2t` to index tags on upload
|
* [metadata from audio files](#metadata-from-audio-files) - set `-e2t` to index tags on upload
|
||||||
* [file parser plugins](#file-parser-plugins) - provide custom parsers to index additional tags
|
* [file parser plugins](#file-parser-plugins) - provide custom parsers to index additional tags
|
||||||
* [event hooks](#event-hooks) - trigger a program on uploads, renames etc ([examples](./bin/hooks/))
|
* [event hooks](#event-hooks) - trigger a program on uploads, renames etc ([examples](./bin/hooks/))
|
||||||
* [zeromq](#zeromq) - event-hooks can send zeromq messages
|
* [zeromq](#zeromq) - event-hooks can send zeromq messages
|
||||||
* [upload events](#upload-events) - the older, more powerful approach ([examples](./bin/mtag/))
|
* [upload events](#upload-events) - the older, more powerful approach ([examples](./bin/mtag/))
|
||||||
* [handlers](#handlers) - redefine behavior with plugins ([examples](./bin/handlers/))
|
* [handlers](#handlers) - redefine behavior with plugins ([examples](./bin/handlers/))
|
||||||
* [ip auth](#ip-auth) - autologin based on IP range (CIDR)
|
* [ip auth](#ip-auth) - autologin based on IP range (CIDR)
|
||||||
* [restrict to ip](#restrict-to-ip) - limit a user to certain IP ranges (CIDR)
|
* [restrict to ip](#restrict-to-ip) - limit a user to certain IP ranges (CIDR)
|
||||||
* [identity providers](#identity-providers) - replace copyparty passwords with oauth and such
|
* [identity providers](#identity-providers) - replace copyparty passwords with oauth and such
|
||||||
* [generic header auth](#generic-header-auth) - other ways to auth by header
|
* [generic header auth](#generic-header-auth) - other ways to auth by header
|
||||||
* [user-changeable passwords](#user-changeable-passwords) - if permitted, users can change their own passwords
|
* [user-changeable passwords](#user-changeable-passwords) - if permitted, users can change their own passwords
|
||||||
* [using the cloud as storage](#using-the-cloud-as-storage) - connecting to an aws s3 bucket and similar
|
* [using the cloud as storage](#using-the-cloud-as-storage) - connecting to an aws s3 bucket and similar
|
||||||
* [hiding from google](#hiding-from-google) - tell search engines you don't wanna be indexed
|
* [hiding from google](#hiding-from-google) - tell search engines you don't wanna be indexed
|
||||||
* [themes](#themes)
|
* [themes](#themes)
|
||||||
* [complete examples](#complete-examples)
|
* [complete examples](#complete-examples)
|
||||||
* [listen on port 80 and 443](#listen-on-port-80-and-443) - become a *real* webserver
|
* [listen on port 80 and 443](#listen-on-port-80-and-443) - become a *real* webserver
|
||||||
* [reverse-proxy](#reverse-proxy) - running copyparty next to other websites
|
* [reverse-proxy](#reverse-proxy) - running copyparty next to other websites
|
||||||
* [real-ip](#real-ip) - teaching copyparty how to see client IPs
|
* [real-ip](#real-ip) - teaching copyparty how to see client IPs
|
||||||
* [reverse-proxy performance](#reverse-proxy-performance)
|
* [reverse-proxy performance](#reverse-proxy-performance)
|
||||||
* [permanent cloudflare tunnel](#permanent-cloudflare-tunnel) - if you have a domain and want to get your copyparty online real quick
|
* [permanent cloudflare tunnel](#permanent-cloudflare-tunnel) - if you have a domain and want to get your copyparty online real quick
|
||||||
* [prometheus](#prometheus) - metrics/stats can be enabled
|
* [prometheus](#prometheus) - metrics/stats can be enabled
|
||||||
* [other extremely specific features](#other-extremely-specific-features) - you'll never find a use for these
|
* [other extremely specific features](#other-extremely-specific-features) - you'll never find a use for these
|
||||||
* [custom mimetypes](#custom-mimetypes) - change the association of a file extension
|
* [custom mimetypes](#custom-mimetypes) - change the association of a file extension
|
||||||
* [GDPR compliance](#GDPR-compliance) - imagine using copyparty professionally...
|
* [GDPR compliance](#gdpr-compliance) - imagine using copyparty professionally...
|
||||||
* [feature chickenbits](#feature-chickenbits) - buggy feature? rip it out
|
* [feature chickenbits](#feature-chickenbits) - buggy feature? rip it out
|
||||||
* [feature beefybits](#feature-beefybits) - force-enable features with known issues on your OS/env
|
* [feature beefybits](#feature-beefybits) - force-enable features with known issues on your OS/env
|
||||||
* [packages](#packages) - the party might be closer than you think
|
|
||||||
* [arch package](#arch-package) - `pacman -S copyparty` (in [arch linux extra](https://archlinux.org/packages/extra/any/copyparty/))
|
### 9. [PACKAGES](#packages) - the party might be closer than you think
|
||||||
* [fedora package](#fedora-package) - does not exist yet
|
* [arch package](#arch-package) - `pacman -S copyparty` (in [arch linux extra](https://archlinux.org/packages/extra/any/copyparty/))
|
||||||
* [homebrew formulae](#homebrew-formulae) - `brew install copyparty ffmpeg`
|
* [fedora package](#fedora-package) - does not exist yet
|
||||||
* [nix package](#nix-package) - `nix profile install github:9001/copyparty`
|
* [homebrew formulae](#homebrew-formulae) - `brew install copyparty ffmpeg`
|
||||||
* [nixos module](#nixos-module)
|
* [nix package](#nix-package) - `nix profile install github:9001/copyparty`
|
||||||
* [browser support](#browser-support) - TLDR: yes
|
* [nixos module](#nixos-module)
|
||||||
* [client examples](#client-examples) - interact with copyparty using non-browser clients
|
|
||||||
* [folder sync](#folder-sync) - sync folders to/from copyparty
|
### 10. [BROWSER SUPPORT](#browser-support) - TLDR: yes
|
||||||
* [mount as drive](#mount-as-drive) - a remote copyparty server as a local filesystem
|
|
||||||
* [android app](#android-app) - upload to copyparty with one tap
|
### 11. [CLIENT EXAMPLES](#client-examples) - interact with copyparty using non-browser clients
|
||||||
* [iOS shortcuts](#iOS-shortcuts) - there is no iPhone app, but
|
* [folder sync](#folder-sync) - sync folders to/from copyparty
|
||||||
* [performance](#performance) - defaults are usually fine - expect `8 GiB/s` download, `1 GiB/s` upload
|
* [mount as drive](#mount-as-drive) - a remote copyparty server as a local filesystem
|
||||||
* [client-side](#client-side) - when uploading files
|
|
||||||
* [security](#security) - there is a [discord server](https://discord.gg/25J8CdTT6G)
|
### 12. [ANDROID APP](#android-app) - upload to copyparty with one tap
|
||||||
* [gotchas](#gotchas) - behavior that might be unexpected
|
* [ios shortcuts](#ios-shortcuts) - there is no iPhone app, but
|
||||||
* [cors](#cors) - cross-site request config
|
|
||||||
* [filekeys](#filekeys) - prevent filename bruteforcing
|
### 13. [PERFORMANCE](#performance) - defaults are usually fine - expect `8 GiB/s` download, `1 GiB/s` upload
|
||||||
|
* [client-side](#client-side) - when uploading files
|
||||||
|
|
||||||
|
### 14. [SECURITY](#security) - there is a [discord server](https://discord.gg/25J8CdTT6G)
|
||||||
|
* [gotchas](#gotchas) - behavior that might be unexpected
|
||||||
|
* [cors](#cors) - cross-site request config
|
||||||
|
* [filekeys](#filekeys) - prevent filename bruteforcing
|
||||||
* [dirkeys](#dirkeys) - share specific folders in a volume
|
* [dirkeys](#dirkeys) - share specific folders in a volume
|
||||||
* [password hashing](#password-hashing) - you can hash passwords
|
* [password hashing](#password-hashing) - you can hash passwords
|
||||||
* [https](#https) - both HTTP and HTTPS are accepted
|
* [https](#https) - both HTTP and HTTPS are accepted
|
||||||
* [recovering from crashes](#recovering-from-crashes)
|
|
||||||
* [client crashes](#client-crashes)
|
### 15. [RECOVERING FROM CRASHES](#recovering-from-crashes)
|
||||||
|
* [client crashes](#client-crashes)
|
||||||
* [firefox wsod](#firefox-wsod) - firefox 87 can crash during uploads
|
* [firefox wsod](#firefox-wsod) - firefox 87 can crash during uploads
|
||||||
* [HTTP API](#HTTP-API) - see [devnotes](./docs/devnotes.md#http-api)
|
|
||||||
|
### 16. [HTTP API](#HTTP-API) - see [devnotes](./docs/devnotes.md#http-api)
|
||||||
* [dependencies](#dependencies) - mandatory deps
|
* [dependencies](#dependencies) - mandatory deps
|
||||||
* [optional dependencies](#optional-dependencies) - install these to enable bonus features
|
* [optional dependencies](#optional-dependencies) - install these to enable bonus features
|
||||||
* [dependency chickenbits](#dependency-chickenbits) - prevent loading an optional dependency
|
* [dependency chickenbits](#dependency-chickenbits) - prevent loading an optional dependency
|
||||||
* [optional gpl stuff](#optional-gpl-stuff)
|
* [optional gpl stuff](#optional-gpl-stuff)
|
||||||
* [sfx](#sfx) - the self-contained "binary" (recommended!)
|
|
||||||
* [copyparty.exe](#copypartyexe) - download [copyparty.exe](https://github.com/9001/copyparty/releases/latest/download/copyparty.exe) (win8+) or [copyparty32.exe](https://github.com/9001/copyparty/releases/latest/download/copyparty32.exe) (win7+)
|
### 17. [SFX](#sfx) - the self-contained "binary" (recommended!)
|
||||||
* [zipapp](#zipapp) - another emergency alternative, [copyparty.pyz](https://github.com/9001/copyparty/releases/latest/download/copyparty.pyz)
|
* [copyparty.exe](#copypartyexe) - download [copyparty.exe](https://github.com/9001/copyparty/releases/latest/download/copyparty.exe) (win8+) or [copyparty32.exe](https://github.com/9001/copyparty/releases/latest/download/copyparty32.exe) (win7+)
|
||||||
* [install on android](#install-on-android)
|
* [zipapp](#zipapp) - another emergency alternative, [copyparty.pyz](https://github.com/9001/copyparty/releases/latest/download/copyparty.pyz)
|
||||||
* [install on iOS](#install-on-iOS)
|
|
||||||
* [reporting bugs](#reporting-bugs) - ideas for context to include, and where to submit them
|
### 18. [INSTALL ON ANDROID](#install-on-android)
|
||||||
* [devnotes](#devnotes) - for build instructions etc, see [./docs/devnotes.md](./docs/devnotes.md)
|
|
||||||
|
### 19. [INSTALL ON ios](#install-on-ios)
|
||||||
|
|
||||||
|
### 20. [REPORTING BUGS](#reporting-bugs) - ideas for context to include, and where to submit them
|
||||||
|
|
||||||
|
### 21. [DEV NOTES](#devnotes) - for build instructions etc, see [./docs/devnotes.md](./docs/devnotes.md)
|
||||||
|
|
||||||
|
|
||||||
## quickstart
|
# quickstart
|
||||||
|
|
||||||
just run **[copyparty-sfx.py](https://github.com/9001/copyparty/releases/latest/download/copyparty-sfx.py)** -- that's it! 🎉
|
just run **[copyparty-sfx.py](https://github.com/9001/copyparty/releases/latest/download/copyparty-sfx.py)** -- that's it! 🎉
|
||||||
|
|
||||||
|
@ -157,7 +177,7 @@ just run **[copyparty-sfx.py](https://github.com/9001/copyparty/releases/latest/
|
||||||
* or if you cannot install python, you can use [copyparty.exe](#copypartyexe) instead
|
* or if you cannot install python, you can use [copyparty.exe](#copypartyexe) instead
|
||||||
* or install [on arch](#arch-package) ╱ [on NixOS](#nixos-module) ╱ [through nix](#nix-package)
|
* or install [on arch](#arch-package) ╱ [on NixOS](#nixos-module) ╱ [through nix](#nix-package)
|
||||||
* or if you are on android, [install copyparty in termux](#install-on-android)
|
* or if you are on android, [install copyparty in termux](#install-on-android)
|
||||||
* or maybe an iPhone or iPad? [install in a-Shell on iOS](#install-on-iOS)
|
* or maybe an iPhone or iPad? [install in a-Shell on ios](#install-on-ios)
|
||||||
* or maybe you have a [synology nas / dsm](./docs/synology-dsm.md)
|
* or maybe you have a [synology nas / dsm](./docs/synology-dsm.md)
|
||||||
* or if you have [uv](https://docs.astral.sh/uv/) installed, run `uv tool run copyparty`
|
* or if you have [uv](https://docs.astral.sh/uv/) installed, run `uv tool run copyparty`
|
||||||
* or if your computer is messed up and nothing else works, [try the pyz](#zipapp)
|
* or if your computer is messed up and nothing else works, [try the pyz](#zipapp)
|
||||||
|
@ -244,7 +264,7 @@ also see [comparison to similar software](./docs/versus.md)
|
||||||
* ☑ [upnp / zeroconf / mdns / ssdp](#zeroconf)
|
* ☑ [upnp / zeroconf / mdns / ssdp](#zeroconf)
|
||||||
* ☑ [event hooks](#event-hooks) / script runner
|
* ☑ [event hooks](#event-hooks) / script runner
|
||||||
* ☑ [reverse-proxy support](https://github.com/9001/copyparty#reverse-proxy)
|
* ☑ [reverse-proxy support](https://github.com/9001/copyparty#reverse-proxy)
|
||||||
* ☑ cross-platform (Windows, Linux, Macos, Android, iOS, FreeBSD, arm32/arm64, ppc64le, s390x, risc-v/riscv64)
|
* ☑ cross-platform (Windows, Linux, Macos, Android, ios, FreeBSD, arm32/arm64, ppc64le, s390x, risc-v/riscv64)
|
||||||
* upload
|
* upload
|
||||||
* ☑ basic: plain multipart, ie6 support
|
* ☑ basic: plain multipart, ie6 support
|
||||||
* ☑ [up2k](#uploading): js, resumable, multithreaded
|
* ☑ [up2k](#uploading): js, resumable, multithreaded
|
||||||
|
@ -306,7 +326,7 @@ small collection of user feedback
|
||||||
|
|
||||||
project goals / philosophy
|
project goals / philosophy
|
||||||
|
|
||||||
* inverse linux philosophy -- do all the things, and do an *okay* job
|
* 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
|
* quick drop-in service to get a lot of features in a pinch
|
||||||
* some of [the alternatives](./docs/versus.md) might be a better fit for you
|
* some of [the alternatives](./docs/versus.md) might be a better fit for you
|
||||||
* run anywhere, support everything
|
* run anywhere, support everything
|
||||||
|
@ -330,7 +350,7 @@ general notes:
|
||||||
* because no browsers currently implement the media-query to do this properly orz
|
* because no browsers currently implement the media-query to do this properly orz
|
||||||
|
|
||||||
browser-specific:
|
browser-specific:
|
||||||
* iPhone/iPad: use Firefox to download files
|
* iPhone / iPad: use Firefox to download files
|
||||||
* Android-Chrome: increase "parallel uploads" for higher speed (android bug)
|
* Android-Chrome: increase "parallel uploads" for higher speed (android bug)
|
||||||
* Android-Firefox: takes a while to select files (their fix for ☝️)
|
* Android-Firefox: takes a while to select files (their fix for ☝️)
|
||||||
* Desktop-Firefox: ~~may use gigabytes of RAM if your files are massive~~ *seems to be OK now*
|
* Desktop-Firefox: ~~may use gigabytes of RAM if your files are massive~~ *seems to be OK now*
|
||||||
|
@ -388,7 +408,7 @@ same order here too
|
||||||
* iPhones: music volume goes on a rollercoaster during song changes
|
* iPhones: music volume goes on a rollercoaster during song changes
|
||||||
* nothing I can do about it because `AudioContext` is still broken in safari
|
* nothing I can do about it because `AudioContext` is still broken in safari
|
||||||
|
|
||||||
* iPhones: the preload feature (in the media-player-options tab) can cause a tiny audio glitch 20sec before the end of each song, but disabling it may cause worse iOS bugs to appear instead
|
* iPhones: the preload feature (in the media-player-options tab) can cause a tiny audio glitch 20sec before the end of each song, but disabling it may cause worse ios bugs to appear instead
|
||||||
* just a hunch, but disabling preloading may cause playback to stop entirely, or possibly mess with bluetooth speakers
|
* just a hunch, but disabling preloading may cause playback to stop entirely, or possibly mess with bluetooth speakers
|
||||||
* tried to add a tooltip regarding this but looks like apple broke my tooltips
|
* tried to add a tooltip regarding this but looks like apple broke my tooltips
|
||||||
|
|
||||||
|
@ -432,7 +452,7 @@ upgrade notes
|
||||||
"frequently" asked questions
|
"frequently" asked questions
|
||||||
|
|
||||||
* CopyParty?
|
* CopyParty?
|
||||||
* nope! the name is either copyparty (all-lowercase) or Copyparty -- it's [one word](https://en.wiktionary.org/wiki/copyparty) after all :>
|
* **nope**! the name is either copyparty (all-lowercase) or Copyparty -- it's [one word](https://en.wiktionary.org/wiki/copyparty) after all :>
|
||||||
|
|
||||||
* can I change the 🌲 spinning pine-tree loading animation?
|
* can I change the 🌲 spinning pine-tree loading animation?
|
||||||
* [yeah...](https://github.com/9001/copyparty/tree/hovudstraum/docs/rice#boring-loader-spinner) :-(
|
* [yeah...](https://github.com/9001/copyparty/tree/hovudstraum/docs/rice#boring-loader-spinner) :-(
|
||||||
|
@ -1069,7 +1089,7 @@ plays almost every audio format there is (if the server has FFmpeg installed fo
|
||||||
the following audio formats are usually always playable, even without FFmpeg: `aac|flac|m4a|mp3|ogg|opus|wav`
|
the following audio formats are usually always playable, even without FFmpeg: `aac|flac|m4a|mp3|ogg|opus|wav`
|
||||||
|
|
||||||
some highlights:
|
some highlights:
|
||||||
* 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))
|
* 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))
|
||||||
* shows the audio waveform in the seekbar
|
* shows the audio waveform in the seekbar
|
||||||
* not perfectly gapless but can get really close (see settings + eq below); good enough to enjoy gapless albums as intended
|
* not perfectly gapless but can get really close (see settings + eq below); good enough to enjoy gapless albums as intended
|
||||||
* videos can be played as audio, without wasting bandwidth on the video
|
* videos can be played as audio, without wasting bandwidth on the video
|
||||||
|
@ -1102,8 +1122,8 @@ open the `[🎺]` media-player-settings tab to configure it,
|
||||||
* `aac|ac3|aif|aiff|alac|alaw|amr|ape|au|dfpwm|dts|flac|gsm|it|m4a|mo3|mod|mp2|mp3|mpc|mptm|mt2|mulaw|ogg|okt|opus|ra|s3m|tak|tta|ulaw|wav|wma|wv|xm|xpk`
|
* `aac|ac3|aif|aiff|alac|alaw|amr|ape|au|dfpwm|dts|flac|gsm|it|m4a|mo3|mod|mp2|mp3|mpc|mptm|mt2|mulaw|ogg|okt|opus|ra|s3m|tak|tta|ulaw|wav|wma|wv|xm|xpk`
|
||||||
* "transcode to":
|
* "transcode to":
|
||||||
* `[opus]` produces an `opus` whenever transcoding is necessary (the best choice on Android and PCs)
|
* `[opus]` produces an `opus` whenever transcoding is necessary (the best choice on Android and PCs)
|
||||||
* `[awo]` is `opus` in a `weba` file, good for iPhones (iOS 17.5 and newer) but Apple is still fixing some state-confusion bugs as of iOS 18.2.1
|
* `[awo]` is `opus` in a `weba` file, good for iPhones (ios 17.5 and newer) but Apple is still fixing some state-confusion bugs as of ios 18.2.1
|
||||||
* `[caf]` is `opus` in a `caf` file, good for iPhones (iOS 11 through 17), technically unsupported by Apple but works for the most part
|
* `[caf]` is `opus` in a `caf` file, good for iPhones (ios 11 through 17), technically unsupported by Apple but works for the most part
|
||||||
* `[mp3]` -- the myth, the legend, the undying master of mediocre sound quality that definitely works everywhere
|
* `[mp3]` -- the myth, the legend, the undying master of mediocre sound quality that definitely works everywhere
|
||||||
* `[flac]` -- lossless but compressed, for LAN and/or fiber playback on electrostatic headphones
|
* `[flac]` -- lossless but compressed, for LAN and/or fiber playback on electrostatic headphones
|
||||||
* `[wav]` -- lossless and uncompressed, for LAN and/or fiber playback on electrostatic headphones connected to very old equipment
|
* `[wav]` -- lossless and uncompressed, for LAN and/or fiber playback on electrostatic headphones connected to very old equipment
|
||||||
|
@ -1147,7 +1167,7 @@ can also boost the volume in general, or increase/decrease stereo width (like [c
|
||||||
|
|
||||||
has the convenient side-effect of reducing the pause between songs, so gapless albums play better with the eq enabled (just make it flat)
|
has the convenient side-effect of reducing the pause between songs, so gapless albums play better with the eq enabled (just make it flat)
|
||||||
|
|
||||||
not available on iPhones / iPads because AudioContext currently breaks background audio playback on iOS (15.7.8)
|
not available on iPhones / iPads because AudioContext currently breaks background audio playback on ios (15.7.8)
|
||||||
|
|
||||||
|
|
||||||
### fix unreliable playback on android
|
### fix unreliable playback on android
|
||||||
|
@ -2504,9 +2524,9 @@ TLDR: yes
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
`ie` = internet-explorer, `ff` = firefox, `c` = chrome, `iOS` = iPhone/iPad, `Andr` = Android
|
`ie` = internet-explorer, `ff` = firefox, `c` = chrome, `ios` = iPhone/iPad, `Andr` = Android
|
||||||
|
|
||||||
| feature | ie6 | ie9 | ie10 | ie11 | ff 52 | c 49 | iOS | Andr |
|
| feature | ie6 | ie9 | ie10 | ie11 | ff 52 | c 49 | ios | Andr |
|
||||||
| --------------- | --- | ---- | ---- | ---- | ----- | ---- | --- | ---- |
|
| --------------- | --- | ---- | ---- | ---- | ----- | ---- | --- | ---- |
|
||||||
| browse files | yep | yep | yep | yep | yep | yep | yep | yep |
|
| browse files | yep | yep | yep | yep | yep | yep | yep | yep |
|
||||||
| thumbnail view | - | yep | yep | yep | yep | yep | yep | yep |
|
| thumbnail view | - | yep | yep | yep | yep | yep | yep | yep |
|
||||||
|
@ -2527,13 +2547,13 @@ TLDR: yes
|
||||||
| markdown viewer | - | `*2` | `*2` | `*2` | yep | yep | yep | yep |
|
| markdown viewer | - | `*2` | `*2` | `*2` | yep | yep | yep | yep |
|
||||||
| play mp3/m4a | - | yep | yep | yep | yep | yep | yep | yep |
|
| play mp3/m4a | - | yep | yep | yep | yep | yep | yep | yep |
|
||||||
| play ogg/opus | - | - | - | - | yep | yep | `*3` | yep |
|
| play ogg/opus | - | - | - | - | yep | yep | `*3` | yep |
|
||||||
| **= feature =** | ie6 | ie9 | ie10 | ie11 | ff 52 | c 49 | iOS | Andr |
|
| **= feature =** | ie6 | ie9 | ie10 | ie11 | ff 52 | c 49 | ios | Andr |
|
||||||
|
|
||||||
* internet explorer 6 through 8 behave the same
|
* internet explorer 6 through 8 behave the same
|
||||||
* firefox 52 and chrome 49 are the final winxp versions
|
* firefox 52 and chrome 49 are the final winxp versions
|
||||||
* `*1` yes, but extremely slow (ie10: `1 MiB/s`, ie11: `270 KiB/s`)
|
* `*1` yes, but extremely slow (ie10: `1 MiB/s`, ie11: `270 KiB/s`)
|
||||||
* `*2` only able to do plaintext documents (no markdown rendering)
|
* `*2` only able to do plaintext documents (no markdown rendering)
|
||||||
* `*3` iOS 11 and newer, opus only, and requires FFmpeg on the server
|
* `*3` ios 11 and newer, opus only, and requires FFmpeg on the server
|
||||||
|
|
||||||
quick summary of more eccentric web-browsers trying to view a directory index:
|
quick summary of more eccentric web-browsers trying to view a directory index:
|
||||||
|
|
||||||
|
@ -2666,7 +2686,7 @@ the app is **NOT** the full copyparty server! just a basic upload client, nothin
|
||||||
if you want to run the copyparty server on your android device, see [install on android](#install-on-android)
|
if you want to run the copyparty server on your android device, see [install on android](#install-on-android)
|
||||||
|
|
||||||
|
|
||||||
# iOS shortcuts
|
# ios shortcuts
|
||||||
|
|
||||||
there is no iPhone app, but the following shortcuts are almost as good:
|
there is no iPhone app, but the following shortcuts are almost as good:
|
||||||
|
|
||||||
|
@ -2675,7 +2695,7 @@ there is no iPhone app, but the following shortcuts are almost as good:
|
||||||
* can download links and rehost the target file on copyparty (see first comment inside the shortcut)
|
* can download links and rehost the target file on copyparty (see first comment inside the shortcut)
|
||||||
* pics become lowres if you share from gallery to shortcut, so better to launch the shortcut and pick stuff from there
|
* pics become lowres if you share from gallery to shortcut, so better to launch the shortcut and pick stuff from there
|
||||||
|
|
||||||
if you want to run the copyparty server on your iPhone or iPad, see [install on iOS](#install-on-iOS)
|
if you want to run the copyparty server on your iPhone or iPad, see [install on ios](#install-on-ios)
|
||||||
|
|
||||||
|
|
||||||
# performance
|
# performance
|
||||||
|
@ -3010,7 +3030,7 @@ if you want thumbnails (photos+videos) and you're okay with spending another 132
|
||||||
* or if you want to use `vips` for photo-thumbs instead, `pkg install libvips && python -m pip install --user -U wheel && python -m pip install --user -U pyvips && (cd /data/data/com.termux/files/usr/lib/; ln -s libgobject-2.0.so{,.0}; ln -s libvips.so{,.42})`
|
* or if you want to use `vips` for photo-thumbs instead, `pkg install libvips && python -m pip install --user -U wheel && python -m pip install --user -U pyvips && (cd /data/data/com.termux/files/usr/lib/; ln -s libgobject-2.0.so{,.0}; ln -s libvips.so{,.42})`
|
||||||
|
|
||||||
|
|
||||||
# install on iOS
|
# install on ios
|
||||||
|
|
||||||
first install one of the following:
|
first install one of the following:
|
||||||
* [a-Shell mini](https://apps.apple.com/us/app/a-shell-mini/id1543537943) gives you the essential features
|
* [a-Shell mini](https://apps.apple.com/us/app/a-shell-mini/id1543537943) gives you the essential features
|
||||||
|
|
Loading…
Reference in a new issue