Merge pull request #4716 from okxlin/feat/quark-auto-save

Add Quark Auto Save app
This commit is contained in:
okxlin
2026-07-11 14:10:34 +08:00
committed by GitHub
18 changed files with 566 additions and 0 deletions
+9
View File
@@ -0,0 +1,9 @@
PANEL_APP_PORT_HTTP=5005
WEBUI_USERNAME=admin
WEBUI_PASSWORD=replace-with-a-strong-password
TASK_TIMEOUT=1800
PLUGIN_FLAGS=
APP_CONFIG_DIR=./data/config
MEDIA_DIR=./data/media
TZ=Asia/Shanghai
CONTAINER_NAME=quark-auto-save-compose-check
+133
View File
@@ -0,0 +1,133 @@
additionalProperties:
formFields:
- default: 5005
edit: true
envKey: PANEL_APP_PORT_HTTP
labelEn: Web Port
labelZh: Web 端口
label:
en: Web Port
zh: Web 端口
zh-Hant: Web 連接埠
ja: Web ポート
ko: Web 포트
ru: Веб-порт
ms: Port Web
pt-br: Porta Web
required: true
rule: paramPort
type: number
- default: admin
edit: true
envKey: WEBUI_USERNAME
labelEn: Admin Username
labelZh: 管理用户名
label:
en: Admin Username
zh: 管理用户名
zh-Hant: 管理員使用者名稱
ja: 管理者ユーザー名
ko: 관리자 사용자 이름
ru: Имя администратора
ms: Nama Pengguna Pentadbir
pt-br: Usuário Administrador
required: true
type: text
- default: ""
edit: true
envKey: WEBUI_PASSWORD
labelEn: Admin Password
labelZh: 管理密码
label:
en: Admin Password
zh: 管理密码
zh-Hant: 管理員密碼
ja: 管理者パスワード
ko: 관리자 비밀번호
ru: Пароль администратора
ms: Kata Laluan Pentadbir
pt-br: Senha do Administrador
random: true
required: true
rule: paramComplexity
type: password
- default: 1800
edit: true
envKey: TASK_TIMEOUT
labelEn: Task Timeout (seconds)
labelZh: 任务超时(秒)
label:
en: Task Timeout (seconds)
zh: 任务超时(秒)
zh-Hant: 任務逾時(秒)
ja: タスクのタイムアウト(秒)
ko: 작업 시간 제한(초)
ru: Тайм-аут задачи (секунды)
ms: Tamat Masa Tugas (saat)
pt-br: Tempo Limite da Tarefa (segundos)
required: true
type: number
- default: ""
edit: true
envKey: PLUGIN_FLAGS
labelEn: Plugin Flags
labelZh: 插件标志
label:
en: Plugin Flags
zh: 插件标志
zh-Hant: 外掛標誌
ja: プラグインフラグ
ko: 플러그인 플래그
ru: Флаги плагинов
ms: Bendera Pemalam
pt-br: Opções de Plugins
required: false
type: text
- default: ./data/config
edit: true
envKey: APP_CONFIG_DIR
labelEn: Configuration Directory
labelZh: 配置目录
label:
en: Configuration Directory
zh: 配置目录
zh-Hant: 設定目錄
ja: 設定ディレクトリ
ko: 설정 디렉터리
ru: Каталог конфигурации
ms: Direktori Konfigurasi
pt-br: Diretório de Configuração
required: true
type: text
- default: ./data/media
edit: true
envKey: MEDIA_DIR
labelEn: Media Directory
labelZh: 媒体目录
label:
en: Media Directory
zh: 媒体目录
zh-Hant: 媒體目錄
ja: メディアディレクトリ
ko: 미디어 디렉터리
ru: Каталог медиафайлов
ms: Direktori Media
pt-br: Diretório de Mídia
required: true
type: text
- default: Asia/Shanghai
edit: true
envKey: TZ
labelEn: Timezone
labelZh: 时区
label:
en: Timezone
zh: 时区
zh-Hant: 時區
ja: タイムゾーン
ko: 시간대
ru: Часовой пояс
ms: Zon Waktu
pt-br: Fuso Horário
required: true
type: text
+1
View File
@@ -0,0 +1 @@
@@ -0,0 +1,34 @@
services:
quark-auto-save:
image: "cp0204/quark-auto-save:v0.8.7"
container_name: ${CONTAINER_NAME}
restart: unless-stopped
environment:
- WEBUI_USERNAME=${WEBUI_USERNAME}
- WEBUI_PASSWORD=${WEBUI_PASSWORD}
- TASK_TIMEOUT=${TASK_TIMEOUT}
- PLUGIN_FLAGS=${PLUGIN_FLAGS:-}
- TZ=${TZ}
volumes:
- "${APP_CONFIG_DIR}:/app/config"
- "${MEDIA_DIR}:/media"
ports:
- "${PANEL_APP_PORT_HTTP}:5005"
healthcheck:
test:
- CMD
- python
- -c
- import urllib.request; urllib.request.urlopen('http://127.0.0.1:5005/', timeout=5)
start_period: 15s
interval: 30s
timeout: 10s
retries: 5
labels:
createdBy: "Apps"
networks:
- 1panel-network
networks:
1panel-network:
external: true
+54
View File
@@ -0,0 +1,54 @@
#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
ENV_FILE="${ENV_FILE:-$ROOT_DIR/.env}"
read_env_value() {
local key="$1"
[[ -f "$ENV_FILE" ]] || return 0
local value
value="$(sed -n "s/^${key}=//p" "$ENV_FILE" | tail -n 1)"
case "$value" in
\"*\") value="${value#\"}"; value="${value%\"}" ;;
\'*\') value="${value#\'}"; value="${value%\'}" ;;
esac
printf '%s\n' "$value"
}
configured_value() {
local key="$1"
local default_value="$2"
local value
value="${!key:-}"
if [[ -z "$value" ]]; then
value="$(read_env_value "$key")"
fi
printf '%s\n' "${value:-$default_value}"
}
resolve_app_path() {
local raw="$1"
if [[ "$raw" = /* ]]; then
printf '%s\n' "$raw"
else
printf '%s\n' "$ROOT_DIR/${raw#./}"
fi
}
ensure_dir() {
local path
path="$(resolve_app_path "$(configured_value "$1" "$2")")"
mkdir -p "$path"
}
ensure_file_parent() {
local path
local parent
path="$(resolve_app_path "$(configured_value "$1" "$2")")"
parent="$(dirname "$path")"
mkdir -p "$parent"
}
ensure_dir "APP_CONFIG_DIR" "./data/config"
ensure_dir "MEDIA_DIR" "./data/media"
+2
View File
@@ -0,0 +1,2 @@
#!/usr/bin/env bash
set -euo pipefail
+2
View File
@@ -0,0 +1,2 @@
#!/usr/bin/env bash
set -euo pipefail
+50
View File
@@ -0,0 +1,50 @@
# Quark Auto Save
## 产品介绍
Quark Auto Save 提供 WebUI,用于自动执行夸克网盘签到、分享链接转存、文件名整理、通知推送和媒体库刷新。它适合管理持续更新的网盘资源,并可通过插件与 Emby、OpenList、SmartStrm 等服务联动。
## 主要功能
- 定时签到并自动转存持续更新的分享资源。
- 使用正则表达式整理、重命名和筛选文件。
- 发送任务通知,并通过插件刷新媒体库或生成 STRM 文件。
- 通过 WebUI 管理多个账号、转存任务和插件配置。
## 访问说明
- Web 端口由安装表单设置,默认 `5005`。
- 使用安装表单生成的管理用户名和密码登录 WebUI。
- 夸克账号 Cookie、任务和插件配置保存在配置目录中,请定期备份。
- 媒体目录挂载到容器内 `/media`,供 STRM 等插件生成或读写媒体文件。
- `PLUGIN_FLAGS` 可按上游格式禁用插件,例如 `-emby,-aria2`;不了解时请留空。
## 数据持久化
- `APP_CONFIG_DIR` 挂载到 `/app/config`,保存账号、任务和应用配置。
- `MEDIA_DIR` 挂载到 `/media`,保存或访问插件生成的媒体内容。
- 升级前至少备份配置目录。将媒体目录指向已有媒体库时,应先在少量数据上验证插件行为。
## 风险与限制
- 本应用会保存夸克账号 Cookie。请限制面板和 WebUI 的访问范围,并使用强管理密码与 HTTPS 反向代理。
- 转存、重命名和媒体插件可能修改云端或挂载目录中的内容,请先验证任务规则。
- 不要设置过高的定时执行频率,以免触发账号风控或对上游服务造成过量请求。
- 请仅处理您有权访问和保存的内容,并遵守服务条款和当地法律。
## Introduction
Quark Auto Save automates Quark cloud-drive sign-in, share-link transfers, file renaming, notifications, and media-library refresh tasks through a self-hosted WebUI.
## Features
- Schedule sign-in and transfer tasks for continuously updated shares.
- Filter and rename files with regular-expression rules.
- Send notifications and integrate media-library or STRM plugins.
- Manage accounts, tasks, and plugins through the WebUI.
## Links
- Project: https://github.com/Cp0204/quark-auto-save
- Documentation: https://github.com/Cp0204/quark-auto-save/wiki
- Image: https://hub.docker.com/r/cp0204/quark-auto-save
+34
View File
@@ -0,0 +1,34 @@
name: Quark Auto Save
tags:
- 工具
- 云存储
title: 夸克网盘自动转存、整理与媒体库联动工具
description: 夸克网盘自动转存、整理与媒体库联动工具
additionalProperties:
key: quark-auto-save
name: Quark Auto Save
tags:
- Tool
- Storage
shortDescZh: 夸克网盘自动转存、整理与媒体库联动工具
shortDescEn: Automate Quark cloud-drive transfers, renaming, notifications, and media-library refreshes
description:
en: Automate Quark cloud-drive sign-in, transfers, renaming, notifications, and media-library refresh tasks.
zh: 自动完成夸克网盘签到、转存、重命名、通知和媒体库刷新任务。
zh-Hant: 自動完成夸克網盤簽到、轉存、重新命名、通知和媒體庫重新整理任務。
ja: Quarkクラウドドライブのサインイン、転送、名前変更、通知、メディアライブラリ更新を自動化します。
ko: Quark 클라우드 드라이브 로그인, 전송, 이름 변경, 알림 및 미디어 라이브러리 새로 고침을 자동화합니다.
ru: Автоматизирует вход, перенос, переименование, уведомления и обновление медиатеки Quark Cloud Drive.
ms: Automatikkan daftar masuk, pemindahan, penamaan semula, pemberitahuan dan muat semula pustaka media Quark Cloud Drive.
pt-br: Automatize login, transferências, renomeação, notificações e atualização da biblioteca de mídia do Quark Cloud Drive.
type: tool
crossVersionUpdate: true
limit: 0
recommend: 0
website: https://github.com/Cp0204/quark-auto-save
github: https://github.com/Cp0204/quark-auto-save
document: https://github.com/Cp0204/quark-auto-save/wiki
architectures:
- amd64
- arm
- arm64
+9
View File
@@ -0,0 +1,9 @@
PANEL_APP_PORT_HTTP=5005
WEBUI_USERNAME=admin
WEBUI_PASSWORD=replace-with-a-strong-password
TASK_TIMEOUT=1800
PLUGIN_FLAGS=
APP_CONFIG_DIR=./data/config
MEDIA_DIR=./data/media
TZ=Asia/Shanghai
CONTAINER_NAME=quark-auto-save-compose-check
+133
View File
@@ -0,0 +1,133 @@
additionalProperties:
formFields:
- default: 5005
edit: true
envKey: PANEL_APP_PORT_HTTP
labelEn: Web Port
labelZh: Web 端口
label:
en: Web Port
zh: Web 端口
zh-Hant: Web 連接埠
ja: Web ポート
ko: Web 포트
ru: Веб-порт
ms: Port Web
pt-br: Porta Web
required: true
rule: paramPort
type: number
- default: admin
edit: true
envKey: WEBUI_USERNAME
labelEn: Admin Username
labelZh: 管理用户名
label:
en: Admin Username
zh: 管理用户名
zh-Hant: 管理員使用者名稱
ja: 管理者ユーザー名
ko: 관리자 사용자 이름
ru: Имя администратора
ms: Nama Pengguna Pentadbir
pt-br: Usuário Administrador
required: true
type: text
- default: ""
edit: true
envKey: WEBUI_PASSWORD
labelEn: Admin Password
labelZh: 管理密码
label:
en: Admin Password
zh: 管理密码
zh-Hant: 管理員密碼
ja: 管理者パスワード
ko: 관리자 비밀번호
ru: Пароль администратора
ms: Kata Laluan Pentadbir
pt-br: Senha do Administrador
random: true
required: true
rule: paramComplexity
type: password
- default: 1800
edit: true
envKey: TASK_TIMEOUT
labelEn: Task Timeout (seconds)
labelZh: 任务超时(秒)
label:
en: Task Timeout (seconds)
zh: 任务超时(秒)
zh-Hant: 任務逾時(秒)
ja: タスクのタイムアウト(秒)
ko: 작업 시간 제한(초)
ru: Тайм-аут задачи (секунды)
ms: Tamat Masa Tugas (saat)
pt-br: Tempo Limite da Tarefa (segundos)
required: true
type: number
- default: ""
edit: true
envKey: PLUGIN_FLAGS
labelEn: Plugin Flags
labelZh: 插件标志
label:
en: Plugin Flags
zh: 插件标志
zh-Hant: 外掛標誌
ja: プラグインフラグ
ko: 플러그인 플래그
ru: Флаги плагинов
ms: Bendera Pemalam
pt-br: Opções de Plugins
required: false
type: text
- default: ./data/config
edit: true
envKey: APP_CONFIG_DIR
labelEn: Configuration Directory
labelZh: 配置目录
label:
en: Configuration Directory
zh: 配置目录
zh-Hant: 設定目錄
ja: 設定ディレクトリ
ko: 설정 디렉터리
ru: Каталог конфигурации
ms: Direktori Konfigurasi
pt-br: Diretório de Configuração
required: true
type: text
- default: ./data/media
edit: true
envKey: MEDIA_DIR
labelEn: Media Directory
labelZh: 媒体目录
label:
en: Media Directory
zh: 媒体目录
zh-Hant: 媒體目錄
ja: メディアディレクトリ
ko: 미디어 디렉터리
ru: Каталог медиафайлов
ms: Direktori Media
pt-br: Diretório de Mídia
required: true
type: text
- default: Asia/Shanghai
edit: true
envKey: TZ
labelEn: Timezone
labelZh: 时区
label:
en: Timezone
zh: 时区
zh-Hant: 時區
ja: タイムゾーン
ko: 시간대
ru: Часовой пояс
ms: Zon Waktu
pt-br: Fuso Horário
required: true
type: text
@@ -0,0 +1 @@
@@ -0,0 +1,34 @@
services:
quark-auto-save:
image: "cp0204/quark-auto-save:latest"
container_name: ${CONTAINER_NAME}
restart: unless-stopped
environment:
- WEBUI_USERNAME=${WEBUI_USERNAME}
- WEBUI_PASSWORD=${WEBUI_PASSWORD}
- TASK_TIMEOUT=${TASK_TIMEOUT}
- PLUGIN_FLAGS=${PLUGIN_FLAGS:-}
- TZ=${TZ}
volumes:
- "${APP_CONFIG_DIR}:/app/config"
- "${MEDIA_DIR}:/media"
ports:
- "${PANEL_APP_PORT_HTTP}:5005"
healthcheck:
test:
- CMD
- python
- -c
- import urllib.request; urllib.request.urlopen('http://127.0.0.1:5005/', timeout=5)
start_period: 15s
interval: 30s
timeout: 10s
retries: 5
labels:
createdBy: "Apps"
networks:
- 1panel-network
networks:
1panel-network:
external: true
+54
View File
@@ -0,0 +1,54 @@
#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
ENV_FILE="${ENV_FILE:-$ROOT_DIR/.env}"
read_env_value() {
local key="$1"
[[ -f "$ENV_FILE" ]] || return 0
local value
value="$(sed -n "s/^${key}=//p" "$ENV_FILE" | tail -n 1)"
case "$value" in
\"*\") value="${value#\"}"; value="${value%\"}" ;;
\'*\') value="${value#\'}"; value="${value%\'}" ;;
esac
printf '%s\n' "$value"
}
configured_value() {
local key="$1"
local default_value="$2"
local value
value="${!key:-}"
if [[ -z "$value" ]]; then
value="$(read_env_value "$key")"
fi
printf '%s\n' "${value:-$default_value}"
}
resolve_app_path() {
local raw="$1"
if [[ "$raw" = /* ]]; then
printf '%s\n' "$raw"
else
printf '%s\n' "$ROOT_DIR/${raw#./}"
fi
}
ensure_dir() {
local path
path="$(resolve_app_path "$(configured_value "$1" "$2")")"
mkdir -p "$path"
}
ensure_file_parent() {
local path
local parent
path="$(resolve_app_path "$(configured_value "$1" "$2")")"
parent="$(dirname "$path")"
mkdir -p "$parent"
}
ensure_dir "APP_CONFIG_DIR" "./data/config"
ensure_dir "MEDIA_DIR" "./data/media"
+2
View File
@@ -0,0 +1,2 @@
#!/usr/bin/env bash
set -euo pipefail
+2
View File
@@ -0,0 +1,2 @@
#!/usr/bin/env bash
set -euo pipefail
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

+12
View File
@@ -0,0 +1,12 @@
{
"repository": "https://github.com/Cp0204/quark-auto-save",
"dockerDocs": "https://github.com/Cp0204/quark-auto-save#docker-%E9%83%A8%E7%BD%B2",
"composeFile": "https://github.com/Cp0204/quark-auto-save#docker-%E9%83%A8%E7%BD%B2",
"imageRegistry": "https://hub.docker.com/r/cp0204/quark-auto-save",
"release": "https://github.com/Cp0204/quark-auto-save/releases/tag/v0.8.7",
"notes": [
"The official image publishes linux/amd64, linux/arm, and linux/arm64 manifests.",
"The official Docker example persists /app/config and optionally mounts /media for media-related plugins.",
"WEBUI credentials, task timeout, plugin flags, and timezone are exposed through the 1Panel install form."
]
}