photoprism/internal/config/flags.go
Michael Mayer d198a1d23f Security: Improve rate limit and HTTP proxy configuration #98
Signed-off-by: Michael Mayer <michael@photoprism.app>
2022-10-12 14:57:33 +02:00

681 lines
21 KiB
Go
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package config
import (
"github.com/klauspost/cpuid/v2"
"github.com/urfave/cli"
"github.com/photoprism/photoprism/internal/face"
"github.com/photoprism/photoprism/internal/i18n"
"github.com/photoprism/photoprism/internal/server/header"
"github.com/photoprism/photoprism/internal/thumb"
)
// Flags configures the global command-line interface (CLI) parameters.
var Flags = CliFlags{
{
Flag: cli.StringFlag{
Name: "auth-mode, a",
Usage: "authentication `MODE` (public, password)",
Value: "password",
EnvVar: "PHOTOPRISM_AUTH_MODE",
}}, {
Flag: cli.BoolFlag{
Name: "public, p",
Hidden: true,
Usage: "disable authentication, advanced settings, and WebDAV remote access",
EnvVar: "PHOTOPRISM_PUBLIC",
}}, {
Flag: cli.StringFlag{
Name: "admin-user, login",
Usage: "admin login `USERNAME`",
EnvVar: "PHOTOPRISM_ADMIN_USER",
Value: "admin",
}}, {
Flag: cli.StringFlag{
Name: "admin-password, pw",
Usage: "initial admin `PASSWORD`, must have at least 8 characters",
EnvVar: "PHOTOPRISM_ADMIN_PASSWORD",
}}, {
Flag: cli.Int64Flag{
Name: "sess-maxage",
Value: DefaultSessMaxAge,
Usage: "time in `SECONDS` until user sessions expire automatically (-1 to disable)",
EnvVar: "PHOTOPRISM_SESS_MAXAGE",
}}, {
Flag: cli.Int64Flag{
Name: "sess-timeout",
Value: DefaultSessTimeout,
Usage: "time in `SECONDS` until user sessions expire due to inactivity (-1 to disable)",
EnvVar: "PHOTOPRISM_SESS_TIMEOUT",
}}, {
Flag: cli.StringFlag{
Name: "log-level, l",
Usage: "log message verbosity `LEVEL` (trace, debug, info, warning, error, fatal, panic)",
Value: "info",
EnvVar: "PHOTOPRISM_LOG_LEVEL",
}}, {
Flag: cli.BoolFlag{
Name: "prod",
Hidden: true,
Usage: "enable production mode, hide non-essential log messages",
EnvVar: "PHOTOPRISM_PROD",
}}, {
Flag: cli.BoolFlag{
Name: "debug",
Usage: "enable debug mode, show non-essential log messages",
EnvVar: "PHOTOPRISM_DEBUG",
}}, {
Flag: cli.BoolFlag{
Name: "trace",
Usage: "enable trace mode, show all log messages",
EnvVar: "PHOTOPRISM_TRACE",
}}, {
Flag: cli.BoolFlag{
Name: "test",
Hidden: true,
Usage: "enable test mode",
}}, {
Flag: cli.BoolFlag{
Name: "unsafe",
Hidden: true,
Usage: "disable safety checks",
EnvVar: "PHOTOPRISM_UNSAFE",
}}, {
Flag: cli.BoolFlag{
Name: "demo",
Hidden: true,
Usage: "enable demo mode",
EnvVar: "PHOTOPRISM_DEMO",
}}, {
Flag: cli.BoolFlag{
Name: "sponsor",
Hidden: true,
Usage: "your continuous support helps to pay for development and operating expenses",
EnvVar: "PHOTOPRISM_SPONSOR",
}}, {
Flag: cli.StringFlag{
Name: "partner-id",
Hidden: true,
Usage: "hosting partner id",
EnvVar: "PHOTOPRISM_PARTNER_ID",
}}, {
Flag: cli.StringFlag{
Name: "config-path, c",
Usage: "config storage `PATH`, values in options.yml override CLI flags and environment variables if present",
EnvVar: "PHOTOPRISM_CONFIG_PATH",
}}, {
Flag: cli.StringFlag{
Name: "defaults-yaml, y",
Usage: "load config defaults from `FILE` if exists, does not override CLI flags and environment variables",
Value: "/etc/photoprism/defaults.yml",
EnvVar: "PHOTOPRISM_DEFAULTS_YAML",
}}, {
Flag: cli.StringFlag{
Name: "originals-path, o",
Usage: "storage `PATH` of your original media files (photos and videos)",
EnvVar: "PHOTOPRISM_ORIGINALS_PATH",
}}, {
Flag: cli.IntFlag{
Name: "originals-limit, mb",
Value: 1000,
Usage: "maximum size of media files in `MB` (1-100000; -1 to disable)",
EnvVar: "PHOTOPRISM_ORIGINALS_LIMIT",
}}, {
Flag: cli.IntFlag{
Name: "resolution-limit, mp",
Value: DefaultResolutionLimit,
Usage: "maximum resolution of media files in `MEGAPIXELS` (1-900; -1 to disable)",
EnvVar: "PHOTOPRISM_RESOLUTION_LIMIT",
},
Tags: []string{EnvSponsor},
},
{
Flag: cli.StringFlag{
Name: "storage-path, s",
Usage: "writable storage `PATH` for sidecar, cache, and database files",
EnvVar: "PHOTOPRISM_STORAGE_PATH",
}}, {
Flag: cli.StringFlag{
Name: "sidecar-path, sc",
Usage: "custom relative or absolute sidecar `PATH`*optional*",
EnvVar: "PHOTOPRISM_SIDECAR_PATH",
}}, {
Flag: cli.StringFlag{
Name: "backup-path, ba",
Usage: "custom backup `PATH` for index backup files*optional*",
EnvVar: "PHOTOPRISM_BACKUP_PATH",
}}, {
Flag: cli.StringFlag{
Name: "cache-path, ca",
Usage: "custom cache `PATH` for sessions and thumbnail files*optional*",
EnvVar: "PHOTOPRISM_CACHE_PATH",
}}, {
Flag: cli.StringFlag{
Name: "import-path, im",
Usage: "base `PATH` from which files can be imported to originals*optional*",
EnvVar: "PHOTOPRISM_IMPORT_PATH",
}}, {
Flag: cli.StringFlag{
Name: "import-dest",
Usage: "relative originals `PATH` to which the files should be imported by default*optional*",
EnvVar: "PHOTOPRISM_IMPORT_DEST",
}}, {
Flag: cli.StringFlag{
Name: "assets-path, as",
Usage: "assets `PATH` containing static resources like icons, models, and translations",
EnvVar: "PHOTOPRISM_ASSETS_PATH",
}}, {
Flag: cli.StringFlag{
Name: "temp-path, tmp",
Usage: "temporary file `PATH`*optional*",
EnvVar: "PHOTOPRISM_TEMP_PATH",
}}, {
Flag: cli.IntFlag{
Name: "workers, w",
Usage: "maximum `NUMBER` of indexing workers, default depends on the number of physical cores",
EnvVar: "PHOTOPRISM_WORKERS",
Value: cpuid.CPU.PhysicalCores / 2,
}}, {
Flag: cli.StringFlag{
Name: "wakeup-interval, i",
Usage: "`DURATION` between worker runs required for face recognition and index maintenance (1-86400s)",
Value: DefaultWakeupInterval.String(),
EnvVar: "PHOTOPRISM_WAKEUP_INTERVAL",
}}, {
Flag: cli.IntFlag{
Name: "auto-index",
Usage: "WebDAV auto index safety delay in `SECONDS` (-1 to disable)",
Value: DefaultAutoIndexDelay,
EnvVar: "PHOTOPRISM_AUTO_INDEX",
}}, {
Flag: cli.IntFlag{
Name: "auto-import",
Usage: "WebDAV auto import safety delay in `SECONDS` (-1 to disable)",
Value: DefaultAutoImportDelay,
EnvVar: "PHOTOPRISM_AUTO_IMPORT",
}}, {
Flag: cli.BoolFlag{
Name: "read-only, r",
Usage: "disable import, upload, delete, and all other operations that require write permissions",
EnvVar: "PHOTOPRISM_READONLY",
}}, {
Flag: cli.BoolFlag{
Name: "experimental, e",
Usage: "enable experimental features",
EnvVar: "PHOTOPRISM_EXPERIMENTAL",
}}, {
Flag: cli.BoolFlag{
Name: "disable-webdav",
Usage: "disable built-in WebDAV server",
EnvVar: "PHOTOPRISM_DISABLE_WEBDAV",
}}, {
Flag: cli.BoolFlag{
Name: "disable-settings",
Usage: "disable settings UI and API",
EnvVar: "PHOTOPRISM_DISABLE_SETTINGS",
}}, {
Flag: cli.BoolFlag{
Name: "disable-places",
Usage: "disable reverse geocoding and maps",
EnvVar: "PHOTOPRISM_DISABLE_PLACES",
}}, {
Flag: cli.BoolFlag{
Name: "disable-backups",
Usage: "disable backing up albums and photo metadata to YAML files",
EnvVar: "PHOTOPRISM_DISABLE_BACKUPS",
}}, {
Flag: cli.BoolFlag{
Name: "disable-tensorflow",
Usage: "disable all features depending on TensorFlow",
EnvVar: "PHOTOPRISM_DISABLE_TENSORFLOW",
}}, {
Flag: cli.BoolFlag{
Name: "disable-faces",
Usage: "disable face detection and recognition (requires TensorFlow)",
EnvVar: "PHOTOPRISM_DISABLE_FACES",
}}, {
Flag: cli.BoolFlag{
Name: "disable-classification",
Usage: "disable image classification (requires TensorFlow)",
EnvVar: "PHOTOPRISM_DISABLE_CLASSIFICATION",
}}, {
Flag: cli.BoolFlag{
Name: "disable-ffmpeg",
Usage: "disable video transcoding and thumbnail extraction with FFmpeg",
EnvVar: "PHOTOPRISM_DISABLE_FFMPEG",
}}, {
Flag: cli.BoolFlag{
Name: "disable-exiftool",
Usage: "disable creating JSON metadata sidecar files with ExifTool",
EnvVar: "PHOTOPRISM_DISABLE_EXIFTOOL",
}}, {
Flag: cli.BoolFlag{
Name: "disable-heifconvert",
Usage: "disable conversion of HEIC/HEIF files",
EnvVar: "PHOTOPRISM_DISABLE_HEIFCONVERT",
}}, {
Flag: cli.BoolFlag{
Name: "disable-darktable",
Usage: "disable conversion of RAW files with Darktable",
EnvVar: "PHOTOPRISM_DISABLE_DARKTABLE",
}}, {
Flag: cli.BoolFlag{
Name: "disable-rawtherapee",
Usage: "disable conversion of RAW files with RawTherapee",
EnvVar: "PHOTOPRISM_DISABLE_RAWTHERAPEE",
}}, {
Flag: cli.BoolFlag{
Name: "disable-sips",
Usage: "disable conversion of RAW files with Sips*macOS only*",
EnvVar: "PHOTOPRISM_DISABLE_SIPS",
}}, {
Flag: cli.BoolFlag{
Name: "disable-raw",
Usage: "disable indexing and conversion of RAW files",
EnvVar: "PHOTOPRISM_DISABLE_RAW",
}}, {
Flag: cli.BoolFlag{
Name: "raw-presets",
Usage: "enables applying user presets when converting RAW files (reduces performance)",
EnvVar: "PHOTOPRISM_RAW_PRESETS",
}}, {
Flag: cli.BoolFlag{
Name: "exif-bruteforce",
Usage: "always perform a brute-force search if no Exif headers were found",
EnvVar: "PHOTOPRISM_EXIF_BRUTEFORCE",
}}, {
Flag: cli.BoolFlag{
Name: "detect-nsfw",
Usage: "automatically flag photos as private that MAY be offensive (requires TensorFlow)",
EnvVar: "PHOTOPRISM_DETECT_NSFW",
}}, {
Flag: cli.BoolFlag{
Name: "upload-nsfw, n",
Usage: "allow uploads that MAY be offensive (no effect without TensorFlow)",
EnvVar: "PHOTOPRISM_UPLOAD_NSFW",
}}, {
Flag: cli.StringFlag{
Name: "default-locale, lang",
Usage: "standard user interface language `CODE`",
Value: i18n.Default.Locale(),
EnvVar: "PHOTOPRISM_DEFAULT_LOCALE",
}}, {
Flag: cli.StringFlag{
Name: "default-theme",
Usage: "standard user interface theme `NAME`",
EnvVar: "PHOTOPRISM_DEFAULT_THEME",
},
Tags: []string{EnvSponsor}}, {
Flag: cli.StringFlag{
Name: "app-mode",
Usage: "progressive web app `MODE` (fullscreen, standalone, minimal-ui, browser)",
Value: "standalone",
EnvVar: "PHOTOPRISM_APP_MODE",
}}, {
Flag: cli.StringFlag{
Name: "app-icon",
Usage: "progressive web app `ICON` (logo, app, crisp, mint, bold)",
EnvVar: "PHOTOPRISM_APP_ICON",
},
Tags: []string{EnvSponsor}}, {
Flag: cli.StringFlag{
Name: "app-name",
Usage: "progressive web app `NAME` when installed on a device",
Value: "",
EnvVar: "PHOTOPRISM_APP_NAME",
},
Tags: []string{EnvSponsor}}, {
Flag: cli.StringFlag{
Name: "imprint",
Usage: "legal `INFORMATION`, displayed in the page footer",
Value: "",
EnvVar: "PHOTOPRISM_IMPRINT",
},
Tags: []string{EnvSponsor}}, {
Flag: cli.StringFlag{
Name: "imprint-url",
Usage: "legal information `URL`",
Value: "",
EnvVar: "PHOTOPRISM_IMPRINT_URL",
},
Tags: []string{EnvSponsor}}, {
Flag: cli.StringFlag{
Name: "wallpaper-uri",
Usage: "login screen background image `URI`",
EnvVar: "PHOTOPRISM_WALLPAPER_URI",
Value: "",
},
Tags: []string{EnvSponsor}}, {
Flag: cli.StringFlag{
Name: "cdn-url",
Usage: "content delivery network `URL`",
EnvVar: "PHOTOPRISM_CDN_URL",
},
Tags: []string{EnvSponsor}}, {
Flag: cli.StringFlag{
Name: "site-url, url",
Usage: "public site `URL`",
Value: "http://localhost:2342/",
EnvVar: "PHOTOPRISM_SITE_URL",
}}, {
Flag: cli.StringFlag{
Name: "site-author",
Usage: "site `OWNER`, copyright, or artist",
EnvVar: "PHOTOPRISM_SITE_AUTHOR",
}}, {
Flag: cli.StringFlag{
Name: "site-title",
Usage: "site `TITLE`",
Value: "",
EnvVar: "PHOTOPRISM_SITE_TITLE",
},
Tags: []string{EnvSponsor}}, {
Flag: cli.StringFlag{
Name: "site-caption",
Usage: "site `CAPTION`",
Value: "AI-Powered Photos App",
EnvVar: "PHOTOPRISM_SITE_CAPTION",
}}, {
Flag: cli.StringFlag{
Name: "site-description",
Usage: "site `DESCRIPTION`*optional*",
EnvVar: "PHOTOPRISM_SITE_DESCRIPTION",
}}, {
Flag: cli.StringFlag{
Name: "site-preview",
Usage: "sharing preview image `URL`",
EnvVar: "PHOTOPRISM_SITE_PREVIEW",
}, Tags: []string{EnvSponsor}}, {
Flag: cli.StringSliceFlag{
Name: "trusted-proxy",
Usage: "`CIDR` range from which IP and HTTPS proxy headers can be trusted",
Value: &cli.StringSlice{header.CidrDockerInternal},
EnvVar: "PHOTOPRISM_TRUSTED_PROXY",
}}, {
Flag: cli.StringFlag{
Name: "http-mode, mode",
Usage: "HTTP server `MODE` (debug, release, or test)",
EnvVar: "PHOTOPRISM_HTTP_MODE",
}}, {
Flag: cli.StringFlag{
Name: "http-compression, z",
Usage: "HTTP server compression `METHOD` (none or gzip)",
EnvVar: "PHOTOPRISM_HTTP_COMPRESSION",
}}, {
Flag: cli.StringFlag{
Name: "http-host, ip",
Usage: "HTTP server `IP` address",
EnvVar: "PHOTOPRISM_HTTP_HOST",
}}, {
Flag: cli.IntFlag{
Name: "http-port, port",
Value: 2342,
Usage: "HTTP server port `NUMBER`",
EnvVar: "PHOTOPRISM_HTTP_PORT",
}}, {
Flag: cli.StringFlag{
Name: "auto-tls",
Usage: "`EMAIL` address to enable automatic HTTPS via Let's Encrypt",
EnvVar: "PHOTOPRISM_AUTO_TLS",
Hidden: true,
}}, {
Flag: cli.IntFlag{
Name: "https-port",
Value: 2443,
Usage: "HTTPS server port `NUMBER` if TLS is configured",
EnvVar: "PHOTOPRISM_HTTPS_PORT",
}}, {
Flag: cli.StringSliceFlag{
Name: "https-proxy-header",
Usage: "proxy protocol header `NAME`",
Value: &cli.StringSlice{header.ForwardedProto},
EnvVar: "PHOTOPRISM_HTTPS_PROXY_HEADER",
}}, {
Flag: cli.StringSliceFlag{
Name: "https-proxy-proto",
Usage: "forwarded HTTPS protocol `NAME`",
Value: &cli.StringSlice{header.ProtoHttps},
EnvVar: "PHOTOPRISM_HTTPS_PROXY_PROTO",
}}, {
Flag: cli.IntFlag{
Name: "https-redirect",
Value: 301,
Usage: "status `CODE` when redirecting from HTTP to HTTPS (300-399 or 0 to disable)",
EnvVar: "PHOTOPRISM_HTTPS_REDIRECT",
}}, {
Flag: cli.StringFlag{
Name: "database-driver, db",
Usage: "database `DRIVER` (sqlite, mysql)",
Value: "sqlite",
EnvVar: "PHOTOPRISM_DATABASE_DRIVER",
}}, {
Flag: cli.StringFlag{
Name: "database-dsn, dsn",
Usage: "database connection `DSN` (sqlite file, optional for mysql)",
EnvVar: "PHOTOPRISM_DATABASE_DSN",
}}, {
Flag: cli.StringFlag{
Name: "database-name, db-name",
Value: "photoprism",
Usage: "database schema `NAME`",
EnvVar: "PHOTOPRISM_DATABASE_NAME",
}}, {
Flag: cli.StringFlag{
Name: "database-server, db-server",
Usage: "database `HOST` incl. port e.g. \"mariadb:3306\" (or socket path)",
EnvVar: "PHOTOPRISM_DATABASE_SERVER",
}}, {
Flag: cli.StringFlag{
Name: "database-user, db-user",
Value: "photoprism",
Usage: "database user `NAME`",
EnvVar: "PHOTOPRISM_DATABASE_USER",
}}, {
Flag: cli.StringFlag{
Name: "database-password, db-pass",
Usage: "database user `PASSWORD`",
EnvVar: "PHOTOPRISM_DATABASE_PASSWORD",
}}, {
Flag: cli.IntFlag{
Name: "database-conns",
Usage: "maximum `NUMBER` of open database connections",
EnvVar: "PHOTOPRISM_DATABASE_CONNS",
}}, {
Flag: cli.IntFlag{
Name: "database-conns-idle",
Usage: "maximum `NUMBER` of idle database connections",
EnvVar: "PHOTOPRISM_DATABASE_CONNS_IDLE",
}}, {
Flag: cli.StringFlag{
Name: "darktable-bin",
Usage: "Darktable CLI `COMMAND` for RAW to JPEG conversion",
Value: "darktable-cli",
EnvVar: "PHOTOPRISM_DARKTABLE_BIN",
}}, {
Flag: cli.StringFlag{
Name: "darktable-blacklist",
Usage: "do not use Darktable to convert files with these `EXTENSIONS`",
Value: "",
EnvVar: "PHOTOPRISM_DARKTABLE_BLACKLIST",
}}, {
Flag: cli.StringFlag{
Name: "darktable-cache-path",
Usage: "custom Darktable cache `PATH`",
Value: "",
EnvVar: "PHOTOPRISM_DARKTABLE_CACHE_PATH",
}}, {
Flag: cli.StringFlag{
Name: "darktable-config-path",
Usage: "custom Darktable config `PATH`",
Value: "",
EnvVar: "PHOTOPRISM_DARKTABLE_CONFIG_PATH",
}}, {
Flag: cli.StringFlag{
Name: "rawtherapee-bin",
Usage: "RawTherapee CLI `COMMAND` for RAW to JPEG conversion",
Value: "rawtherapee-cli",
EnvVar: "PHOTOPRISM_RAWTHERAPEE_BIN",
}}, {
Flag: cli.StringFlag{
Name: "rawtherapee-blacklist",
Usage: "do not use RawTherapee to convert files with these `EXTENSIONS`",
Value: "dng",
EnvVar: "PHOTOPRISM_RAWTHERAPEE_BLACKLIST",
}}, {
Flag: cli.StringFlag{
Name: "sips-bin",
Usage: "Sips `COMMAND` for RAW to JPEG conversion*macOS only*",
Value: "sips",
EnvVar: "PHOTOPRISM_SIPS_BIN",
}}, {
Flag: cli.StringFlag{
Name: "sips-blacklist",
Usage: "do not use Sips to convert files with these `EXTENSIONS`*macOS only*",
Value: "avif,avifs",
EnvVar: "PHOTOPRISM_SIPS_BLACKLIST",
}}, {
Flag: cli.StringFlag{
Name: "heifconvert-bin",
Usage: "HEIC/HEIF/AVIF image conversion `COMMAND`",
Value: "heif-convert",
EnvVar: "PHOTOPRISM_HEIFCONVERT_BIN",
}}, {
Flag: cli.StringFlag{
Name: "ffmpeg-bin",
Usage: "FFmpeg `COMMAND` for video transcoding and thumbnail extraction",
Value: "ffmpeg",
EnvVar: "PHOTOPRISM_FFMPEG_BIN",
}}, {
Flag: cli.StringFlag{
Name: "ffmpeg-encoder, vc",
Usage: "FFmpeg AVC encoder `NAME`",
Value: "libx264",
EnvVar: "PHOTOPRISM_FFMPEG_ENCODER",
},
Tags: []string{EnvSponsor}}, {
Flag: cli.IntFlag{
Name: "ffmpeg-bitrate, vb",
Usage: "maximum FFmpeg encoding `BITRATE` (Mbit/s)",
Value: 50,
EnvVar: "PHOTOPRISM_FFMPEG_BITRATE",
}}, {
Flag: cli.StringFlag{
Name: "exiftool-bin",
Usage: "ExifTool `COMMAND` for extracting metadata",
Value: "exiftool",
EnvVar: "PHOTOPRISM_EXIFTOOL_BIN",
}}, {
Flag: cli.StringFlag{
Name: "download-token",
Usage: "`SECRET` download URL token for originals (default: random)",
EnvVar: "PHOTOPRISM_DOWNLOAD_TOKEN",
}}, {
Flag: cli.StringFlag{
Name: "preview-token",
Usage: "`SECRET` thumbnail and video streaming URL token (default: random)",
EnvVar: "PHOTOPRISM_PREVIEW_TOKEN",
}}, {
Flag: cli.StringFlag{
Name: "thumb-color",
Usage: "standard color `PROFILE` for thumbnails (leave blank to disable)",
Value: "sRGB",
EnvVar: "PHOTOPRISM_THUMB_COLOR",
}}, {
Flag: cli.StringFlag{
Name: "thumb-filter, filter",
Usage: "image downscaling filter `NAME` (best to worst: blackman, lanczos, cubic, linear)",
Value: "lanczos",
EnvVar: "PHOTOPRISM_THUMB_FILTER",
}}, {
Flag: cli.IntFlag{
Name: "thumb-size",
Usage: "maximum size of thumbnails created during indexing in `PIXELS` (720-7680)",
Value: 2048,
EnvVar: "PHOTOPRISM_THUMB_SIZE",
}}, {
Flag: cli.IntFlag{
Name: "thumb-size-uncached",
Usage: "maximum size of missing thumbnails created on demand in `PIXELS` (720-7680)",
Value: 7680,
EnvVar: "PHOTOPRISM_THUMB_SIZE_UNCACHED",
}}, {
Flag: cli.BoolFlag{
Name: "thumb-uncached, u",
Usage: "enable on-demand creation of missing thumbnails (high memory and cpu usage)",
EnvVar: "PHOTOPRISM_THUMB_UNCACHED",
}}, {
Flag: cli.StringFlag{
Name: "jpeg-quality, q",
Usage: "a higher value increases the `QUALITY` and file size of JPEG images and thumbnails (25-100)",
Value: thumb.JpegQuality.String(),
EnvVar: "PHOTOPRISM_JPEG_QUALITY",
}}, {
Flag: cli.IntFlag{
Name: "jpeg-size",
Usage: "maximum size of created JPEG sidecar files in `PIXELS` (720-30000)",
Value: 7680,
EnvVar: "PHOTOPRISM_JPEG_SIZE",
}}, {
Flag: cli.IntFlag{
Name: "face-size",
Usage: "minimum size of faces in `PIXELS` (20-10000)",
Value: face.SizeThreshold,
EnvVar: "PHOTOPRISM_FACE_SIZE",
}}, {
Flag: cli.Float64Flag{
Name: "face-score",
Usage: "minimum face `QUALITY` score (1-100)",
Value: face.ScoreThreshold,
EnvVar: "PHOTOPRISM_FACE_SCORE",
}}, {
Flag: cli.IntFlag{
Name: "face-overlap",
Usage: "face area overlap threshold in `PERCENT` (1-100)",
Value: face.OverlapThreshold,
EnvVar: "PHOTOPRISM_FACE_OVERLAP",
}}, {
Flag: cli.IntFlag{
Name: "face-cluster-size",
Usage: "minimum size of automatically clustered faces in `PIXELS` (20-10000)",
Value: face.ClusterSizeThreshold,
EnvVar: "PHOTOPRISM_FACE_CLUSTER_SIZE",
}, Tags: []string{EnvSponsor}}, {
Flag: cli.IntFlag{
Name: "face-cluster-score",
Usage: "minimum `QUALITY` score of automatically clustered faces (1-100)",
Value: face.ClusterScoreThreshold,
EnvVar: "PHOTOPRISM_FACE_CLUSTER_SCORE",
}, Tags: []string{EnvSponsor}}, {
Flag: cli.IntFlag{
Name: "face-cluster-core",
Usage: "`NUMBER` of faces forming a cluster core (1-100)",
Value: face.ClusterCore,
EnvVar: "PHOTOPRISM_FACE_CLUSTER_CORE",
},
Tags: []string{EnvSponsor}}, {
Flag: cli.Float64Flag{
Name: "face-cluster-dist",
Usage: "similarity `DISTANCE` of faces forming a cluster core (0.1-1.5)",
Value: face.ClusterDist,
EnvVar: "PHOTOPRISM_FACE_CLUSTER_DIST",
},
Tags: []string{EnvSponsor}}, {
Flag: cli.Float64Flag{
Name: "face-match-dist",
Usage: "similarity `OFFSET` for matching faces with existing clusters (0.1-1.5)",
Value: face.MatchDist,
EnvVar: "PHOTOPRISM_FACE_MATCH_DIST",
},
Tags: []string{EnvSponsor}}, {
Flag: cli.StringFlag{
Name: "pid-filename",
Usage: "process id `FILE`*daemon-mode only*",
EnvVar: "PHOTOPRISM_PID_FILENAME",
}}, {
Flag: cli.StringFlag{
Name: "log-filename",
Usage: "server log `FILE`*daemon-mode only*",
EnvVar: "PHOTOPRISM_LOG_FILENAME",
Value: "",
}},
}