Jesse A. Green / notebook

copyparty User Guide

Generated June 2026 from 9001/copyparty at 6e75faa

AI-generated documentation. The library is checked by sampling (three repositories so far); this guide was not individually reviewed. Verify against the project before relying on it.

copyparty turns almost any device into a file server with resumable uploads and downloads, usable from any web browser — from Internet Explorer 6 to the latest Chrome, and even from a PlayStation Portable or a Nintendo 3DS. The server is a single Python program with no mandatory dependencies beyond Python itself; every extra feature (thumbnails, media tags, FTP, SFTP, SMB, WebDAV, TFTP) is an optional add-on you enable only if you want it.

This guide walks you through installing copyparty, sharing folders, uploading and downloading files through the browser, and the everyday features you will actually use. Deep configuration, deployment, security hardening, and internals live in the Admin Guide.

Note

copyparty follows an "inverse unix philosophy" — instead of doing one thing well, it does everything and does an okay job at all of it. The result is a drop-in service that gives you a huge feature set in a pinch, with zero setup required.


1. Quick Start

The fastest way to run copyparty is the self-contained sfx (self-extracting) build — a single .py file that unpacks itself and runs.

Any OS with Python

python3 copyparty-sfx.py

pip (PyPI)

python3 -m pip install --user -U copyparty
copyparty

Windows (no Python)

Download copyparty.exe and double-click it, or run from a terminal:

copyparty.exe

uv

uv tool run copyparty

Running copyparty with no arguments gives everyone read/write access to the current folder, then prints a URL you can open:

http://127.0.0.1:3923/

Warning

The zero-argument default shares your current folder as read-write for everyone on the network. Before exposing copyparty beyond your own machine, set up accounts and volumes so only the right people can read or write.

Tip

The default HTTP port is 3923. Open http://127.0.0.1:3923/ in any browser to reach the web UI.

A few flags dramatically improve the experience:

Option What it enables
-e2dsa Index all files so search, dedup, and upload-undo work
-e2ts Index audio metadata (needs FFprobe or Mutagen)
-v /mnt/music:/music:r:rw,foo -a foo:bar Share /mnt/music at URL /music, readable by anyone and read-write for user foo (password bar)
python3 copyparty-sfx.py -e2dsa -e2ts -v /mnt/music:/music:r -a foo:bar

2. Installation

2.1 Requirements

copyparty needs only Python (2.7 or 3.3+). The single mandatory library, jinja2, is bundled inside the sfx and exe builds.

Note

copyparty runs on an extraordinary range of platforms: Windows, Linux, macOS, Android, iOS, FreeBSD, arm32/arm64, ppc64le, s390x, RISC-V, and even SGI IRIX. If it has Python, it probably runs copyparty.

2.2 Enabling thumbnails, media indexing, and transcoding

These features need FFmpeg and/or Pillow. Install the recommended extras for your OS:

Debian / Ubuntu

apt install --no-install-recommends python3-pil ffmpeg

Alpine

apk add py3-pillow ffmpeg

Fedora

dnf install python3-pillow ffmpeg --allowerasing

macOS

brew install pillow ffmpeg

Windows

python -m pip install --user -U Pillow

Install Python and FFmpeg manually. Do not use winget or the Microsoft Store — they break $PATH.

Important

copyparty.exe already bundles Pillow, so it only needs FFmpeg for media tags and video thumbnails.

2.3 Install methods at a glance

Method Command Notes
sfx python3 copyparty-sfx.py Recommended; one file, all features
English-only sfx python3 copyparty-en.py Smaller
PyPI python3 -m pip install --user -U copyparty System Python
Windows exe run copyparty.exe win8+; copyparty32.exe for win7
zipapp python copyparty.pyz Emergency fallback, fewer features
Arch pacman -S copyparty From extra
Homebrew brew install copyparty ffmpeg Intel + Apple Silicon
Nix nix profile install github:9001/copyparty Flake-enabled Nix
Gentoo emerge www-servers/copyparty::guru From ::guru overlay
Android install in Termux See §15
iOS install in a-Shell See §15

Tip

The sfx is a self-extractor that unpacks an embedded tar.gz into $TEMP. If that worries you, use the zipapp instead — it runs entirely from the zip without writing temporary files, at slightly lower performance.


3. The Web Browser Interface

