Skip to content

Commit

Permalink
Config: Add backup options to the Advanced Settings UI #2495 #4243 #4269
Browse files Browse the repository at this point in the history


Signed-off-by: Michael Mayer <[email protected]>
  • Loading branch information
lastzero committed May 20, 2024
1 parent 0bcbf8e commit 2caf04a
Show file tree
Hide file tree
Showing 67 changed files with 5,688 additions and 3,201 deletions.
192 changes: 124 additions & 68 deletions frontend/src/locales/af.po

Large diffs are not rendered by default.

192 changes: 124 additions & 68 deletions frontend/src/locales/ar.po

Large diffs are not rendered by default.

192 changes: 124 additions & 68 deletions frontend/src/locales/be.po

Large diffs are not rendered by default.

192 changes: 124 additions & 68 deletions frontend/src/locales/bg.po

Large diffs are not rendered by default.

192 changes: 124 additions & 68 deletions frontend/src/locales/ca.po

Large diffs are not rendered by default.

192 changes: 124 additions & 68 deletions frontend/src/locales/cs.po

Large diffs are not rendered by default.

192 changes: 124 additions & 68 deletions frontend/src/locales/da.po

Large diffs are not rendered by default.

195 changes: 124 additions & 71 deletions frontend/src/locales/de.po

Large diffs are not rendered by default.

192 changes: 124 additions & 68 deletions frontend/src/locales/el.po

Large diffs are not rendered by default.

163 changes: 96 additions & 67 deletions frontend/src/locales/en.po

Large diffs are not rendered by default.

195 changes: 124 additions & 71 deletions frontend/src/locales/es.po

Large diffs are not rendered by default.

192 changes: 124 additions & 68 deletions frontend/src/locales/et.po

Large diffs are not rendered by default.

192 changes: 124 additions & 68 deletions frontend/src/locales/eu.po

Large diffs are not rendered by default.

192 changes: 124 additions & 68 deletions frontend/src/locales/fa.po

Large diffs are not rendered by default.

192 changes: 124 additions & 68 deletions frontend/src/locales/fi.po

Large diffs are not rendered by default.

192 changes: 124 additions & 68 deletions frontend/src/locales/fr.po

Large diffs are not rendered by default.

192 changes: 124 additions & 68 deletions frontend/src/locales/he.po

Large diffs are not rendered by default.

195 changes: 124 additions & 71 deletions frontend/src/locales/hi.po

Large diffs are not rendered by default.

192 changes: 124 additions & 68 deletions frontend/src/locales/hr.po

Large diffs are not rendered by default.

192 changes: 124 additions & 68 deletions frontend/src/locales/hu.po

Large diffs are not rendered by default.

192 changes: 124 additions & 68 deletions frontend/src/locales/id.po

Large diffs are not rendered by default.

192 changes: 124 additions & 68 deletions frontend/src/locales/it.po

Large diffs are not rendered by default.

192 changes: 124 additions & 68 deletions frontend/src/locales/ja.po

Large diffs are not rendered by default.

192 changes: 124 additions & 68 deletions frontend/src/locales/ko.po

Large diffs are not rendered by default.

192 changes: 124 additions & 68 deletions frontend/src/locales/ku.po

Large diffs are not rendered by default.

192 changes: 124 additions & 68 deletions frontend/src/locales/lt.po

Large diffs are not rendered by default.

192 changes: 124 additions & 68 deletions frontend/src/locales/ms.po

Large diffs are not rendered by default.

192 changes: 124 additions & 68 deletions frontend/src/locales/nb.po

Large diffs are not rendered by default.

192 changes: 124 additions & 68 deletions frontend/src/locales/nl.po

Large diffs are not rendered by default.

195 changes: 124 additions & 71 deletions frontend/src/locales/pl.po

Large diffs are not rendered by default.

195 changes: 124 additions & 71 deletions frontend/src/locales/pt.po

Large diffs are not rendered by default.

195 changes: 124 additions & 71 deletions frontend/src/locales/pt_BR.po

Large diffs are not rendered by default.

192 changes: 124 additions & 68 deletions frontend/src/locales/ro.po

Large diffs are not rendered by default.

195 changes: 124 additions & 71 deletions frontend/src/locales/ru.po

Large diffs are not rendered by default.

195 changes: 124 additions & 71 deletions frontend/src/locales/sk.po

