Using environment variables with PhotoStructure
You can use environment
variables to configure
PhotoStructure’s settings. The
defaults.env
file describes all of PhotoStructure’s settings, and how to change each with an
environment variable. This file will also be found in your root app directory
(from version 0.9.0 and later) if you’re using a PhotoStructure for
Servers edition.
-
You can edit your
settings.toml
files and set environment variables. -
Environment variables always override any values found in
settings.toml
. -
As of version 2.1 (due to be released soon), PhotoStructure will read from one or more files specified in your
PS_ENV_FILE
environment variable. See below for details.
Environment variable overrides and settings.toml values don’t mix đź”—
PhotoStructure does not write environment variables overrides to your
settings.toml
files.
This is actually by design: previous versions of PhotoStructure didn’t
discriminate between settings.toml
values and environment variable overrides.
As an example, if you had set PS_LOG_LEVEL=debug
and then saved your settings
via the web UI, that debug
value would get persisted and become the new
default log level.
This behavior was surprising and confusing to most beta users. Thanks to the
principle of least
astonishment, we
decided that this was a “bug,” not a “feature,” and changed PhotoStructure to
keep environment variable overrides separated from values stored in the
settings.toml
files.
Boolean settings đź”—
Boolean settings interpret either true
or 1
as true
, and false
or 0
for false
.
For example:
PS_VERIFY_FILE_COPIES=true
Converting between settings names and environment variable names đź”—
To avoid name-colliding with other software, all PhotoStructure environment
variables are prefixed with PS_
and converted to UPPER_SNAKE_CASE
.
Examples đź”—
-
The
PS_LOG_LEVEL
environment variable overrides thelogLevel
setting. -
The
PS_LIBRARY_PATH
environment variable overrides thelibraryPath
setting.
Caution: upgrades to your environment variables are not automatic đź”—
When you upgrade to a new version of PhotoStructure, your prior settings.toml
files are automatically migrated to contain the settings (and defaults) of the
new version, while retaining your custom configurations.
We can’t do this for environment variables, though, as we don’t know where your environment variables are coming from, as they can be set in many different ways.
If you’re using environment variables, it’s up to you to review our release notes and make suitable settings changes when you upgrade. We mark any settings that are deleted, renamed, or have changed semantics with a đź’”.
It also might be helpful to look at differences between version tags on github.
How to set environment variables per OS đź”—
PhotoStructure for Desktops on macOS đź”—
If you’re using PhotoStructure for Desktops on macOS, you can set environment variables with launchctl setenv
.
To disable video transcoding, for example, open a terminal and run:
launchctl setenv PS_TRANSCODE_VIDEOS false
To get the current value, use launchctl getenv
:
launchctl getenv PS_TRANSCODE_VIDEOS
To unset (and use PhotoStructure’s default), use launchctl unsetenv
:
launchctl unsetenv PS_TRANSCODE_VIDEOS
PhotoStructure for Servers on Linux and macOS đź”—
Add environment variables to the relevant RC script for your shell. If you’re using
bash, that’s ~/.profile
:
export PS_LOG_LEVEL=info
PhotoStructure on Windows đź”—
- Hit the
Windows key, and type “environment”, - select “Edit the system environment variables” control panel,
- click the
Environment Variables...
button in the bottom right, and - click the top
New...
button. Pick the topNew...
button if you’re using PhotoStructure for Desktops. If you’re running PhotoStructure as a system service, pick the bottomNew...
button.
Docker đź”—
With docker, use
--env
or --env-file
:
docker run docker run --name photostructure --env PS_LOG_LEVEL=info ...
With docker-compose, use the
environment
or env_file
configuration option
...
environment:
- "PS_LOG_LEVEL=info"
...
Support for .env
files đź”—
Version 2023 and later added support for reading .env
files via the new PS_ENV_FILE
environment variable.
On startup, PhotoStructure will attempt to read .env files from the following paths:
/.psenv
(if exists and is readable)$HOME/.psenv
(if exists and is readable)$PS_ENV
(if set to a full pathname that is readable)$PS_ENV_FILE
(if set to a full pathname that is readable)
PhotoStructure reads from $PSENV
, $PS_ENV
and $PS_ENV_FILE
just to try to accommodate typos.
Note that if the same key is defined in multiple .env
files, the last defined value will “win.”
.env
file format đź”—
PhotoStructure reads standard .env
-formatted files.
- Any
#
outside of quotes is considered the start of a comment. - Values should be wrapped in double-quotes.
- Newlines can be encoded as “\n”, or as actual newlines in the text file.
- Save your .env as UTF8 without a BOM.
# This is a comment.
PS_LIBRARY_DIR="/path/to your/library"
PS_LOG_LEVEL="info"
# You can add backslash-n as a newline character like this
MULTI_LINE0="first line\nsecond line"
# Or if you prefer (but this is not valid shell):
MULTI_LINE1="this is
also a valid
multi line value"
Note that parameter expansion or other shell constructs, like conditionals, are not supported.