mirror of
https://github.com/okxlin/appstore.git
synced 2026-10-06 16:00:31 +00:00
@@ -0,0 +1,53 @@
|
||||
# Easy-VDL
|
||||
|
||||
## 产品介绍
|
||||
|
||||
Easy-VDL 是面向多平台视频下载、作者订阅、直播录制和媒体整理的可视化平台,支持生成 Emby/Jellyfin 元数据、在线回放以及可选的 AI 高光处理。
|
||||
|
||||
## 主要功能
|
||||
|
||||
- 下载并订阅抖音、Bilibili、YouTube、快手、小红书等平台内容。
|
||||
- 检测并录制直播,保存弹幕与回放数据。
|
||||
- 管理下载文件、元数据、海报和媒体库目录。
|
||||
- 通过企业微信回调端口接收相关机器人请求。
|
||||
|
||||
## 访问说明
|
||||
|
||||
- Web 端口默认 `888`,企业微信回调端口默认 `8001`。
|
||||
- 使用安装表单生成的管理员账号和密码登录。
|
||||
- 首次启动需要初始化镜像内置的 PostgreSQL 数据目录,可能比普通 Web 应用耗时更长。
|
||||
|
||||
## 数据持久化
|
||||
|
||||
- `DOWNLOAD_DIR` 挂载到 `/app/downloads`,保存视频和媒体文件。
|
||||
- `LOG_DIR` 挂载到 `/app/logs`,保存运行日志。
|
||||
- `DATABASE_DIR` 挂载到 `/app/database`,保存内置数据库、配置、Cookie 和浏览器状态。
|
||||
- 升级前应备份三个目录,尤其是数据库目录。
|
||||
|
||||
## 权限与硬件说明
|
||||
|
||||
官方镜像入口脚本会根据 `PUID` 和 `PGID` 调整挂载目录权限,并会将下载目录设置为兼容 NAS 多用户访问的宽松权限。数据库目录中可能包含平台 Cookie,请限制宿主机访问权限。
|
||||
|
||||
本适配默认使用 CPU 模式,不挂载 `/dev/dri`、不授予 `PERFMON` capability,也不请求 NVIDIA 设备,因此可在无显卡服务器上直接安装。硬件转码与 GPU 监控需要管理员按上游说明自行扩展 Compose,并承担相应设备访问风险。
|
||||
|
||||
## 风险与内容说明
|
||||
|
||||
- 下载和录制功能可能受到目标平台服务条款、地区限制与账号风控影响。
|
||||
- 请控制订阅与检测频率,只保存您有权访问和使用的内容。
|
||||
- Cookie、机器人凭据和通知密钥会保存在数据库目录,请使用 HTTPS 并限制公网访问。
|
||||
|
||||
## Introduction
|
||||
|
||||
Easy-VDL is a visual platform for multi-site video downloads, subscriptions, live recording, and media management.
|
||||
|
||||
## Features
|
||||
|
||||
- Subscribe to creators and download videos from multiple platforms.
|
||||
- Detect and record live streams with comments and replay metadata.
|
||||
- Organize downloads for Emby and Jellyfin libraries.
|
||||
- Run in CPU mode by default without host GPU permissions.
|
||||
|
||||
## Links
|
||||
|
||||
- Project and deployment guide: https://github.com/wlaosj/easy-vdl
|
||||
- Image: https://hub.docker.com/r/qq918652593/easy-vdl
|
||||
@@ -0,0 +1,32 @@
|
||||
name: Easy-VDL
|
||||
tags:
|
||||
- 多媒体
|
||||
- 下载
|
||||
title: 支持多平台下载、订阅、直播录制和媒体管理的可视化平台
|
||||
description: 支持多平台下载、订阅、直播录制和媒体管理的可视化平台
|
||||
additionalProperties:
|
||||
key: easy-vdl
|
||||
name: Easy-VDL
|
||||
tags:
|
||||
- Media
|
||||
- Tool
|
||||
shortDescZh: 支持多平台下载、订阅、直播录制和媒体管理的可视化平台
|
||||
shortDescEn: Visual platform for multi-site downloads, subscriptions, live recording, and media management
|
||||
description:
|
||||
en: Download and subscribe to multi-site videos, record live streams, and organize media through a self-hosted WebUI.
|
||||
zh: 通过自托管 WebUI 下载和订阅多平台视频、录制直播并整理媒体内容。
|
||||
zh-Hant: 透過自託管 WebUI 下載和訂閱多平台影片、錄製直播並整理媒體內容。
|
||||
ja: セルフホストWebUIで複数サイトの動画をダウンロード・購読し、ライブ配信を録画してメディアを整理します。
|
||||
ko: 자체 호스팅 WebUI에서 여러 사이트의 동영상을 다운로드하고 구독하며 라이브 방송을 녹화하고 미디어를 관리합니다.
|
||||
ru: Загружайте видео с разных платформ, подписывайтесь на каналы, записывайте трансляции и управляйте медиатекой через собственный WebUI.
|
||||
ms: Muat turun dan langgan video pelbagai platform, rakam siaran langsung dan urus media melalui WebUI hos kendiri.
|
||||
pt-br: Baixe e acompanhe vídeos de várias plataformas, grave transmissões e organize mídia por uma WebUI auto-hospedada.
|
||||
type: tool
|
||||
crossVersionUpdate: true
|
||||
limit: 0
|
||||
recommend: 0
|
||||
website: https://github.com/wlaosj/easy-vdl
|
||||
github: https://github.com/wlaosj/easy-vdl
|
||||
document: https://github.com/wlaosj/easy-vdl
|
||||
architectures:
|
||||
- amd64
|
||||
@@ -0,0 +1,11 @@
|
||||
PANEL_APP_PORT_HTTP=888
|
||||
PANEL_APP_PORT_CALLBACK=8001
|
||||
EASY_VDL_ADMIN_USERNAME=admin
|
||||
EASY_VDL_ADMIN_PASSWORD=replace-with-a-strong-password
|
||||
PUID=1000
|
||||
PGID=100
|
||||
DOWNLOAD_DIR=./data/downloads
|
||||
LOG_DIR=./data/logs
|
||||
DATABASE_DIR=./data/database
|
||||
TZ=Asia/Shanghai
|
||||
CONTAINER_NAME=easy-vdl-compose-check
|
||||
@@ -0,0 +1,86 @@
|
||||
additionalProperties:
|
||||
formFields:
|
||||
- default: 888
|
||||
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: 8001
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_CALLBACK
|
||||
labelEn: WeCom Callback Port
|
||||
labelZh: 企业微信回调端口
|
||||
label: {en: WeCom Callback Port, zh: 企业微信回调端口, zh-Hant: 企業微信回呼連接埠, ja: WeCom コールバックポート, ko: WeCom 콜백 포트, ru: Порт обратного вызова WeCom, ms: Port Panggil Balik WeCom, pt-br: Porta de Retorno WeCom}
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: admin
|
||||
edit: true
|
||||
envKey: EASY_VDL_ADMIN_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: EASY_VDL_ADMIN_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: 1000
|
||||
edit: true
|
||||
envKey: PUID
|
||||
labelEn: Runtime UID
|
||||
labelZh: 运行用户 UID
|
||||
label: {en: Runtime UID, zh: 运行用户 UID, zh-Hant: 執行使用者 UID, ja: 実行ユーザー UID, ko: 실행 사용자 UID, ru: UID пользователя, ms: UID Pengguna, pt-br: UID do Usuário}
|
||||
required: true
|
||||
type: number
|
||||
- default: 100
|
||||
edit: true
|
||||
envKey: PGID
|
||||
labelEn: Runtime GID
|
||||
labelZh: 运行用户 GID
|
||||
label: {en: Runtime GID, zh: 运行用户 GID, zh-Hant: 執行使用者 GID, ja: 実行ユーザー GID, ko: 실행 사용자 GID, ru: GID пользователя, ms: GID Pengguna, pt-br: GID do Usuário}
|
||||
required: true
|
||||
type: number
|
||||
- default: ./data/downloads
|
||||
edit: true
|
||||
envKey: DOWNLOAD_DIR
|
||||
labelEn: Download Directory
|
||||
labelZh: 下载目录
|
||||
label: {en: Download Directory, zh: 下载目录, zh-Hant: 下載目錄, ja: ダウンロードディレクトリ, ko: 다운로드 디렉터리, ru: Каталог загрузок, ms: Direktori Muat Turun, pt-br: Diretório de Downloads}
|
||||
required: true
|
||||
type: text
|
||||
- default: ./data/logs
|
||||
edit: true
|
||||
envKey: LOG_DIR
|
||||
labelEn: Log Directory
|
||||
labelZh: 日志目录
|
||||
label: {en: Log Directory, zh: 日志目录, zh-Hant: 日誌目錄, ja: ログディレクトリ, ko: 로그 디렉터리, ru: Каталог журналов, ms: Direktori Log, pt-br: Diretório de Logs}
|
||||
required: true
|
||||
type: text
|
||||
- default: ./data/database
|
||||
edit: true
|
||||
envKey: DATABASE_DIR
|
||||
labelEn: Database Directory
|
||||
labelZh: 数据库目录
|
||||
label: {en: Database Directory, zh: 数据库目录, zh-Hant: 資料庫目錄, ja: データベースディレクトリ, ko: 데이터베이스 디렉터리, ru: Каталог базы данных, ms: Direktori Pangkalan Data, pt-br: Diretório do Banco de Dados}
|
||||
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,36 @@
|
||||
services:
|
||||
easy-vdl:
|
||||
image: "qq918652593/easy-vdl:latest"
|
||||
container_name: ${CONTAINER_NAME}
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- EASY_VDL_PORT=80
|
||||
- EASY_VDL_ADMIN_USERNAME=${EASY_VDL_ADMIN_USERNAME}
|
||||
- EASY_VDL_ADMIN_PASSWORD=${EASY_VDL_ADMIN_PASSWORD}
|
||||
- PUID=${PUID}
|
||||
- PGID=${PGID}
|
||||
- TZ=${TZ}
|
||||
volumes:
|
||||
- "${DOWNLOAD_DIR}:/app/downloads"
|
||||
- "${LOG_DIR}:/app/logs"
|
||||
- "${DATABASE_DIR}:/app/database"
|
||||
ports:
|
||||
- "${PANEL_APP_PORT_HTTP}:80"
|
||||
- "${PANEL_APP_PORT_CALLBACK}:8001"
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD
|
||||
- /bin/bash
|
||||
- /app/healthcheck.sh
|
||||
start_period: 60s
|
||||
interval: 30s
|
||||
timeout: 30s
|
||||
retries: 3
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
networks:
|
||||
- 1panel-network
|
||||
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
Executable
+55
@@ -0,0 +1,55 @@
|
||||
#!/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 "DOWNLOAD_DIR" "./data/downloads"
|
||||
ensure_dir "LOG_DIR" "./data/logs"
|
||||
ensure_dir "DATABASE_DIR" "./data/database"
|
||||
Executable
+2
@@ -0,0 +1,2 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
Executable
+2
@@ -0,0 +1,2 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 88 KiB |
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"repository": "https://github.com/wlaosj/easy-vdl",
|
||||
"dockerDocs": "https://github.com/wlaosj/easy-vdl#%E6%8E%A8%E8%8D%90%E4%BD%BF%E7%94%A8-docker-compose-%E4%B8%80%E9%94%AE%E9%83%A8%E7%BD%B2",
|
||||
"composeFile": "https://github.com/wlaosj/easy-vdl#%E6%8E%A8%E8%8D%90%E4%BD%BF%E7%94%A8-docker-compose-%E4%B8%80%E9%94%AE%E9%83%A8%E7%BD%B2",
|
||||
"imageRegistry": "https://hub.docker.com/r/qq918652593/easy-vdl",
|
||||
"release": "https://github.com/wlaosj/easy-vdl/releases/tag/v1.2",
|
||||
"notes": [
|
||||
"The official latest image is linux/amd64 only; upstream publishes a separate moving arm64 tag and no fixed v1.2 image tag.",
|
||||
"The official image embeds and initializes PostgreSQL under /app/database; this is an image-owned runtime rather than a replaceable Compose sidecar.",
|
||||
"GPU devices and PERFMON are optional upstream accelerators and are intentionally omitted from the default CPU-compatible package."
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user