Large diffs are not rendered by default.

192 changes: 124 additions & 68 deletions frontend/src/locales/sl.po

Large diffs are not rendered by default.

192 changes: 124 additions & 68 deletions frontend/src/locales/sv.po

Large diffs are not rendered by default.

192 changes: 124 additions & 68 deletions frontend/src/locales/th.po

Large diffs are not rendered by default.

192 changes: 124 additions & 68 deletions frontend/src/locales/tr.po

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion frontend/src/locales/translations.json

Large diffs are not rendered by default.

164 changes: 97 additions & 67 deletions frontend/src/locales/translations.pot

Large diffs are not rendered by default.

192 changes: 124 additions & 68 deletions frontend/src/locales/uk.po

Large diffs are not rendered by default.

192 changes: 124 additions & 68 deletions frontend/src/locales/vi.po

Large diffs are not rendered by default.

195 changes: 124 additions & 71 deletions frontend/src/locales/zh.po

Large diffs are not rendered by default.

195 changes: 124 additions & 71 deletions frontend/src/locales/zh_TW.po

Large diffs are not rendered by default.

7 changes: 6 additions & 1 deletion frontend/src/model/config-options.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,12 @@ export class ConfigOptions extends Model {
OriginalsLimit: 0,
Workers: 0,
WakeupInterval: 0,
BackupDatabase: false,
BackupAlbums: true,
BackupDatabase: true,
BackupSchedule: "",
BackupRetain: 3,
SidecarYaml: true,
DisableRestart: true,
DisableWebDAV: config.values.disable.webdav,
DisableSettings: config.values.disable.settings,
DisablePlaces: config.values.disable.places,
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/page/connect.vue
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
<v-btn href="https://my.photoprism.app/dashboard" target="_blank" color="primary-button lighten-2" :block="$vuetify.breakpoint.xsOnly" class="ml-0" outline :disabled="busy">
<translate>Manage Account</translate>
</v-btn>
<v-btn v-if="$config.values.restart" color="primary-button" :block="$vuetify.breakpoint.xsOnly" class="white--text ml-0" depressed :disabled="busy" @click.stop.p.prevent="onRestart">
<v-btn v-if="$config.values.restart && !$config.values.disable.restart" color="primary-button" :block="$vuetify.breakpoint.xsOnly" class="white--text ml-0" depressed :disabled="busy" @click.stop.p.prevent="onRestart">
<translate>Restart</translate>
<v-icon :right="!rtl" :left="rtl" dark>restart_alt</v-icon>
</v-btn>
Expand Down
204 changes: 147 additions & 57 deletions frontend/src/page/settings/advanced.vue

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion internal/commands/backup.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ var backupFlags = []cli.Flag{
},
cli.BoolFlag{
Name: "albums, a",
Usage: "create YAML backup files for album metadata (in the standard backup path if no other path is specified)",
Usage: "create YAML files to back up album metadata (in the standard backup path if no other path is specified)",
},
cli.StringFlag{
Name: "albums-path",
Expand Down
39 changes: 7 additions & 32 deletions internal/commands/show_config_options.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,39 +39,14 @@ func showConfigOptionsAction(ctx *cli.Context) error {
return err
}

type Section struct {
Start string
Title string
Info string
}

s := []Section{
{Start: "PHOTOPRISM_ADMIN_PASSWORD", Title: "Authentication"},
{Start: "PHOTOPRISM_LOG_LEVEL", Title: "Logging"},
{Start: "PHOTOPRISM_CONFIG_PATH", Title: "Storage"},
{Start: "PHOTOPRISM_BACKUP_PATH", Title: "Backups"},
{Start: "PHOTOPRISM_INDEX_WORKERS, PHOTOPRISM_WORKERS", Title: "Index Workers"},
{Start: "PHOTOPRISM_READONLY", Title: "Feature Flags"},
{Start: "PHOTOPRISM_DEFAULT_LOCALE", Title: "Customization"},
{Start: "PHOTOPRISM_SITE_URL", Title: "Site Information"},
{Start: "PHOTOPRISM_HTTPS_PROXY", Title: "Proxy Servers"},
{Start: "PHOTOPRISM_DISABLE_TLS", Title: "Web Server"},
{Start: "PHOTOPRISM_DATABASE_DRIVER", Title: "Database Connection"},
{Start: "PHOTOPRISM_SIPS_BIN", Title: "File Converters"},
{Start: "PHOTOPRISM_DOWNLOAD_TOKEN", Title: "Security Tokens"},
{Start: "PHOTOPRISM_THUMB_LIBRARY", Title: "Thumbnail Generation"},
{Start: "PHOTOPRISM_FACE_SIZE", Title: "Face Recognition",
Info: faceFlagsInfo},
{Start: "PHOTOPRISM_PID_FILENAME", Title: "Daemon Mode",
Info: "If you start the server as a *daemon* in the background, you can additionally specify a filename for the log and the process ID:"},
}
sections := config.OptionsReportSections

j := 0

for i, sec := range s {
fmt.Printf("### %s ###\n\n", sec.Title)
if sec.Info != "" && ctx.Bool("md") {
fmt.Printf("%s\n\n", sec.Info)
for i, section := range sections {
fmt.Printf("### %s ###\n\n", section.Title)
if section.Info != "" && ctx.Bool("md") {
fmt.Printf("%s\n\n", section.Info)
}

secRows := make([][]string, 0, len(rows))
Expand All @@ -83,8 +58,8 @@ func showConfigOptionsAction(ctx *cli.Context) error {
continue
}

if i < len(s)-1 {
if s[i+1].Start == row[0] {
if i < len(sections)-1 {
if sections[i+1].Start == row[0] {
break
}
}
Expand Down
35 changes: 7 additions & 28 deletions internal/commands/show_config_yaml.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,35 +34,14 @@ func showConfigYamlAction(ctx *cli.Context) error {
return err
}

type Section struct {
Start string
Title string
Info string
}

s := []Section{
{Start: "AuthMode", Title: "Authentication"},
{Start: "LogLevel", Title: "Logging"},
{Start: "ConfigPath", Title: "Storage"},
{Start: "IndexWorkers", Title: "Index Workers"},
{Start: "ReadOnly", Title: "Feature Flags"},
{Start: "DefaultTheme", Title: "Customization"},
{Start: "SiteUrl", Title: "Site Information"},
{Start: "HttpsProxy", Title: "Web Server"},
{Start: "DatabaseDriver", Title: "Database Connection"},
{Start: "SipsBin", Title: "File Converters"},
{Start: "DownloadToken", Title: "Security Tokens"},
{Start: "ThumbLibrary", Title: "Thumbnail Generation"},
{Start: "PIDFilename", Title: "Daemon Mode",
Info: "If you start the server as a *daemon* in the background, you can additionally specify a filename for the log and the process ID:"},
}
sections := config.YamlReportSections

j := 0

for i, sec := range s {
fmt.Printf("### %s ###\n\n", sec.Title)
if sec.Info != "" && ctx.Bool("md") {
fmt.Printf("%s\n\n", sec.Info)
for i, section := range sections {
fmt.Printf("### %s ###\n\n", section.Title)
if section.Info != "" && ctx.Bool("md") {
fmt.Printf("%s\n\n", section.Info)
}

secRows := make([][]string, 0, len(rows))
Expand All @@ -74,8 +53,8 @@ func showConfigYamlAction(ctx *cli.Context) error {
continue
}

if i < len(s)-1 {
if s[i+1].Start == row[0] {
if i < len(sections)-1 {
if sections[i+1].Start == row[0] {
break
}
}
Expand Down
4 changes: 4 additions & 0 deletions internal/config/client_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ type Years []int

// ClientDisable represents disabled client features a user cannot turn back on.
type ClientDisable struct {
Restart bool `json:"restart"`
WebDAV bool `json:"webdav"`
Settings bool `json:"settings"`
Places bool `json:"places"`
Expand Down Expand Up @@ -230,6 +231,7 @@ func (c *Config) ClientPublic() ClientConfig {
Settings: c.PublicSettings(),
ACL: acl.Rules.Grants(acl.RoleNone),
Disable: ClientDisable{
Restart: true,
WebDAV: true,
Settings: c.DisableSettings(),
Places: c.DisablePlaces(),
Expand Down Expand Up @@ -319,6 +321,7 @@ func (c *Config) ClientShare() ClientConfig {
Settings: c.ShareSettings(),
ACL: acl.Rules.Grants(acl.RoleVisitor),
Disable: ClientDisable{
Restart: true,
WebDAV: c.DisableWebDAV(),
Settings: c.DisableSettings(),
Places: c.DisablePlaces(),
Expand Down Expand Up @@ -414,6 +417,7 @@ func (c *Config) ClientUser(withSettings bool) ClientConfig {
cfg := ClientConfig{
Settings: s,
Disable: ClientDisable{
Restart: c.DisableRestart(),
WebDAV: c.DisableWebDAV(),
Settings: c.DisableSettings(),
Places: c.DisablePlaces(),
Expand Down
8 changes: 7 additions & 1 deletion internal/config/config_thumb.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,13 @@ func (c *Config) PngSize() int {

// JpegQuality returns the jpeg image quality as thumb.Quality (25-100).
func (c *Config) JpegQuality() thumb.Quality {
return thumb.ParseQuality(c.options.JpegQuality)
if c.options.JpegQuality < 25 {
c.options.JpegQuality = thumb.QualityMedium.Int()
} else if c.options.JpegQuality > 100 {
c.options.JpegQuality = thumb.QualityMax.Int()
}

return thumb.Quality(c.options.JpegQuality)
}

// ThumbLibrary returns the name of the image processing library to be used for generating thumbnails.
Expand Down
28 changes: 10 additions & 18 deletions internal/config/config_thumb_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,27 +21,19 @@ func TestConfig_JpegQuality(t *testing.T) {
c := NewConfig(CliTestContext())

assert.Equal(t, thumb.QualityMedium, c.JpegQuality())
c.options.JpegQuality = "110"
assert.Equal(t, thumb.QualityMedium, c.JpegQuality())
c.options.JpegQuality = "98"
assert.Equal(t, thumb.Quality(98), c.JpegQuality())
c.options.JpegQuality = ""
assert.Equal(t, thumb.QualityMedium, c.JpegQuality())
c.options.JpegQuality = "best "
c.options.JpegQuality = 110
assert.Equal(t, thumb.QualityMax, c.JpegQuality())
c.options.JpegQuality = "high"
assert.Equal(t, thumb.QualityHigh, c.JpegQuality())
c.options.JpegQuality = "med "
c.options.JpegQuality = 98
assert.Equal(t, thumb.Quality(98), c.JpegQuality())
c.options.JpegQuality = -1
assert.Equal(t, thumb.QualityMedium, c.JpegQuality())
c.options.JpegQuality = "medium "
c.options.JpegQuality = 0
assert.Equal(t, thumb.QualityMedium, c.JpegQuality())
c.options.JpegQuality = "low "
assert.Equal(t, thumb.QualityLow, c.JpegQuality())
c.options.JpegQuality = "max"
assert.Equal(t, thumb.QualityMax, c.JpegQuality())
c.options.JpegQuality = "min "
assert.Equal(t, thumb.QualityMin, c.JpegQuality())
c.options.JpegQuality = "default"
c.options.JpegQuality = 25
assert.Equal(t, thumb.Quality(25), c.JpegQuality())
c.options.JpegQuality = 85
assert.Equal(t, thumb.Quality(85), c.JpegQuality())
c.options.JpegQuality = 0
assert.Equal(t, thumb.QualityMedium, c.JpegQuality())
}

Expand Down
26 changes: 13 additions & 13 deletions internal/config/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ var Flags = CliFlags{
}}, {
Flag: cli.BoolFlag{
Name: "sidecar-yaml",
Usage: "create YAML sidecar files to back up index metadata",
Usage: "create YAML sidecar files to back up picture metadata",
EnvVar: EnvVar("SIDECAR_YAML"),
}, DocDefault: "true"}, {
Flag: cli.StringFlag{
Expand Down Expand Up @@ -205,12 +205,12 @@ var Flags = CliFlags{
}}, {
Flag: cli.BoolFlag{
Name: "backup-database",
Usage: "create index backups based on the configured schedule",
Usage: "create regular backups based on the configured schedule",
EnvVar: EnvVar("BACKUP_DATABASE"),
}, DocDefault: "true"}, {
Flag: cli.BoolFlag{
Name: "backup-albums",
Usage: "create YAML backup files for album metadata",
Usage: "create YAML files to back up album metadata",
EnvVar: EnvVar("BACKUP_ALBUMS"),
}, DocDefault: "true"}, {
Flag: cli.IntFlag{
Expand Down Expand Up @@ -245,22 +245,22 @@ var Flags = CliFlags{
}}, {
Flag: cli.BoolFlag{
Name: "read-only, r",
Usage: "disable import, upload, delete, and all other operations that require write permissions",
Usage: "disable features that require write permission for the originals folder",
EnvVar: EnvVar("READONLY"),
}}, {
Flag: cli.BoolFlag{
Name: "experimental, e",
Usage: "enable experimental features",
Usage: "enable new features currently under development",
EnvVar: EnvVar("EXPERIMENTAL"),
}}, {
Flag: cli.BoolFlag{
Name: "disable-settings",
Usage: "disable settings UI and API",
Usage: "disable the user settings interface and server API, e.g. in combination with public mode",
EnvVar: EnvVar("DISABLE_SETTINGS"),
}}, {
Flag: cli.BoolFlag{
Name: "disable-restart",
Usage: "disable restarting the server from the user interface",
Usage: "do not allow admins to restart the server from the user interface",
EnvVar: EnvVar("DISABLE_RESTART"),
}}, {
Flag: cli.BoolFlag{
Expand All @@ -271,17 +271,17 @@ var Flags = CliFlags{
}}, {
Flag: cli.BoolFlag{
Name: "disable-webdav",
Usage: "disable built-in WebDAV server",
Usage: "prevent other apps from accessing PhotoPrism as a shared network drive",
EnvVar: EnvVar("DISABLE_WEBDAV"),
}}, {
Flag: cli.BoolFlag{
Name: "disable-places",
Usage: "disable reverse geocoding and maps",
Usage: "disable interactive world maps and reverse geocoding",
EnvVar: EnvVar("DISABLE_PLACES"),
}}, {
Flag: cli.BoolFlag{
Name: "disable-tensorflow",
Usage: "disable all features depending on TensorFlow",
Usage: "disable features depending on TensorFlow, e.g. image classification and face recognition",
EnvVar: EnvVar("DISABLE_TENSORFLOW"),
}}, {
Flag: cli.BoolFlag{
Expand All @@ -306,7 +306,7 @@ var Flags = CliFlags{
}}, {
Flag: cli.BoolFlag{
Name: "disable-exiftool",
Usage: "disable creating JSON metadata sidecar files with ExifTool",
Usage: "disable metadata extraction with ExifTool (required for full Video, Live Photo, and XMP support)",
EnvVar: EnvVar("DISABLE_EXIFTOOL"),
}}, {
Flag: cli.BoolFlag{
Expand Down Expand Up @@ -351,12 +351,12 @@ var Flags = CliFlags{
}}, {
Flag: cli.BoolFlag{
Name: "detect-nsfw",
Usage: "automatically flag pictures as private that MAY be offensive (requires TensorFlow)",
Usage: "flag newly added pictures as private if they might be offensive (requires TensorFlow)",
EnvVar: EnvVar("DETECT_NSFW"),
}}, {
Flag: cli.BoolFlag{
Name: "upload-nsfw, n",
Usage: "allow uploads that MAY be offensive (no effect without TensorFlow)",
Usage: "allow uploads that might be offensive (detecting unsafe content requires TensorFlow)",
EnvVar: EnvVar("UPLOAD_NSFW"),
}}, {
Flag: cli.StringFlag{
Expand Down
2 changes: 1 addition & 1 deletion internal/config/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ type Options struct {
ThumbSize int `yaml:"ThumbSize" json:"ThumbSize" flag:"thumb-size"`
ThumbSizeUncached int `yaml:"ThumbSizeUncached" json:"ThumbSizeUncached" flag:"thumb-size-uncached"`
ThumbUncached bool `yaml:"ThumbUncached" json:"ThumbUncached" flag:"thumb-uncached"`
JpegQuality string `yaml:"JpegQuality" json:"JpegQuality" flag:"jpeg-quality"`
JpegQuality int `yaml:"JpegQuality" json:"JpegQuality" flag:"jpeg-quality"`
JpegSize int `yaml:"JpegSize" json:"JpegSize" flag:"jpeg-size"`
PngSize int `yaml:"PngSize" json:"PngSize" flag:"png-size"`
FaceSize int `yaml:"-" json:"-" flag:"face-size"`
Expand Down
54 changes: 54 additions & 0 deletions internal/config/report_sections.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package config

// ReportSection represents a group of config options.
type ReportSection struct {
Start string
Title string
Info string
}

var faceFlagsInfo = `!!! info ""
To [recognize faces](https://docs.photoprism.app/user-guide/organize/people/), PhotoPrism first extracts crops from your images using a [library](https://github.com/esimov/pigo) based on [pixel intensity comparisons](https://dl.photoprism.app/pdf/20140820-Pixel_Intensity_Comparisons.pdf). These are then fed into TensorFlow to compute [512-dimensional vectors](https://dl.photoprism.app/pdf/20150101-FaceNet.pdf) for characterization. In the final step, the [DBSCAN algorithm](https://en.wikipedia.org/wiki/DBSCAN) attempts to cluster these so-called face embeddings, so they can be matched to persons with just a few clicks. A reasonable range for the similarity distance between face embeddings is between 0.60 and 0.70, with a higher value being more aggressive and leading to larger clusters with more false positives. To cluster a smaller number of faces, you can reduce the core to 3 or 2 similar faces.
We recommend that only advanced users change these parameters:`

// OptionsReportSections is used to generate config options reports in ../commands/show_config_options.go.
var OptionsReportSections = []ReportSection{
{Start: "PHOTOPRISM_ADMIN_PASSWORD", Title: "Authentication"},
{Start: "PHOTOPRISM_LOG_LEVEL", Title: "Logging"},
{Start: "PHOTOPRISM_CONFIG_PATH", Title: "Storage"},
{Start: "PHOTOPRISM_BACKUP_PATH", Title: "Backup"},
{Start: "PHOTOPRISM_INDEX_WORKERS, PHOTOPRISM_WORKERS", Title: "Index Workers"},
{Start: "PHOTOPRISM_READONLY", Title: "Feature Flags"},
{Start: "PHOTOPRISM_DEFAULT_LOCALE", Title: "Customization"},
{Start: "PHOTOPRISM_SITE_URL", Title: "Site Information"},
{Start: "PHOTOPRISM_HTTPS_PROXY", Title: "Proxy Servers"},
{Start: "PHOTOPRISM_DISABLE_TLS", Title: "Web Server"},
{Start: "PHOTOPRISM_DATABASE_DRIVER", Title: "Database Connection"},
{Start: "PHOTOPRISM_SIPS_BIN", Title: "File Conversion"},
{Start: "PHOTOPRISM_DOWNLOAD_TOKEN", Title: "Security Tokens"},
{Start: "PHOTOPRISM_THUMB_LIBRARY", Title: "Thumbnail Generation"},
{Start: "PHOTOPRISM_FACE_SIZE", Title: "Face Recognition",
Info: faceFlagsInfo},
{Start: "PHOTOPRISM_PID_FILENAME", Title: "Daemon Mode",
Info: "If you start the server as a *daemon* in the background, you can additionally specify a filename for the log and the process ID:"},
}

// YamlReportSections is used to generate config options reports in ../commands/show_config_yaml.go.
var YamlReportSections = []ReportSection{
{Start: "AuthMode", Title: "Authentication"},
{Start: "LogLevel", Title: "Logging"},
{Start: "ConfigPath", Title: "Storage"},
{Start: "BackupPath", Title: "Backup"},
{Start: "IndexWorkers", Title: "Index Workers"},
{Start: "ReadOnly", Title: "Feature Flags"},
{Start: "DefaultTheme", Title: "Customization"},
{Start: "SiteUrl", Title: "Site Information"},
{Start: "HttpsProxy", Title: "Web Server"},
{Start: "DatabaseDriver", Title: "Database Connection"},
{Start: "SipsBin", Title: "File Conversion"},
{Start: "DownloadToken", Title: "Security Tokens"},
{Start: "ThumbLibrary", Title: "Thumbnail Generation"},
{Start: "PIDFilename", Title: "Daemon Mode",
Info: "If you start the server as a *daemon* in the background, you can additionally specify a filename for the log and the process ID:"},
}
1 change: 1 addition & 0 deletions internal/config/testdata/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,4 @@ DatabaseDriver: sqlite
DatabaseDsn: .photoprism.db
Theme: lavendel
Language: english
JpegQuality: 87

0 comments on commit 2caf04a

Please sign in to comment.