Skip to content

Configuration file

This page lists every setting in config.toml. For where the file lives, how config.toml and runtime-overrides.toml layer, and how to apply a change, see Configuration basics. Most of these settings also have a control in the admin interface, covered in the User Manual.

A row marked (live) is applied at once when you change it in the admin interface, which saves it to runtime-overrides.toml and updates the running frame in place. Every other change needs a restart. Editing config.toml by hand is a different matter: the file is read only at startup, so any hand-edit needs a restart, even for a (live) field. Durations are written as Go duration strings, such as 500ms, 120s, 10m, or 2h.

KeyTypeDefaultDescription
addrstring:80HTTP listen address. Port 80 keeps the hostname-only URL and the captive-portal probe working.
log_levelstringinfoLogging verbosity: debug, info, warn, or error. (live)
bluetooth_adapterstringhci0HCI device for Bluetooth sensors.

See Slideshow & display.

KeyTypeDefaultDescription
blank_afterduration20mIdle time with no motion before the screen blanks. 0s disables it. Needs a motion sensor. (live)
backendstringwlopmScreen-power backend, wlopm or vcgencmd. Switching it means re-running the installer.
outputstring(auto)Wayland connector for the wlopm backend, such as HDMI-A-1.
localestringen-USBCP-47 locale for the clock and date on the frame. (live)

Captions under the readings on the frame. An empty value hides that caption. (live)

KeyTypeDefaultDescription
outsidestring(empty)Caption for the outside reading.
insidestring(empty)Caption for the inside reading.
humiditystring(empty)Caption for the humidity reading.
KeyTypeDefaultDescription
intervalduration120sHow long each photo shows before advancing. (live)
randomizebooleanfalseShuffle the order on each full cycle. (live)
images_dirstringimagesRoot folder for image storage.

See Photos.

KeyTypeDefaultDescription
backendstringfsfs for local uploads, or immich to sync a shared Immich album.

Used only when backend = "immich".

KeyTypeDefaultDescription
share_urlstring(empty)Immich shared-album link. Required for the immich backend.
share_passwordstring(empty)Share password, exchanged for a session token on Immich 2.6.0 and newer.
sync_intervalduration15mHow often to reconcile with the album.

One block per sensor. See Sensors. Every sensor needs a unique id, and each role plus kind pair must be unique across all sensors.

KeyTypeDefaultDescription
idstringrequiredUnique name for the sensor.
typestringrequiredble, mqtt-subscriber, or mock.
rolestring(id)Groups readings by place, such as inside or outside.

Reading kinds are temperature, humidity, and motion.

KeyTypeDefaultDescription
macstringrequiredDevice MAC address.
address_typestring(empty)public or random.
poll_intervalduration80sFallback read interval between notifications.
reset_afterdurationdisabledPower-cycle the Bluetooth adapter after connecting fails this long. 0s disables.

Each [[sensor.characteristic]] maps one GATT characteristic:

KeyTypeDefaultDescription
uuidstringrequiredGATT characteristic UUID.
kindstringrequiredReading kind this characteristic provides.
decoderstringrequiredDecoder for the raw bytes (see below).

Requires [mqtt].broker.

KeyTypeDefaultDescription
topicstringrequiredMQTT topic to read.
kindstringrequiredReading kind this topic provides.
parserstringrequiredPayload decoder (see below).
json_fieldstring(empty)Dotted path into a JSON payload, such as main.temp. Objects only.
KeyTypeDefaultDescription
poll_intervalduration(none)How often to emit a reading.

Each [[sensor.mock_reading]]:

KeyTypeDefaultDescription
kindstringrequiredReading kind.
valuefloat0Starting value.
deltafloat0Added to value after each full cycle. 0 holds it constant.

A Bluetooth decoder and an MQTT parser draw from the same set:

NameUse
int16le_div100Little-endian signed 16-bit integer ÷ 100 (234523.45).
uint16be_div10Big-endian unsigned 16-bit integer ÷ 10 (48548.5).
bool_nonzeroAny non-zero byte becomes 1.
raw_floatText holding a number, such as 23.4.
raw_intText holding an integer, such as 42.
onoff_to_boolON, on, true, or 1 become 1, anything else 0.

See Weather.

KeyTypeDefaultDescription
api_keystring(empty)OpenWeatherMap API key. Empty disables weather.
latfloat0.0Latitude in decimal degrees.
lonfloat0.0Longitude in decimal degrees.
poll_intervalduration10mHow often to fetch conditions. (live)
retry_intervalduration30sFirst delay after a failed fetch, backing off up to poll_interval. (live)
unitsstringmetricstandard (K), metric (°C), or imperial (°F).

Connection shared by the bridge and MQTT sensors. See Home Assistant. A connection opens only when the bridge is enabled or an MQTT sensor exists.

KeyTypeDefaultDescription
brokerstring(empty)tcp:// or ssl:// host and port.
usernamestring(empty)Broker username, if required.
passwordstring(empty)Broker password, if required.
client_idstringpicture-frameClient identifier. Keep it unique per frame.

Outbound Home Assistant auto-discovery.

KeyTypeDefaultDescription
enabledbooleanfalsePublish sensors and the screen switch to Home Assistant.
node_idstringpicture_frameDevice id and unique-id prefix, distinct per frame.
base_topicstringpicture-frameNamespace for state, command, and availability topics.
discovery_prefixstringhomeassistantMust match Home Assistant’s MQTT discovery prefix.
stale_afterduration10mMark a sensor offline if no reading arrives within this. 0s disables.

See Wi-Fi.

KeyTypeDefaultDescription
ap_ssidstringPictureFrameRecovery hotspot name. Clear to disable the fallback.
ap_passwordstring(empty)Hotspot WPA2 passphrase. Empty means an open hotspot.
ap_timeout_minutesinteger3Minutes off-network before the hotspot is raised.
scan_interval_minutesinteger5Minutes between scans for a known network while the hotspot is up.

See Security.

KeyTypeDefaultDescription
password_hashstring(empty)bcrypt hash of the admin password. Empty leaves the interface open. Set from the admin interface, not by hand.

See Software updates.

KeyTypeDefaultDescription
auto_updatebooleantrueInstall same-line updates overnight.
update_hourinteger2Local hour (0–23) for the scheduled check and install.
github_repostring(empty)Release source as owner/name. Empty tracks the official releases.
github_tokenstring(empty)Authenticates a private release source (the PF_GITHUB_TOKEN environment variable also works).

Built with Starlight