The web UI is copyparty's main surface. Open the server URL and you get a file listing with a toolbar of tabs.

3.1 The main tabs

Tab Purpose
[🔎] Search by size, date, path/name, mp3-tags
[🧯] Unpost — undo/delete your accidental uploads
[🚀] / [🎈] The two uploaders (fancy / basic)
[📂] mkdir — create directories
[📝] New textfile
[📟] Send message to the server log or into a textfile
[🎺] Audio-player settings
[⚙️] General client settings

3.2 Hotkeys

copyparty has a rich keyboard interface (keys are always QWERTY positions):

Key Action
? Show the hotkey help overlay
B Toggle breadcrumbs / navpane
I / K Previous / next folder
M Parent folder (or collapse current)
G Toggle list / grid view
T Toggle thumbnails / icons
ctrl-X / ctrl-C / ctrl-V Cut / copy / paste selected files
ctrl-K Delete selected files/folders
Y Download selected files
F2 Batch rename
ESC Close the current overlay

When a media file is open, more keys appear:

  • Audio: J/L prev/next song, U/O skip 10 s, 0..9 jump to 0–90 %, P play/pause.
  • Images/video: J/L or ←/→ prev/next, F fullscreen, R rotate, Home/End first/last.
  • Video extras: M mute, [ / ] set loop range, V loop entire file.
  • Markdown editor: ^s save, ^h header, ^k autoformat table, ^e toggle editor/preview.

3.3 Navpane

Press B (or click the 🌲) to switch between the breadcrumb path and a tree-browser sidebar (the navpane).

  • [+] / [-] (or hotkeys A/D) adjust the tree width.
  • [🎯] jumps to the currently open folder.
  • [📃] toggles between showing folders and textfiles.
  • [👀] shows the full name on hover when wordwrap is off.

3.4 Thumbnails and grid view

Press g (or click 田 bottom-right) to toggle grid view; t toggles between icons and thumbnails.

  • Thumbnails are generated from images (Pillow / pyvips / FFmpeg), videos (FFmpeg), and audio (FFmpeg spectrograms).
  • Enable for a single page by adding ?imgs to a link; disable with ?imgs=0.
  • A folder's thumbnail is taken from an image named folder.png, folder.jpg, cover.png, or cover.jpg (in that priority order).

Note

pyvips produces higher-quality thumbnails ~3× faster than Pillow, and Pillow is ~3× faster than FFmpeg. Your admin chooses which engines are available.

Tip

If thumbnails show as a colorful box with the filetype instead of a preview, the server is missing FFmpeg or Pillow — ask your admin to install one of them.

3.5 Zip / tar downloads

Download a whole folder (or a selection of files) as an archive. Choose the archive type in the [⚙️] config tab, or append a URL suffix directly:

Name URL suffix Description
tar ?tar Plain gnutar; pairs with curl | tar -xv
pax ?tar=pax Futureproof pax tar
tgz ?tar=gz gzip-compressed tar
txz ?tar=xz xz/lzma-compressed tar (slow)
zip ?zip Works everywhere
zip_dos ?zip=dos cp437, fixes glitchy filenames on old Windows
zip_crc ?zip=crc cp437 with early CRC32, for truly ancient software
# download a folder as a tar stream and extract on the fly
curl 'http://127.0.0.1:3923/music/?tar' | tar -xv

Tip

Append ?tar&opus or ?tar&mp3 to transcode every audio file in the folder before adding it to the archive — perfect when your server only has FLACs and you need MP3s on your phone before takeoff. Add &name=foo to rename the top-level folder, or &j / &w to get jpeg/webm thumbnails instead of originals.

3.6 Uploading

Drag files or folders into the browser window to upload. You can also:

  • Select files in your file explorer and press CTRL-V inside the browser.
  • Use the command-line uploader u2c.py.
  • Use curl, ShareX, ishare, etc.

There are two uploaders:

  • [🎈] bup — the basic uploader; works in almost every browser since Netscape 4.0.
  • [🚀] up2k — the fancy one, and the default for drag-and-drop.

up2k advantages:

  • Drop whole folders (added recursively).
  • Files are split into checksummed chunks, so uploads auto-resume after a network drop, browser restart, or reboot — just upload the same files again.
  • The server detects corruption and re-requests only the affected chunks.
  • Already-existing files are skipped (not re-uploaded).
  • No filesize limit, even behind a proxy that caps request size (e.g. Cloudflare).
  • The file's last-modified timestamp is preserved.

