diff --git a/MANPAGE.md b/MANPAGE.md index c23ca95b..354765b7 100644 --- a/MANPAGE.md +++ b/MANPAGE.md @@ -18,7 +18,7 @@ Meta cli options: --config-save-and-exist creates config file and terminates can be configured through the configuration file, cli switches and environmental variables. -All settings are case sensitive. +All settings are case-sensitive. Example for setting config MyConf through cli: ' --MyConf=5' and through env variable: 'SET MyConf=5' . @@ -26,234 +26,302 @@ Default values can be also overwritten by prefixing the options with 'default-', like ' --default-MyConf=5' and 'SET default-MyConf=5' App CLI options: - --Server-applicationTitle (default: 'PiGallery 2') - --Server-publicUrl If you access the page form local network its good to know the public url for creating sharing link. (default: '') - --Server-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. (default: '') - --Server-apiPath PiGallery api path. (default: '/pgapi') - --Server-customHTMLHead Injects the content of this between the HTML tags of the app. (You can use it add analytics or custom code to the app). (default: '') - --Server-sessionSecret (default: []) - --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 Runs directory scanning and thumbnail generation in a different thread. (default: true) - --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 ads "Server-Timing" http header to the response. (default: false) - --Users-authenticationRequired Enables user management with login to password protect the gallery. (default: true) - --Users-unAuthenticatedUserRole Default user right when password protection is disabled. (default: 'Admin') - --Users-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. (default: []) - --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-defaultPhotoSortingMethod Default sorting method for photo and video in a directory results. (default: 'ascDate') - --Gallery-defaultSearchSortingMethod Default sorting method for photo and video in a search results. (default: 'descDate') - --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-enableOnScrollThumbnailPrioritising Those thumbnails will be rendered first that are in view. (default: true) - --Gallery-NavBar-showItemCount Shows the number photos and videos on the navigation bar. (default: true) - --Gallery-NavBar-links Visible links in the top menu. (default: [{"type":1},{"type":3},{"type":2}]) - --Gallery-captionFirstNaming Show the caption (IPTC 120) tags from the EXIF data instead of the filenames. (default: false) - --Gallery-enableDownloadZip Enable download zip of a directory contents Directory flattening. (Does not work for searches.) (default: false) - --Gallery-enableDirectoryFlattening Adds a button to flattens 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) - --Gallery-Lightbox-defaultSlideshowSpeed Default time interval for displaying a photo in the slide show. (default: 5) - --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) - --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-personFaceMargin Person face size ratio on the face thumbnail. (default: 0.6) - --Media-Video-enabled (default: true) - --Media-Video-supportedFormatsWithTranscoding Video formats that are supported after transcoding (with the build-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"]) - --Media-Video-transcoding-bitRate Target bit rate of the output video will be scaled down this this. This should be less than the upload rate of your home server. (default: 5242880) - --Media-Video-transcoding-resolution The height of the output video will be scaled down to this, while keeping the aspect ratio. (default: 720) - --Media-Video-transcoding-fps Target frame per second (fps) of the output video will be scaled down this this. (default: 25) - --Media-Video-transcoding-format (default: 'mp4') - --Media-Video-transcoding-mp4Codec (default: 'libx264') - --Media-Video-transcoding-webmCodec (default: 'libvpx') - --Media-Video-transcoding-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. (default: 23) - --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-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) - --MetaFile-gpx Reads *.gpx files and renders them on the map. (default: true) - --MetaFile-GPXCompressing-enabled Enables lossy (based on delta time and distance. Too frequent points are removed) GPX compression. (default: true) - --MetaFile-GPXCompressing-onTheFly Enables on the fly *.gpx compression. (default: true) - --MetaFile-GPXCompressing-minDistance Filters out entry that are closer than this in meters. (default: 5) - --MetaFile-GPXCompressing-minTimeDistance Filters out entry that are closer than this in time in milliseconds. (default: 5000) - --MetaFile-markdown Reads *.md files in a directory and shows the next to the map. (default: true) - --MetaFile-pg2conf Reads *.pg2conf files (You can use it for custom sorting and saved search (albums)). (default: true) - --MetaFile-supportedFormats The app will read and process these files. (default: ["gpx","pg2conf","md"]) - --Album-enabled (default: true) - --Search-enabled Enables searching. (default: true) - --Search-searchCacheTimeout Search cache timeout. (default: 3600000) - --Search-AutoComplete-enabled Show hints while typing search query. (default: true) - --Search-AutoComplete-targetItemsPerCategory Maximum number autocomplete items shown per category. (default: 5) - --Search-AutoComplete-maxItems Maximum number autocomplete items shown at once. (default: 30) - --Search-AutoComplete-cacheTimeout Autocomplete cache timeout. (default: 3600000) - --Search-maxMediaResult Maximum number of photos and videos that are listed in one search result. (default: 10000) - --Search-maxDirectoryResult Maximum number of directories that are listed in one search result. (default: 200) - --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-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) - --Map-mapProvider (default: 'OpenStreetMap') - --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":""}]) - --Map-maxPreviewMarkers Maximum number of markers to be shown on the map preview on the gallery page. (default: 50) - --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) - --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') - --Database-mysql-host (default: 'localhost') - --Database-mysql-port (default: 3306) - --Database-mysql-database (default: 'pigallery2') - --Database-mysql-username (default: '') - --Database-mysql-password (default: '') - --Indexing-cachedFolderTimeout If there was no indexing in this time, it reindexes. (skipped if indexes are in DB and sensitivity is low). (default: 3600000) - --Indexing-reIndexingSensitivity Set the reindexing sensitivity. High value check the folders for change more often. (default: 'low') - --Indexing-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. (default: [".Trash-1000",".dtrash","$RECYCLE.BIN"]) - --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. (default: []) - --Preview-SearchQuery Filters the sub-folders with this search query. If filter results no photo, the app will search again without the filter. (default: {"type":100,"text":""}) - --Preview-Sorting If multiple preview is available sorts them by these methods and selects the first one. (default: [6,4]) - --Duplicates-listingLimit Maximum number of duplicates to list. (default: 1000) - --Jobs-maxSavedProgress Job history size. (default: 20) - --Jobs-mediaProcessingBatchSize Jobs load this many photos or videos form the DB for processing at once. (default: 1000) - --Jobs-scheduled (default: [{"name":"Indexing","jobName":"Indexing","config":{"indexChangesOnly":true},"allowParallelRun":false,"trigger":{"type":1}},{"name":"Preview Filling","jobName":"Preview 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":"Preview 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"}}]) + --Server-applicationTitle (default: 'PiGallery 2') + --Server-publicUrl If you access the page form local network its good to know the public url for creating sharing link. (default: '') + --Server-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. (default: '') + --Server-apiPath PiGallery api path. (default: '/pgapi') + --Server-customHTMLHead Injects the content of this between the HTML tags of the app. (You can use it add analytics or custom code to the app). (default: '') + --Server-svgIcon-viewBox SVG path viewBox. See: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/viewBox (default: '0 0 512 512') + --Server-svgIcon-items Content elements (paths, circles, rects) of the SVG icon. Icons used on the map: fontawesome.com/icons. (default: '') + --Server-sessionSecret (default: []) + --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 ads "Server-Timing" http header to the response. (default: false) + --Users-authenticationRequired Enables user management with login to password protect the gallery. (default: true) + --Users-unAuthenticatedUserRole Default user right when password protection is disabled. (default: 'Admin') + --Users-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. (default: []) + --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-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 flattens 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) + --Gallery-NavBar-defaultGidSize Default grid size that is used to render photos and videos. (default: 'medium') + --Gallery-NavBar-showItemCount Shows the number photos and videos on the navigation bar. (default: true) + --Gallery-NavBar-links Visible links in the top menu. (default: [{"type":1},{"type":3},{"type":2}]) + --Gallery-NavBar-NavbarShowDelay Ratio of the page height, you need to scroll to show the navigation bar. (default: 0.3) + --Gallery-NavBar-NavbarHideDelay Ratio of the page height, you need to scroll to hide the navigation bar. (default: 0.15) + --Gallery-NavBar-showScrollUpButton Set when the floating scroll-up button should be visible. (default: 'mobileOnly') + --Gallery-NavBar-SortingGrouping-defaultPhotoSortingMethod-method (default: 'Date') + --Gallery-NavBar-SortingGrouping-defaultPhotoSortingMethod-ascending (default: true) + --Gallery-NavBar-SortingGrouping-defaultSearchSortingMethod-method (default: 'Date') + --Gallery-NavBar-SortingGrouping-defaultSearchSortingMethod-ascending (default: false) + --Gallery-NavBar-SortingGrouping-defaultPhotoGroupingMethod-method (default: 'Date') + --Gallery-NavBar-SortingGrouping-defaultPhotoGroupingMethod-ascending (default: true) + --Gallery-NavBar-SortingGrouping-defaultSearchGroupingMethod-method (default: 'Date') + --Gallery-NavBar-SortingGrouping-defaultSearchGroupingMethod-ascending (default: false) + --Gallery-captionFirstNaming Show the caption (IPTC 120) tags from the EXIF data instead of the filenames. (default: false) + --Gallery-Lightbox-defaultSlideshowSpeed Default time interval for displaying a photo in the slide show. (default: 5) + --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-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) to be auto open. (default: false) + --Gallery-TopBlogStartsOpen Makes inline blog (*.md files content) to be 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) + --Media-Video-enabled (default: true) + --Media-Video-supportedFormatsWithTranscoding Video formats that are supported after transcoding (with the build-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"]) + --Media-Video-transcoding-bitRate Target bit rate of the output video will be scaled down this this. This should be less than the upload rate of your home server. (default: 5242880) + --Media-Video-transcoding-resolution The height of the output video will be scaled down to this, while keeping the aspect ratio. (default: 720) + --Media-Video-transcoding-fps Target frame per second (fps) of the output video will be scaled down this this. (default: 25) + --Media-Video-transcoding-format (default: 'mp4') + --Media-Video-transcoding-mp4Codec (default: 'libx264') + --Media-Video-transcoding-webmCodec (default: 'libvpx') + --Media-Video-transcoding-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. (default: 23) + --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-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) + --MetaFile-gpx Reads *.gpx files and renders them on the map. (default: true) + --MetaFile-GPXCompressing-enabled Enables lossy (based on delta time and distance. Too frequent points are removed) GPX compression. (default: true) + --MetaFile-GPXCompressing-onTheFly Enables on the fly *.gpx compression. (default: true) + --MetaFile-GPXCompressing-minDistance Filters out entry that are closer than this to each other in meters. (default: 5) + --MetaFile-GPXCompressing-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). (default: 5) + --MetaFile-GPXCompressing-minTimeDistance Filters out entry that are closer than this in time in milliseconds. (default: 5000) + --MetaFile-markdown Reads *.md files in a directory and shows the next to the map. (default: true) + --MetaFile-pg2conf Reads *.pg2conf files (You can use it for custom sorting and saved search (albums)). (default: true) + --MetaFile-supportedFormats The app will read and process these files. (default: ["gpx","pg2conf","md"]) + --Album-enabled (default: true) + --Search-enabled Enables searching. (default: true) + --Search-searchCacheTimeout Search cache timeout. (default: 3600000) + --Search-AutoComplete-enabled Show hints while typing search query. (default: true) + --Search-AutoComplete-ItemsPerCategory-maxItems Maximum number autocomplete items shown at once. If there is not enough items to reach this value, it takes upto double of the individual items. (default: 20) + --Search-AutoComplete-ItemsPerCategory-fileName Maximum number autocomplete items shown per photo category. (default: 2) + --Search-AutoComplete-ItemsPerCategory-directory Maximum number autocomplete items shown per directory category. (default: 2) + --Search-AutoComplete-ItemsPerCategory-caption Maximum number autocomplete items shown per caption category. (default: 3) + --Search-AutoComplete-ItemsPerCategory-position Maximum number autocomplete items shown per position category. (default: 3) + --Search-AutoComplete-ItemsPerCategory-person Maximum number autocomplete items shown per faces category. (default: 5) + --Search-AutoComplete-ItemsPerCategory-keyword Maximum number autocomplete items shown per keyword category. (default: 5) + --Search-AutoComplete-cacheTimeout Autocomplete cache timeout. (default: 3600000) + --Search-maxMediaResult Maximum number of photos and videos that are listed in one search result. (default: 10000) + --Search-maxDirectoryResult Maximum number of directories that are listed in one search result. (default: 200) + --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-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) + --Map-mapProvider (default: 'OpenStreetMap') + --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-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) + --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') + --Database-mysql-host (default: 'localhost') + --Database-mysql-port (default: 3306) + --Database-mysql-database (default: 'pigallery2') + --Database-mysql-username (default: '') + --Database-mysql-password (default: '') + --Indexing-cachedFolderTimeout If there was no indexing in this time, it reindexes. (skipped if indexes are in DB and sensitivity is low). (default: 3600000) + --Indexing-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. (default: 'low') + --Indexing-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. (default: [".Trash-1000",".dtrash","$RECYCLE.BIN"]) + --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. (default: []) + --AlbumCover-SearchQuery Filters the sub-folders with this search query. If filter results no photo, the app will search again without the filter. (default: {"type":100,"text":""}) + --AlbumCover-Sorting If multiple cover is available sorts them by these methods and selects the first one. (default: [{"method":30,"ascending":false},{"method":20,"ascending":false},{"method":40,"ascending":false}]) + --Duplicates-listingLimit Maximum number of duplicates to list. (default: 1000) + --Messaging-Email-emailFrom Some services do not allow sending from random e-mail addresses. Set this accordingly. (default: 'noreply@pigallery2.com') + --Messaging-Email-smtp-host SMTP host server (default: '') + --Messaging-Email-smtp-port SMTP server's port (default: 587) + --Messaging-Email-smtp-secure Is the connection secure. See https://nodemailer.com/smtp/#tls-options for more details (default: false) + --Messaging-Email-smtp-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 (default: true) + --Messaging-Email-smtp-user User to connect to the SMTP server. (default: '') + --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 form 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"}}]) Environmental variables: - Server-applicationTitle (default: 'PiGallery 2') - Server-publicUrl If you access the page form local network its good to know the public url for creating sharing link. (default: '') - Server-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. (default: '') - Server-apiPath PiGallery api path. (default: '/pgapi') - Server-customHTMLHead Injects the content of this between the HTML tags of the app. (You can use it add analytics or custom code to the app). (default: '') - Server-sessionSecret (default: []) - 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) - 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 Runs directory scanning and thumbnail generation in a different thread. (default: true) - 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 ads "Server-Timing" http header to the response. (default: false) - Users-authenticationRequired Enables user management with login to password protect the gallery. (default: true) - Users-unAuthenticatedUserRole Default user right when password protection is disabled. (default: 'Admin') - Users-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. (default: []) - 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-defaultPhotoSortingMethod Default sorting method for photo and video in a directory results. (default: 'ascDate') - Gallery-defaultSearchSortingMethod Default sorting method for photo and video in a search results. (default: 'descDate') - 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-enableOnScrollThumbnailPrioritising Those thumbnails will be rendered first that are in view. (default: true) - Gallery-NavBar-showItemCount Shows the number photos and videos on the navigation bar. (default: true) - Gallery-NavBar-links Visible links in the top menu. (default: [{"type":1},{"type":3},{"type":2}]) - Gallery-captionFirstNaming Show the caption (IPTC 120) tags from the EXIF data instead of the filenames. (default: false) - Gallery-enableDownloadZip Enable download zip of a directory contents Directory flattening. (Does not work for searches.) (default: false) - Gallery-enableDirectoryFlattening Adds a button to flattens 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) - Gallery-Lightbox-defaultSlideshowSpeed Default time interval for displaying a photo in the slide show. (default: 5) - 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) - 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-personFaceMargin Person face size ratio on the face thumbnail. (default: 0.6) - Media-Video-enabled (default: true) - Media-Video-supportedFormatsWithTranscoding Video formats that are supported after transcoding (with the build-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"]) - Media-Video-transcoding-bitRate Target bit rate of the output video will be scaled down this this. This should be less than the upload rate of your home server. (default: 5242880) - Media-Video-transcoding-resolution The height of the output video will be scaled down to this, while keeping the aspect ratio. (default: 720) - Media-Video-transcoding-fps Target frame per second (fps) of the output video will be scaled down this this. (default: 25) - Media-Video-transcoding-format (default: 'mp4') - Media-Video-transcoding-mp4Codec (default: 'libx264') - Media-Video-transcoding-webmCodec (default: 'libvpx') - Media-Video-transcoding-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. (default: 23) - 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-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) - MetaFile-gpx Reads *.gpx files and renders them on the map. (default: true) - MetaFile-GPXCompressing-enabled Enables lossy (based on delta time and distance. Too frequent points are removed) GPX compression. (default: true) - MetaFile-GPXCompressing-onTheFly Enables on the fly *.gpx compression. (default: true) - MetaFile-GPXCompressing-minDistance Filters out entry that are closer than this in meters. (default: 5) - MetaFile-GPXCompressing-minTimeDistance Filters out entry that are closer than this in time in milliseconds. (default: 5000) - MetaFile-markdown Reads *.md files in a directory and shows the next to the map. (default: true) - MetaFile-pg2conf Reads *.pg2conf files (You can use it for custom sorting and saved search (albums)). (default: true) - MetaFile-supportedFormats The app will read and process these files. (default: ["gpx","pg2conf","md"]) - Album-enabled (default: true) - Search-enabled Enables searching. (default: true) - Search-searchCacheTimeout Search cache timeout. (default: 3600000) - Search-AutoComplete-enabled Show hints while typing search query. (default: true) - Search-AutoComplete-targetItemsPerCategory Maximum number autocomplete items shown per category. (default: 5) - Search-AutoComplete-maxItems Maximum number autocomplete items shown at once. (default: 30) - Search-AutoComplete-cacheTimeout Autocomplete cache timeout. (default: 3600000) - Search-maxMediaResult Maximum number of photos and videos that are listed in one search result. (default: 10000) - Search-maxDirectoryResult Maximum number of directories that are listed in one search result. (default: 200) - 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-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) - Map-mapProvider (default: 'OpenStreetMap') - 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":""}]) - Map-maxPreviewMarkers Maximum number of markers to be shown on the map preview on the gallery page. (default: 50) - 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) - 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') - Database-mysql-host (default: 'localhost') - MYSQL_HOST same as Database-mysql-host - Database-mysql-port (default: 3306) - MYSQL_PORT same as Database-mysql-port - Database-mysql-database (default: 'pigallery2') - MYSQL_DATABASE same as Database-mysql-database - Database-mysql-username (default: '') - MYSQL_USERNAME same as Database-mysql-username - Database-mysql-password (default: '') - MYSQL_PASSWORD same as Database-mysql-password - Indexing-cachedFolderTimeout If there was no indexing in this time, it reindexes. (skipped if indexes are in DB and sensitivity is low). (default: 3600000) - Indexing-reIndexingSensitivity Set the reindexing sensitivity. High value check the folders for change more often. (default: 'low') - Indexing-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. (default: [".Trash-1000",".dtrash","$RECYCLE.BIN"]) - 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. (default: []) - Preview-SearchQuery Filters the sub-folders with this search query. If filter results no photo, the app will search again without the filter. (default: {"type":100,"text":""}) - Preview-Sorting If multiple preview is available sorts them by these methods and selects the first one. (default: [6,4]) - Duplicates-listingLimit Maximum number of duplicates to list. (default: 1000) - Jobs-maxSavedProgress Job history size. (default: 20) - Jobs-mediaProcessingBatchSize Jobs load this many photos or videos form the DB for processing at once. (default: 1000) - Jobs-scheduled (default: [{"name":"Indexing","jobName":"Indexing","config":{"indexChangesOnly":true},"allowParallelRun":false,"trigger":{"type":1}},{"name":"Preview Filling","jobName":"Preview 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":"Preview 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"}}]) + Server-applicationTitle (default: 'PiGallery 2') + Server-publicUrl If you access the page form local network its good to know the public url for creating sharing link. (default: '') + Server-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. (default: '') + Server-apiPath PiGallery api path. (default: '/pgapi') + Server-customHTMLHead Injects the content of this between the HTML tags of the app. (You can use it add analytics or custom code to the app). (default: '') + Server-svgIcon-viewBox SVG path viewBox. See: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/viewBox (default: '0 0 512 512') + Server-svgIcon-items Content elements (paths, circles, rects) of the SVG icon. Icons used on the map: fontawesome.com/icons. (default: '') + Server-sessionSecret (default: []) + 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) + 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 ads "Server-Timing" http header to the response. (default: false) + Users-authenticationRequired Enables user management with login to password protect the gallery. (default: true) + Users-unAuthenticatedUserRole Default user right when password protection is disabled. (default: 'Admin') + Users-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. (default: []) + 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-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 flattens 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) + Gallery-NavBar-defaultGidSize Default grid size that is used to render photos and videos. (default: 'medium') + Gallery-NavBar-showItemCount Shows the number photos and videos on the navigation bar. (default: true) + Gallery-NavBar-links Visible links in the top menu. (default: [{"type":1},{"type":3},{"type":2}]) + Gallery-NavBar-NavbarShowDelay Ratio of the page height, you need to scroll to show the navigation bar. (default: 0.3) + Gallery-NavBar-NavbarHideDelay Ratio of the page height, you need to scroll to hide the navigation bar. (default: 0.15) + Gallery-NavBar-showScrollUpButton Set when the floating scroll-up button should be visible. (default: 'mobileOnly') + Gallery-NavBar-SortingGrouping-defaultPhotoSortingMethod-method (default: 'Date') + Gallery-NavBar-SortingGrouping-defaultPhotoSortingMethod-ascending (default: true) + Gallery-NavBar-SortingGrouping-defaultSearchSortingMethod-method (default: 'Date') + Gallery-NavBar-SortingGrouping-defaultSearchSortingMethod-ascending (default: false) + Gallery-NavBar-SortingGrouping-defaultPhotoGroupingMethod-method (default: 'Date') + Gallery-NavBar-SortingGrouping-defaultPhotoGroupingMethod-ascending (default: true) + Gallery-NavBar-SortingGrouping-defaultSearchGroupingMethod-method (default: 'Date') + Gallery-NavBar-SortingGrouping-defaultSearchGroupingMethod-ascending (default: false) + Gallery-captionFirstNaming Show the caption (IPTC 120) tags from the EXIF data instead of the filenames. (default: false) + Gallery-Lightbox-defaultSlideshowSpeed Default time interval for displaying a photo in the slide show. (default: 5) + 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-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) to be auto open. (default: false) + Gallery-TopBlogStartsOpen Makes inline blog (*.md files content) to be 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) + Media-Video-enabled (default: true) + Media-Video-supportedFormatsWithTranscoding Video formats that are supported after transcoding (with the build-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"]) + Media-Video-transcoding-bitRate Target bit rate of the output video will be scaled down this this. This should be less than the upload rate of your home server. (default: 5242880) + Media-Video-transcoding-resolution The height of the output video will be scaled down to this, while keeping the aspect ratio. (default: 720) + Media-Video-transcoding-fps Target frame per second (fps) of the output video will be scaled down this this. (default: 25) + Media-Video-transcoding-format (default: 'mp4') + Media-Video-transcoding-mp4Codec (default: 'libx264') + Media-Video-transcoding-webmCodec (default: 'libvpx') + Media-Video-transcoding-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. (default: 23) + 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-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) + MetaFile-gpx Reads *.gpx files and renders them on the map. (default: true) + MetaFile-GPXCompressing-enabled Enables lossy (based on delta time and distance. Too frequent points are removed) GPX compression. (default: true) + MetaFile-GPXCompressing-onTheFly Enables on the fly *.gpx compression. (default: true) + MetaFile-GPXCompressing-minDistance Filters out entry that are closer than this to each other in meters. (default: 5) + MetaFile-GPXCompressing-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). (default: 5) + MetaFile-GPXCompressing-minTimeDistance Filters out entry that are closer than this in time in milliseconds. (default: 5000) + MetaFile-markdown Reads *.md files in a directory and shows the next to the map. (default: true) + MetaFile-pg2conf Reads *.pg2conf files (You can use it for custom sorting and saved search (albums)). (default: true) + MetaFile-supportedFormats The app will read and process these files. (default: ["gpx","pg2conf","md"]) + Album-enabled (default: true) + Search-enabled Enables searching. (default: true) + Search-searchCacheTimeout Search cache timeout. (default: 3600000) + Search-AutoComplete-enabled Show hints while typing search query. (default: true) + Search-AutoComplete-ItemsPerCategory-maxItems Maximum number autocomplete items shown at once. If there is not enough items to reach this value, it takes upto double of the individual items. (default: 20) + Search-AutoComplete-ItemsPerCategory-fileName Maximum number autocomplete items shown per photo category. (default: 2) + Search-AutoComplete-ItemsPerCategory-directory Maximum number autocomplete items shown per directory category. (default: 2) + Search-AutoComplete-ItemsPerCategory-caption Maximum number autocomplete items shown per caption category. (default: 3) + Search-AutoComplete-ItemsPerCategory-position Maximum number autocomplete items shown per position category. (default: 3) + Search-AutoComplete-ItemsPerCategory-person Maximum number autocomplete items shown per faces category. (default: 5) + Search-AutoComplete-ItemsPerCategory-keyword Maximum number autocomplete items shown per keyword category. (default: 5) + Search-AutoComplete-cacheTimeout Autocomplete cache timeout. (default: 3600000) + Search-maxMediaResult Maximum number of photos and videos that are listed in one search result. (default: 10000) + Search-maxDirectoryResult Maximum number of directories that are listed in one search result. (default: 200) + 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-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) + Map-mapProvider (default: 'OpenStreetMap') + 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-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) + 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') + Database-mysql-host (default: 'localhost') + MYSQL_HOST same as Database-mysql-host + Database-mysql-port (default: 3306) + MYSQL_PORT same as Database-mysql-port + Database-mysql-database (default: 'pigallery2') + MYSQL_DATABASE same as Database-mysql-database + Database-mysql-username (default: '') + MYSQL_USERNAME same as Database-mysql-username + Database-mysql-password (default: '') + MYSQL_PASSWORD same as Database-mysql-password + Indexing-cachedFolderTimeout If there was no indexing in this time, it reindexes. (skipped if indexes are in DB and sensitivity is low). (default: 3600000) + Indexing-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. (default: 'low') + Indexing-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. (default: [".Trash-1000",".dtrash","$RECYCLE.BIN"]) + 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. (default: []) + AlbumCover-SearchQuery Filters the sub-folders with this search query. If filter results no photo, the app will search again without the filter. (default: {"type":100,"text":""}) + AlbumCover-Sorting If multiple cover is available sorts them by these methods and selects the first one. (default: [{"method":30,"ascending":false},{"method":20,"ascending":false},{"method":40,"ascending":false}]) + Duplicates-listingLimit Maximum number of duplicates to list. (default: 1000) + Messaging-Email-emailFrom Some services do not allow sending from random e-mail addresses. Set this accordingly. (default: 'noreply@pigallery2.com') + Messaging-Email-smtp-host SMTP host server (default: '') + Messaging-Email-smtp-port SMTP server's port (default: 587) + Messaging-Email-smtp-secure Is the connection secure. See https://nodemailer.com/smtp/#tls-options for more details (default: false) + Messaging-Email-smtp-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 (default: true) + Messaging-Email-smtp-user User to connect to the SMTP server. (default: '') + 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 form 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"}}]) ``` ### `config.json` sample: @@ -275,6 +343,19 @@ Environmental variables: "Injects the content of this between the HTML tags of the app. (You can use it add analytics or custom code to the app)." ], "customHTMLHead": "", + "//[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": "0 0 512 512", + "//[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." @@ -290,9 +371,9 @@ Environmental variables: "host": "0.0.0.0", "Threading": { "//[enabled]": [ - "Runs directory scanning and thumbnail generation in a different thread." + "[Deprecated, will be removed in the next release] Runs directory scanning and thumbnail generation in a different thread." ], - "enabled": true, + "enabled": false, "//[thumbnailThreads]": [ "Number of threads that are used to generate thumbnails. If 0, number of 'CPU cores -1' threads will be used." ], @@ -336,14 +417,6 @@ Environmental variables: "Those thumbnails get higher priority that are visible on the screen." ], "enableOnScrollRendering": true, - "//[defaultPhotoSortingMethod]": [ - "Default sorting method for photo and video in a directory results." - ], - "defaultPhotoSortingMethod": "ascDate", - "//[defaultSearchSortingMethod]": [ - "Default sorting method for photo and video in a search results." - ], - "defaultSearchSortingMethod": "descDate", "//[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." ], @@ -353,6 +426,18 @@ Environmental variables: ], "enableOnScrollThumbnailPrioritising": true, "NavBar": { + "//[enableDownloadZip]": [ + "Enable download zip of a directory contents Directory flattening. (Does not work for searches.)" + ], + "enableDownloadZip": false, + "//[enableDirectoryFlattening]": [ + "Adds a button to flattens 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": "medium", "//[showItemCount]": [ "Shows the number photos and videos on the navigation bar." ], @@ -370,20 +455,54 @@ Environmental variables: { "type": "faces" } - ] + ], + "//[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": 0.15, + "//[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": { + "method": "Date", + "ascending": true + }, + "//[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": { + "method": "Date", + "ascending": true + }, + "//[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": false, - "//[enableDownloadZip]": [ - "Enable download zip of a directory contents Directory flattening. (Does not work for searches.)" - ], - "enableDownloadZip": false, - "//[enableDirectoryFlattening]": [ - "Adds a button to flattens 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, "Lightbox": { "//[defaultSlideshowSpeed]": [ "Default time interval for displaying a photo in the slide show." @@ -401,7 +520,47 @@ Environmental variables: "If enabled, lightbox will loop videos by default." ], "loopVideos": false - } + }, + "//[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": true, + "//[defaultMode]": [ + "Sets the default theme mode that is used for the application." + ], + "defaultMode": "auto", + "//[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": [ + { + "//[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": ":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) to be auto open." + ], + "InlineBlogStartsOpen": false, + "//[TopBlogStartsOpen]": [ + "Makes inline blog (*.md files content) to be auto open." + ], + "TopBlogStartsOpen": false }, "Media": { "Thumbnail": { @@ -428,10 +587,14 @@ Environmental variables: "Between 0-100." ], "quality": 80, - "//[personFaceMargin]": [ - "Person face size ratio on the face thumbnail." + "//[smartSubsample]": [ + "Use high quality chroma subsampling in webp. See: https://sharp.pixelplumbing.com/api-output#webp." ], - "personFaceMargin": 0.6 + "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." @@ -564,9 +727,13 @@ Environmental variables: ], "onTheFly": true, "//[minDistance]": [ - "Filters out entry that are closer than this in meters." + "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": 5, "//[minTimeDistance]": [ "Filters out entry that are closer than this in time in milliseconds." ], @@ -606,14 +773,39 @@ Environmental variables: "Show hints while typing search query." ], "enabled": true, - "//[targetItemsPerCategory]": [ + "//[ItemsPerCategory]": [ "Maximum number autocomplete items shown per category." ], - "targetItemsPerCategory": 5, - "//[maxItems]": [ - "Maximum number autocomplete items shown at once." - ], - "maxItems": 30, + "ItemsPerCategory": { + "//[maxItems]": [ + "Maximum number autocomplete items shown at once. If there is not enough items to reach this value, it takes upto double of the individual items." + ], + "maxItems": 20, + "//[fileName]": [ + "Maximum number autocomplete items shown per photo category." + ], + "fileName": 2, + "//[directory]": [ + "Maximum number autocomplete items shown per directory category." + ], + "directory": 2, + "//[caption]": [ + "Maximum number autocomplete items shown per caption category." + ], + "caption": 3, + "//[position]": [ + "Maximum number autocomplete items shown per position category." + ], + "position": 3, + "//[person]": [ + "Maximum number autocomplete items shown per faces category." + ], + "person": 5, + "//[keyword]": [ + "Maximum number autocomplete items shown per keyword category." + ], + "keyword": 5 + }, "//[cacheTimeout]": [ "Autocomplete cache timeout. " ], @@ -673,13 +865,371 @@ Environmental variables: "//[url]": [ "Url of a map layer." ], - "url": "" + "url": "", + "//[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": 50 + "maxPreviewMarkers": 50, + "//[MapPathGroupConfig]": [ + "Markers are grouped and themed by these settings" + ], + "MapPathGroupConfig": [ + { + "//[name]": [ + "Name of the marker and path group on the map." + ], + "name": "Transportation", + "//[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": [ + "flight", + "flying" + ], + "//[theme]": [ + "List of regex string to match the name of the path." + ], + "theme": { + "//[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": "4 8", + "//[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": "0 0 567 512", + "//[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": [ + "drive", + "driving" + ], + "//[theme]": [ + "List of regex string to match the name of the path." + ], + "theme": { + "//[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": "4 8", + "//[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": "0 0 640 512", + "//[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": [ + "ship", + "sailing", + "cruise" + ], + "//[theme]": [ + "List of regex string to match the name of the path." + ], + "theme": { + "//[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": "4 8", + "//[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": "0 0 576 512", + "//[items]": [ + "Content elements (paths, circles, rects) of the SVG icon. Icons used on the map: fontawesome.com/icons." + ], + "items": "" + } + } + } + ] + }, + { + "//[name]": [ + "Name of the marker and path group on the map." + ], + "name": "Sport", + "//[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": [ + "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": "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": "", + "//[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": "0 0 417 512", + "//[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": [ + "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": "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": "", + "//[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": "0 0 320 512", + "//[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": [ + "hike", + "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": "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": "", + "//[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": "0 0 384 512", + "//[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": [ + "bike", + "biking", + "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": "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": "", + "//[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": "0 0 640 512", + "//[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": [ + "skiing", + "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": "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": "", + "//[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": "0 0 512 512", + "//[items]": [ + "Content elements (paths, circles, rects) of the SVG icon. Icons used on the map: fontawesome.com/icons." + ], + "items": "" + } + } + } + ] + }, + { + "//[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]": [ + "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": { + "//[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": "", + "//[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": "0 0 512 512", + "//[items]": [ + "Content elements (paths, circles, rects) of the SVG icon. Icons used on the map: fontawesome.com/icons." + ], + "items": "" + } + } + } + ] + } + ], + "//[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, @@ -734,7 +1284,7 @@ Environmental variables: ], "cachedFolderTimeout": 3600000, "//[reIndexingSensitivity]": [ - "Set the reindexing sensitivity. High value check the folders for change more often." + "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]": [ @@ -750,7 +1300,10 @@ Environmental variables: ], "excludeFileList": [] }, - "Preview": { + "//[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." ], @@ -759,11 +1312,21 @@ Environmental variables: "text": "" }, "//[Sorting]": [ - "If multiple preview is available sorts them by these methods and selects the first one." + "If multiple cover is available sorts them by these methods and selects the first one." ], "Sorting": [ - 6, - 4 + { + "method": "Rating", + "ascending": false + }, + { + "method": "Date", + "ascending": false + }, + { + "method": "PersonCount", + "ascending": false + } ] }, "Duplicates": { @@ -772,6 +1335,46 @@ Environmental variables: ], "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": { + "//[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": "noreply@pigallery2.com", + "smtp": { + "//[host]": [ + "SMTP host server" + ], + "host": "", + "//[port]": [ + "SMTP server's port" + ], + "port": 587, + "//[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": true, + "//[user]": [ + "User to connect to the SMTP server." + ], + "user": "", + "//[password]": [ + "Password to connect to the SMTP server." + ], + "password": "" + } + } + }, "Jobs": { "//[maxSavedProgress]": [ "Job history size." @@ -794,8 +1397,8 @@ Environmental variables: } }, { - "name": "Preview Filling", - "jobName": "Preview Filling", + "name": "Album Cover Filling", + "jobName": "Album Cover Filling", "config": {}, "allowParallelRun": false, "trigger": { @@ -815,7 +1418,7 @@ Environmental variables: "allowParallelRun": false, "trigger": { "type": "after", - "afterScheduleName": "Preview Filling" + "afterScheduleName": "Album Cover Filling" } }, { diff --git a/README.md b/README.md index 4b6cf65e..9b71f37a 100644 --- a/README.md +++ b/README.md @@ -153,73 +153,7 @@ apt-get install build-essential libkrb5-dev gcc g++ ## 3. Feature list - * supported formats [full list here](https://github.com/bpatrik/pigallery2/blob/master/src/common/SupportedFormats.ts): - * images: **jpg, jpeg, jpe, webp, png, gif, svg** - * videos: **mp4, ogg, ogv, webm** - * with (built-in) transcoding: avi, mkv, mov, wmv, flv, mts, m2ts, mpg, 3gp, m4v, mpeg, vob, divx, xvid, ts - * **Rendering directories as it is** - * Listing subdirectories recursively - * Listing photos in a nice grid layout - * showing **tag/keywords, locations, GPS coordinates** for photos - * rendering photos on demand (on scroll) - * **On the fly thumbnail generation** in several sizes - * prioritizes thumbnail generation (generating thumbnail first for the visible photos) - * saving generated thumbnails to TEMP folder for reuse - * supporting multi-core CPUs - * supporting hardware acceleration ([sharp](https://github.com/lovell/sharp)) - * Custom lightbox for full screen photo and video viewing - * keyboard support for navigation - * showing low-res thumbnail while full image loads - * Information panel for showing **Exif and IPTC info** - * Automatic playing - * gesture support (swipe left, right, up) - * shortcut support - * On the fly photo downscaling for faster load [#50](https://github.com/bpatrik/pigallery2/issues/50) - * on zoom, the original photo loads - * Client side caching (directories and search results) - * Rendering **photos** with GPS coordinates **on open street maps** - * .gpx file support: rendering paths to map - * supports [OSM](https://www.openstreetmap.org) and [Mapbox](https://www.mapbox.com) by default, but you can add any provider that has a tile url - * **Two modes: SQL database and no-database mode** - * both modes support - * user management - * password protection can be disabled/enabled - * database mode supports: - * faster directory listing - * searching - * instant search, auto complete - * sharing - * setting link expiration time - * Faces (persons) support - * reads Adobe's XMP Face region metadata. (It is defined by the Metadata Working Group (MWG).) - * shows face bounding box over images - * internalization / translation support - * currently supported languages: eng, hun, ro, ru, fr, many other - * Nice design - * responsive design (phone, tablet desktop support) - * Setup page - * Random photo url - * You can generate an url that returns a random photo from your gallery. You can use this feature to develop 3rd party applications, like: changing desktop background - * duplicate photo detection - * video support - * fully supports `*.mp4` files and partially (might have errors with safari and IE) supports `*.ogg`, `*.ogv`, `*.webm` files - * uses ffmpeg and ffprobe to generate video thumbnails - * can transcode videos to mp4 for better support - * job scheduling support, with the following supported task: [#92](https://github.com/bpatrik/pigallery2/issues/92) - * converting/transcoding videos [#66](https://github.com/bpatrik/pigallery2/issues/66) [#71](https://github.com/bpatrik/pigallery2/issues/71) - * generating thumbnails - * generating converted photos - * cleaning up temp folder - * indexing db - * folder ignoring [#87](https://github.com/bpatrik/pigallery2/issues/87) - * `.pg2conf` UI modifying files. [#177](https://github.com/bpatrik/pigallery2/issues/177). - * List of these files are passed down to the UI modify its behaviour. - * Currently, supported custom, per folder sorting. - * Dockerized - * **Markdown based blogging support** - * you can write some note in the *.md files for every directory - * bug free :) - `In progress` - +See: http://bpatrik.github.io/pigallery2/ ## 4. Suggest/endorse new features Unfortunately, lately I only have a limited time for this hobby project of mine. diff --git a/docs/assets/albums.png b/docs/assets/albums.png new file mode 100644 index 00000000..b353b7c6 Binary files /dev/null and b/docs/assets/albums.png differ diff --git a/docs/assets/blog.png b/docs/assets/blog.png new file mode 100644 index 00000000..c1ec51f8 Binary files /dev/null and b/docs/assets/blog.png differ diff --git a/docs/assets/faces.png b/docs/assets/faces.png new file mode 100644 index 00000000..012da8de Binary files /dev/null and b/docs/assets/faces.png differ diff --git a/docs/assets/filters.png b/docs/assets/filters.png new file mode 100644 index 00000000..eb518c70 Binary files /dev/null and b/docs/assets/filters.png differ diff --git a/docs/assets/icon.png b/docs/assets/icon.png deleted file mode 100644 index 2bca66f2..00000000 Binary files a/docs/assets/icon.png and /dev/null differ diff --git a/docs/assets/icon_inv.png b/docs/assets/icon_inv.png index 32d122dc..889cf029 100644 Binary files a/docs/assets/icon_inv.png and b/docs/assets/icon_inv.png differ diff --git a/docs/assets/lightbox.png b/docs/assets/lightbox.png new file mode 100644 index 00000000..253fcfe5 Binary files /dev/null and b/docs/assets/lightbox.png differ diff --git a/docs/assets/lightbox_info.jpg b/docs/assets/lightbox_info.jpg deleted file mode 100644 index 53a20be3..00000000 Binary files a/docs/assets/lightbox_info.jpg and /dev/null differ diff --git a/docs/assets/local_filters.jpg b/docs/assets/local_filters.jpg deleted file mode 100644 index dad3430a..00000000 Binary files a/docs/assets/local_filters.jpg and /dev/null differ diff --git a/docs/assets/main_page.jpg b/docs/assets/main_page.jpg deleted file mode 100644 index 04ef6b90..00000000 Binary files a/docs/assets/main_page.jpg and /dev/null differ diff --git a/docs/assets/main_page.png b/docs/assets/main_page.png new file mode 100644 index 00000000..3fa07bc1 Binary files /dev/null and b/docs/assets/main_page.png differ diff --git a/docs/assets/map.jpg b/docs/assets/map.jpg deleted file mode 100644 index 9d65f577..00000000 Binary files a/docs/assets/map.jpg and /dev/null differ diff --git a/docs/assets/map.png b/docs/assets/map.png new file mode 100644 index 00000000..9fd65886 Binary files /dev/null and b/docs/assets/map.png differ diff --git a/docs/assets/random_link.jpg b/docs/assets/random_link.jpg deleted file mode 100644 index da237fd6..00000000 Binary files a/docs/assets/random_link.jpg and /dev/null differ diff --git a/docs/assets/random_link.png b/docs/assets/random_link.png new file mode 100644 index 00000000..dd3ecd96 Binary files /dev/null and b/docs/assets/random_link.png differ diff --git a/docs/assets/search.jpg b/docs/assets/search.jpg deleted file mode 100644 index 71873da9..00000000 Binary files a/docs/assets/search.jpg and /dev/null differ diff --git a/docs/assets/search.png b/docs/assets/search.png new file mode 100644 index 00000000..af711554 Binary files /dev/null and b/docs/assets/search.png differ diff --git a/docs/assets/settings.jpg b/docs/assets/settings.jpg deleted file mode 100644 index cd2cc0dc..00000000 Binary files a/docs/assets/settings.jpg and /dev/null differ diff --git a/docs/assets/settings.png b/docs/assets/settings.png new file mode 100644 index 00000000..5cd0caae Binary files /dev/null and b/docs/assets/settings.png differ diff --git a/docs/assets/sharing.jpg b/docs/assets/sharing.jpg deleted file mode 100644 index a7f4f5b8..00000000 Binary files a/docs/assets/sharing.jpg and /dev/null differ diff --git a/docs/assets/sharing.png b/docs/assets/sharing.png new file mode 100644 index 00000000..cf1cf966 Binary files /dev/null and b/docs/assets/sharing.png differ diff --git a/docs/assets/sorting.jpg b/docs/assets/sorting.jpg deleted file mode 100644 index dd4c6733..00000000 Binary files a/docs/assets/sorting.jpg and /dev/null differ diff --git a/docs/assets/video.jpg b/docs/assets/video.jpg deleted file mode 100644 index 03bd69d7..00000000 Binary files a/docs/assets/video.jpg and /dev/null differ diff --git a/docs/assets/video.png b/docs/assets/video.png new file mode 100644 index 00000000..53c146ff Binary files /dev/null and b/docs/assets/video.png differ diff --git a/docs/index.html b/docs/index.html index 70f0eccc..d7e157a5 100644 --- a/docs/index.html +++ b/docs/index.html @@ -31,7 +31,8 @@ -Fork me on GitHub +Fork me on GitHub
@@ -66,10 +67,10 @@ data-icon="octicon-repo-forked" data-show-count="true" aria-label="Fork bpatrik/pigallery2 on GitHub">Fork
- +
- The gallery is a directory first gallery. It renders your directory structure as it is. + The gallery is a directory first gallery. It renders your read-only directory structure as it is. Supports rich search queries and fully dockerized.
@@ -78,29 +79,34 @@
-
+
+ +
+

Photo viewer

Nice photo viewer with optional information panel that shows all important information about the photo.
-
- -
-
- +
+

Map

PiGallery2 reads the location data of the photos and puts them on a nice map. - The gallery also supports *.gps file to show your tracked path on the map too. It by default supports OpenStreetMap and Mapbox, but you can also add you own favourite map provider. + The gallery also supports *.gpx file to show your tracked path on the map too. + It recognize different type of activities (like: running, flying) from the *.gpx files. + The app shows these activities with different color and icon on the map.
+
+ +

Advanced searching

App supports full boolean logic with negation and @@ -118,9 +124,6 @@
-
- -
@@ -154,7 +157,8 @@ last-4-days:2-months-ago
last-4-days:2-years-ago
- See all here: search-query-parser.service.ts. + See all here: search-query-parser.service.ts.

Bool expressions
@@ -165,10 +169,12 @@

Sort order
- Add an empty file like .order_[ORDER].pg2conf + Add an empty file like .order_[ORDER].pg2conf to a folder to override the default sorting for that folder. It's not recursively applied to subfolders.
- Replace [ORDER] in the above shown filename by one of the following values:
+ Replace [ORDER] in the above shown filename + by one of the following values:
descending_name
ascending_name
@@ -181,8 +187,8 @@
-
- +
+

Sharing

@@ -194,19 +200,8 @@
-
-

Easy settings

- PiGallery2 has a rich settings page where you can easily set up the gallery. - Click here to see all the setting in the live demo. -
-
- -
-
- -
-
- +
+

Video playback

@@ -216,23 +211,73 @@
+
+ +
+
+

Local filters

+ Rich filter panel, where you can further filter your directory or search results. +
+
+ + +
+
+ +
+
+

Blog

+ You can add *.md files to your directory and app will show them. + You can tag section in the *.md files with <!-- @pg-date <ISO_DATE> -->, + like: <!-- @pg-date 2015-06-29 --> to attach them to a date. + Then, if you group by date, they will show up at the assigned day. +
+
+ +
+
+ +
+
+

Logical Albums

+ You can create logical albums (a.k.a.: Saved search) from any search query. + Current limitation: It is not possible to create albums from a manually picked photos. +
+
+ + +
+
+ +
+
+

Faces

+ PiGallery2 can read face reagions from photo metadata. + Current limitation: No ML-based, automatic face detection. +
+
+ + +
+
+ +

Random link

You can create a link that will serve a random photo from your gallery. You can use this link with 3rd party applications, like with an automatic wallpaper changer gadget.
-
- -
+
-
- +
+
-

Local filters

- Rich filter panel, where you can further filter your directory or search results. +

Rich settings

+ PiGallery2 has a rich settings page where you can easily set up the gallery. + Click here to see all the setting in the live demo.
@@ -283,23 +328,9 @@
  • supports OSM and Mapbox by default, but you can add any provider that has a tile url
  • -
  • Two modes: SQL database and no-database mode +
  • Indexes Gallery to DB for a snappy user experience
      -
    • both modes supports -
        -
      • user management
      • -
      • password protection can be disabled/enabled
      • -
      -
    • -
    • database mode supports: -
        -
      • faster directory listing
      • -
      • searching
      • -
      • instant search, auto complete
      • -
      • sharing
      • -
      • setting link expiration time
      • -
      -
    • +
    • Both MySQL and SQLite support
  • Faces (persons) support @@ -330,6 +361,7 @@ .ogv, .webm files
  • uses ffmpeg and ffprobe to generate video thumbnails
  • +
  • can transcode videos to mp4 for better support
  • Markdown based blogging support @@ -337,11 +369,28 @@
  • You can write some note in the *.md files for every directory
  • +
  • job scheduling support, with the following supported task #92 +
      +
    • converting/transcoding videos
    • +
    • indexing db
    • +
    • etc..
    • +
    +
  • +
  • .pg2conf UI modifying files. #177 +
      +
    • List of these files are passed down to the UI modify its behaviour.
    • +
    • Currently, supported custom, per folder sorting.
    • +
    +
  • +
  • Dockerized

  • -

    Fork me on GitHub ribbon provided by simonwhitaker

    +

    Fork me on GitHub ribbon provided by simonwhitaker +

    diff --git a/docs/style.css b/docs/style.css index bc80d1ac..139f24b4 100644 --- a/docs/style.css +++ b/docs/style.css @@ -144,3 +144,7 @@ hr { .banner-photo { margin-bottom: 30px; } + +.row.feature:nth-child(odd) .feature-image{ + order: 2; +} diff --git a/test/cypress/e2e/docs-screens.cy.ts b/test/cypress/e2e/docs-screens.cy.ts new file mode 100644 index 00000000..316e4f73 --- /dev/null +++ b/test/cypress/e2e/docs-screens.cy.ts @@ -0,0 +1,132 @@ +/** + * These tests are only used for docs screenshot generation + */ +describe('Docs generation', () => { + beforeEach(() => { + cy.viewport(1600, 900); + cy.visit('/'); + cy.get('.card-body'); + cy.get('.col-sm-12').contains('Login'); + /* ==== Generated with Cypress Studio ==== */ + cy.get('#username').type('patrik'); + cy.get('#password').clear(); + cy.get('#password').type('vuc9ep'); + cy.intercept({ + method: 'Get', + url: '/pgapi/gallery/content/', + }).as('getContent'); + cy.get('.col-sm-12 > .btn').click(); + }); + it.skip('Main page', () => { + cy.wait('@getContent'); + cy.wait(1000); + cy.window().screenshot('main_page', {capture: 'viewport'}); + }); + it.skip('lightbox', () => { + cy.wait('@getContent'); + cy.visit('/gallery/?p=IMG_4330.jpg'); + cy.get('.photo-container > img[alt="IMG_4330.jpg"]', {timeout: 10000}); //the main photo should be visible + cy.get('div[title="info key: i"]').click(); + cy.wait(1000); + cy.window().screenshot('lightbox', {capture: 'viewport'}); + }); + it.skip('Map', () => { + cy.wait('@getContent'); + cy.get('app-gallery-map').click(); + cy.wait(1000); + cy.get('div.leaflet-marker-icon span').contains('9').click({force: true}); + cy.wait(500); + cy.get('img[src="/pgapi/gallery/content/./IMG_4303.jpg/icon"]').click(); + cy.wait(1000); + cy.window().screenshot('map', {capture: 'viewport'}); + }); + it.skip('Search', () => { + cy.wait('@getContent'); + cy.get('.search-text').type('2-km-from:"Puerto Rico" and be'); + cy.wait(1000); + cy.window().screenshot('search', {clip: {x: 200, y: 0, width: 1600 * 2 / 3, height: 900 * 2 / 3}}); + }); + it.skip('Sharing', () => { + cy.wait('@getContent'); + cy.get('app-gallery-share').click(); + cy.wait(500); + cy.get('#getShareButton').click(); + cy.wait(2000); + cy.get('#shareLink').clear({force: true}).type('https:///share/c87dbe82', {force: true}); + cy.wait(1000); + cy.window().screenshot('sharing', {capture: 'viewport'}); + }); + it.skip('filters', () => { + cy.wait('@getContent'); + cy.get('app-gallery-navbar ng-icon[name="ionFunnelOutline"]').click({scrollBehavior: false}); + cy.wait(1000); + cy.window().screenshot('filters', {capture: 'viewport'}); + }); + it.skip('video', () => { + cy.wait('@getContent'); + cy.visit('/gallery/?p=trip_video.mp4'); + cy.get('div[title="info key: i"]').click(); + cy.get('#swipeable-container').click(); + cy.get('.controls-video input.video-progress').invoke('val', 73.51484960779216) + .trigger('change'); + cy.get('#swipeable-container').click(); + cy.wait(1000); + cy.window().screenshot('video', {capture: 'viewport'}); + }); + it.skip('settings', () => { + cy.wait('@getContent'); + cy.get('ng-icon[name="ionMenuOutline"]').click({scrollBehavior: false}); + cy.get('ng-icon[name="ionSettingsOutline"]').click({scrollBehavior: false}); + cy.wait(1000); + cy.get('#config-priority').click({force: true}); + cy.get('button').contains('Advanced').click({force: true}); + cy.wait(2000); + cy.get('.admin-menu button').contains('Photo').click({scrollBehavior: false}); + cy.wait(1000); + cy.window().screenshot('settings', {capture: 'viewport'}); + }); + + it.skip('albums', () => { + cy.intercept({ + method: 'Get', + url: '/pgapi/albums', + }).as('getAlbums'); + cy.visit('/albums'); + cy.wait('@getAlbums'); + cy.wait(1000); + cy.window().screenshot('albums', {clip: {x: 0, y: 0, width: 1600 * 2 / 3, height: 900 * 2 / 3}}); + }); + + it.skip('faces', () => { + cy.intercept({ + method: 'Get', + url: '/pgapi/person', + }).as('getFaces'); + cy.visit('/faces'); + cy.wait('@getFaces'); + cy.wait(1000); + cy.window().screenshot('faces', {clip: {x: 0, y: 0, width: 1600 * 2 / 3, height: 900 * 2 / 3}}); + }); + it.skip('random link', () => { + cy.wait('@getContent'); + cy.get('ng-icon[name="ionMenuOutline"]').click({scrollBehavior: false}); + cy.get('ng-icon[name="ionHammerOutline"]').click({scrollBehavior: false}); + cy.get('ng-icon[name="ionShuffleOutline"]').click({scrollBehavior: false}); + cy.get('#randomLink').clear({force: true}).type('https:///pgapi/gallery/random/{{}"type":1,"list":[{{}"type":104,"text":"Landscape","matchType":1},{{}"type":100,"text":"vuk"}]}', { + force: true, + scrollBehavior: false + }); + cy.get('.modal-dialog .search-text').type('keyword:"Landscape" and vuk', {scrollBehavior: false}); + cy.wait(1000); + cy.window().screenshot('random_link', {capture: 'viewport'}); + }); + + it.skip('blog', () => { + cy.wait('@getContent'); + cy.wait(1000); + cy.get('app-gallery-blog .btn-blog-details').click({multiple: true, scrollBehavior: false, force: true}); + cy.window().screenshot('blog', {capture: 'viewport'}); + }); +}); + +