Luminary. lumaseed / docs
Docs · zero to downloading

Everything Lumaseed does.

Start with one command and finish with a torrent client running on your own server. This page walks the whole thing in order — installing, adding torrents, getting your files back out, tuning for speed, hosting it safely, and the handful of things that catch people out.

01 · install

One command, then open a browser.

You need a machine that can stay switched on while things download — a laptop, a home server, a Raspberry Pi, or a rented VPS — and Docker. That is the only dependency.

# grab the code and start it
git clone https://github.com/luminary-dev/lumaseed.git
cd lumaseed
docker compose up -d

The first run takes a minute or two while it builds. Then open http://localhost:3456. Downloads land in a downloads folder next to the project files.

Stopping it and checking on it

docker compose down          # stop
docker compose logs -f       # watch what it's doing
docker compose ps            # is it running?

Without Docker

If you would rather run it directly and you have Node.js 20 or newer:

npm install
npm start
02 · adding torrents

Paste a link, or drop a file.

There are two ways to start a download, and both work the moment the page loads:

  • Magnet link — paste it into the box and press Add (or hit Enter).
  • .torrent file — drag it onto the drop zone, or click to browse.

While a torrent runs you get a progress bar, download and upload speed, the number of peers you are connected to, and an estimated time remaining. Every torrent can be paused, resumed, or removed. Removing asks whether to delete the downloaded data too, so you can drop a torrent from the list and keep the files.

Adding the same torrent twice is refused rather than duplicated — if it is already in the list, Lumaseed tells you instead of starting a second copy.

03 · getting files out

Three ways to reach what you downloaded.

Because Lumaseed runs on your own machine, the files are already on that disk when the torrent completes. How you get to them depends on where you are sitting.

Open the folder directly

The fastest option when you are at the same computer. Every file in the interface shows its full path with a copy button next to it — click the path to select it, or the button to copy it.

Download the whole folder

Browsers cannot download a directory, so Download folder packages the entire torrent — folder structure intact — into a single .zip and streams it to you. It is built without compression, because video and audio are already compressed and squeezing them again wastes time for no gain, so it moves about as fast as your network allows. Files larger than 4 GB are handled with ZIP64.

Save one file

Each completed file has its own Save link. These support range requests, so pausing and resuming a 10 GB browser download works normally.

04 · settings

Three environment variables, and where files land.

Set these in the environment: block of docker-compose.yml:

VariableDefaultWhat it does
PORT3456Port the web interface is served on
TORRENT_PORT42069Port other peers connect to you on (TCP and UDP)
DOWNLOAD_DIR/downloadsWhere files are saved inside the container

To save downloads somewhere else — an external drive, a NAS mount — change the left-hand side of the volume line. The right-hand side stays as it is:

volumes:
  - /mnt/storage/torrents:/downloads
05 · speed

What actually makes a torrent fast.

Lumaseed ships tuned for throughput — nothing is throttled, it opens far more peer connections than a default client, keeps thirteen public trackers plus DHT and PEX active, and gives disk I/O its own widened thread pool. Three things outside the software then decide your actual speed.

How many people are sharing it

By far the biggest factor, and nothing can change it. A popular torrent with hundreds of seeders will saturate your connection. A rare one with two seeders will crawl in any client. The swarm's combined upload capacity is a hard ceiling.

Whether peers can reach you

Torrents are much faster when other people can connect to you, not only when you reach out to them. Lumaseed tries to arrange this automatically on home routers using UPnP and NAT-PMP. If your router has those disabled, forward port 42069 — both TCP and UDP — to the machine running Lumaseed. On a rented server, open that port in the provider's firewall instead.

Your own connection

A wired connection beats Wi-Fi. Some VPNs deliberately slow file sharing down, so if speeds are poor, try without one — and if you keep the VPN, you need a provider that offers port forwarding or you will be outbound-only.

06 · hosting

Running it on a server, safely.

There is no login screen. Anyone who can reach the address can add torrents and download your files. That is fine on your own machine at localhost, but do not put it directly on the public internet.

The simplest safe way to use it from your phone or laptop is a private network such as Tailscale — install it on the server and on your devices, and they can reach each other without exposing anything publicly. If you genuinely need it public, put Caddy, nginx or Cloudflare Access in front with HTTPS and a password.

It cannot run on serverless platforms

Vercel, Netlify and AWS Lambda will not work, no matter what you add. A torrent client has to hold network connections open for hours and write large files to a real disk; those platforms run short-lived functions with temporary storage. You need an actual always-on machine.

Check your provider's rules

Many hosts prohibit file sharing in their terms of service and will suspend a server that receives a copyright complaint. Providers that advertise seedbox hosting expect this traffic; most general-purpose clouds do not.

Watch the bandwidth billing

A torrent client keeps uploading after your download finishes, so you can easily use more data than you downloaded. Pick an unmetered plan where you can.

07 · api

The HTTP endpoints, if you want to script it.

The interface is built entirely on these, so anything the page can do, a script can do.

EndpointDoes
GET /api/torrentsList every torrent with progress, speeds, peers and files
POST /api/torrentsAdd a magnet link — JSON body {"magnet":"…"}
POST /api/torrents/fileAdd a .torrent upload (multipart field torrent)
POST /api/torrents/:hash/pausePause a torrent
POST /api/torrents/:hash/resumeResume a torrent
DELETE /api/torrents/:hashRemove it — add ?deleteFiles=true to delete data too
GET /api/torrents/:hash/zipStream the whole torrent folder as a zip
GET /api/torrents/:hash/files/:iDownload one completed file
GET /api/verify/:hashRe-hash a sample of pieces and report whether they are genuinely on disk
GET /api/statusGlobal speeds, download directory and internal error count
# add a torrent from the command line
curl -X POST http://localhost:3456/api/torrents \
  -H 'Content-Type: application/json' \
  -d '{"magnet":"magnet:?xt=urn:btih:..."}'
08 · gotchas

Four things that catch people out.

A dead torrent cannot be downloaded by anything

If a torrent sits on "Searching for peers" forever, nobody online has the file any more. No client can fix that, because the data is not on the network. Lumaseed keeps looking for as long as it runs, so leaving it overnight is worth a try — but after a few days with zero peers, the torrent is genuinely gone.

Torrents are not remembered across restarts

If the container restarts, your downloaded files are safe on disk, but the list of active torrents is cleared and you will need to re-add the magnet links. Re-adding verifies the existing data first, so a completed torrent jumps straight back to 100% instead of downloading again.

The zip is only offered once everything is complete

Partial files would produce a broken archive, so the folder download returns an error until every file in the torrent has finished. Individual completed files can still be saved one at a time before then.

Completed downloads are correct by design

Every piece is cryptographically verified before it is written, so a finished torrent is intact. If you want to confirm independently, call /api/verify/:hash — it re-reads and re-hashes a sample of the data and reports "healthy": true.

Only download content you have the legal right to. You are responsible for what you do with this software.