All LimboMedia configuration is done with parameters either appended to the commandline or put in the configuration file, where commandline overrides file.
java -jar limbomedia.jar lm.dir.data=/opt/limbomediadata lm.http.port=8000
Note that lm.dir.data specifies the DATA_DIR where LimboMedia stores all its data. For simplicity it defaults to INSTALL_DIR/data but it's highly recommended to choose a custom path, so the application is strictly separated from data making updates way easier.
DATA_DIR/limbomedia.cfg
In this file you'll find all available properties with defaults and description (beside the most important ones described here).
The main purpose of LimboMedia is serving files over network to your browser, app and UPnP/DLNA devices. Depending on your needs and your network, you can run it securely in your home network (optionally exposed to the internet via NAT or reverse proxy) or somewhere on a virtual/root server. Since these environments are quite different, make sure you configure LimboMedia accordingly so it's perfectly accessible without security issues.
Empty (default) binds to all addresses, otherwise one specific IPv4 or IPv6 address.
lm.net.bind=192.168.0.20
Own address announced via LAN discovery services (SDDP/UPnP/...) so other devices in LAN can find LimboMedia. Empty means autodetect and should be preferred for simple network setups but might fail for complex setups with multiple NICs, IPs or dual stack. If you experience problems you should specify one specific hostname, IPv4 or IPv6 here where a IPv4 should be preferred for max compatibility even with crappy UPnP devices. If you specified a bind address above this should be usually the same. Default (autodetect):
lm.net.lan.announce=
Your local network is defined via netmasks (IPv4 and IPv6). For security reasons it's very important to set them correctly matching your local network setup. This is required so LimboMedia can differ between LAN and WAN requests and used for protocols like UPnP/DLNA that (sadly) do not support any kind of authentication/security. Requests from within these networks are allowed to access files shared with user LAN in an anonymous way without own authentication. There're multiple ways to define those values:
# Prefix only: /1 to /31 (Matches local vs remote ip address for this number of equals prefix bits)
# Prefix only: /0 and /32 (Special cases with /0 matching everything and /32 matching only exact same address)
# Subnet: 10.0.0.0/32 (Matches remote ip for beeing inside this specific subnet).
Defaults matching the most common home network setups:
lm.net.lan.filter4=/24 lm.net.lan.filter6=/64
When running behind a (reverse) proxy, the proxy MUST pass the real client IP as HTTP header, and the header name (typically "X-Forwarded-For") MUST be configured here, so that LimboMedia can differ between LAN and WAN requests and handle security properly via netmasks. Note that UPnP/DLNA always requires a direct connection between devices (for device/service discovery), so you cannot hide LimboMedia completely behind a proxy in your home network. For sure you can put a proxy in front to expose LimboMedia outside your home network or hide completely behind a proxy when running somewhere in the Internet where UPnP/DLNA doesn't make sense at all. All the other features (webinterface, app, chromecast) work pretty well through a proxy. Default: empty.
lm.net.proxyHeader=X-Forwarded-For
LimboMedia supports http and https. Both connectors can be enabled(true)/disabled(false) separatly and ports configured. The LimboMedia default ports (http 8000, https 8001) differ from official ports (http 80, https 443) cause systems like linux/bsd requires you to be root for ports < 1024. If you want to use secure HTTPS remember to check the security/SSL section. Defaults:
lm.http.enabled=true lm.http.port=8000 lm.https.enabled=true lm.https.port=8001
Enable(true) or disable(false) the DLNA/UPnP service. Requires a properly configured netmask (see above).
lm.upnp.enabled=true
By default LimboMedia uses a build-in self-signed certificate which is included for quick startup but since it's not yours and not signed for your domain it leads to browser warnings. For real security you MUST use your own certificate or configure ACME aka LetsEncrypt. LimboMedia can be configured to read certificates from a PEM file, a JKS (JavaKeyStore) or manage LetsEncrypt certificates, so choose your provider: fallback (default), pem, jks, acme.
lm.cert.provider=fallback
PEM file containing keypair, certificate and optional intermediate certificates (chain).
lm.cert.pem.path=/path/to/pemfile.pem lm.cert.pem.pass=privatekeypassword
Java keystore file containing keypair, certificate and optional intermediate certificates (chain).
lm.cert.jks.path=/path/to/keystore.jks lm.cert.jks.keypass=privatekeypassword lm.cert.jks.storepass=keystorepassword
Your server MUST be reachable under the given domain via HTTP Port 80 for ACME domain validation. Note that it kicks in 1 min after startup followed by checks every hour. The reset parameter is meant to clear/reset all internal ACME related data like registration or keypairs in case you managed to lock/block your account.
lm.cert.acme.url=acme://letsencrypt.org lm.cert.acme.domain=limbomedia.example.com lm.cert.acme.email=info@example.com lm.cert.acme.reset=false
By default LimboMedia uses an embedded H2-Database stored in your DATA_DIR. This is simple, requires no additional database setup and works pretty fine and fast but lacks of backup/recovery/consistency mechanism especially when it comes to unclean/sudden shutdowns.
For power users we recommend to connect to a dedicated MySQL/MariaDB database like this:
lm.db.url=jdbc:mariadb://localhost/limbomain or lm.db.url=jdbc:mysql://localhost/limbomedia lm.db.user=limbomedia lm.db.pw=limbomedia
System logging is everything you see in the console or log/system.log file. It covers startup messages, general system information, external tool (ffmpeg, imageMagick) messages and information about incoming http request. The debug mode might be interesting for troubleshooting, especially for problems with external tools. Developers may choose trace to log incoming http-requests.
Options: error,warn,info,debug,trace
Default: info
lm.log.system=info
Auth logging covers user logins, logouts and authentication and is written to log/auth.log file. The default level warn logs unsuccessful login attempts while info level logs every login- and logout-event for paranoid users.
Options: warn,info
Default: warn
lm.log.auth=warn
Read EXIF image metadata (capture date, orientation, gps) on image upload and filescan. Default is false because scans are about 10 times slower, but information might be useful for future LimboMedia updates when it comes to map view.
lm.image.readExif=true
Chosse between false for the console/no-GUI/headless mode (default for java -jar ... startup) or true for a small GUI window containing logs and a shutdown button (default for windows limbomedia.exe startup).
lm.gui=true
There's a map in LimboMedia allowing you to show where photos were taken, assuming GPS data is stored within these photos. And maybe we'll add more map based features in the future.
While map technology and geodata itself is provided under a free and open license (Thanks to the OpenStreetMap and Leaflet.js project), there's a tiles server required to deliver the actual images and those servers are not available for free.
By default WikiMedia maps is configured for demo purpose and really shouldn't be used for production systems (check their terms of use!). We recommend using a tiles hosting service like MapTiler or Mapbox (both require registration and provide with some free quota) or running your own tiles server like OpenMapTiles. Check the example configuration file on how to configure those two map services.