Important

It is perfectly safe to restart or upgrade copyparty while someone is uploading — all up2k clients resume cleanly.

The up2k panel has these controls:

  • parallel uploads — how many chunks to send at once.
  • [🥔] — a simpler "potato" UI for faster uploads from slow devices.
  • [🛡️] — overwrite policy: 🛡️ never (new filename), 🕒 overwrite if older, ♻️ always overwrite if different.
  • [🎲] — generate random filenames.
  • [🔎] — switch between Upload and File-Search mode.

Tabs below show progress: [ok] succeeded, [ng] failed/rejected, [busy] hashing/uploading, [que] queued, [done] combined.

Tip

Turn on favicon in the [⚙️] settings tab and the browser-tab icon becomes an upload progress indicator. The [🔔] / [🔊] switches enable visible and audible completion notifications.

When you drag files into the browser you get two dropzones: Upload and Search. Drop into Search and copyparty hashes the files locally, sends only the hashes, and tells you whether identical contents already exist on the server.

  • Matches land in [ok] with a link to where the file lives; non-matches land in [ng].
  • On a phone, flip the [🔎] switch green before tapping the big yellow Search button.

Note

File-search requires the server admin to have enabled indexing (-e2dsa). If search returns nothing, indexing may be off.

3.8 Unpost — undo your uploads

The [🧯] tab lets you delete files you uploaded, even without normal move/delete permission — but only within the --unpost window (default 12 hours) and only if the server runs with -e2d. This is also where you abort unfinished uploads (refresh the page first).

3.9 Self-destruct uploads

If the admin enabled the lifetime rule on a volume, uploads expire automatically after a set time. You can choose a shorter lifetime in the up2k UI when uploading into such a folder.

3.10 File manager

Select a file by clicking on its line (not the link), then:

  • space toggle, up/down move cursor, shift-up/down select-and-move, shift-click for range-select.
  • ctrl-x cut, ctrl-c copy, ctrl-v paste (in another folder or even another browser tab), F2 rename.

Cut/copy/delete/rename require the matching permission on the folder.

3.11 Batch rename

Select files and press F2. Basic mode renames the chosen files; advanced mode renames by rules using regex on the original name and/or the file's tags (artist/title/…).

  • regex is matched against the original filename; non-matching files are skipped.
  • format is the new name, drawing from regex capture groups (1), (2), … and tag names like (artist), (title), (ext).
  • Functions $lpad(text,len,char) and $rpad(...) are available; counters .n.s (nth in selection) and .n.d (nth in folder) help with numbering.

Example — file meganeko - Eclipse - 07 Sirius A.mp3 with tags Artist:meganeko, Title:Sirius A, tn:7:

regex  = (.*) - (.*) - ([0-9]{2}) (.*)
format = (3). (1) - (4)
output = 07. meganeko - Sirius A.mp3

3.12 Shares

When the admin enables shares (--shr), click the bottom-right share button to create a temporary link to the current folder, or select files/a folder first to share only those. When creating a share you can set:

  • Password protection.
  • Expiry time (0 or blank = never).
  • Allow visitors to upload (if you have write access).

You can delete your own shares from the control panel.

Caution

A share link bypasses normal auth for that specific path — but it does not replace proper accounts and volumes. Restrict any volume you don't intend to expose; reverse-proxy rules on just the share folder are not sufficient.

