13 unstable releases (3 breaking)
0.4.3 | Oct 25, 2022 |
---|---|
0.4.2 | Sep 10, 2022 |
0.3.3 | May 26, 2022 |
0.3.0 | Apr 27, 2022 |
0.1.1 | Mar 3, 2022 |
#178 in Multimedia
50KB
1.5K
SLoC
dexr
A directory indexer with thumbnails, previews, and slideshow functionality.
It's meant to be a faster and more lightweight version of Lars Jung's H5AI.
Features
*
= requires JS
- Basic page fully server-side rendered
- Minimal interface without excessive styling
- Effort made to be as accessible as possible (please email me if you see anything that can be improved!)
- Thumbnails for most images and videos
- Cached in a configurable temporary directory
- Sorting
- *In-page previews for images and videos
- Supports keyboard-based usage: left and right arrows, Home, End
- *Slideshow
- Activated via keyboard (
s
) or mouse - Custom interval
- Activated via keyboard (
Configuration
Configuration is placed in a file called dexr.toml
in the working directory of the executable, and can also be specified with environment variables.
The environment variables are named DEXR_<SCREAMING_SNAKE_CASE_KEY>
, so for example the address
field would be DEXR_ADDRESS
. If a key is specified in both locations, the environment variable takes precedence.
The following keys can be used for configuration:
Key | Type | Default | Meaning | Example/Possible Values |
---|---|---|---|---|
address |
See below | None | The address for the server to listen on | "tcp://127.0.0.1:3000" |
index_root |
Path | None | The directory that will be indexed | "/srv/my-public-files" |
thumbnail_tmp |
Path | None | The location of the thumbnail cache* | "/var/tmp/dexr-thumbnails" |
exclude_dotfiles |
Boolean | true |
Whether to hide dotfiles in indexes and return 404 if accessed | false |
address
format
The address can be a TCP address or a Unix socket path. A TCP address is in the format tcp://<host>:<port>
, like tcp://127.0.0.1:3000
. A Unix socket is in the format unix://<path to socket>
, like unix:///tmp/indexer/socket.sock
. If no protocol prefix (<protocol>://
) is specified, as in localhost:3000
, it defaults to a TCP address.
thumbnail_tmp
note
You should probably use a non-volatile temporary directory (/var/tmp
rather than /tmp
) to avoid regenerating thumbnails unnecessarily.
GStreamer
We use gstreamer for thumbnail generation. We suggest the following gstreamer plugins to support the most possible media:
gst-libav
gst-plugins-bad
gst-plugins-base
gst-plugins-good
gst-plugins-openh264
gst-plugins-ugly
The package names may differ on your distribution; the above names are from Arch Linux. For example, on Debian the package names are prefixed with gstreamer1.0
rather than gst
.
Rewrite
This is a rewrite of https://git.matt.felle.nz/matt/indexer, using axum instead of actix, as well as a couple other differences:
- We use gstreamer exclusively for thumbnail generation, rather than a combination of
vid2img
(which used gstreamer under the hood) andimage
. Gstreamer is a lot faster for some reason. - Sorting is done on the server.
- Some configuration options have been removed (thumbnail size, directory size format)
Dependencies
~21–31MB
~524K SLoC