feat(files): the Downloads page goes — the tray, a Storage tab and a Downloads settings tab take its place
- The Downloads module, its rail icon and badge are gone. A bookmark, the remembered page and an old
history entry that name it land on Files (urlState.resolvePage); `g d` goes to Files too.
- Users page: a Storage tab — the disk in numbers, every user's use against their own limit with
their file count, every user's downloads; aligned tables, one menu per row (edit / reset quota,
open source, copy, the owner's quota). The admin storage rows carry quota + file count, the admin
job list its owner.
- Settings: a Downloads tab — the download formats in one list (duplicate a built-in, edit or delete
your own) and the site sign-ins, moved from Account.
- "View" on an added download, a clip or a converting upload opens the tray on that row (unfolded,
back if closed; a finished one opens as a file; under a player it opens without taking focus).
- The download dialog opens on the format used last.
- DataTable: `pager={false}` for a short list, `cardRow` to give a lone "…" its own card line.
- Welcome and README speak of Files; a new Files screenshot.
This commit is contained in:
@@ -8,7 +8,7 @@ configured in a web wizard on first start. There's no editing of config files by
|
||||
|
||||
- A machine with **Docker** and the **Docker Compose plugin** (Docker Desktop on Windows/macOS,
|
||||
or Docker Engine on Linux).
|
||||
- A few hundred MB of disk and ~1 GB RAM free for the app itself. The optional Download Center
|
||||
- A few hundred MB of disk and ~1 GB RAM free for the app itself. The Files library
|
||||
stores media too — budget disk for whatever you download (it's bounded by per-user quotas you
|
||||
set as admin).
|
||||
- Optional: a domain name + reverse proxy if you want HTTPS / public access (see below).
|
||||
@@ -97,13 +97,13 @@ Only that peer is trusted, so a request sent straight to port `8080` (bypassing
|
||||
app is exposed directly with no proxy. Make sure your proxy actually sets `X-Forwarded-For` (Caddy's
|
||||
`reverse_proxy` and Nginx's `proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for` both do).
|
||||
|
||||
## Download Center (media storage)
|
||||
## Files (media storage)
|
||||
|
||||
The stack includes a **Download Center**: an admin-enabled feature that saves videos to the server
|
||||
The stack includes **Files**: one library that saves videos to the server
|
||||
with yt-dlp (Plex-friendly folders + `.nfo`/poster), lets users trim/crop/join clips, and shares
|
||||
them. It runs two extra containers that come up automatically — a `worker` (the download/edit job
|
||||
loop) and a small `bgutil-pot` sidecar (mints YouTube tokens so downloads aren't bot-blocked). No
|
||||
configuration is required; per-user storage quotas are set on the admin **Downloads → System** page.
|
||||
configuration is required; per-user storage quotas are set on the admin **Users → Storage** tab.
|
||||
|
||||
By default the media lives in a Docker-managed volume (`siftlode_files`). To keep it somewhere
|
||||
you can reach from other apps — e.g. a folder your **Plex** server indexes — point it at a host
|
||||
@@ -164,7 +164,7 @@ then cannot read its own secrets.
|
||||
token and every stored refresh token are encrypted with it *inside* the database. Restore a dump
|
||||
against a different key and those values are lost — you would have to clear the affected rows from
|
||||
`system_config` and re-enter every secret by hand. Keep `.env` beside the dump, and just as private.
|
||||
3. **Downloaded media** *(only if you use the Download Center)* — the `siftlode_files` volume, or
|
||||
3. **Downloaded media** *(only if you use Files)* — the `siftlode_files` volume, or
|
||||
whatever `FILES_HOST_PATH` points at. Not needed to bring the instance back; the jobs and their
|
||||
metadata are in the database, the files themselves are not.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user