Settings¶
Settings are stored in the catalog database and apply immediately; no restart is needed. Invalid values are rejected with a message explaining what to change, and nothing is saved when any value in a change is invalid.
library_root¶
The root folder of the Clean library, where imported photos are copied.
- Type:
absolute path, or unset
- Default:
unset (chosen on first import)
- Validation:
must be an absolute path to an existing folder that Picturesque can create files in. Once the library has photos, the folder cannot be changed (photo locations are stored relative to it); moving a library is not supported yet. Writability is checked by creating and removing a temporary file, so read-only mounts and folders without permission are caught.
path_template¶
How photos are arranged inside the library. Tokens in braces are replaced with values from each photo.
- Type:
text
- Default:
{year|Undated}/{date}/{name}.{ext}, for example2026/2026-10-12/IMG_0042.CR3- Validation:
must be a valid template; see Path Templates for the tokens and rules. An invalid template is rejected with a message naming the problem.
sidecar_naming¶
How new XMP sidecars are named (XMP sidecars). Existing sidecars are always updated where they are.
- Type:
file_extensionorbase_name- Default:
file_extension- Values:
file_extensionwritesIMG_0042.CR3.xmp(darktable, digiKam);base_namewritesIMG_0042.xmp(Lightroom, Bridge).
series¶
When photos form a series (Series).
- Type:
object with
max_gap_secondsandmax_distance- Default:
{ "max_gap_seconds": 30, "max_distance": 16 }- Values:
max_gap_seconds: the longest pause between consecutive shots of a series, 1–3600.max_distance: the most perceptual-hash bits a photo may differ from the series’ latest photos, 0–32; lower is stricter (Visual similarity).
Changing it regroups series immediately.
ranking¶
How much each score counts when choosing the best photo of a series (Series).
- Type:
object with
sharpness,exposure,noiseandaesthetic- Default:
{ "sharpness": 0.6, "exposure": 0.3, "noise": 0.1, "aesthetic": 0.4 }- Values:
numbers, zero or more, at least one of the technical weights above zero. Only the ratios matter:
{1, 0, 0, 0}ranks by sharpness alone.aestheticcounts only once the CLIP model has analyzed the photos.
Changing it re-ranks series immediately.
ai¶
Where local AI models run (Local AI).
- Type:
object with
provider- Default:
{ "provider": "auto" }- Values:
auto,cpu,directml,coremlorwebgpu. A provider the build lacks, or that fails to start, falls back to the CPU.
auto_pick¶
Which photos the app marks as keepers (Auto-pick).
- Type:
object with
enabledandmin_quality- Default:
{ "enabled": true, "min_quality": 0.5 }- Values:
min_quality: the combined quality score a photo needs, 0–1 (shown as a percentage in Settings).
Changing it updates the suggestions immediately.
import¶
Watched import folders (Watched folders).
- Type:
object with
rescan_minutes- Default:
{ "rescan_minutes": 5 }- Values:
rescan_minutes: how often watched folders are scanned again, 0–1440 minutes.0scans only when a folder reports a change and when the app starts.
Where settings are stored¶
In the catalog database; see Data Locations.
API¶
get_settingsNo arguments. Returns all settings:
{ "library_root": null, "path_template": "{year|Undated}/{date}/{name}.{ext}", "sidecar_naming": "file_extension", "series": { "max_gap_seconds": 30, "max_distance": 16 }, "ranking": { "sharpness": 0.6, "exposure": 0.3, "noise": 0.1, "aesthetic": 0.4 }, "ai": { "provider": "auto" }, "import": { "rescan_minutes": 5 }, "auto_pick": { "enabled": true, "min_quality": 0.5 } }
update_settingsArguments: any subset of the settings. Unknown fields are rejected. Returns all settings after the change.
$ curl -s -X POST http://127.0.0.1:5174/api/commands/update_settings \ -d '{"library_root": "/does/not/exist"}' {"code":"invalid_arguments","message":"Cannot use `/does/not/exist` as the library folder: it does not exist. Choose an existing folder you can write to."}