3.13 RSS and OPDS feeds

  • RSS: if enabled (volflag rss / --rss), append ?rss to a folder URL to get a feed (with iTunes metadata for podcast readers). Parameters include recursive, fext=mp3,opus, nf=30 (limit), and sort=m (by mtime).
  • OPDS: for e-readers; append ?opds to a folder URL and point your reader at it (e.g. https://copyparty.example/books/?opds).

3.14 Recent uploads

Click "show recent uploads" in the control panel to list recent uploads. Admins also see uploader IP and time. For your own uploads, the 🧯 unpost tab is better because it lets you undo them.


4. Media Player

copyparty plays almost every audio format. These usually play without FFmpeg: aac flac m4a mp3 ogg opus wav; anything else is transcoded on-demand if the server has FFmpeg.

  • Add ?v to any audio/video/image link to open it in the media player.
  • The player shows the audio waveform in the seekbar and supports OS lock-screen controls.
  • Video files can be played as audio only, saving bandwidth.

Open the [🎺] settings tab to configure:

  • Switches: [🔁] repeat one, [🔀] shuffle folder, [preload] start loading the next track early, [os-ctl] enable lock-screen controls, [art] show album art on lock screen.
  • At end of folder: [loop] keep looping, [next] play into next folder.
  • Transcode: [flac]/[aac]/[oth] decide which source formats get converted.
  • Transcode to: [opus] (best on Android/PC), [awo]/[caf] (iPhone variants), [mp3] (works everywhere), [flac]/[wav] (lossless; admin must allow with --allow-flac/--allow-wav).

4.1 Playlists

Click an .m3u/.m3u8 file to Play or Edit it. Playlists may reference songs across folders, but filekeys/dirkeys are not supported, so the listener needs read or get access to each file.

To build a playlist in copyparty itself, enable [📻] in the [🎺] tab — [📻add] adds the current/selected songs and [📻copy] puts the playlist on your clipboard, ready to paste into a new .m3u textfile.

4.2 Audio equalizer

The [🎺] tab includes an equalizer and a dynamic-range compressor; it can also boost volume and adjust stereo width. Leaving the EQ enabled (even flat) reduces the gap between songs, helping gapless albums.

Note

The equalizer is unavailable on iPhones/iPads because Safari's AudioContext currently breaks background playback.


5. Viewing Files

5.1 Textfile viewer

Click -txt- next to a textfile to open the viewer. Toolbar:

  • ✏️ edit — open the textfile editor.
  • 📡 follow — stream new lines in realtime, like tail -f. Add &tail to the URL to start following immediately.

Terminal color codes render correctly.

5.2 Markdown viewer and editor

Markdown files render with a built-in viewer, and there are two editors. Inline clickable thumbnails are supported — add <!-- th --> to the document, then !th[l](your.jpg) (l/r = left/right align).

Markdown variables: documents can contain server-side variables like {{self.ip}} (the client's IP) or {{srv.htime}} (server time), expanded before display.

The grid view doubles as an image gallery with a webm player and a CBZ manga/comics reader.

5.4 Other tricks

  • Link a timestamp in an audio file by adding it to the URL, e.g. &t=1:20 after the #af-... anchor.
  • Get a plaintext listing with ?ls=t, or a colored terminal listing with ?ls=v.
  • Files named .prologue.html / .epilogue.html render before/after directory listings.
  • README.md renders after a listing; PREADME.md renders above it.

6. Accounts and Volumes

Permissions in copyparty are per-folder, per-user. A volume maps a URL (like /music/) to a real folder on the server (like /mnt/music); an account is a username + password.

Tip

Once your setup grows beyond a couple of folders, switch from command-line flags to a config file — it is far easier to manage and can be reloaded without restarting.

6.1 Permission letters

Letter Permission
r read — browse, download, zip/tar, see filekeys/dirkeys
w write — upload, move/copy files into this folder
m move — move files/folders out of this folder
d delete — delete files/folders
. dots — may request to see dotfiles
g get — download only; cannot list folder or zip/tar
G upget — like g, but uploaders also see their own filekeys
h html — like g, but folders return their index.html
a admin — see upload times, uploader IPs, reload config
A all — equivalent to rwmda.

6.2 Configuring with command-line flags

  • -a user:pwd adds an account.
  • -v src:dst:perm:perm:… adds a volume — local path, URL path, then one or more permission groups.

Examples:

# three accounts
-a u1:p1 -a u2:p2 -a u3:p3

# /srv as the webroot, read-only for everyone
-v /srv::r

# /mnt/music at /music, read-only for u1/u2, read-write for u3
-v /mnt/music:music:r,u1,u2:rw,u3

# write-only dropbox for u1, read-move for u2
-v /mnt/incoming:inc:w,u1:rm,u2

Note

The group @acct always contains every logged-in user, so -v /mnt/music:music:r,@acct grants read to anyone who has logged in. To grant access only to users who are not logged in, use *,-@acct. You can subtract a single user from a group, e.g. @admins,-james.

6.3 Passwords in URLs

You can pass a password in a link by appending ?pw=hunter2 (use &pw= if the URL already has parameters). With --usernames enabled, use ?pw=username:password.

Warning

Anyone who bruteforces a password gets banned per --ban-pw (default: 24-hour ban after 9 failed attempts in 1 hour). If you keep seeing thank you for playing, you have been banned — ask your admin.


7. Configuration Files

For anything beyond a trivial setup, use a config file and run python copyparty-sfx.py -c foobar.conf. The same volumes and accounts from §6.2 look like this:

[accounts]
  u1: p1   # create account "u1" with password "p1"
  u2: p2   #  (comments need TWO spaces before the # )

[groups]
  g1: u1, u2

[/]            # this URL maps to...
  /srv         # ...this server folder
  accs:
    r: *       # read-only for everyone

[/music]
  /mnt/music
  accs:
    r: u1, u2  # only these can read
    rw: u3     # u3 can read-write

[/inc]
  /mnt/incoming
  accs:
    w: u1      # upload-only
    rm: u2     # browse + move out

Tip

You can reload accounts and volumes without restarting — run systemctl reload copyparty (or kill -s USR1), or click [reload cfg] in the control panel if you have admin (a) in any volume. Changes to the [global] section still require a restart.

Note

You can also point copyparty at a config with the environment variable PRTY_CONFIG=foobar.conf, which is handy in Docker.


8. Searching

When started with -e2dsa, copyparty indexes your files, which both prevents duplicate uploads and makes volumes searchable from the [🔎] tab.

  • Search by size, date, path/name, or mp3 tags.
  • Name/path queries are space-separated and AND-ed; prefix a word with - to exclude it.
    • shibayan -bossa → folders containing shibayan but not bossa.
  • The raw field accepts richer SQL-like queries, e.g. ( tags like *nhato* or tags like *taishi* ).

To search by music tags, also start the server with -e2ts so tags get indexed.

Note

If you have a "wark" (copyparty's file identifier), search for it in the [🔎] tab by putting w = kFpDiztbZc8Z1Lzi in the raw field.


9. Filekeys and Dirkeys

These let an admin share specific files or folders without granting full read access — you only need the g (get) permission plus the correct key.

  • Filekeys (volflag fk): each file gets a per-file access key shown as ?k=... at the end of its URL. A g-user must supply that exact URL or get a 404.
  • Dirkeys (volflag dk): each folder gets a key granting read access to that folder.

If your admin enabled these, links you share must include the ?k= key. With permission wG, you can upload files and receive your own working links without seeing anyone else's uploads.


10. Accessing copyparty from Other Protocols

Besides the browser, copyparty can speak several network protocols if the admin enables them. As a user, here is how to connect.

10.1 WebDAV (mount as a drive)

WebDAV lets you mount copyparty straight from your OS file explorer. Click the connect button in the control panel for exact instructions.

Windows

Right-click My Computer → Map network drive → Folder: http://192.168.123.1:3923/. Type your password in the username field (the password field can be empty).

macOS

Finder → Go → Connect to Server… → http://192.168.123.1:3923/

Linux (rclone, recommended)

rclone's WebDAV backend is the fastest and most reliable client.

Warning

Windows' built-in WebDAV client is buggy. If reconnecting after a reboot fails, try logging in with a wrong password first then the correct one — or just put your password in the username field. rclone avoids all of these bugs.

10.2 FTP / FTPS

If the admin started --ftp 3921 (or --ftps for TLS), connect with any FTP client:

lftp -u k,wark -p 3921 127.0.0.1 -e ls          # plaintext FTP
curl --ssl-reqd ftp://127.0.0.1:3990/           # encrypted FTPS

Log in with any username plus your password, or put your password in the username field (unless --usernames is enabled). FTP uploads are not resumable — delete and restart if interrupted.

10.3 SFTP

If the admin started --sftp 3922, connect with any SSH/SFTP client. Authentication is by SSH key by default; password login works only if the admin enabled --sftp-pw.

10.4 SMB / CIFS

If enabled (--smb read-only or --smbw read-write), copyparty appears as a Windows network share. Authenticate with either username + password, or username $password + password k.

Caution

SMB is slow and not recommended over the internet — the built-in Windows WebDAV client is ~5× faster, and rclone-WebDAV ~30× faster. Use SMB only on a trusted LAN.

10.5 TFTP

If enabled (--tftp 3969), copyparty serves TFTP — mostly useful for talking to very old hardware (firmware on 1990s devices):

curl --tftp-blksize 1428 tftp://127.0.0.1:3969/firmware.bin

11. Non-Browser Clients

copyparty is friendly to scripts and command-line tools.

11.1 curl / wget upload

# upload, get HTML back
curl -F f=@movie.mkv http://127.0.0.1:3923/?pw=wark

# upload, get a plain hotlink URL back
curl -F f=@movie.mkv 'http://127.0.0.1:3923/?want=url&pw=wark'

# stream stdin to a file (chunked)
curl -H pw:wark -T- http://127.0.0.1:3923/ < movie.mkv

# append to an existing file
echo hey | curl -H pw:wark -T- http://127.0.0.1:3923/logfile.txt?apnd

You can supply a password via header PW: hunter2, cookie cppwd=hunter2, url-param ?pw=hunter2, or basic-auth (as username or password).

Important

curl will not send the original filename when you combine -T with url-params. Always leave a trailing slash in URLs unless you intend to override the filename.

11.2 u2c.py — the command-line up2k client

u2c.py is the Python uploader with resumable uploads, file-search, and folder sync. Download it from the control panel → connect → u2c.py, or from the repo's bin/ folder.

11.3 Folder sync

u2c.py --dr  /local/folder  https://server/volume/

--dr verifies checksums, uploads in parallel, and deletes unexpected server files after upload (so renames are cheap — copyparty renames server-side instead of re-uploading).

Note

copyparty does one-way sync only (client→server or server→client); full bidirectional sync like Nextcloud/Syncthing is intentionally never supported. You can, however, safely combine copyparty with Syncthing on the same folders.

11.4 FUSE — mount the server as a filesystem

partyfuse.py (cross-platform Python) mounts a copyparty server read-only as a local filesystem. rclone gives ~5× the performance and also supports writing.


12. Making it Reachable Over the Internet

The quickest way to expose a local copyparty is a Cloudflare quick-tunnel:

cloudflared tunnel --url http://127.0.0.1:3923

This prints a public URL anyone can use to browse your files or upload to you.

Important

When users connect through Cloudflare (or any reverse proxy), start copyparty with --xff-hdr cf-connecting-ip so it sees the real client IP. Otherwise everyone may share one IP and get each other banned. See the Admin Guide for full reverse-proxy and real-IP setup.


13. Performance Tips (Client Side)

When uploading, you can speed things up:

  • In the [⚙️] settings tab, enable [wasm] when uploading from a very fast SSD with Chrome/Firefox to use all CPU cores for hashing. Do not enable it on Safari or old browsers.
  • Chrome is faster than Firefox for hashing (up to 90 %) and for uploading over very fast links (up to 40 %).
  • If your CPU is the bottleneck, hide the upload list by switching away from the [🚀] tab (or switch to the [🥔] potato UI) — up to 30 % faster.
  • On Android-Chrome, increase "parallel uploads" for higher speed.

Tip

Defaults are usually fine — expect roughly 8 GiB/s download and 1 GiB/s upload on a fast LAN.


14. Mobile Apps and Shortcuts

  • Android: PartyUP! is a one-tap upload client (not the full server). To run the server on Android, install it in Termux (see below).
  • iOS: there is no app, but an upload-to-copyparty shortcut can strip EXIF and upload files, pics, vids, links, and clipboard contents.

14.1 Run the server on Android (Termux)

Install Termux and Termux:API, then paste:

yes | pkg upgrade && termux-setup-storage && yes | pkg install python termux-api && python -m ensurepip && python -m pip install --user -U copyparty

Launch with copyparty (add --qr for a QR code to your external IP).

14.2 Run the server on iOS (a-Shell)

Install a-Shell, then:

curl -L https://github.com/9001/copyparty/raw/refs/heads/hovudstraum/contrib/setup-ashell.sh | sh

This creates a config file cpc and a cpp command to launch copyparty.


15. Browser Support

TLDR: yes. copyparty works in essentially every browser ever made.

Feature IE6 IE9 IE11 Firefox 52 Chrome 49 iOS Android
Browse files ✅ ✅ ✅ ✅ ✅ ✅ ✅
Basic uploader ✅ ✅ ✅ ✅ ✅ ✅ ✅
up2k (resumable) — — slow ✅ ✅ ✅ ✅
Thumbnail view — ✅ ✅ ✅ ✅ ✅ ✅
Media player — ✅ ✅ ✅ ✅ ✅ ✅
Markdown editor — — text only ✅ ✅ ✅ ✅

Even text browsers (links, lynx, w3m) and exotic clients (Sony PSP, Nintendo 3DS, an SGI O2 with 64 MiB RAM) can browse and often upload — try appending ?b=u for the simplified HTML uploader on very old clients.


16. Troubleshooting

Error: thank you for playing

Cause: Your IP was banned for too many failed password attempts (or your real IP is hidden behind a reverse proxy and someone else on that shared IP triggered the ban). Solution: Wait out the ban, or ask the admin to configure real-IP detection (--xff-hdr). See §12. Prevention: Type passwords carefully; behind Cloudflare, the admin should set --xff-hdr cf-connecting-ip.

Error: Thumbnails show a colored box with the filetype

Cause: The server has no FFmpeg or Pillow installed. Solution: Ask the admin to install FFmpeg or Pillow (§2.2). Prevention: Install the recommended media dependencies up front.

Error: Thumbnails broken only for iPhone photos/videos

Cause: The Docker image and bootable builds can't read HEIF/HEIC images or H.265/HEVC video for legal reasons. Solution: Run copyparty natively with pyvips (or convert the media first).

Error: Some thumbnails blank or broken-image

Cause: A reverse proxy is stripping the ?th=w query parameter, or a CDN is mis-caching, or a privacy browser extension is interfering. Solution: Ensure the proxy/CDN preserves the query string; try disabling browser extensions.

Error: Firefox "Secure Connection Failed" / SEC_ERROR_BAD_SIGNATURE with no "Accept the Risk" button

Cause: Firefox's certificate store is corrupted. Solution: Exit Firefox and delete cert9.db from your Firefox profile folder.

Error: copyparty thinks you're on HTTP even though the URL is HTTPS

Cause: Your reverse proxy isn't sending the X-Forwarded-Proto: https header. Solution: Ask the admin to fix the proxy so it forwards that header end to end.

Error: Drag-and-drop folder upload skips symlinked files

Cause: A known Chrome bug (1317069) — not a copyparty bug. Solution: Upload the real files directly, not via symlinks.

Error: Music playback randomly stops on Android

Cause: Android's power saver kills the browser's background audio. Solution: Disable power saving for your music browser in the app settings; use a dedicated browser for music.

Error: Windows "directory iterator got stuck" during upload

Cause: Windows max-path-length limit. Solution: Move the files to a shorter path before uploading.

Issue: Uploads to an anonymous-read WebDAV folder fail to write (Windows)

Cause: Windows decides it doesn't need to authenticate, then can't write. Solution: Connect twice (first to an auth-required folder, then your target), or ask the admin to set --dav-auth.


17. FAQ

Q: Is it CopyParty or copyparty? It's copyparty (all lowercase) or Copyparty — one word.

Q: What is a volume? A mapping from a URL (e.g. /music/) to a folder on the server's filesystem (e.g. C:\Users\ed\Music), with its own permissions and options.

Q: What is a volflag? Per-volume configuration. Most global options can be set per-volume as a volflag, and vice-versa.

Q: Can I block folder listing but still allow direct file links? Yes — use the g (get) permission instead of r. Combine with filekeys to stop filename guessing.

Q: Can I put the password in a share link? Yes — add ?pw=hunter2 to the end (&pw= if the URL already has parameters). With --usernames, use ?pw=username:password.

Q: How do I stop .hist folders appearing all over my drive? copyparty creates a .hist folder per volume for its index/thumbnails. Ask the admin to move them with --hist or the hist volflag.

Q: Can copyparty download a file to the server from a URL I give it? Yes, via a server-side hook — an admin feature.

Q: My uploads keep failing with corruption — is my data safe? up2k checksums every chunk and re-requests only the corrupted ones, so the final file is always verified. Just let it resume.

Q: Can I upload files bigger than my proxy's request limit? Yes. up2k splits files into chunks (default ≤96 MiB to slip under Cloudflare), so there is no effective filesize limit.

Q: Where do I report bugs? At github.com/9001/copyparty (primary), or the GitLab/Codeberg mirrors. Include your command-line arguments and config.