From 86ac1da4c544feadef62f9b3d8fad122c8d1f88b Mon Sep 17 00:00:00 2001 From: wanghe Date: Tue, 20 Aug 2024 17:50:41 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=20PhotoPrism=20(#195?= =?UTF-8?q?5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/photoprism/240711-ce/data.yml | 99 +++++++++++++++++++ apps/photoprism/240711-ce/docker-compose.yml | 76 ++++++++++++++ apps/photoprism/README.md | 17 ++++ apps/photoprism/data.yml | 19 ++++ apps/photoprism/logo.png | Bin 0 -> 4424 bytes 5 files changed, 211 insertions(+) create mode 100644 apps/photoprism/240711-ce/data.yml create mode 100644 apps/photoprism/240711-ce/docker-compose.yml create mode 100644 apps/photoprism/README.md create mode 100644 apps/photoprism/data.yml create mode 100644 apps/photoprism/logo.png diff --git a/apps/photoprism/240711-ce/data.yml b/apps/photoprism/240711-ce/data.yml new file mode 100644 index 000000000..fed6124fd --- /dev/null +++ b/apps/photoprism/240711-ce/data.yml @@ -0,0 +1,99 @@ +additionalProperties: + formFields: + - default: admin + edit: true + envKey: ADMIN_USER + labelEn: Admin user + labelZh: 管理员用户名 + required: true + type: text + - default: photoprism + edit: true + envKey: ADMIN_PASSWORD + labelEn: Admin Password + labelZh: 管理员密码 + random: true + required: true + type: password + - default: 2342 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + required: true + rule: paramPort + type: number + - default: http://localhost:2342/ + edit: true + envKey: PHOTOPRISM_EXTERNAL_URL + labelEn: External URL + labelZh: 外部访问地址 + required: true + type: text + - default: "" + edit: true + envKey: PANEL_DB_HOST + key: mariadb + labelEn: MariaDB Database Service + labelZh: MariaDB 数据库服务 + required: true + type: service + - default: photoprism + envKey: PANEL_DB_NAME + labelEn: Database + labelZh: 数据库名 + random: true + required: true + rule: paramCommon + type: text + - default: photoprism + envKey: PANEL_DB_USER + labelEn: User + labelZh: 数据库用户 + random: true + required: true + rule: paramCommon + type: text + - default: photoprism + envKey: PANEL_DB_USER_PASSWORD + labelEn: Password + labelZh: 数据库用户密码 + random: true + required: true + rule: paramComplexity + type: password + - default: 1000 + edit: true + envKey: UID + labelEn: UID + labelZh: UID + required: true + type: number + - default: 1000 + edit: true + envKey: GID + labelEn: GID + labelZh: GID + required: true + type: number + - default: "" + edit: true + envKey: SITE_DESCRIPTION + labelEn: Site description + labelZh: 网站描述 + required: false + type: text + - default: "" + edit: true + envKey: SITE_AUTHOR + labelEn: Site description + labelZh: 网站作者 + required: false + type: text + - default: "AI-Powered Photos App" + edit: true + envKey: SITE_CAPTION + labelEn: Site caption + labelZh: 网站标题 + required: false + type: text \ No newline at end of file diff --git a/apps/photoprism/240711-ce/docker-compose.yml b/apps/photoprism/240711-ce/docker-compose.yml new file mode 100644 index 000000000..f561e8bdb --- /dev/null +++ b/apps/photoprism/240711-ce/docker-compose.yml @@ -0,0 +1,76 @@ +services: + photoprism: + image: photoprism/photoprism:230719 + container_name: ${CONTAINER_NAME} + restart: always + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:2342 + volumes: + - ./data/Pictures:/photoprism/originals # Original media files (DO NOT REMOVE) + - ./data/storage:/photoprism/storage # *Writable* storage folder for cache, database, and sidecar files (DO NOT REMOVE) + environment: + PHOTOPRISM_ADMIN_USER: ${ADMIN_USER} # admin login username + PHOTOPRISM_ADMIN_PASSWORD: ${ADMIN_PASSWORD} # initial admin password (8-72 characters) + PHOTOPRISM_AUTH_MODE: "password" # authentication mode (public, password) + PHOTOPRISM_SITE_URL: ${PHOTOPRISM_EXTERNAL_URL} # server URL in the format "http(s)://domain.name(:port)/(path)" + PHOTOPRISM_DISABLE_TLS: "false" # disables HTTPS/TLS even if the site URL starts with https:// and a certificate is available + PHOTOPRISM_DEFAULT_TLS: "true" # defaults to a self-signed HTTPS/TLS certificate if no other certificate is available + PHOTOPRISM_ORIGINALS_LIMIT: 5000 # file size limit for originals in MB (increase for high-res video) + PHOTOPRISM_HTTP_COMPRESSION: "gzip" # improves transfer speed and bandwidth utilization (none or gzip) + PHOTOPRISM_LOG_LEVEL: "info" # log level: trace, debug, info, warning, error, fatal, or panic + PHOTOPRISM_READONLY: "false" # do not modify originals directory (reduced functionality) + PHOTOPRISM_EXPERIMENTAL: "false" # enables experimental features + PHOTOPRISM_DISABLE_CHOWN: "false" # disables updating storage permissions via chmod and chown on startup + PHOTOPRISM_DISABLE_WEBDAV: "false" # disables built-in WebDAV server + PHOTOPRISM_DISABLE_SETTINGS: "false" # disables settings UI and API + PHOTOPRISM_DISABLE_TENSORFLOW: "false" # disables all features depending on TensorFlow + PHOTOPRISM_DISABLE_FACES: "false" # disables face detection and recognition (requires TensorFlow) + PHOTOPRISM_DISABLE_CLASSIFICATION: "false" # disables image classification (requires TensorFlow) + PHOTOPRISM_DISABLE_VECTORS: "false" # disables vector graphics support + PHOTOPRISM_DISABLE_RAW: "false" # disables indexing and conversion of RAW images + PHOTOPRISM_RAW_PRESETS: "false" # enables applying user presets when converting RAW images (reduces performance) + PHOTOPRISM_JPEG_QUALITY: 85 # a higher value increases the quality and file size of JPEG images and thumbnails (25-100) + PHOTOPRISM_DETECT_NSFW: "false" # automatically flags photos as private that MAY be offensive (requires TensorFlow) + PHOTOPRISM_UPLOAD_NSFW: "true" # allows uploads that MAY be offensive (no effect without TensorFlow) + # PHOTOPRISM_DATABASE_DRIVER: "sqlite" # SQLite is an embedded database that doesn't require a server + PHOTOPRISM_DATABASE_DRIVER: "mysql" # use MariaDB 10.5+ or MySQL 8+ instead of SQLite for improved performance + PHOTOPRISM_DATABASE_SERVER: ${PANEL_DB_HOST}:3306 # MariaDB or MySQL database server (hostname:port) + PHOTOPRISM_DATABASE_NAME: ${PANEL_DB_NAME} # MariaDB or MySQL database schema name + PHOTOPRISM_DATABASE_USER: ${PANEL_DB_USER} # MariaDB or MySQL database user name + PHOTOPRISM_DATABASE_PASSWORD: ${PANEL_DB_USER_PASSWORD} # MariaDB or MySQL database user password + PHOTOPRISM_SITE_CAPTION: ${SITE_CAPTION} + PHOTOPRISM_SITE_DESCRIPTION: ${SITE_DESCRIPTION} # meta site description + PHOTOPRISM_SITE_AUTHOR: ${SITE_AUTHOR} # meta site author + ## Video Transcoding (https://docs.photoprism.app/getting-started/advanced/transcoding/): + # PHOTOPRISM_FFMPEG_ENCODER: "software" # H.264/AVC encoder (software, intel, nvidia, apple, raspberry, or vaapi) + # PHOTOPRISM_FFMPEG_SIZE: "1920" # video size limit in pixels (720-7680) (default: 3840) + # PHOTOPRISM_FFMPEG_BITRATE: "32" # video bitrate limit in Mbit/s (default: 50) + ## Run/install on first startup (options: update https gpu tensorflow davfs clitools clean): + # PHOTOPRISM_INIT: "https gpu tensorflow" + ## Run as a non-root user after initialization (supported: 0, 33, 50-99, 500-600, and 900-1200): + PHOTOPRISM_UID: ${UID:-1000} + PHOTOPRISM_GID: ${GID:-1000} + # PHOTOPRISM_UMASK: 0000 + ## Start as non-root user before initialization (supported: 0, 33, 50-99, 500-600, and 900-1200): + # user: "1000:1000" + ## Share hardware devices with FFmpeg and TensorFlow (optional): + # devices: + # - "/dev/dri:/dev/dri" # Intel QSV + # - "/dev/nvidia0:/dev/nvidia0" # Nvidia CUDA + # - "/dev/nvidiactl:/dev/nvidiactl" + # - "/dev/nvidia-modeset:/dev/nvidia-modeset" + # - "/dev/nvidia-nvswitchctl:/dev/nvidia-nvswitchctl" + # - "/dev/nvidia-uvm:/dev/nvidia-uvm" + # - "/dev/nvidia-uvm-tools:/dev/nvidia-uvm-tools" + # - "/dev/video11:/dev/video11" # Video4Linux Video Encode Device (h264_v4l2m2m) + working_dir: "/photoprism" # do not change or remove + security_opt: + - seccomp:unconfined + - apparmor:unconfined + labels: + createdBy: "Apps" +networks: + 1panel-network: + external: true diff --git a/apps/photoprism/README.md b/apps/photoprism/README.md new file mode 100644 index 000000000..504ded41c --- /dev/null +++ b/apps/photoprism/README.md @@ -0,0 +1,17 @@ +# PhotoPrism + +**PhotoPrism** 是一款适用于去中心化网络的 AI 照片应用。它利用最新技术自动标记和查找图片,不会妨碍您。您可以在家中、私人服务器或云端运行它。 + +## 主要功能: + +- 浏览所有照片和视频,无需担心RAW 转换、重复或视频格式 +- 使用强大的搜索过滤器轻松找到特定图片 +- 识别你的家人和朋友的面孔 +- 根据图片内容和位置自动分类 +- 将鼠标悬停在相册和搜索结果中的实况照片上即可播放实况照片 +- 由于用户界面是一个渐进式 Web 应用程序,它提供了类似原生应用程序的体验,您可以方便地将其安装在所有主要操作系统和移动设备的主屏幕上 +- 包含四张高分辨率世界地图,让您重温最喜爱的旅行回忆 +- 从 Exif、XMP 和其他来源(例如 Google Photos)提取并合并元数据 +- 还可以搜索更多图像属性,如颜色、色度和质量 +- 使用PhotoSync在后台安全备份 iOS 和 Android 手机 +- WebDAV 客户端(例如 Microsoft 的 Windows Explorer 和 Apple 的 Finder)可以直接连接到 PhotoPrism,这样您就可以打开、编辑和删除计算机上的文件,就像它们是本地文件一样 \ No newline at end of file diff --git a/apps/photoprism/data.yml b/apps/photoprism/data.yml new file mode 100644 index 000000000..b0b5a34e6 --- /dev/null +++ b/apps/photoprism/data.yml @@ -0,0 +1,19 @@ +name: PhotoPrism +tags: + - 多媒体 +title: 去中心化网络的人工智能照片应用程序 +description: 去中心化网络的人工智能照片应用程序 +additionalProperties: + key: photoprism + name: PhotoPrism + tags: + - Media + shortDescZh: 去中心化网络的人工智能照片应用程序 + shortDescEn: AI-Powered Photos App for the Decentralized Web + type: tool + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://www.photoprism.app + github: https://github.com/photoprism/photoprism + document: https://docs.photoprism.app diff --git a/apps/photoprism/logo.png b/apps/photoprism/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c63f89ca6743be27719d68a377030b494310f77a GIT binary patch literal 4424 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