From b43c4a7b6c066e3240e89b3b38018970708ca83c Mon Sep 17 00:00:00 2001 From: "Patrik J. Braun" Date: Mon, 28 Jul 2025 23:54:58 +0200 Subject: [PATCH] update MANPAGE.md --- MANPAGE.md | 1007 ++++++++++++++++------------------------------------ 1 file changed, 303 insertions(+), 704 deletions(-) diff --git a/MANPAGE.md b/MANPAGE.md index d64dbe22..f859fd28 100644 --- a/MANPAGE.md +++ b/MANPAGE.md @@ -37,8 +37,6 @@ App CLI options: --Server-sessionTimeout Users kept logged in for this long time. (default: 604800000) --Server-port Port number. Port 80 is usually what you need. (default: 80) --Server-host Server will accept connections from this IPv6 or IPv4 address. (default: '0.0.0.0') - --Server-Threading-enabled [Deprecated, will be removed in the next release] Runs directory scanning and thumbnail generation in a different thread. (default: false) - --Server-Threading-thumbnailThreads Number of threads that are used to generate thumbnails. If 0, number of 'CPU cores -1' threads will be used. (default: 0) --Server-Log-level Logging level. (default: 'info') --Server-Log-sqlLevel Logging level for SQL queries. (default: 'error') --Server-Log-logServerTiming If enabled, the app adds "Server-Timing" http header to the response. (default: false) @@ -48,6 +46,7 @@ App CLI options: --Gallery-enableCache Caches directory contents and search results for better performance. (default: true) --Gallery-enableOnScrollRendering Those thumbnails get higher priority that are visible on the screen. (default: true) --Gallery-enableDirectorySortingByDate If enabled, directories will be sorted by date, like photos, otherwise by name. Directory date is the last modification time of that directory not the creation date of the oldest photo. (default: false) + --Gallery-ignoreTimestampOffset If enabled, timestamp offsets are ignored, meaning that the local times of pictures are used for searching, sorting and grouping. If disabled, global time is used and pictures with no timestamp are assumed to be in UTC (offset +00:00). (default: true) --Gallery-enableOnScrollThumbnailPrioritising Those thumbnails will be rendered first that are in view. (default: true) --Gallery-NavBar-enableDownloadZip Enable download zip of a directory contents Directory flattening. (Does not work for searches.) (default: false) --Gallery-NavBar-enableDirectoryFlattening Adds a button to flatten the file structure, by listing the content of all subdirectories. (Won't work if the gallery has multiple folders with the same path.) (default: false) @@ -70,19 +69,17 @@ App CLI options: --Gallery-Lightbox-captionAlwaysOn If enabled, lightbox will always show caption by default, not only on hover. (default: false) --Gallery-Lightbox-facesAlwaysOn If enabled, lightbox will always show faces by default, not only on hover. (default: false) --Gallery-Lightbox-loopVideos If enabled, lightbox will loop videos by default. (default: false) + --Gallery-Lightbox-loadFullImageOnZoom Enables loading the full resolution image on zoom in the ligthbox (preview). (default: true) + --Gallery-Lightbox-Titles-topLeftTitle (default: 'title') + --Gallery-Lightbox-Titles-topLeftSubtitle (default: 'caption') + --Gallery-Lightbox-Titles-bottomLeftTitle (default: 'location') + --Gallery-Lightbox-Titles-bottomLeftSubtitle (default: 'persons') --Gallery-Themes-enabled Enable themes and color modes. (default: true) --Gallery-Themes-defaultMode Sets the default theme mode that is used for the application. (default: 'auto') --Gallery-Themes-selectedTheme Selected theme to use on the site. (default: 'classic') --Gallery-Themes-availableThemes Adds these css settings as it is to the end of the body tag of the page. (default: [{"name":"classic","theme":":root nav.navbar {\n--bs-navbar-color: rgba(255, 255, 255, 0.55);\n--bs-navbar-hover-color: rgba(255, 255, 255, 0.75);\n--bs-navbar-disabled-color: rgba(255, 255, 255, 0.25);\n--bs-navbar-active-color: #fff;\n--bs-navbar-brand-color: #fff;\n--bs-navbar-brand-hover-color: #fff;\n--bs-bg-opacity: 1;\nbackground-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}"}]) --Gallery-InlineBlogStartsOpen Makes inline blog (*.md files content) auto-open. (default: false) - --Gallery-TopBlogStartsOpen Makes inline blog (*.md files content) auto-open. (default: false) - --Media-Thumbnail-iconSize Icon size (used on maps). (default: 45) - --Media-Thumbnail-personThumbnailSize Person (face) thumbnail size. (default: 200) - --Media-Thumbnail-thumbnailSizes Size of the thumbnails. The best matching size will be generated. More sizes give better quality, but use more storage and CPU to render. If size is 240, that shorter side of the thumbnail will have 160 pixels. (default: [240,480]) - --Media-Thumbnail-useLanczos3 if true, 'lanczos3' will used to scale photos, otherwise faster but lower quality 'nearest'. (default: true) - --Media-Thumbnail-quality Between 0-100. (default: 80) - --Media-Thumbnail-smartSubsample Use high quality chroma subsampling in webp. See: https://sharp.pixelplumbing.com/api-output#webp. (default: true) - --Media-Thumbnail-personFaceMargin This ratio of the face bounding box will be added to the face as a margin. Higher number add more margin. (default: 0.7) + --Gallery-TopBlogStartsOpen Makes top blog (*.md files content) auto-open. (default: false) --Media-Video-enabled (default: true) --Media-Video-supportedFormatsWithTranscoding Video formats that are supported after transcoding (with the built-in ffmpeg support). (default: ["avi","mkv","mov","wmv","flv","mts","m2ts","mpg","3gp","m4v","mpeg","vob","divx","xvid","ts"]) --Media-Video-supportedFormats Video formats that are supported also without transcoding. Browser supported formats: https://www.w3schools.com/html/html5_video.asp (default: ["mp4","webm","ogv","ogg"]) @@ -96,11 +93,15 @@ App CLI options: --Media-Video-transcoding-preset A preset is a collection of options that will provide a certain encoding speed to compression ratio. A slower preset will provide better compression (compression is quality per filesize). (default: 'medium') --Media-Video-transcoding-customOutputOptions It will be sent to ffmpeg as it is, as custom output options. (default: []) --Media-Video-transcoding-customInputOptions It will be sent to ffmpeg as it is, as custom input options. (default: []) - --Media-Photo-Converting-enabled Enable photo converting. (default: true) - --Media-Photo-Converting-loadFullImageOnZoom Enables loading the full resolution image on zoom in the ligthbox (preview). (default: true) - --Media-Photo-Converting-onTheFly Converts photos on the fly, when they are requested. (default: true) - --Media-Photo-Converting-resolution The shorter edge of the converted photo will be scaled down to this, while keeping the aspect ratio. (default: 1080) - --Media-Photo-supportedFormats Photo formats that are supported. Browser needs to support these formats natively. Also sharp (libvips) package should be able to convert these formats. (default: ["gif","jpeg","jpg","jpe","png","webp","svg"]) + --Media-Photo-iconSize Icon size (used on maps). (default: 45) + --Media-Photo-personThumbnailSize Person (face) thumbnail size. (default: 200) + --Media-Photo-thumbnailSizes Size of the thumbnails and photo previews. The best matching size will be used (smaller for photo and video thumbnail, bigger for photo preview). More sizes give better quality, but use more storage and CPU to render. If size is 240, that shorter side of the thumbnail will be 240 pixels. (default: [320,540,1080,2160]) + --Media-Photo-supportedFormats Photo formats that are supported. Browser needs to support these formats natively. Also sharp (libvips) package should be able to convert these formats. (default: ["gif","jpeg","jpg","jpe","png","webp","svg","avif","heic","dng","arw"]) + --Media-Photo-useLanczos3 if true, 'lanczos3' will used to scale photos, otherwise faster but lower quality 'nearest'. (default: true) + --Media-Photo-quality Between 0-100. (default: 80) + --Media-Photo-smartSubsample Use high quality chroma subsampling in webp. See: https://sharp.pixelplumbing.com/api-output#webp. (default: true) + --Media-Photo-personFaceMargin This ratio of the face bounding box will be added to the face as a margin. Higher number add more margin. (default: 0.7) + --Media-Photo-animateGif Converts Gif to animated webp. (default: true) --Media-folder Images are loaded from this folder (read permission required) (default: 'demo/images') --Media-tempFolder Thumbnails, converted photos, videos will be stored here (write permission required) (default: 'demo/tmp') --Media-photoMetadataSize Only this many bites will be loaded when scanning photo/video for metadata. Increase this number if your photos shows up as square. (default: 524288) @@ -130,7 +131,7 @@ App CLI options: --Search-listDirectories Search returns also with directories, not just media. (default: false) --Search-listMetafiles Search also returns with metafiles from directories that contain a media file of the matched search result. (default: true) --Sharing-enabled Enables sharing. (default: true) - --Sharing-passwordProtected Enables password protected sharing links. (default: true) + --Sharing-passwordRequired Requires password protected sharing links. (default: false) --Sharing-updateTimeout After creating a sharing link, it can be updated for this long. (default: 300000) --Map-enabled (default: true) --Map-useImageMarkers Map will use thumbnail images as markers instead of the default pin. (default: true) @@ -138,13 +139,17 @@ App CLI options: --Map-mapboxAccessToken MapBox needs an access token to work, create one at https://www.mapbox.com. (default: '') --Map-customLayers The map module will use these urls to fetch the map tiles. (default: [{"name":"street","url":"","darkLayer":false}]) --Map-maxPreviewMarkers Maximum number of markers to be shown on the map preview on the gallery page. (default: 50) - --Map-MapPathGroupConfig Markers are grouped and themed by these settings (default: [{"name":"Transportation","matchers":[{"matchers":["flight","flying"],"theme":{"color":"var(--bs-orange)","dashArray":"4 8","svgIcon":{"viewBox":"0 0 567 512","items":""}}},{"matchers":["drive","driving"],"theme":{"color":"var(--bs-orange)","dashArray":"4 8","svgIcon":{"viewBox":"0 0 640 512","items":""}}},{"matchers":["ship","sailing","cruise"],"theme":{"color":"var(--bs-orange)","dashArray":"4 8","svgIcon":{"viewBox":"0 0 576 512","items":""}}}]},{"name":"Sport","matchers":[{"matchers":["run"],"theme":{"color":"var(--bs-primary)","dashArray":"","svgIcon":{"viewBox":"0 0 417 512","items":""}}},{"matchers":["walk"],"theme":{"color":"var(--bs-primary)","dashArray":"","svgIcon":{"viewBox":"0 0 320 512","items":""}}},{"matchers":["hike","hiking"],"theme":{"color":"var(--bs-primary)","dashArray":"","svgIcon":{"viewBox":"0 0 384 512","items":""}}},{"matchers":["bike","biking","cycling"],"theme":{"color":"var(--bs-primary)","dashArray":"","svgIcon":{"viewBox":"0 0 640 512","items":""}}},{"matchers":["skiing","ski"],"theme":{"color":"var(--bs-primary)","dashArray":"","svgIcon":{"viewBox":"0 0 512 512","items":""}}}]},{"name":"Other paths","matchers":[{"matchers":[],"theme":{"color":"var(--bs-secondary)","dashArray":"","svgIcon":{"viewBox":"0 0 512 512","items":""}}}]}]) + --Map-MapPathGroupConfig Markers are grouped and themed by these settings (default: [{"name":"Transportation","matchers":[{"matchers":["flight","flying"],"theme":{"color":"var(--bs-orange)","dashArray":"4 8","svgIcon":{"viewBox":"0 0 567 512","items":""}}},{"matchers":["drive","driving"],"theme":{"color":"var(--bs-orange)","dashArray":"4 8","svgIcon":{"viewBox":"0 0 640 512","items":""}}},{"matchers":["ship","sailing","cruise"],"theme":{"color":"var(--bs-orange)","dashArray":"4 8","svgIcon":{"viewBox":"0 0 576 512","items":""}}}]},{"name":"Sport","matchers":[{"matchers":["(\b|_|-)run"],"theme":{"color":"var(--bs-primary)","dashArray":"","svgIcon":{"viewBox":"0 0 417 512","items":""}}},{"matchers":["(\b|_|-)walk"],"theme":{"color":"var(--bs-primary)","dashArray":"","svgIcon":{"viewBox":"0 0 320 512","items":""}}},{"matchers":["(\b|_|-)hike","(\b|_|-)hiking"],"theme":{"color":"var(--bs-primary)","dashArray":"","svgIcon":{"viewBox":"0 0 384 512","items":""}}},{"matchers":["(\b|_|-)bike","(\b|_|-)biking","(\b|_|-)cycling"],"theme":{"color":"var(--bs-primary)","dashArray":"","svgIcon":{"viewBox":"0 0 640 512","items":""}}},{"matchers":["(\b|_|-)skiing","(\b|_|-)ski"],"theme":{"color":"var(--bs-primary)","dashArray":"","svgIcon":{"viewBox":"0 0 512 512","items":""}}}]},{"name":"Other paths","matchers":[{"matchers":[],"theme":{"color":"var(--bs-secondary)","dashArray":"","svgIcon":{"viewBox":"0 0 512 512","items":""}}}]}]) --Map-bendLongPathsTrigger Map will bend the path if two points are this far apart on latititude axes. This intended to bend flight if only the end and the start points are given. (default: 0.5) --Faces-enabled (default: true) --Faces-keywordsToPersons If a photo has the same face (person) name and keyword, the app removes the duplicate, keeping the face only. (default: true) --Faces-writeAccessMinRole Required minimum right to star (favourite) a face. (default: 'Admin') --Faces-readAccessMinRole Required minimum right to show the faces tab. (default: 'User') --RandomPhoto-enabled Enables random link generation. (default: true) + --Extensions-enabled (default: true) + --Extensions-repositoryUrl Repository url that points to a list of extensions in .md format. (default: 'https://raw.githubusercontent.com/bpatrik/pigallery2/master/extension/REPOSITORY.md') + --Extensions-folder Folder where the app stores all extensions. Individual extensions live in their own sub-folders. (default: 'extensions') + --Extensions-cleanUpUnusedTables Automatically removes all tables from the DB that are not used anymore. (default: true) --Database-type SQLite is recommended. (default: 'sqlite') --Database-dbFolder All file-based data will be stored here (sqlite database, job history data). (default: 'db') --Database-sqlite-DBFileName Sqlite will save the db with this filename. (default: 'sqlite.db') @@ -169,7 +174,7 @@ App CLI options: --Messaging-Email-smtp-password Password to connect to the SMTP server. (default: '') --Jobs-maxSavedProgress Job history size. (default: 20) --Jobs-mediaProcessingBatchSize Jobs load this many photos or videos from the DB for processing at once. (default: 1000) - --Jobs-scheduled (default: [{"name":"Indexing","jobName":"Indexing","config":{"indexChangesOnly":true},"allowParallelRun":false,"trigger":{"type":1}},{"name":"Album Cover Filling","jobName":"Album Cover Filling","config":{},"allowParallelRun":false,"trigger":{"type":4,"afterScheduleName":"Indexing"}},{"name":"Thumbnail Generation","jobName":"Thumbnail Generation","config":{"sizes":[240],"indexedOnly":true},"allowParallelRun":false,"trigger":{"type":4,"afterScheduleName":"Album Cover Filling"}},{"name":"Photo Converting","jobName":"Photo Converting","config":{"indexedOnly":true},"allowParallelRun":false,"trigger":{"type":4,"afterScheduleName":"Thumbnail Generation"}},{"name":"Video Converting","jobName":"Video Converting","config":{"indexedOnly":true},"allowParallelRun":false,"trigger":{"type":4,"afterScheduleName":"Photo Converting"}},{"name":"GPX Compression","jobName":"GPX Compression","config":{"indexedOnly":true},"allowParallelRun":false,"trigger":{"type":4,"afterScheduleName":"Video Converting"}},{"name":"Temp Folder Cleaning","jobName":"Temp Folder Cleaning","config":{"indexedOnly":true},"allowParallelRun":false,"trigger":{"type":4,"afterScheduleName":"GPX Compression"}}]) + --Jobs-scheduled (default: [{"name":"Indexing","jobName":"Indexing","config":{"indexChangesOnly":true},"allowParallelRun":false,"trigger":{"type":1}},{"name":"Album Cover Filling","jobName":"Album Cover Filling","config":{},"allowParallelRun":false,"trigger":{"type":4,"afterScheduleName":"Indexing"}},{"name":"Photo Converting","jobName":"Photo Converting","config":{"sizes":[320],"maxVideoSize":800,"indexedOnly":true},"allowParallelRun":false,"trigger":{"type":4,"afterScheduleName":"Album Cover Filling"}},{"name":"Video Converting","jobName":"Video Converting","config":{"indexedOnly":true},"allowParallelRun":false,"trigger":{"type":4,"afterScheduleName":"Photo Converting"}},{"name":"GPX Compression","jobName":"GPX Compression","config":{"indexedOnly":true},"allowParallelRun":false,"trigger":{"type":4,"afterScheduleName":"Video Converting"}},{"name":"Temp Folder Cleaning","jobName":"Temp Folder Cleaning","config":{"indexedOnly":true},"allowParallelRun":false,"trigger":{"type":4,"afterScheduleName":"GPX Compression"}}]) Environmental variables: Server-applicationTitle (default: 'PiGallery 2') @@ -184,8 +189,6 @@ Environmental variables: Server-port Port number. Port 80 is usually what you need. (default: 80) PORT same as Server-port Server-host Server will accept connections from this IPv6 or IPv4 address. (default: '0.0.0.0') - Server-Threading-enabled [Deprecated, will be removed in the next release] Runs directory scanning and thumbnail generation in a different thread. (default: false) - Server-Threading-thumbnailThreads Number of threads that are used to generate thumbnails. If 0, number of 'CPU cores -1' threads will be used. (default: 0) Server-Log-level Logging level. (default: 'info') Server-Log-sqlLevel Logging level for SQL queries. (default: 'error') Server-Log-logServerTiming If enabled, the app adds "Server-Timing" http header to the response. (default: false) @@ -195,6 +198,7 @@ Environmental variables: Gallery-enableCache Caches directory contents and search results for better performance. (default: true) Gallery-enableOnScrollRendering Those thumbnails get higher priority that are visible on the screen. (default: true) Gallery-enableDirectorySortingByDate If enabled, directories will be sorted by date, like photos, otherwise by name. Directory date is the last modification time of that directory not the creation date of the oldest photo. (default: false) + Gallery-ignoreTimestampOffset If enabled, timestamp offsets are ignored, meaning that the local times of pictures are used for searching, sorting and grouping. If disabled, global time is used and pictures with no timestamp are assumed to be in UTC (offset +00:00). (default: true) Gallery-enableOnScrollThumbnailPrioritising Those thumbnails will be rendered first that are in view. (default: true) Gallery-NavBar-enableDownloadZip Enable download zip of a directory contents Directory flattening. (Does not work for searches.) (default: false) Gallery-NavBar-enableDirectoryFlattening Adds a button to flatten the file structure, by listing the content of all subdirectories. (Won't work if the gallery has multiple folders with the same path.) (default: false) @@ -217,19 +221,17 @@ Environmental variables: Gallery-Lightbox-captionAlwaysOn If enabled, lightbox will always show caption by default, not only on hover. (default: false) Gallery-Lightbox-facesAlwaysOn If enabled, lightbox will always show faces by default, not only on hover. (default: false) Gallery-Lightbox-loopVideos If enabled, lightbox will loop videos by default. (default: false) + Gallery-Lightbox-loadFullImageOnZoom Enables loading the full resolution image on zoom in the ligthbox (preview). (default: true) + Gallery-Lightbox-Titles-topLeftTitle (default: 'title') + Gallery-Lightbox-Titles-topLeftSubtitle (default: 'caption') + Gallery-Lightbox-Titles-bottomLeftTitle (default: 'location') + Gallery-Lightbox-Titles-bottomLeftSubtitle (default: 'persons') Gallery-Themes-enabled Enable themes and color modes. (default: true) Gallery-Themes-defaultMode Sets the default theme mode that is used for the application. (default: 'auto') Gallery-Themes-selectedTheme Selected theme to use on the site. (default: 'classic') Gallery-Themes-availableThemes Adds these css settings as it is to the end of the body tag of the page. (default: [{"name":"classic","theme":":root nav.navbar {\n--bs-navbar-color: rgba(255, 255, 255, 0.55);\n--bs-navbar-hover-color: rgba(255, 255, 255, 0.75);\n--bs-navbar-disabled-color: rgba(255, 255, 255, 0.25);\n--bs-navbar-active-color: #fff;\n--bs-navbar-brand-color: #fff;\n--bs-navbar-brand-hover-color: #fff;\n--bs-bg-opacity: 1;\nbackground-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}"}]) Gallery-InlineBlogStartsOpen Makes inline blog (*.md files content) auto-open. (default: false) - Gallery-TopBlogStartsOpen Makes inline blog (*.md files content) auto-open. (default: false) - Media-Thumbnail-iconSize Icon size (used on maps). (default: 45) - Media-Thumbnail-personThumbnailSize Person (face) thumbnail size. (default: 200) - Media-Thumbnail-thumbnailSizes Size of the thumbnails. The best matching size will be generated. More sizes give better quality, but use more storage and CPU to render. If size is 240, that shorter side of the thumbnail will have 160 pixels. (default: [240,480]) - Media-Thumbnail-useLanczos3 if true, 'lanczos3' will used to scale photos, otherwise faster but lower quality 'nearest'. (default: true) - Media-Thumbnail-quality Between 0-100. (default: 80) - Media-Thumbnail-smartSubsample Use high quality chroma subsampling in webp. See: https://sharp.pixelplumbing.com/api-output#webp. (default: true) - Media-Thumbnail-personFaceMargin This ratio of the face bounding box will be added to the face as a margin. Higher number add more margin. (default: 0.7) + Gallery-TopBlogStartsOpen Makes top blog (*.md files content) auto-open. (default: false) Media-Video-enabled (default: true) Media-Video-supportedFormatsWithTranscoding Video formats that are supported after transcoding (with the built-in ffmpeg support). (default: ["avi","mkv","mov","wmv","flv","mts","m2ts","mpg","3gp","m4v","mpeg","vob","divx","xvid","ts"]) Media-Video-supportedFormats Video formats that are supported also without transcoding. Browser supported formats: https://www.w3schools.com/html/html5_video.asp (default: ["mp4","webm","ogv","ogg"]) @@ -243,11 +245,15 @@ Environmental variables: Media-Video-transcoding-preset A preset is a collection of options that will provide a certain encoding speed to compression ratio. A slower preset will provide better compression (compression is quality per filesize). (default: 'medium') Media-Video-transcoding-customOutputOptions It will be sent to ffmpeg as it is, as custom output options. (default: []) Media-Video-transcoding-customInputOptions It will be sent to ffmpeg as it is, as custom input options. (default: []) - Media-Photo-Converting-enabled Enable photo converting. (default: true) - Media-Photo-Converting-loadFullImageOnZoom Enables loading the full resolution image on zoom in the ligthbox (preview). (default: true) - Media-Photo-Converting-onTheFly Converts photos on the fly, when they are requested. (default: true) - Media-Photo-Converting-resolution The shorter edge of the converted photo will be scaled down to this, while keeping the aspect ratio. (default: 1080) - Media-Photo-supportedFormats Photo formats that are supported. Browser needs to support these formats natively. Also sharp (libvips) package should be able to convert these formats. (default: ["gif","jpeg","jpg","jpe","png","webp","svg"]) + Media-Photo-iconSize Icon size (used on maps). (default: 45) + Media-Photo-personThumbnailSize Person (face) thumbnail size. (default: 200) + Media-Photo-thumbnailSizes Size of the thumbnails and photo previews. The best matching size will be used (smaller for photo and video thumbnail, bigger for photo preview). More sizes give better quality, but use more storage and CPU to render. If size is 240, that shorter side of the thumbnail will be 240 pixels. (default: [320,540,1080,2160]) + Media-Photo-supportedFormats Photo formats that are supported. Browser needs to support these formats natively. Also sharp (libvips) package should be able to convert these formats. (default: ["gif","jpeg","jpg","jpe","png","webp","svg","avif","heic","dng","arw"]) + Media-Photo-useLanczos3 if true, 'lanczos3' will used to scale photos, otherwise faster but lower quality 'nearest'. (default: true) + Media-Photo-quality Between 0-100. (default: 80) + Media-Photo-smartSubsample Use high quality chroma subsampling in webp. See: https://sharp.pixelplumbing.com/api-output#webp. (default: true) + Media-Photo-personFaceMargin This ratio of the face bounding box will be added to the face as a margin. Higher number add more margin. (default: 0.7) + Media-Photo-animateGif Converts Gif to animated webp. (default: true) Media-folder Images are loaded from this folder (read permission required) (default: 'demo/images') Media-tempFolder Thumbnails, converted photos, videos will be stored here (write permission required) (default: 'demo/tmp') Media-photoMetadataSize Only this many bites will be loaded when scanning photo/video for metadata. Increase this number if your photos shows up as square. (default: 524288) @@ -277,7 +283,7 @@ Environmental variables: Search-listDirectories Search returns also with directories, not just media. (default: false) Search-listMetafiles Search also returns with metafiles from directories that contain a media file of the matched search result. (default: true) Sharing-enabled Enables sharing. (default: true) - Sharing-passwordProtected Enables password protected sharing links. (default: true) + Sharing-passwordRequired Requires password protected sharing links. (default: false) Sharing-updateTimeout After creating a sharing link, it can be updated for this long. (default: 300000) Map-enabled (default: true) Map-useImageMarkers Map will use thumbnail images as markers instead of the default pin. (default: true) @@ -285,13 +291,17 @@ Environmental variables: Map-mapboxAccessToken MapBox needs an access token to work, create one at https://www.mapbox.com. (default: '') Map-customLayers The map module will use these urls to fetch the map tiles. (default: [{"name":"street","url":"","darkLayer":false}]) Map-maxPreviewMarkers Maximum number of markers to be shown on the map preview on the gallery page. (default: 50) - Map-MapPathGroupConfig Markers are grouped and themed by these settings (default: [{"name":"Transportation","matchers":[{"matchers":["flight","flying"],"theme":{"color":"var(--bs-orange)","dashArray":"4 8","svgIcon":{"viewBox":"0 0 567 512","items":""}}},{"matchers":["drive","driving"],"theme":{"color":"var(--bs-orange)","dashArray":"4 8","svgIcon":{"viewBox":"0 0 640 512","items":""}}},{"matchers":["ship","sailing","cruise"],"theme":{"color":"var(--bs-orange)","dashArray":"4 8","svgIcon":{"viewBox":"0 0 576 512","items":""}}}]},{"name":"Sport","matchers":[{"matchers":["run"],"theme":{"color":"var(--bs-primary)","dashArray":"","svgIcon":{"viewBox":"0 0 417 512","items":""}}},{"matchers":["walk"],"theme":{"color":"var(--bs-primary)","dashArray":"","svgIcon":{"viewBox":"0 0 320 512","items":""}}},{"matchers":["hike","hiking"],"theme":{"color":"var(--bs-primary)","dashArray":"","svgIcon":{"viewBox":"0 0 384 512","items":""}}},{"matchers":["bike","biking","cycling"],"theme":{"color":"var(--bs-primary)","dashArray":"","svgIcon":{"viewBox":"0 0 640 512","items":""}}},{"matchers":["skiing","ski"],"theme":{"color":"var(--bs-primary)","dashArray":"","svgIcon":{"viewBox":"0 0 512 512","items":""}}}]},{"name":"Other paths","matchers":[{"matchers":[],"theme":{"color":"var(--bs-secondary)","dashArray":"","svgIcon":{"viewBox":"0 0 512 512","items":""}}}]}]) + Map-MapPathGroupConfig Markers are grouped and themed by these settings (default: [{"name":"Transportation","matchers":[{"matchers":["flight","flying"],"theme":{"color":"var(--bs-orange)","dashArray":"4 8","svgIcon":{"viewBox":"0 0 567 512","items":""}}},{"matchers":["drive","driving"],"theme":{"color":"var(--bs-orange)","dashArray":"4 8","svgIcon":{"viewBox":"0 0 640 512","items":""}}},{"matchers":["ship","sailing","cruise"],"theme":{"color":"var(--bs-orange)","dashArray":"4 8","svgIcon":{"viewBox":"0 0 576 512","items":""}}}]},{"name":"Sport","matchers":[{"matchers":["(\b|_|-)run"],"theme":{"color":"var(--bs-primary)","dashArray":"","svgIcon":{"viewBox":"0 0 417 512","items":""}}},{"matchers":["(\b|_|-)walk"],"theme":{"color":"var(--bs-primary)","dashArray":"","svgIcon":{"viewBox":"0 0 320 512","items":""}}},{"matchers":["(\b|_|-)hike","(\b|_|-)hiking"],"theme":{"color":"var(--bs-primary)","dashArray":"","svgIcon":{"viewBox":"0 0 384 512","items":""}}},{"matchers":["(\b|_|-)bike","(\b|_|-)biking","(\b|_|-)cycling"],"theme":{"color":"var(--bs-primary)","dashArray":"","svgIcon":{"viewBox":"0 0 640 512","items":""}}},{"matchers":["(\b|_|-)skiing","(\b|_|-)ski"],"theme":{"color":"var(--bs-primary)","dashArray":"","svgIcon":{"viewBox":"0 0 512 512","items":""}}}]},{"name":"Other paths","matchers":[{"matchers":[],"theme":{"color":"var(--bs-secondary)","dashArray":"","svgIcon":{"viewBox":"0 0 512 512","items":""}}}]}]) Map-bendLongPathsTrigger Map will bend the path if two points are this far apart on latititude axes. This intended to bend flight if only the end and the start points are given. (default: 0.5) Faces-enabled (default: true) Faces-keywordsToPersons If a photo has the same face (person) name and keyword, the app removes the duplicate, keeping the face only. (default: true) Faces-writeAccessMinRole Required minimum right to star (favourite) a face. (default: 'Admin') Faces-readAccessMinRole Required minimum right to show the faces tab. (default: 'User') RandomPhoto-enabled Enables random link generation. (default: true) + Extensions-enabled (default: true) + Extensions-repositoryUrl Repository url that points to a list of extensions in .md format. (default: 'https://raw.githubusercontent.com/bpatrik/pigallery2/master/extension/REPOSITORY.md') + Extensions-folder Folder where the app stores all extensions. Individual extensions live in their own sub-folders. (default: 'extensions') + Extensions-cleanUpUnusedTables Automatically removes all tables from the DB that are not used anymore. (default: true) Database-type SQLite is recommended. (default: 'sqlite') Database-dbFolder All file-based data will be stored here (sqlite database, job history data). (default: 'db') Database-sqlite-DBFileName Sqlite will save the db with this filename. (default: 'sqlite.db') @@ -321,7 +331,7 @@ Environmental variables: Messaging-Email-smtp-password Password to connect to the SMTP server. (default: '') Jobs-maxSavedProgress Job history size. (default: 20) Jobs-mediaProcessingBatchSize Jobs load this many photos or videos from the DB for processing at once. (default: 1000) - Jobs-scheduled (default: [{"name":"Indexing","jobName":"Indexing","config":{"indexChangesOnly":true},"allowParallelRun":false,"trigger":{"type":1}},{"name":"Album Cover Filling","jobName":"Album Cover Filling","config":{},"allowParallelRun":false,"trigger":{"type":4,"afterScheduleName":"Indexing"}},{"name":"Thumbnail Generation","jobName":"Thumbnail Generation","config":{"sizes":[240],"indexedOnly":true},"allowParallelRun":false,"trigger":{"type":4,"afterScheduleName":"Album Cover Filling"}},{"name":"Photo Converting","jobName":"Photo Converting","config":{"indexedOnly":true},"allowParallelRun":false,"trigger":{"type":4,"afterScheduleName":"Thumbnail Generation"}},{"name":"Video Converting","jobName":"Video Converting","config":{"indexedOnly":true},"allowParallelRun":false,"trigger":{"type":4,"afterScheduleName":"Photo Converting"}},{"name":"GPX Compression","jobName":"GPX Compression","config":{"indexedOnly":true},"allowParallelRun":false,"trigger":{"type":4,"afterScheduleName":"Video Converting"}},{"name":"Temp Folder Cleaning","jobName":"Temp Folder Cleaning","config":{"indexedOnly":true},"allowParallelRun":false,"trigger":{"type":4,"afterScheduleName":"GPX Compression"}}]) + Jobs-scheduled (default: [{"name":"Indexing","jobName":"Indexing","config":{"indexChangesOnly":true},"allowParallelRun":false,"trigger":{"type":1}},{"name":"Album Cover Filling","jobName":"Album Cover Filling","config":{},"allowParallelRun":false,"trigger":{"type":4,"afterScheduleName":"Indexing"}},{"name":"Photo Converting","jobName":"Photo Converting","config":{"sizes":[320],"maxVideoSize":800,"indexedOnly":true},"allowParallelRun":false,"trigger":{"type":4,"afterScheduleName":"Album Cover Filling"}},{"name":"Video Converting","jobName":"Video Converting","config":{"indexedOnly":true},"allowParallelRun":false,"trigger":{"type":4,"afterScheduleName":"Photo Converting"}},{"name":"GPX Compression","jobName":"GPX Compression","config":{"indexedOnly":true},"allowParallelRun":false,"trigger":{"type":4,"afterScheduleName":"Video Converting"}},{"name":"Temp Folder Cleaning","jobName":"Temp Folder Cleaning","config":{"indexedOnly":true},"allowParallelRun":false,"trigger":{"type":4,"afterScheduleName":"GPX Compression"}}]) ``` ### `config.json` sample: @@ -329,122 +339,66 @@ Environmental variables: { "Server": { "applicationTitle": "PiGallery 2", - "//[publicUrl]": [ - "If you access the page from local network it's good to know the public url for creating sharing link." - ], + "//[publicUrl]": "If you access the page from local network it's good to know the public url for creating sharing link.", "publicUrl": "", - "//[urlBase]": [ - "If you access the gallery under a sub url (like: http://mydomain.com/myGallery), set it here. If it is not working you might miss the '/' from the beginning of the url." - ], + "//[urlBase]": "If you access the gallery under a sub url (like: http://mydomain.com/myGallery), set it here. If it is not working you might miss the '/' from the beginning of the url.", "urlBase": "", "//[apiPath]": "PiGallery api path.", "apiPath": "/pgapi", - "//[customHTMLHead]": [ - "Injects the content of this between the HTML tags of the app. (You can use it to add analytics or custom code to the app)." - ], + "//[customHTMLHead]": "Injects the content of this between the HTML tags of the app. (You can use it to add analytics or custom code to the app).", "customHTMLHead": "", - "//[svgIcon]": [ - "Sets the icon of the app" - ], + "//[svgIcon]": "Sets the icon of the app", "svgIcon": { - "//[viewBox]": [ - "SVG path viewBox. See: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/viewBox" - ], + "//[viewBox]": "SVG path viewBox. See: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/viewBox", "viewBox": "0 0 512 512", - "//[items]": [ - "Content elements (paths, circles, rects) of the SVG icon. Icons used on the map: fontawesome.com/icons." - ], + "//[items]": "Content elements (paths, circles, rects) of the SVG icon. Icons used on the map: fontawesome.com/icons.", "items": "" }, "sessionSecret": [], - "//[sessionTimeout]": [ - "Users kept logged in for this long time." - ], + "//[sessionTimeout]": "Users kept logged in for this long time.", "sessionTimeout": 604800000, - "//[port]": [ - "Port number. Port 80 is usually what you need." - ], + "//[port]": "Port number. Port 80 is usually what you need.", "port": 80, - "//[host]": [ - "Server will accept connections from this IPv6 or IPv4 address." - ], + "//[host]": "Server will accept connections from this IPv6 or IPv4 address.", "host": "0.0.0.0", - "Threading": { - "//[enabled]": [ - "[Deprecated, will be removed in the next release] Runs directory scanning and thumbnail generation in a different thread." - ], - "enabled": false, - "//[thumbnailThreads]": [ - "Number of threads that are used to generate thumbnails. If 0, number of 'CPU cores -1' threads will be used." - ], - "thumbnailThreads": 0 - }, "Log": { - "//[level]": [ - "Logging level." - ], + "//[level]": "Logging level.", "level": "info", - "//[sqlLevel]": [ - "Logging level for SQL queries." - ], + "//[sqlLevel]": "Logging level for SQL queries.", "sqlLevel": "error", - "//[logServerTiming]": [ - "If enabled, the app ads \"Server-Timing\" http header to the response." - ], + "//[logServerTiming]": "If enabled, the app adds \"Server-Timing\" http header to the response.", "logServerTiming": false } }, "Users": { - "//[authenticationRequired]": [ - "Enables user management with login to password protect the gallery." - ], + "//[authenticationRequired]": "Enables user management with login to password protect the gallery.", "authenticationRequired": true, - "//[unAuthenticatedUserRole]": [ - "Default user right when password protection is disabled." - ], + "//[unAuthenticatedUserRole]": "Default user right when password protection is disabled.", "unAuthenticatedUserRole": "Admin", - "//[enforcedUsers]": [ - "Creates these users in the DB during startup if they do not exist. If a user with this name exist, it won't be overwritten, even if the role is different." - ], + "//[enforcedUsers]": "Creates these users in the DB during startup if they do not exist. If a user with this name exist, it won't be overwritten, even if the role is different.", "enforcedUsers": [] }, "Gallery": { - "//[enableCache]": [ - "Caches directory contents and search results for better performance." - ], + "//[enableCache]": "Caches directory contents and search results for better performance.", "enableCache": true, - "//[enableOnScrollRendering]": [ - "Those thumbnails get higher priority that are visible on the screen." - ], + "//[enableOnScrollRendering]": "Those thumbnails get higher priority that are visible on the screen.", "enableOnScrollRendering": true, - "//[enableDirectorySortingByDate]": [ - "If enabled, directories will be sorted by date, like photos, otherwise by name. Directory date is the last modification time of that directory not the creation date of the oldest photo." - ], + "//[enableDirectorySortingByDate]": "If enabled, directories will be sorted by date, like photos, otherwise by name. Directory date is the last modification time of that directory not the creation date of the oldest photo.", "enableDirectorySortingByDate": false, - "//[enableOnScrollThumbnailPrioritising]": [ - "Those thumbnails will be rendered first that are in view." - ], + "//[ignoreTimestampOffset]": "If enabled, timestamp offsets are ignored, meaning that the local times of pictures are used for searching, sorting and grouping. If disabled, global time is used and pictures with no timestamp are assumed to be in UTC (offset +00:00).", + "ignoreTimestampOffset": true, + "//[enableOnScrollThumbnailPrioritising]": "Those thumbnails will be rendered first that are in view.", "enableOnScrollThumbnailPrioritising": true, "NavBar": { - "//[enableDownloadZip]": [ - "Enable download zip of a directory contents Directory flattening. (Does not work for searches.)" - ], + "//[enableDownloadZip]": "Enable download zip of a directory contents Directory flattening. (Does not work for searches.)", "enableDownloadZip": false, - "//[enableDirectoryFlattening]": [ - "Adds a button to flatten the file structure, by listing the content of all subdirectories. (Won't work if the gallery has multiple folders with the same path.)" - ], + "//[enableDirectoryFlattening]": "Adds a button to flatten the file structure, by listing the content of all subdirectories. (Won't work if the gallery has multiple folders with the same path.)", "enableDirectoryFlattening": false, - "//[defaultGidSize]": [ - "Default grid size that is used to render photos and videos." - ], + "//[defaultGidSize]": "Default grid size that is used to render photos and videos.", "defaultGidSize": "medium", - "//[showItemCount]": [ - "Shows the number photos and videos on the navigation bar." - ], + "//[showItemCount]": "Shows the number photos and videos on the navigation bar.", "showItemCount": true, - "//[links]": [ - "Visible links in the top menu." - ], + "//[links]": "Visible links in the top menu.", "links": [ { "type": "gallery" @@ -456,154 +410,85 @@ Environmental variables: "type": "faces" } ], - "//[NavbarShowDelay]": [ - "Ratio of the page height, you need to scroll to show the navigation bar." - ], + "//[NavbarShowDelay]": "Ratio of the page height, you need to scroll to show the navigation bar.", "NavbarShowDelay": 0.3, - "//[NavbarHideDelay]": [ - "Ratio of the page height, you need to scroll to hide the navigation bar." - ], + "//[NavbarHideDelay]": "Ratio of the page height, you need to scroll to hide the navigation bar.", "NavbarHideDelay": 0.15, - "//[showScrollUpButton]": [ - "Set when the floating scroll-up button should be visible." - ], + "//[showScrollUpButton]": "Set when the floating scroll-up button should be visible.", "showScrollUpButton": "mobileOnly", "SortingGrouping": { - "//[defaultPhotoSortingMethod]": [ - "Default sorting method for photo and video in a directory results." - ], + "//[defaultPhotoSortingMethod]": "Default sorting method for photo and video in a directory results.", "defaultPhotoSortingMethod": { "method": "Date", "ascending": true }, - "//[defaultSearchSortingMethod]": [ - "Default sorting method for photo and video in a search results." - ], + "//[defaultSearchSortingMethod]": "Default sorting method for photo and video in a search results.", "defaultSearchSortingMethod": { "method": "Date", "ascending": false }, - "//[defaultPhotoGroupingMethod]": [ - "Default grouping method for photo and video in a directory results." - ], + "//[defaultPhotoGroupingMethod]": "Default grouping method for photo and video in a directory results.", "defaultPhotoGroupingMethod": { "method": "Date", "ascending": true }, - "//[defaultSearchGroupingMethod]": [ - "Default grouping method for photo and video in a search results." - ], + "//[defaultSearchGroupingMethod]": "Default grouping method for photo and video in a search results.", "defaultSearchGroupingMethod": { "method": "Date", "ascending": false } } }, - "//[captionFirstNaming]": [ - "Show the caption (IPTC 120) tags from the EXIF data instead of the filenames." - ], + "//[captionFirstNaming]": "Show the caption (IPTC 120) tags from the EXIF data instead of the filenames.", "captionFirstNaming": false, + "//[Lightbox]": "Photo and video preview window.", "Lightbox": { - "//[defaultSlideshowSpeed]": [ - "Default time interval for displaying a photo in the slide show." - ], + "//[defaultSlideshowSpeed]": "Default time interval for displaying a photo in the slide show.", "defaultSlideshowSpeed": 5, - "//[captionAlwaysOn]": [ - "If enabled, lightbox will always show caption by default, not only on hover." - ], + "//[captionAlwaysOn]": "If enabled, lightbox will always show caption by default, not only on hover.", "captionAlwaysOn": false, - "//[facesAlwaysOn]": [ - "If enabled, lightbox will always show faces by default, not only on hover." - ], + "//[facesAlwaysOn]": "If enabled, lightbox will always show faces by default, not only on hover.", "facesAlwaysOn": false, - "//[loopVideos]": [ - "If enabled, lightbox will loop videos by default." - ], - "loopVideos": false + "//[loopVideos]": "If enabled, lightbox will loop videos by default.", + "loopVideos": false, + "//[loadFullImageOnZoom]": "Enables loading the full resolution image on zoom in the ligthbox (preview).", + "loadFullImageOnZoom": true, + "//[Titles]": "Set these to customize the text (caption, location, etc.) in the lightbox that are always visible over the photo (not in the info panel).", + "Titles": { + "topLeftTitle": "title", + "topLeftSubtitle": "caption", + "bottomLeftTitle": "location", + "bottomLeftSubtitle": "persons" + } }, - "//[Themes]": [ - "Pigallery2 uses Bootstrap 5.3 (https://getbootstrap.com/docs/5.3) for design (css, layout). In dark mode it sets 'data-bs-theme=\"dark\"' to the to take advantage bootstrap's color modes. For theming, read more at: https://getbootstrap.com/docs/5.3/customize/color-modes/" - ], + "//[Themes]": "Pigallery2 uses Bootstrap 5.3 (https://getbootstrap.com/docs/5.3) for design (css, layout). In dark mode it sets 'data-bs-theme=\"dark\"' to the to take advantage bootstrap's color modes. For theming, read more at: https://getbootstrap.com/docs/5.3/customize/color-modes/", "Themes": { - "//[enabled]": [ - "Enable themes and color modes." - ], + "//[enabled]": "Enable themes and color modes.", "enabled": true, - "//[defaultMode]": [ - "Sets the default theme mode that is used for the application." - ], + "//[defaultMode]": "Sets the default theme mode that is used for the application.", "defaultMode": "auto", - "//[selectedTheme]": [ - "Selected theme to use on the site." - ], + "//[selectedTheme]": "Selected theme to use on the site.", "selectedTheme": "classic", - "//[availableThemes]": [ - "Adds these css settings as it is to the end of the body tag of the page." - ], + "//[availableThemes]": "Adds these css settings as it is to the end of the body tag of the page.", "availableThemes": [ { - "//[name]": [ - "Name of the theme" - ], + "//[name]": "Name of the theme", "name": "classic", - "//[theme]": [ - "Adds these css settings as it is to the end of the body tag of the page." - ], + "//[theme]": "Adds these css settings as it is to the end of the body tag of the page.", "theme": ":root nav.navbar {\n--bs-navbar-color: rgba(255, 255, 255, 0.55);\n--bs-navbar-hover-color: rgba(255, 255, 255, 0.75);\n--bs-navbar-disabled-color: rgba(255, 255, 255, 0.25);\n--bs-navbar-active-color: #fff;\n--bs-navbar-brand-color: #fff;\n--bs-navbar-brand-hover-color: #fff;\n--bs-bg-opacity: 1;\nbackground-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}" } ] }, - "//[InlineBlogStartsOpen]": [ - "Makes inline blog (*.md files content) auto-open." - ], + "//[InlineBlogStartsOpen]": "Makes inline blog (*.md files content) auto-open.", "InlineBlogStartsOpen": false, - "//[TopBlogStartsOpen]": [ - "Makes inline blog (*.md files content) auto-open." - ], + "//[TopBlogStartsOpen]": "Makes top blog (*.md files content) auto-open.", "TopBlogStartsOpen": false }, "Media": { - "Thumbnail": { - "//[iconSize]": [ - "Icon size (used on maps)." - ], - "iconSize": 45, - "//[personThumbnailSize]": [ - "Person (face) thumbnail size." - ], - "personThumbnailSize": 200, - "//[thumbnailSizes]": [ - "Size of the thumbnails. The best matching size will be generated. More sizes give better quality, but use more storage and CPU to render. If size is 240, that shorter side of the thumbnail will have 160 pixels." - ], - "thumbnailSizes": [ - 240, - 480 - ], - "//[useLanczos3]": [ - "if true, 'lanczos3' will used to scale photos, otherwise faster but lower quality 'nearest'." - ], - "useLanczos3": true, - "//[quality]": [ - "Between 0-100." - ], - "quality": 80, - "//[smartSubsample]": [ - "Use high quality chroma subsampling in webp. See: https://sharp.pixelplumbing.com/api-output#webp." - ], - "smartSubsample": true, - "//[personFaceMargin]": [ - "This ratio of the face bounding box will be added to the face as a margin. Higher number add more margin." - ], - "personFaceMargin": 0.7 - }, - "//[Video]": [ - "Video support uses ffmpeg. ffmpeg and ffprobe binaries need to be available in the PATH or the @ffmpeg-installer/ffmpeg and @ffprobe-installer/ffprobe optional node packages need to be installed." - ], + "//[Video]": "Video support uses ffmpeg. ffmpeg and ffprobe binaries need to be available in the PATH or the @ffmpeg-installer/ffmpeg and @ffprobe-installer/ffprobe optional node packages need to be installed.", "Video": { "enabled": true, - "//[supportedFormatsWithTranscoding]": [ - "Video formats that are supported after transcoding (with the built-in ffmpeg support)." - ], + "//[supportedFormatsWithTranscoding]": "Video formats that are supported after transcoding (with the built-in ffmpeg support).", "supportedFormatsWithTranscoding": [ "avi", "mkv", @@ -621,74 +506,47 @@ Environmental variables: "xvid", "ts" ], - "//[supportedFormats]": [ - "Video formats that are supported also without transcoding. Browser supported formats: https://www.w3schools.com/html/html5_video.asp" - ], + "//[supportedFormats]": "Video formats that are supported also without transcoding. Browser supported formats: https://www.w3schools.com/html/html5_video.asp", "supportedFormats": [ "mp4", "webm", "ogv", "ogg" ], - "//[transcoding]": [ - "To ensure smooth video playback, video transcoding is recommended to a lower bit rate than the server's upload rate. The transcoded videos will be saved to the thumbnail folder. You can trigger the transcoding manually, but you can also create an automatic encoding job in advanced settings mode." - ], + "//[transcoding]": "To ensure smooth video playback, video transcoding is recommended to a lower bit rate than the server's upload rate. The transcoded videos will be saved to the thumbnail folder. You can trigger the transcoding manually, but you can also create an automatic encoding job in advanced settings mode.", "transcoding": { - "//[bitRate]": [ - "Target bit rate of the output video will be scaled down to this. This should be less than the upload rate of your home server." - ], + "//[bitRate]": "Target bit rate of the output video will be scaled down to this. This should be less than the upload rate of your home server.", "bitRate": 5242880, - "//[resolution]": [ - "The height of the output video will be scaled down to this, while keeping the aspect ratio." - ], + "//[resolution]": "The height of the output video will be scaled down to this, while keeping the aspect ratio.", "resolution": 720, - "//[fps]": [ - "Target frame per second (fps) of the output video will be scaled down to this." - ], + "//[fps]": "Target frame per second (fps) of the output video will be scaled down to this.", "fps": 25, "format": "mp4", "mp4Codec": "libx264", "webmCodec": "libvpx", - "//[crf]": [ - "The range of the Constant Rate Factor (CRF) scale is 0–51, where 0 is lossless, 23 is the default, and 51 is worst quality possible." - ], + "//[crf]": "The range of the Constant Rate Factor (CRF) scale is 0–51, where 0 is lossless, 23 is the default, and 51 is worst quality possible.", "crf": 23, - "//[preset]": [ - "A preset is a collection of options that will provide a certain encoding speed to compression ratio. A slower preset will provide better compression (compression is quality per filesize)." - ], + "//[preset]": "A preset is a collection of options that will provide a certain encoding speed to compression ratio. A slower preset will provide better compression (compression is quality per filesize).", "preset": "medium", - "//[customOutputOptions]": [ - "It will be sent to ffmpeg as it is, as custom output options." - ], + "//[customOutputOptions]": "It will be sent to ffmpeg as it is, as custom output options.", "customOutputOptions": [], - "//[customInputOptions]": [ - "It will be sent to ffmpeg as it is, as custom input options." - ], + "//[customInputOptions]": "It will be sent to ffmpeg as it is, as custom input options.", "customInputOptions": [] } }, "Photo": { - "Converting": { - "//[enabled]": [ - "Enable photo converting." - ], - "enabled": true, - "//[loadFullImageOnZoom]": [ - "Enables loading the full resolution image on zoom in the ligthbox (preview)." - ], - "loadFullImageOnZoom": true, - "//[onTheFly]": [ - "Converts photos on the fly, when they are requested." - ], - "onTheFly": true, - "//[resolution]": [ - "The shorter edge of the converted photo will be scaled down to this, while keeping the aspect ratio." - ], - "resolution": 1080 - }, - "//[supportedFormats]": [ - "Photo formats that are supported. Browser needs to support these formats natively. Also sharp (libvips) package should be able to convert these formats." + "//[iconSize]": "Icon size (used on maps).", + "iconSize": 45, + "//[personThumbnailSize]": "Person (face) thumbnail size.", + "personThumbnailSize": 200, + "//[thumbnailSizes]": "Size of the thumbnails and photo previews. The best matching size will be used (smaller for photo and video thumbnail, bigger for photo preview). More sizes give better quality, but use more storage and CPU to render. If size is 240, that shorter side of the thumbnail will be 240 pixels.", + "thumbnailSizes": [ + 320, + 540, + 1080, + 2160 ], + "//[supportedFormats]": "Photo formats that are supported. Browser needs to support these formats natively. Also sharp (libvips) package should be able to convert these formats.", "supportedFormats": [ "gif", "jpeg", @@ -696,60 +554,50 @@ Environmental variables: "jpe", "png", "webp", - "svg" - ] + "svg", + "avif", + "heic", + "dng", + "arw" + ], + "//[useLanczos3]": "if true, 'lanczos3' will used to scale photos, otherwise faster but lower quality 'nearest'.", + "useLanczos3": true, + "//[quality]": "Between 0-100.", + "quality": 80, + "//[smartSubsample]": "Use high quality chroma subsampling in webp. See: https://sharp.pixelplumbing.com/api-output#webp.", + "smartSubsample": true, + "//[personFaceMargin]": "This ratio of the face bounding box will be added to the face as a margin. Higher number add more margin.", + "personFaceMargin": 0.7, + "//[animateGif]": "Converts Gif to animated webp.", + "animateGif": true }, - "//[folder]": [ - "Images are loaded from this folder (read permission required)" - ], + "//[folder]": "Images are loaded from this folder (read permission required)", "folder": "demo/images", - "//[tempFolder]": [ - "Thumbnails, converted photos, videos will be stored here (write permission required)" - ], + "//[tempFolder]": "Thumbnails, converted photos, videos will be stored here (write permission required)", "tempFolder": "demo/tmp", - "//[photoMetadataSize]": [ - "Only this many bites will be loaded when scanning photo/video for metadata. Increase this number if your photos shows up as square." - ], + "//[photoMetadataSize]": "Only this many bites will be loaded when scanning photo/video for metadata. Increase this number if your photos shows up as square.", "photoMetadataSize": 524288 }, "MetaFile": { - "//[gpx]": [ - "Reads *.gpx files and renders them on the map." - ], + "//[gpx]": "Reads *.gpx files and renders them on the map.", "gpx": true, "GPXCompressing": { - "//[enabled]": [ - "Enables lossy (based on delta time and distance. Too frequent points are removed) GPX compression." - ], + "//[enabled]": "Enables lossy (based on delta time and distance. Too frequent points are removed) GPX compression.", "enabled": true, - "//[onTheFly]": [ - "Enables on the fly *.gpx compression." - ], + "//[onTheFly]": "Enables on the fly *.gpx compression.", "onTheFly": true, - "//[minDistance]": [ - "Filters out entry that are closer than this to each other in meters." - ], + "//[minDistance]": "Filters out entry that are closer than this to each other in meters.", "minDistance": 5, - "//[maxMiddleDeviance]": [ - "Filters out entry that would fall on the line if we would just connect the previous and the next points. This setting sets the sensitivity for that (higher number, more points are filtered)." - ], + "//[maxMiddleDeviance]": "Filters out entry that would fall on the line if we would just connect the previous and the next points. This setting sets the sensitivity for that (higher number, more points are filtered).", "maxMiddleDeviance": 5, - "//[minTimeDistance]": [ - "Filters out entry that are closer than this in time in milliseconds." - ], + "//[minTimeDistance]": "Filters out entry that are closer than this in time in milliseconds.", "minTimeDistance": 5000 }, - "//[markdown]": [ - "Reads *.md files in a directory and shows the next to the map." - ], + "//[markdown]": "Reads *.md files in a directory and shows the next to the map.", "markdown": true, - "//[pg2conf]": [ - "Reads *.pg2conf files (You can use it for custom sorting and saved search (albums))." - ], + "//[pg2conf]": "Reads *.pg2conf files (You can use it for custom sorting and saved search (albums)).", "pg2conf": true, - "//[supportedFormats]": [ - "The app will read and process these files." - ], + "//[supportedFormats]": "The app will read and process these files.", "supportedFormats": [ "gpx", "pg2conf", @@ -760,237 +608,137 @@ Environmental variables: "enabled": true }, "Search": { - "//[enabled]": [ - "Enables searching." - ], + "//[enabled]": "Enables searching.", "enabled": true, - "//[searchCacheTimeout]": [ - "Search cache timeout." - ], + "//[searchCacheTimeout]": "Search cache timeout.", "searchCacheTimeout": 3600000, "AutoComplete": { - "//[enabled]": [ - "Show hints while typing search query." - ], + "//[enabled]": "Show hints while typing search query.", "enabled": true, - "//[ItemsPerCategory]": [ - "Maximum number autocomplete items shown per category." - ], + "//[ItemsPerCategory]": "Maximum number autocomplete items shown per category.", "ItemsPerCategory": { - "//[maxItems]": [ - "Maximum number autocomplete items shown at once. If there is not enough items to reach this value, it takes up to double of the individual items." - ], + "//[maxItems]": "Maximum number autocomplete items shown at once. If there is not enough items to reach this value, it takes up to double of the individual items.", "maxItems": 20, - "//[fileName]": [ - "Maximum number autocomplete items shown per photo category." - ], + "//[fileName]": "Maximum number autocomplete items shown per photo category.", "fileName": 2, - "//[directory]": [ - "Maximum number autocomplete items shown per directory category." - ], + "//[directory]": "Maximum number autocomplete items shown per directory category.", "directory": 2, - "//[caption]": [ - "Maximum number autocomplete items shown per caption category." - ], + "//[caption]": "Maximum number autocomplete items shown per caption category.", "caption": 3, - "//[position]": [ - "Maximum number autocomplete items shown per position category." - ], + "//[position]": "Maximum number autocomplete items shown per position category.", "position": 3, - "//[person]": [ - "Maximum number autocomplete items shown per faces category." - ], + "//[person]": "Maximum number autocomplete items shown per faces category.", "person": 5, - "//[keyword]": [ - "Maximum number autocomplete items shown per keyword category." - ], + "//[keyword]": "Maximum number autocomplete items shown per keyword category.", "keyword": 5 }, - "//[cacheTimeout]": [ - "Autocomplete cache timeout. " - ], + "//[cacheTimeout]": "Autocomplete cache timeout. ", "cacheTimeout": 3600000 }, - "//[maxMediaResult]": [ - "Maximum number of photos and videos that are listed in one search result." - ], + "//[maxMediaResult]": "Maximum number of photos and videos that are listed in one search result.", "maxMediaResult": 10000, - "//[maxDirectoryResult]": [ - "Maximum number of directories that are listed in one search result." - ], + "//[maxDirectoryResult]": "Maximum number of directories that are listed in one search result.", "maxDirectoryResult": 200, - "//[listDirectories]": [ - "Search returns also with directories, not just media." - ], + "//[listDirectories]": "Search returns also with directories, not just media.", "listDirectories": false, - "//[listMetafiles]": [ - "Search also returns with metafiles from directories that contain a media file of the matched search result." - ], + "//[listMetafiles]": "Search also returns with metafiles from directories that contain a media file of the matched search result.", "listMetafiles": true }, "Sharing": { - "//[enabled]": [ - "Enables sharing." - ], + "//[enabled]": "Enables sharing.", "enabled": true, - "//[passwordProtected]": [ - "Enables password protected sharing links." - ], - "passwordProtected": true, - "//[updateTimeout]": [ - "After creating a sharing link, it can be updated for this long." - ], + "//[passwordRequired]": "Requires password protected sharing links.", + "passwordRequired": false, + "//[updateTimeout]": "After creating a sharing link, it can be updated for this long.", "updateTimeout": 300000 }, "Map": { "enabled": true, - "//[useImageMarkers]": [ - "Map will use thumbnail images as markers instead of the default pin." - ], + "//[useImageMarkers]": "Map will use thumbnail images as markers instead of the default pin.", "useImageMarkers": true, "mapProvider": "OpenStreetMap", - "//[mapboxAccessToken]": [ - "MapBox needs an access token to work, create one at https://www.mapbox.com." - ], + "//[mapboxAccessToken]": "MapBox needs an access token to work, create one at https://www.mapbox.com.", "mapboxAccessToken": "", - "//[customLayers]": [ - "The map module will use these urls to fetch the map tiles." - ], + "//[customLayers]": "The map module will use these urls to fetch the map tiles.", "customLayers": [ { - "//[name]": [ - "Name of a map layer." - ], + "//[name]": "Name of a map layer.", "name": "street", - "//[url]": [ - "Url of a map layer." - ], + "//[url]": "Url of a map layer.", "url": "", - "//[darkLayer]": [ - "Sets if the layer is dark (used as default in the dark mode)." - ], + "//[darkLayer]": "Sets if the layer is dark (used as default in the dark mode).", "darkLayer": false } ], - "//[maxPreviewMarkers]": [ - "Maximum number of markers to be shown on the map preview on the gallery page." - ], + "//[maxPreviewMarkers]": "Maximum number of markers to be shown on the map preview on the gallery page.", "maxPreviewMarkers": 50, - "//[MapPathGroupConfig]": [ - "Markers are grouped and themed by these settings" - ], + "//[MapPathGroupConfig]": "Markers are grouped and themed by these settings", "MapPathGroupConfig": [ { - "//[name]": [ - "Name of the marker and path group on the map." - ], + "//[name]": "Name of the marker and path group on the map.", "name": "Transportation", - "//[matchers]": [ - "Matchers for a given map and path theme." - ], + "//[matchers]": "Matchers for a given map and path theme.", "matchers": [ { - "//[matchers]": [ - "List of regex string to match the name of the path. Case insensitive. Empty list matches everything." - ], + "//[matchers]": "List of regex string to match the name of the path. Case insensitive. Empty list matches everything.", "matchers": [ "flight", "flying" ], - "//[theme]": [ - "List of regex string to match the name of the path." - ], + "//[theme]": "List of regex string to match the name of the path.", "theme": { - "//[color]": [ - "Color of the path. Use any valid css colors." - ], + "//[color]": "Color of the path. Use any valid css colors.", "color": "var(--bs-orange)", - "//[dashArray]": [ - "Dash pattern of the path. Represents the spacing and length of the dash. Read more about dash array at: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray." - ], + "//[dashArray]": "Dash pattern of the path. Represents the spacing and length of the dash. Read more about dash array at: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray.", "dashArray": "4 8", - "//[svgIcon]": [ - "Set the icon of the map marker pin." - ], + "//[svgIcon]": "Set the icon of the map marker pin.", "svgIcon": { - "//[viewBox]": [ - "SVG path viewBox. See: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/viewBox" - ], + "//[viewBox]": "SVG path viewBox. See: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/viewBox", "viewBox": "0 0 567 512", - "//[items]": [ - "Content elements (paths, circles, rects) of the SVG icon. Icons used on the map: fontawesome.com/icons." - ], + "//[items]": "Content elements (paths, circles, rects) of the SVG icon. Icons used on the map: fontawesome.com/icons.", "items": "" } } }, { - "//[matchers]": [ - "List of regex string to match the name of the path. Case insensitive. Empty list matches everything." - ], + "//[matchers]": "List of regex string to match the name of the path. Case insensitive. Empty list matches everything.", "matchers": [ "drive", "driving" ], - "//[theme]": [ - "List of regex string to match the name of the path." - ], + "//[theme]": "List of regex string to match the name of the path.", "theme": { - "//[color]": [ - "Color of the path. Use any valid css colors." - ], + "//[color]": "Color of the path. Use any valid css colors.", "color": "var(--bs-orange)", - "//[dashArray]": [ - "Dash pattern of the path. Represents the spacing and length of the dash. Read more about dash array at: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray." - ], + "//[dashArray]": "Dash pattern of the path. Represents the spacing and length of the dash. Read more about dash array at: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray.", "dashArray": "4 8", - "//[svgIcon]": [ - "Set the icon of the map marker pin." - ], + "//[svgIcon]": "Set the icon of the map marker pin.", "svgIcon": { - "//[viewBox]": [ - "SVG path viewBox. See: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/viewBox" - ], + "//[viewBox]": "SVG path viewBox. See: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/viewBox", "viewBox": "0 0 640 512", - "//[items]": [ - "Content elements (paths, circles, rects) of the SVG icon. Icons used on the map: fontawesome.com/icons." - ], + "//[items]": "Content elements (paths, circles, rects) of the SVG icon. Icons used on the map: fontawesome.com/icons.", "items": "" } } }, { - "//[matchers]": [ - "List of regex string to match the name of the path. Case insensitive. Empty list matches everything." - ], + "//[matchers]": "List of regex string to match the name of the path. Case insensitive. Empty list matches everything.", "matchers": [ "ship", "sailing", "cruise" ], - "//[theme]": [ - "List of regex string to match the name of the path." - ], + "//[theme]": "List of regex string to match the name of the path.", "theme": { - "//[color]": [ - "Color of the path. Use any valid css colors." - ], + "//[color]": "Color of the path. Use any valid css colors.", "color": "var(--bs-orange)", - "//[dashArray]": [ - "Dash pattern of the path. Represents the spacing and length of the dash. Read more about dash array at: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray." - ], + "//[dashArray]": "Dash pattern of the path. Represents the spacing and length of the dash. Read more about dash array at: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray.", "dashArray": "4 8", - "//[svgIcon]": [ - "Set the icon of the map marker pin." - ], + "//[svgIcon]": "Set the icon of the map marker pin.", "svgIcon": { - "//[viewBox]": [ - "SVG path viewBox. See: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/viewBox" - ], + "//[viewBox]": "SVG path viewBox. See: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/viewBox", "viewBox": "0 0 576 512", - "//[items]": [ - "Content elements (paths, circles, rects) of the SVG icon. Icons used on the map: fontawesome.com/icons." - ], + "//[items]": "Content elements (paths, circles, rects) of the SVG icon. Icons used on the map: fontawesome.com/icons.", "items": "" } } @@ -998,184 +746,110 @@ Environmental variables: ] }, { - "//[name]": [ - "Name of the marker and path group on the map." - ], + "//[name]": "Name of the marker and path group on the map.", "name": "Sport", - "//[matchers]": [ - "Matchers for a given map and path theme." - ], + "//[matchers]": "Matchers for a given map and path theme.", "matchers": [ { - "//[matchers]": [ - "List of regex string to match the name of the path. Case insensitive. Empty list matches everything." - ], + "//[matchers]": "List of regex string to match the name of the path. Case insensitive. Empty list matches everything.", "matchers": [ - "run" - ], - "//[theme]": [ - "List of regex string to match the name of the path." + "(\b|_|-)run" ], + "//[theme]": "List of regex string to match the name of the path.", "theme": { - "//[color]": [ - "Color of the path. Use any valid css colors." - ], + "//[color]": "Color of the path. Use any valid css colors.", "color": "var(--bs-primary)", - "//[dashArray]": [ - "Dash pattern of the path. Represents the spacing and length of the dash. Read more about dash array at: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray." - ], + "//[dashArray]": "Dash pattern of the path. Represents the spacing and length of the dash. Read more about dash array at: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray.", "dashArray": "", - "//[svgIcon]": [ - "Set the icon of the map marker pin." - ], + "//[svgIcon]": "Set the icon of the map marker pin.", "svgIcon": { - "//[viewBox]": [ - "SVG path viewBox. See: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/viewBox" - ], + "//[viewBox]": "SVG path viewBox. See: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/viewBox", "viewBox": "0 0 417 512", - "//[items]": [ - "Content elements (paths, circles, rects) of the SVG icon. Icons used on the map: fontawesome.com/icons." - ], + "//[items]": "Content elements (paths, circles, rects) of the SVG icon. Icons used on the map: fontawesome.com/icons.", "items": "" } } }, { - "//[matchers]": [ - "List of regex string to match the name of the path. Case insensitive. Empty list matches everything." - ], + "//[matchers]": "List of regex string to match the name of the path. Case insensitive. Empty list matches everything.", "matchers": [ - "walk" - ], - "//[theme]": [ - "List of regex string to match the name of the path." + "(\b|_|-)walk" ], + "//[theme]": "List of regex string to match the name of the path.", "theme": { - "//[color]": [ - "Color of the path. Use any valid css colors." - ], + "//[color]": "Color of the path. Use any valid css colors.", "color": "var(--bs-primary)", - "//[dashArray]": [ - "Dash pattern of the path. Represents the spacing and length of the dash. Read more about dash array at: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray." - ], + "//[dashArray]": "Dash pattern of the path. Represents the spacing and length of the dash. Read more about dash array at: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray.", "dashArray": "", - "//[svgIcon]": [ - "Set the icon of the map marker pin." - ], + "//[svgIcon]": "Set the icon of the map marker pin.", "svgIcon": { - "//[viewBox]": [ - "SVG path viewBox. See: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/viewBox" - ], + "//[viewBox]": "SVG path viewBox. See: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/viewBox", "viewBox": "0 0 320 512", - "//[items]": [ - "Content elements (paths, circles, rects) of the SVG icon. Icons used on the map: fontawesome.com/icons." - ], + "//[items]": "Content elements (paths, circles, rects) of the SVG icon. Icons used on the map: fontawesome.com/icons.", "items": "" } } }, { - "//[matchers]": [ - "List of regex string to match the name of the path. Case insensitive. Empty list matches everything." - ], + "//[matchers]": "List of regex string to match the name of the path. Case insensitive. Empty list matches everything.", "matchers": [ - "hike", - "hiking" - ], - "//[theme]": [ - "List of regex string to match the name of the path." + "(\b|_|-)hike", + "(\b|_|-)hiking" ], + "//[theme]": "List of regex string to match the name of the path.", "theme": { - "//[color]": [ - "Color of the path. Use any valid css colors." - ], + "//[color]": "Color of the path. Use any valid css colors.", "color": "var(--bs-primary)", - "//[dashArray]": [ - "Dash pattern of the path. Represents the spacing and length of the dash. Read more about dash array at: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray." - ], + "//[dashArray]": "Dash pattern of the path. Represents the spacing and length of the dash. Read more about dash array at: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray.", "dashArray": "", - "//[svgIcon]": [ - "Set the icon of the map marker pin." - ], + "//[svgIcon]": "Set the icon of the map marker pin.", "svgIcon": { - "//[viewBox]": [ - "SVG path viewBox. See: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/viewBox" - ], + "//[viewBox]": "SVG path viewBox. See: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/viewBox", "viewBox": "0 0 384 512", - "//[items]": [ - "Content elements (paths, circles, rects) of the SVG icon. Icons used on the map: fontawesome.com/icons." - ], + "//[items]": "Content elements (paths, circles, rects) of the SVG icon. Icons used on the map: fontawesome.com/icons.", "items": "" } } }, { - "//[matchers]": [ - "List of regex string to match the name of the path. Case insensitive. Empty list matches everything." - ], + "//[matchers]": "List of regex string to match the name of the path. Case insensitive. Empty list matches everything.", "matchers": [ - "bike", - "biking", - "cycling" - ], - "//[theme]": [ - "List of regex string to match the name of the path." + "(\b|_|-)bike", + "(\b|_|-)biking", + "(\b|_|-)cycling" ], + "//[theme]": "List of regex string to match the name of the path.", "theme": { - "//[color]": [ - "Color of the path. Use any valid css colors." - ], + "//[color]": "Color of the path. Use any valid css colors.", "color": "var(--bs-primary)", - "//[dashArray]": [ - "Dash pattern of the path. Represents the spacing and length of the dash. Read more about dash array at: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray." - ], + "//[dashArray]": "Dash pattern of the path. Represents the spacing and length of the dash. Read more about dash array at: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray.", "dashArray": "", - "//[svgIcon]": [ - "Set the icon of the map marker pin." - ], + "//[svgIcon]": "Set the icon of the map marker pin.", "svgIcon": { - "//[viewBox]": [ - "SVG path viewBox. See: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/viewBox" - ], + "//[viewBox]": "SVG path viewBox. See: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/viewBox", "viewBox": "0 0 640 512", - "//[items]": [ - "Content elements (paths, circles, rects) of the SVG icon. Icons used on the map: fontawesome.com/icons." - ], + "//[items]": "Content elements (paths, circles, rects) of the SVG icon. Icons used on the map: fontawesome.com/icons.", "items": "" } } }, { - "//[matchers]": [ - "List of regex string to match the name of the path. Case insensitive. Empty list matches everything." - ], + "//[matchers]": "List of regex string to match the name of the path. Case insensitive. Empty list matches everything.", "matchers": [ - "skiing", - "ski" - ], - "//[theme]": [ - "List of regex string to match the name of the path." + "(\b|_|-)skiing", + "(\b|_|-)ski" ], + "//[theme]": "List of regex string to match the name of the path.", "theme": { - "//[color]": [ - "Color of the path. Use any valid css colors." - ], + "//[color]": "Color of the path. Use any valid css colors.", "color": "var(--bs-primary)", - "//[dashArray]": [ - "Dash pattern of the path. Represents the spacing and length of the dash. Read more about dash array at: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray." - ], + "//[dashArray]": "Dash pattern of the path. Represents the spacing and length of the dash. Read more about dash array at: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray.", "dashArray": "", - "//[svgIcon]": [ - "Set the icon of the map marker pin." - ], + "//[svgIcon]": "Set the icon of the map marker pin.", "svgIcon": { - "//[viewBox]": [ - "SVG path viewBox. See: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/viewBox" - ], + "//[viewBox]": "SVG path viewBox. See: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/viewBox", "viewBox": "0 0 512 512", - "//[items]": [ - "Content elements (paths, circles, rects) of the SVG icon. Icons used on the map: fontawesome.com/icons." - ], + "//[items]": "Content elements (paths, circles, rects) of the SVG icon. Icons used on the map: fontawesome.com/icons.", "items": "" } } @@ -1183,42 +857,24 @@ Environmental variables: ] }, { - "//[name]": [ - "Name of the marker and path group on the map." - ], + "//[name]": "Name of the marker and path group on the map.", "name": "Other paths", - "//[matchers]": [ - "Matchers for a given map and path theme." - ], + "//[matchers]": "Matchers for a given map and path theme.", "matchers": [ { - "//[matchers]": [ - "List of regex string to match the name of the path. Case insensitive. Empty list matches everything." - ], + "//[matchers]": "List of regex string to match the name of the path. Case insensitive. Empty list matches everything.", "matchers": [], - "//[theme]": [ - "List of regex string to match the name of the path." - ], + "//[theme]": "List of regex string to match the name of the path.", "theme": { - "//[color]": [ - "Color of the path. Use any valid css colors." - ], + "//[color]": "Color of the path. Use any valid css colors.", "color": "var(--bs-secondary)", - "//[dashArray]": [ - "Dash pattern of the path. Represents the spacing and length of the dash. Read more about dash array at: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray." - ], + "//[dashArray]": "Dash pattern of the path. Represents the spacing and length of the dash. Read more about dash array at: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray.", "dashArray": "", - "//[svgIcon]": [ - "Set the icon of the map marker pin." - ], + "//[svgIcon]": "Set the icon of the map marker pin.", "svgIcon": { - "//[viewBox]": [ - "SVG path viewBox. See: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/viewBox" - ], + "//[viewBox]": "SVG path viewBox. See: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/viewBox", "viewBox": "0 0 512 512", - "//[items]": [ - "Content elements (paths, circles, rects) of the SVG icon. Icons used on the map: fontawesome.com/icons." - ], + "//[items]": "Content elements (paths, circles, rects) of the SVG icon. Icons used on the map: fontawesome.com/icons.", "items": "" } } @@ -1226,48 +882,40 @@ Environmental variables: ] } ], - "//[bendLongPathsTrigger]": [ - "Map will bend the path if two points are this far apart on latititude axes. This intended to bend flight if only the end and the start points are given." - ], + "//[bendLongPathsTrigger]": "Map will bend the path if two points are this far apart on latititude axes. This intended to bend flight if only the end and the start points are given.", "bendLongPathsTrigger": 0.5 }, "Faces": { "enabled": true, - "//[keywordsToPersons]": [ - "If a photo has the same face (person) name and keyword, the app removes the duplicate, keeping the face only." - ], + "//[keywordsToPersons]": "If a photo has the same face (person) name and keyword, the app removes the duplicate, keeping the face only.", "keywordsToPersons": true, - "//[writeAccessMinRole]": [ - "Required minimum right to star (favourite) a face." - ], + "//[writeAccessMinRole]": "Required minimum right to star (favourite) a face.", "writeAccessMinRole": "Admin", - "//[readAccessMinRole]": [ - "Required minimum right to show the faces tab." - ], + "//[readAccessMinRole]": "Required minimum right to show the faces tab.", "readAccessMinRole": "User" }, - "//[RandomPhoto]": [ - "This feature enables you to generate 'random photo' urls. That URL returns a photo random selected from your gallery. You can use the url with 3rd party application like random changing desktop background. Note: With the current implementation, random link also requires login." - ], + "//[RandomPhoto]": "This feature enables you to generate 'random photo' urls. That URL returns a photo random selected from your gallery. You can use the url with 3rd party application like random changing desktop background. Note: With the current implementation, random link also requires login.", "RandomPhoto": { - "//[enabled]": [ - "Enables random link generation." - ], + "//[enabled]": "Enables random link generation.", "enabled": true }, + "Extensions": { + "enabled": true, + "//[repositoryUrl]": "Repository url that points to a list of extensions in .md format.", + "repositoryUrl": "https://raw.githubusercontent.com/bpatrik/pigallery2/master/extension/REPOSITORY.md", + "//[folder]": "Folder where the app stores all extensions. Individual extensions live in their own sub-folders.", + "folder": "extensions", + "extensions": {}, + "//[cleanUpUnusedTables]": "Automatically removes all tables from the DB that are not used anymore.", + "cleanUpUnusedTables": true + }, "Database": { - "//[type]": [ - "SQLite is recommended." - ], + "//[type]": "SQLite is recommended.", "type": "sqlite", - "//[dbFolder]": [ - "All file-based data will be stored here (sqlite database, job history data)." - ], + "//[dbFolder]": "All file-based data will be stored here (sqlite database, job history data).", "dbFolder": "db", "sqlite": { - "//[DBFileName]": [ - "Sqlite will save the db with this filename." - ], + "//[DBFileName]": "Sqlite will save the db with this filename.", "DBFileName": "sqlite.db" }, "mysql": { @@ -1279,41 +927,27 @@ Environmental variables: } }, "Indexing": { - "//[cachedFolderTimeout]": [ - "If there was no indexing in this time, it reindexes. (skipped if indexes are in DB and sensitivity is low)." - ], + "//[cachedFolderTimeout]": "If there was no indexing in this time, it reindexes. (skipped if indexes are in DB and sensitivity is low).", "cachedFolderTimeout": 3600000, - "//[reIndexingSensitivity]": [ - "Set the reindexing sensitivity. High value check the folders for change more often. Setting to never only indexes if never indexed or explicit running the Indexing Job." - ], + "//[reIndexingSensitivity]": "Set the reindexing sensitivity. High value check the folders for change more often. Setting to never only indexes if never indexed or explicit running the Indexing Job.", "reIndexingSensitivity": "low", - "//[excludeFolderList]": [ - "Folders to exclude from indexing. If an entry starts with '/' it is treated as an absolute path. If it doesn't start with '/' but contains a '/', the path is relative to the image directory. If it doesn't contain a '/', any folder with this name will be excluded." - ], + "//[excludeFolderList]": "Folders to exclude from indexing. If an entry starts with '/' it is treated as an absolute path. If it doesn't start with '/' but contains a '/', the path is relative to the image directory. If it doesn't contain a '/', any folder with this name will be excluded.", "excludeFolderList": [ ".Trash-1000", ".dtrash", "$RECYCLE.BIN" ], - "//[excludeFileList]": [ - "Files that mark a folder to be excluded from indexing. Any folder that contains a file with this name will be excluded from indexing." - ], + "//[excludeFileList]": "Files that mark a folder to be excluded from indexing. Any folder that contains a file with this name will be excluded from indexing.", "excludeFileList": [] }, - "//[AlbumCover]": [ - "Specify a search query and sorting that the app can use to pick the best photo for an album and folder cover. There is no way to manually pick folder and album cover in the app. You can tag some of your photos with 'cover' and set that as search query or rate them to 5 and set sorting to descending by rating." - ], + "//[AlbumCover]": "Specify a search query and sorting that the app can use to pick the best photo for an album and folder cover. There is no way to manually pick folder and album cover in the app. You can tag some of your photos with 'cover' and set that as search query or rate them to 5 and set sorting to descending by rating.", "AlbumCover": { - "//[SearchQuery]": [ - "Filters the sub-folders with this search query. If filter results no photo, the app will search again without the filter." - ], + "//[SearchQuery]": "Filters the sub-folders with this search query. If filter results no photo, the app will search again without the filter.", "SearchQuery": { "type": 100, "text": "" }, - "//[Sorting]": [ - "If multiple cover is available sorts them by these methods and selects the first one." - ], + "//[Sorting]": "If multiple cover is available sorts them by these methods and selects the first one.", "Sorting": [ { "method": "Rating", @@ -1330,59 +964,35 @@ Environmental variables: ] }, "Duplicates": { - "//[listingLimit]": [ - "Maximum number of duplicates to list." - ], + "//[listingLimit]": "Maximum number of duplicates to list.", "listingLimit": 1000 }, - "//[Messaging]": [ - "The App can send messages (like photos on the same day a year ago. aka: \"Top Pick\"). Here you can configure the delivery method." - ], + "//[Messaging]": "The App can send messages (like photos on the same day a year ago. aka: \"Top Pick\"). Here you can configure the delivery method.", "Messaging": { - "//[Email]": [ - "The app uses Nodemailer in the background for sending e-mails. Refer to https://nodemailer.com/usage/ if some options are not clear." - ], + "//[Email]": "The app uses Nodemailer in the background for sending e-mails. Refer to https://nodemailer.com/usage/ if some options are not clear.", "Email": { - "//[emailFrom]": [ - "Some services do not allow sending from random e-mail addresses. Set this accordingly." - ], + "//[emailFrom]": "Some services do not allow sending from random e-mail addresses. Set this accordingly.", "emailFrom": "noreply@pigallery2.com", "smtp": { - "//[host]": [ - "SMTP host server" - ], + "//[host]": "SMTP host server", "host": "", - "//[port]": [ - "SMTP server's port" - ], + "//[port]": "SMTP server's port", "port": 587, - "//[secure]": [ - "Is the connection secure. See https://nodemailer.com/smtp/#tls-options for more details" - ], + "//[secure]": "Is the connection secure. See https://nodemailer.com/smtp/#tls-options for more details", "secure": false, - "//[requireTLS]": [ - "if this is true and secure is false then Nodemailer (used library in the background) tries to use STARTTLS. See https://nodemailer.com/smtp/#tls-options for more details" - ], + "//[requireTLS]": "if this is true and secure is false then Nodemailer (used library in the background) tries to use STARTTLS. See https://nodemailer.com/smtp/#tls-options for more details", "requireTLS": true, - "//[user]": [ - "User to connect to the SMTP server." - ], + "//[user]": "User to connect to the SMTP server.", "user": "", - "//[password]": [ - "Password to connect to the SMTP server." - ], + "//[password]": "Password to connect to the SMTP server.", "password": "" } } }, "Jobs": { - "//[maxSavedProgress]": [ - "Job history size." - ], + "//[maxSavedProgress]": "Job history size.", "maxSavedProgress": 20, - "//[mediaProcessingBatchSize]": [ - "Jobs load this many photos or videos from the DB for processing at once." - ], + "//[mediaProcessingBatchSize]": "Jobs load this many photos or videos from the DB for processing at once.", "mediaProcessingBatchSize": 1000, "scheduled": [ { @@ -1407,12 +1017,13 @@ Environmental variables: } }, { - "name": "Thumbnail Generation", - "jobName": "Thumbnail Generation", + "name": "Photo Converting", + "jobName": "Photo Converting", "config": { "sizes": [ - 240 + 320 ], + "maxVideoSize": 800, "indexedOnly": true }, "allowParallelRun": false, @@ -1421,18 +1032,6 @@ Environmental variables: "afterScheduleName": "Album Cover Filling" } }, - { - "name": "Photo Converting", - "jobName": "Photo Converting", - "config": { - "indexedOnly": true - }, - "allowParallelRun": false, - "trigger": { - "type": "after", - "afterScheduleName": "Thumbnail Generation" - } - }, { "name": "Video Converting", "jobName": "Video Converting", @@ -1471,4 +1070,4 @@ Environmental variables: } ] } -}``` +}``` \ No newline at end of file