From 3da1ab43064cb71efe734f43f3c4e457e2b8def5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=8C=E6=A3=AE?= Date: Thu, 22 Aug 2024 12:46:31 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E5=BA=94=E7=94=A8=20PhotoPri?= =?UTF-8?q?sm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 萌森 --- apps/photoprism/240711/data.yml | 180 ++++++++++++++++++++ apps/photoprism/240711/docker-compose.yml | 48 ++++++ apps/photoprism/240711/scripts/init.sh | 15 ++ apps/photoprism/240711/scripts/uninstall.sh | 10 ++ apps/photoprism/240711/scripts/upgrade.sh | 15 ++ apps/photoprism/README.md | 92 ++++++++++ apps/photoprism/data.yml | 18 ++ apps/photoprism/img.png | Bin 0 -> 7156 bytes apps/photoprism/logo.png | Bin 0 -> 30936 bytes envs/photoprism/photoprism.env | 25 +++ 10 files changed, 403 insertions(+) create mode 100644 apps/photoprism/240711/data.yml create mode 100644 apps/photoprism/240711/docker-compose.yml create mode 100644 apps/photoprism/240711/scripts/init.sh create mode 100644 apps/photoprism/240711/scripts/uninstall.sh create mode 100644 apps/photoprism/240711/scripts/upgrade.sh create mode 100644 apps/photoprism/README.md create mode 100644 apps/photoprism/data.yml create mode 100644 apps/photoprism/img.png create mode 100644 apps/photoprism/logo.png create mode 100644 envs/photoprism/photoprism.env diff --git a/apps/photoprism/240711/data.yml b/apps/photoprism/240711/data.yml new file mode 100644 index 000000000..877fada8f --- /dev/null +++ b/apps/photoprism/240711/data.yml @@ -0,0 +1,180 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_DB_HOST + required: true + type: service + default: mariadb + edit: true + envKey: PANEL_DB_TYPE + labelZh: MySQL 服务 (前置检查) + labelEn: Database Service (Pre-check) + required: true + type: apps + values: + - label: MySQL + value: mysql + - label: MariaDB + value: mariadb + - label: Percona + value: percona + - default: "/home/photoprism" + edit: true + envKey: PHOTOPRISM_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 2342 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "admin" + edit: true + envKey: PHOTOPRISM_ADMIN_USER + labelZh: 管理员用户名 + labelEn: Admin username + required: true + type: text + - default: "password_random" + edit: true + envKey: PHOTOPRISM_ADMIN_PASSWORD + labelZh: 管理员密码 (8-72 字符) + labelEn: Admin password + required: true + rule: paramComplexity + random: true + type: password + - default: "password" + edit: true + envKey: PHOTOPRISM_AUTH_MODE + labelZh: 认证模式 + labelEn: Authentication mode + required: true + type: select + values: + - label: 密码 + value: "password" + - label: 公开 + value: "public" + - default: "http://127.0.0.1:2342" + edit: true + envKey: PHOTOPRISM_SITE_URL + labelZh: 网站 URL + labelEn: Site URL + required: true + type: text + - default: "AI-Powered Photos App" + edit: true + envKey: PHOTOPRISM_SITE_CAPTION + labelZh: 网站标题 + labelEn: Site caption + required: true + type: text + - default: "" + edit: true + envKey: PHOTOPRISM_SITE_DESCRIPTION + labelZh: 网站描述 + labelEn: Site description + required: false + type: text + - default: "" + edit: true + envKey: PHOTOPRISM_SITE_AUTHOR + labelZh: 网站作者 + labelEn: Site author + required: false + type: text + - default: "127.0.0.1:3306" + edit: true + envKey: PHOTOPRISM_DATABASE_SERVER + labelZh: 数据库 地址 + labelEn: Database Server + required: true + type: text + - default: "photoprism" + edit: true + envKey: PHOTOPRISM_DATABASE_USER + labelZh: 数据库 用户名 + labelEn: Database Username + required: true + type: text + - default: "" + edit: true + envKey: PHOTOPRISM_DATABASE_PASSWORD + labelZh: 数据库 密码 + labelEn: Database Password + required: true + type: password + - default: "photoprism" + edit: true + envKey: PHOTOPRISM_DATABASE_NAME + labelZh: 数据库 名称 + labelEn: Database Name + required: true + type: text + - default: 5000 + edit: true + envKey: PHOTOPRISM_ORIGINALS_LIMIT + labelZh: 原始文件限制最大值 (MB) + labelEn: Originals limit max value (MB) + required: true + type: number + - default: "true" + edit: true + envKey: PHOTOPRISM_BACKUP_DATABASE + labelZh: 开启定时备份计划 + labelEn: Enable scheduled backup plan + required: true + type: select + values: + - label: + value: "true" + - label: + value: "false" + - default: "daily" + edit: true + envKey: PHOTOPRISM_BACKUP_SCHEDULE + labelZh: 定时备份计划周期 (daily, weekly, cron) + labelEn: Scheduled backup plan cycle (daily, weekly, cron format) + required: true + type: text + - default: "software" + edit: true + envKey: PHOTOPRISM_FFMPEG_ENCODER + labelZh: 视频编码器 + labelEn: Video encoder + required: true + type: select + values: + - label: 软解 + value: "software" + - label: 硬解 (Intel) + value: "intel" + - label: 硬解 (nvidia) + value: "nvidia" + - label: 硬解 (apple) + value: "apple" + - label: 硬解 (raspberry) + value: "raspberry" + - label: 硬解 (vaapi) + value: "vaapi" + - default: "1920" + edit: true + envKey: PHOTOPRISM_FFMPEG_SIZE + labelZh: 视频分辨率限制 + labelEn: Video resolution limit + required: true + type: text + - default: "32" + edit: true + envKey: PHOTOPRISM_FFMPEG_BITRATE + labelZh: 视频比特率限制 + labelEn: Video bitrate limit + required: true + type: text diff --git a/apps/photoprism/240711/docker-compose.yml b/apps/photoprism/240711/docker-compose.yml new file mode 100644 index 000000000..d6efb6304 --- /dev/null +++ b/apps/photoprism/240711/docker-compose.yml @@ -0,0 +1,48 @@ +version: "3.8" + +networks: + 1panel-network: + external: true + +services: + photoprism: + image: photoprism/photoprism:240711 + container_name: ${CONTAINER_NAME} + labels: + createdBy: "Apps" + restart: always + stop_grace_period: 10s + security_opt: + - seccomp:unconfined + - apparmor:unconfined + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:2342 + user: 1000:1000 + working_dir: /photoprism + devices: + - /dev/dri:/dev/dri + - /dev/nvidia0:/dev/nvidia0 + - /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 + env_file: + - /etc/1panel/envs/global.env + - /etc/1panel/envs/photoprism/photoprism.env + - ${ENV_FILE:-/etc/1panel/envs/default.env} + volumes: + - ${PHOTOPRISM_ROOT_PATH}/originals:/photoprism/originals + - ${PHOTOPRISM_ROOT_PATH}/storage:/photoprism/storage + - ${PHOTOPRISM_ROOT_PATH}/family:/photoprism/originals/family + - ${PHOTOPRISM_ROOT_PATH}/import:/photoprism/import + environment: + PHOTOPRISM_UID: 0 + PHOTOPRISM_GID: 0 + PHOTOPRISM_UMASK: 0022 + PHOTOPRISM_PASSWORD_LENGTH: 8 + PHOTOPRISM_ADMIN_USERNAME: ${PHOTOPRISM_ADMIN_USER} + PHOTOPRISM_DATABASE_DRIVER: "mysql" diff --git a/apps/photoprism/240711/scripts/init.sh b/apps/photoprism/240711/scripts/init.sh new file mode 100644 index 000000000..77b849120 --- /dev/null +++ b/apps/photoprism/240711/scripts/init.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/photoprism/240711/scripts/uninstall.sh b/apps/photoprism/240711/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/apps/photoprism/240711/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/photoprism/240711/scripts/upgrade.sh b/apps/photoprism/240711/scripts/upgrade.sh new file mode 100644 index 000000000..77b849120 --- /dev/null +++ b/apps/photoprism/240711/scripts/upgrade.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/photoprism/README.md b/apps/photoprism/README.md new file mode 100644 index 000000000..a7e35b3c2 --- /dev/null +++ b/apps/photoprism/README.md @@ -0,0 +1,92 @@ +# PhotoPrism + +面向去中心化网络的人工智能照片应用程序 + +![Bark](https://file.lifebus.top/imgs/photoprism_cover.jpg) + +PhotoPrism® 是一款适用于去中心化网络的人工智能照片应用程序。它利用最新技术自动标记和查找图片,而不会妨碍您。您可以在家中、私人服务器上或在云中运行它。 + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + +我们的使命是提供对用户和隐私最友好的解决方案,让您的图片井然有序且易于访问。这就是为什么 PhotoPrism +是从头开始构建的,可以在您需要的任何地方运行,而不会影响自由、隐私或功能: + ++ 浏览所有照片和视频,无需担心RAW 转换、重复或视频格式 ++ 使用强大的搜索过滤器轻松查找特定图片 ++ 认出家人和朋友的面孔 ++ 根据图片内容和位置自动分类 ++ 将鼠标悬停在相册和搜索结果中的实时照片上即可播放它们 ++ 由于用户界面是渐进式 Web 应用程序,因此它提供了类似本机应用程序的体验,您可以方便地将其安装在所有主要操作系统和移动设备的主屏幕上 ++ 包括四张高分辨率世界地图,带回您最喜欢的旅行的回忆 ++ 元数据从 Exif、XMP 和其他来源(例如 Google Photos)中提取并合并 ++ 还可以搜索更多图像属性,例如Colors 、 Chroma和Quality ++ 使用PhotoSync在后台安全备份 iOS 和 Android 手机 ++ WebDAV 客户端(例如 Microsoft 的 Windows Explorer 和 Apple 的 Finder)可以直接连接到 + PhotoPrism,允许您从计算机中打开、编辑和删除文件,就像它们是本地文件一样 + +## 环境说明 + +由于 `PhotoPrism` 有依赖于 `FFmpeg`,所以需要在安装时进行自动安装。 + +`PhotoPrism` 会自动安装 `FFmpeg`,并且会在初始化时进行检测。 + +由于使用 `TensorFlow` 进行人脸识别,等相关数据处理,所以需要在安装时进行自动安装。 + +`PhotoPrism` 会自动安装 `TensorFlow`,并且会在初始化时进行检测。 + +建议用户开启 至少 `4GB` 交换分区,增大内存使用。 + +## 安装说明 + +推荐使用 `MariaDB` 数据库,作为 `PhotoPrism` 的数据库存储。 + +### `数据库 地址` 配置 + +格式:`host:port` + +示例:`127.0.0.1:3306` + +### `认证模式` 配置 + +默认值:`密码` + +程序必须登录才能使用。 + +如果您选择: `公开` + +那么任何人都将允许访问程序。 + +### `视频编码器` 配置 + +`PhotoPrism` 支持 `FFmpeg` 视频编码器,需要安装 `FFmpeg`。 + +初始化时,`PhotoPrism` 会自动进行 `FFmpeg` 的安装。 + +使用 `FFmpeg` 时,需要选择 `软解`。 + +如果您的设备存在其他硬件驱动,可以选择 `硬解` 的方式加速 `视频转码`。 + +很不幸的是 Windows 下不能很好的映射驱动程序,所以 `硬解` 选项在 Windows 下不可用。 + +### `视频分辨率限制` 配置 + +默认值: `1920`,表达为 `1920x1080`。 + +当转码低于此分辨率的视频时,`PhotoPrism` 会保持原始分辨率,不会将其放大处理。 + +### `视频比特率限制` 配置 + +默认值: `32`,单位为 `Mbit/s`。 + +如果有需要,可以根据自己的需求进行调整。 + +## 设备同步 PhotoSync + +![App Store](https://file.lifebus.top/imgs/photosync_app_store_qr.png) +![App Store](https://file.lifebus.top/imgs/photosync_google_play_qr.png) + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/apps/photoprism/data.yml b/apps/photoprism/data.yml new file mode 100644 index 000000000..74d8b4bc1 --- /dev/null +++ b/apps/photoprism/data.yml @@ -0,0 +1,18 @@ +name: PhotoPrism +title: PhotoPrism +description: 面向去中心化网络的人工智能照片应用程序 +additionalProperties: + key: photoprism + name: PhotoPrism + tags: + - WebSite + - Tool + - Local + shortDescZh: 面向去中心化网络的人工智能照片应用程序 + shortDescEn: 面向去中心化网络的人工智能照片应用程序 + type: website + crossVersionUpdate: true + limit: 0 + website: https://www.photoprism.app/ + github: https://github.com/photoprism/photoprism/ + document: https://docs.photoprism.app/ diff --git a/apps/photoprism/img.png b/apps/photoprism/img.png new file mode 100644 index 0000000000000000000000000000000000000000..8958520f15963295562142bbbb85d81056cdd5a0 GIT binary patch literal 7156 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 literal 0 HcmV?d00001 diff --git a/apps/photoprism/logo.png b/apps/photoprism/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..35c1d6b12c0091b96c37aa7a9e80fe942ecb8b52 GIT binary patch literal 30936 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