photoprism/internal/config/global_flags.go

590 lines
17 KiB
Go
Raw Normal View History

package config
import (
"fmt"
"github.com/klauspost/cpuid/v2"
"github.com/urfave/cli"
"github.com/photoprism/photoprism/internal/entity"
"github.com/photoprism/photoprism/internal/face"
"github.com/photoprism/photoprism/internal/i18n"
"github.com/photoprism/photoprism/internal/thumb"
)
// GlobalFlags describes global command-line parameters and flags.
var GlobalFlags = []cli.Flag{
cli.StringFlag{
Name: "admin-password, pw",
Usage: fmt.Sprintf("initial admin `PASSWORD`, must have at least %d characters", entity.PasswordLen),
EnvVar: "PHOTOPRISM_ADMIN_PASSWORD",
},
cli.StringFlag{
Name: "log-level, l",
Usage: "log message verbosity `LEVEL` (trace, debug, info, warning, error, fatal, panic)",
Value: "info",
EnvVar: "PHOTOPRISM_LOG_LEVEL",
},
cli.BoolFlag{
Name: "debug",
Usage: "enable debug mode, show non-essential log messages",
EnvVar: "PHOTOPRISM_DEBUG",
},
cli.BoolFlag{
Name: "trace",
Usage: "enable trace mode, show all log messages",
EnvVar: "PHOTOPRISM_TRACE",
},
cli.BoolFlag{
Name: "auth, a",
Usage: "always require password authentication, overrides the public flag if it is set",
EnvVar: "PHOTOPRISM_AUTH",
},
cli.BoolFlag{
Name: "public, p",
Usage: "disable password authentication, WebDAV, and the advanced settings page",
EnvVar: "PHOTOPRISM_PUBLIC",
},
2021-02-06 17:04:00 +01:00
cli.BoolFlag{
Name: "test",
Hidden: true,
Usage: "enable test mode",
2021-02-06 17:04:00 +01:00
},
cli.BoolFlag{
Name: "unsafe",
Hidden: true,
Usage: "enable unsafe mode",
EnvVar: "PHOTOPRISM_UNSAFE",
},
2020-12-18 10:59:21 +01:00
cli.BoolFlag{
Name: "demo",
Hidden: true,
Usage: "enable demo mode",
2020-12-18 10:59:21 +01:00
EnvVar: "PHOTOPRISM_DEMO",
},
2021-01-15 18:30:26 +01:00
cli.BoolFlag{
Name: "sponsor",
Hidden: true,
2021-01-19 21:28:16 +01:00
Usage: "your continuous support helps to pay for development and operating expenses",
2021-01-15 18:30:26 +01:00
EnvVar: "PHOTOPRISM_SPONSOR",
},
cli.BoolFlag{
Name: "read-only, r",
Usage: "disable import, upload, delete, and all other operations that require write permissions",
EnvVar: "PHOTOPRISM_READONLY",
},
cli.BoolFlag{
Name: "experimental, e",
Usage: "enable experimental features",
EnvVar: "PHOTOPRISM_EXPERIMENTAL",
},
cli.StringFlag{
Name: "partner-id",
Hidden: true,
Usage: "hosting partner id",
EnvVar: "PHOTOPRISM_PARTNER_ID",
},
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",
},
2020-12-21 15:00:18 +01:00
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",
2020-12-21 15:00:18 +01:00
},
cli.StringFlag{
Name: "originals-path, o",
Usage: "storage `PATH` of your original media files (photos and videos)",
EnvVar: "PHOTOPRISM_ORIGINALS_PATH",
},
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",
},
cli.IntFlag{
Name: "resolution-limit, mp",
Value: 100,
Usage: "maximum resolution of media files in `MEGAPIXELS` (1-900; -1 to disable)",
EnvVar: "PHOTOPRISM_RESOLUTION_LIMIT",
},
cli.StringFlag{
Name: "storage-path, s",
Usage: "writable storage `PATH` for sidecar, cache, and database files",
EnvVar: "PHOTOPRISM_STORAGE_PATH",
},
cli.StringFlag{
Name: "sidecar-path",
Usage: "custom relative or absolute sidecar `PATH` (optional)",
EnvVar: "PHOTOPRISM_SIDECAR_PATH",
},
cli.StringFlag{
Name: "backup-path",
Usage: "custom backup `PATH` for index backup files (optional)",
EnvVar: "PHOTOPRISM_BACKUP_PATH",
},
cli.StringFlag{
Name: "cache-path",
Usage: "custom cache `PATH` for sessions and thumbnail files (optional)",
EnvVar: "PHOTOPRISM_CACHE_PATH",
},
cli.StringFlag{
Name: "import-path",
Usage: "base `PATH` from which files can be imported to originals (optional)",
EnvVar: "PHOTOPRISM_IMPORT_PATH",
},
cli.StringFlag{
Name: "assets-path",
Usage: "assets `PATH` containing static resources like icons, models, and translations",
EnvVar: "PHOTOPRISM_ASSETS_PATH",
},
cli.StringFlag{
Name: "temp-path",
Usage: "temporary file `PATH` (optional)",
EnvVar: "PHOTOPRISM_TEMP_PATH",
},
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,
},
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",
},
cli.IntFlag{
Name: "auto-index",
Usage: "WebDAV auto index safety delay in `SECONDS` (-1 to disable)",
Value: DefaultAutoIndexDelay,
EnvVar: "PHOTOPRISM_AUTO_INDEX",
},
cli.IntFlag{
Name: "auto-import",
Usage: "WebDAV auto import safety delay in `SECONDS` (-1 to disable)",
Value: DefaultAutoImportDelay,
EnvVar: "PHOTOPRISM_AUTO_IMPORT",
},
2020-12-18 10:59:21 +01:00
cli.BoolFlag{
Name: "disable-webdav",
Usage: "disable built-in WebDAV server",
2020-12-18 10:59:21 +01:00
EnvVar: "PHOTOPRISM_DISABLE_WEBDAV",
},
cli.BoolFlag{
Name: "disable-settings",
Usage: "disable settings UI and API",
EnvVar: "PHOTOPRISM_DISABLE_SETTINGS",
},
cli.BoolFlag{
Name: "disable-places",
Usage: "disable reverse geocoding and maps",
EnvVar: "PHOTOPRISM_DISABLE_PLACES",
},
cli.BoolFlag{
Name: "disable-backups",
Usage: "disable backing up albums and photo metadata to YAML files",
EnvVar: "PHOTOPRISM_DISABLE_BACKUPS",
},
cli.BoolFlag{
Name: "disable-tensorflow",
Usage: "disable all features depending on TensorFlow",
EnvVar: "PHOTOPRISM_DISABLE_TENSORFLOW",
},
cli.BoolFlag{
Name: "disable-faces",
Usage: "disable facial recognition",
EnvVar: "PHOTOPRISM_DISABLE_FACES",
},
cli.BoolFlag{
Name: "disable-classification",
Usage: "disable image classification",
EnvVar: "PHOTOPRISM_DISABLE_CLASSIFICATION",
},
cli.BoolFlag{
Name: "disable-ffmpeg",
Usage: "disable video transcoding and thumbnail extraction with FFmpeg",
EnvVar: "PHOTOPRISM_DISABLE_FFMPEG",
},
cli.BoolFlag{
Name: "disable-exiftool",
Usage: "disable creating JSON metadata sidecar files with ExifTool",
EnvVar: "PHOTOPRISM_DISABLE_EXIFTOOL",
},
cli.BoolFlag{
Name: "disable-heifconvert",
Usage: "disable conversion of HEIC/HEIF files",
EnvVar: "PHOTOPRISM_DISABLE_HEIFCONVERT",
},
cli.BoolFlag{
Name: "disable-darktable",
Usage: "disable conversion of RAW files with Darktable",
EnvVar: "PHOTOPRISM_DISABLE_DARKTABLE",
},
cli.BoolFlag{
Name: "disable-rawtherapee",
Usage: "disable conversion of RAW files with RawTherapee",
EnvVar: "PHOTOPRISM_DISABLE_RAWTHERAPEE",
},
cli.BoolFlag{
Name: "disable-sips",
Usage: "disable conversion of RAW files with Sips (macOS only)",
EnvVar: "PHOTOPRISM_DISABLE_SIPS",
},
cli.BoolFlag{
Name: "disable-raw",
Usage: "disable indexing and conversion of RAW files",
EnvVar: "PHOTOPRISM_DISABLE_RAW",
},
cli.BoolFlag{
Name: "raw-presets",
Usage: "enables applying user presets when converting RAW files (reduces performance)",
EnvVar: "PHOTOPRISM_RAW_PRESETS",
},
cli.BoolFlag{
Name: "exif-bruteforce",
Usage: "always perform a brute-force search if no Exif headers were found",
EnvVar: "PHOTOPRISM_EXIF_BRUTEFORCE",
},
cli.BoolFlag{
Name: "detect-nsfw",
Usage: "flag photos as private that may be offensive (requires TensorFlow)",
EnvVar: "PHOTOPRISM_DETECT_NSFW",
},
cli.BoolFlag{
Name: "upload-nsfw, n",
Usage: "allow uploads that may be offensive",
EnvVar: "PHOTOPRISM_UPLOAD_NSFW",
},
cli.StringFlag{
Name: "default-theme",
Usage: "standard user interface theme `NAME`",
Hidden: true,
EnvVar: "PHOTOPRISM_DEFAULT_THEME",
},
cli.StringFlag{
Name: "default-locale, lang",
Usage: "standard user interface language `CODE`",
Value: i18n.Default.Locale(),
EnvVar: "PHOTOPRISM_DEFAULT_LOCALE",
},
cli.StringFlag{
Name: "app-icon",
Usage: "web app `ICON` (logo, app, crisp, mint, bold)",
EnvVar: "PHOTOPRISM_APP_ICON",
},
2021-11-25 17:24:53 +01:00
cli.StringFlag{
Name: "app-name",
Usage: "web app `NAME` when installed on a device",
2021-11-25 17:24:53 +01:00
Value: "PhotoPrism",
EnvVar: "PHOTOPRISM_APP_NAME",
},
cli.StringFlag{
Name: "app-mode",
Usage: "web app `MODE` (fullscreen, standalone, minimal-ui, browser)",
2021-11-25 17:24:53 +01:00
Value: "standalone",
EnvVar: "PHOTOPRISM_APP_MODE",
},
2021-07-05 16:41:43 +02:00
cli.StringFlag{
Name: "cdn-url",
Usage: "content delivery network `URL` (optional)",
2021-07-05 16:41:43 +02:00
EnvVar: "PHOTOPRISM_CDN_URL",
},
cli.StringFlag{
Name: "site-url, url",
Usage: "public site `URL`",
Value: "http://localhost:2342/",
EnvVar: "PHOTOPRISM_SITE_URL",
},
cli.StringFlag{
Name: "site-author",
Usage: "site `OWNER`, copyright, or artist",
EnvVar: "PHOTOPRISM_SITE_AUTHOR",
},
cli.StringFlag{
Name: "site-title",
Usage: "site `TITLE`",
Value: "PhotoPrism",
EnvVar: "PHOTOPRISM_SITE_TITLE",
},
cli.StringFlag{
Name: "site-caption",
Usage: "site `CAPTION`",
Value: "AI-Powered Photos App",
EnvVar: "PHOTOPRISM_SITE_CAPTION",
},
cli.StringFlag{
Name: "site-description",
Usage: "site `DESCRIPTION` (optional)",
EnvVar: "PHOTOPRISM_SITE_DESCRIPTION",
},
cli.StringFlag{
Name: "site-preview",
Usage: "site preview image `URL` (optional)",
EnvVar: "PHOTOPRISM_SITE_PREVIEW",
},
cli.StringFlag{
Name: "imprint",
Usage: "legal `INFO`, displayed in the page footer",
Value: "",
EnvVar: "PHOTOPRISM_IMPRINT",
},
cli.StringFlag{
Name: "imprint-url",
Usage: "legal info `URL` (optional)",
Value: "",
EnvVar: "PHOTOPRISM_IMPRINT_URL",
},
cli.IntFlag{
Name: "http-port, port",
Value: 2342,
Usage: "http server port `NUMBER`",
EnvVar: "PHOTOPRISM_HTTP_PORT",
},
cli.StringFlag{
Name: "http-host, ip",
Usage: "http server `IP` address",
EnvVar: "PHOTOPRISM_HTTP_HOST",
},
cli.StringFlag{
Name: "http-mode, mode",
Usage: "http server `MODE` (debug, release, or test)",
EnvVar: "PHOTOPRISM_HTTP_MODE",
},
2021-01-10 15:28:42 +01:00
cli.StringFlag{
Name: "http-compression, z",
Usage: "http server compression `METHOD` (none or gzip)",
2021-01-10 15:28:42 +01:00
EnvVar: "PHOTOPRISM_HTTP_COMPRESSION",
},
cli.StringFlag{
Name: "database-driver, db",
Usage: "database `DRIVER` (sqlite, mysql)",
Value: "sqlite",
EnvVar: "PHOTOPRISM_DATABASE_DRIVER",
},
cli.StringFlag{
Name: "database-dsn, dsn",
Usage: "database connection `DSN` (sqlite file, optional for mysql)",
EnvVar: "PHOTOPRISM_DATABASE_DSN",
},
cli.StringFlag{
Name: "database-server, db-server",
Usage: "database `HOST` incl. port e.g. \"mariadb:3306\" (or socket path)",
EnvVar: "PHOTOPRISM_DATABASE_SERVER",
},
cli.StringFlag{
Name: "database-name, db-name",
Value: "photoprism",
Usage: "database schema `NAME`",
EnvVar: "PHOTOPRISM_DATABASE_NAME",
},
cli.StringFlag{
Name: "database-user, db-user",
Value: "photoprism",
Usage: "database user `NAME`",
EnvVar: "PHOTOPRISM_DATABASE_USER",
},
cli.StringFlag{
Name: "database-password, db-pass",
Usage: "database user `PASSWORD`",
EnvVar: "PHOTOPRISM_DATABASE_PASSWORD",
},
cli.IntFlag{
Name: "database-conns",
Usage: "maximum `NUMBER` of open database connections",
EnvVar: "PHOTOPRISM_DATABASE_CONNS",
},
cli.IntFlag{
Name: "database-conns-idle",
Usage: "maximum `NUMBER` of idle database connections",
EnvVar: "PHOTOPRISM_DATABASE_CONNS_IDLE",
},
cli.StringFlag{
Name: "darktable-bin",
Usage: "Darktable CLI `COMMAND` for RAW to JPEG conversion",
Value: "darktable-cli",
EnvVar: "PHOTOPRISM_DARKTABLE_BIN",
},
cli.StringFlag{
Name: "darktable-blacklist",
Usage: "do not use Darktable to convert files with these `EXTENSIONS`",
Value: "dng,cr3",
EnvVar: "PHOTOPRISM_DARKTABLE_BLACKLIST",
},
cli.StringFlag{
Name: "darktable-cache-path",
Usage: "custom Darktable cache `PATH`",
Value: "",
EnvVar: "PHOTOPRISM_DARKTABLE_CACHE_PATH",
},
cli.StringFlag{
Name: "darktable-config-path",
Usage: "custom Darktable config `PATH`",
Value: "",
EnvVar: "PHOTOPRISM_DARKTABLE_CONFIG_PATH",
},
cli.StringFlag{
Name: "rawtherapee-bin",
Usage: "RawTherapee CLI `COMMAND` for RAW to JPEG conversion",
Value: "rawtherapee-cli",
EnvVar: "PHOTOPRISM_RAWTHERAPEE_BIN",
},
cli.StringFlag{
Name: "rawtherapee-blacklist",
Usage: "do not use RawTherapee to convert files with these `EXTENSIONS`",
Value: "",
EnvVar: "PHOTOPRISM_RAWTHERAPEE_BLACKLIST",
},
cli.StringFlag{
Name: "sips-bin",
Usage: "Sips `COMMAND` for RAW to JPEG conversion (macOS only)",
Value: "sips",
EnvVar: "PHOTOPRISM_SIPS_BIN",
},
cli.StringFlag{
Name: "heifconvert-bin",
Usage: "HEIC/HEIF image conversion `COMMAND`",
Value: "heif-convert",
EnvVar: "PHOTOPRISM_HEIFCONVERT_BIN",
},
cli.StringFlag{
Name: "ffmpeg-bin",
Usage: "FFmpeg `COMMAND` for video transcoding and thumbnail extraction",
Value: "ffmpeg",
EnvVar: "PHOTOPRISM_FFMPEG_BIN",
},
cli.StringFlag{
Name: "ffmpeg-encoder, vc",
Usage: "FFmpeg AVC encoder `NAME`",
Value: "libx264",
EnvVar: "PHOTOPRISM_FFMPEG_ENCODER",
},
cli.IntFlag{
Name: "ffmpeg-bitrate, vb",
Usage: "maximum FFmpeg encoding `BITRATE` (Mbit/s)",
Value: 50,
EnvVar: "PHOTOPRISM_FFMPEG_BITRATE",
},
cli.StringFlag{
Name: "exiftool-bin",
Usage: "ExifTool `COMMAND` for extracting metadata",
Value: "exiftool",
EnvVar: "PHOTOPRISM_EXIFTOOL_BIN",
},
cli.StringFlag{
Name: "download-token",
Usage: "`SECRET` download URL token for originals (default: random)",
EnvVar: "PHOTOPRISM_DOWNLOAD_TOKEN",
},
cli.StringFlag{
Name: "preview-token",
Usage: "`SECRET` thumbnail and video streaming URL token (default: random)",
EnvVar: "PHOTOPRISM_PREVIEW_TOKEN",
},
cli.StringFlag{
Name: "thumb-color",
Usage: "standard color `PROFILE` for thumbnails (leave blank to disable)",
Value: "sRGB",
EnvVar: "PHOTOPRISM_THUMB_COLOR",
},
cli.StringFlag{
Name: "thumb-filter, filter",
Usage: "image downscaling filter `NAME` (best to worst: blackman, lanczos, cubic, linear)",
Value: "lanczos",
EnvVar: "PHOTOPRISM_THUMB_FILTER",
},
cli.IntFlag{
Name: "thumb-size",
Usage: "maximum size of thumbnails created during indexing in `PIXELS` (720-7680)",
Value: 2048,
EnvVar: "PHOTOPRISM_THUMB_SIZE",
},
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",
},
cli.BoolFlag{
Name: "thumb-uncached, u",
Usage: "enable on-demand creation of missing thumbnails (high memory and cpu usage)",
EnvVar: "PHOTOPRISM_THUMB_UNCACHED",
},
cli.StringFlag{
Name: "jpeg-quality, q",
Usage: "`QUALITY` of created JPEG sidecars and thumbnails (25-100, best, high, default, low, worst)",
Value: thumb.JpegQuality.String(),
EnvVar: "PHOTOPRISM_JPEG_QUALITY",
},
cli.IntFlag{
Name: "jpeg-size",
Usage: "maximum size of created JPEG sidecar files in `PIXELS` (720-30000)",
Value: 7680,
EnvVar: "PHOTOPRISM_JPEG_SIZE",
},
cli.IntFlag{
Name: "face-size",
Usage: "minimum size of faces in `PIXELS` (20-10000)",
Value: face.SizeThreshold,
EnvVar: "PHOTOPRISM_FACE_SIZE",
},
cli.Float64Flag{
Name: "face-score",
Usage: "minimum face `QUALITY` score (1-100)",
Value: face.ScoreThreshold,
EnvVar: "PHOTOPRISM_FACE_SCORE",
},
cli.IntFlag{
Name: "face-overlap",
Usage: "face area overlap threshold in `PERCENT` (1-100)",
Value: face.OverlapThreshold,
EnvVar: "PHOTOPRISM_FACE_OVERLAP",
},
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",
},
cli.IntFlag{
Name: "face-cluster-score",
Usage: "minimum `QUALITY` score of automatically clustered faces (1-100)",
Value: face.ClusterScoreThreshold,
EnvVar: "PHOTOPRISM_FACE_CLUSTER_SCORE",
},
cli.IntFlag{
Name: "face-cluster-core",
Usage: "`NUMBER` of faces forming a cluster core (1-100)",
Value: face.ClusterCore,
EnvVar: "PHOTOPRISM_FACE_CLUSTER_CORE",
},
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",
},
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",
},
cli.StringFlag{
Name: "pid-filename",
Usage: "process id `FILE`, used only in daemon mode",
EnvVar: "PHOTOPRISM_PID_FILENAME",
},
cli.StringFlag{
Name: "log-filename",
Usage: "server log `FILE`, used only in daemon mode",
EnvVar: "PHOTOPRISM_LOG_FILENAME",
Value: "",
},
}