MediaStation 原版完整功能迁移清单
基于 MediaStation-py(Python/FastAPI + Vue 3)源代码分析,供 MediaStationGo(Go/Gin + React)重写参考。
分析日期:2025-07-09
目录
1. 项目概览
原版架构
- 后端: Python 3.11+ / FastAPI / SQLAlchemy (async) / APScheduler
- 前端: Vue 3 + Pinia + Vue Router + TypeScript
- 数据库: SQLite(默认)/ PostgreSQL(可选)
- 部署: Docker / Nginx 反向代理 / Helm Chart
核心定位
MediaStation 是一个轻量级家庭媒体服务器,融合 媒体播放 + 自动化订阅下载 + 多平台资源聚合。
2. 后端功能清单
2.1 用户与认证模块
源文件:backend/app/user/ (router.py, service.py, repository.py, auth.py, models.py, schemas.py)
依赖注入:backend/app/deps.py
| 功能 |
HTTP 方法 |
端点 |
说明 |
权限 |
| 用户登录 |
POST |
/api/auth/login |
用户名+密码登录,返回 JWT access_token + refresh_token |
公开 |
| Token 刷新 |
POST |
/api/auth/refresh |
通过 refresh_token 获取新的 access_token |
公开 |
| 获取当前用户 |
GET |
/api/auth/me |
返回当前登录用户信息 |
登录 |
| 修改密码 |
POST |
/api/auth/change-password |
当前用户修改自己的密码 |
登录 |
| 更新资料 |
PATCH |
/api/auth/profile |
更新头像等个人资料 |
登录 |
| 获取权限 |
GET |
/api/auth/permissions |
获取当前用户的功能权限列表 |
登录 |
| 用户列表 |
GET |
/api/users |
获取所有用户列表 |
管理员 |
| 创建用户 |
POST |
/api/users |
创建用户(免费版限30人) |
管理员 |
| 更新用户 |
PUT |
/api/users/{id} |
更新用户信息 |
管理员 |
| 删除用户 |
DELETE |
/api/users/{id} |
删除用户 |
管理员 |
| 获取用户权限 |
GET |
/api/users/{id}/permissions |
获取指定用户的功能权限 |
管理员 |
| 更新用户权限 |
PUT |
/api/users/{id}/permissions |
更新指定用户的功能权限 |
管理员 |
| 重置用户权限 |
POST |
/api/users/{id}/permissions/reset |
重置为默认权限 |
管理员 |
| 系统配置(用户) |
GET |
/api/system/config |
获取系统级用户配置(FREE/PLUS) |
管理员 |
| 更新系统配置 |
PUT |
/api/system/config |
更新系统配置(tier/最大用户数) |
管理员 |
| 观看历史统计 |
GET |
/api/watch-history/stats |
获取当前用户观看历史统计 |
登录 |
| 观看历史列表 |
GET |
/api/watch-history |
分页获取观看历史 |
登录 |
| 继续观看列表 |
GET |
/api/watch-history/continue |
获取未看完的媒体列表 |
登录 |
| 删除单条历史 |
DELETE |
/api/watch-history/{id} |
删除单条历史(管理员可删任何人的) |
登录 |
| 清空历史 |
DELETE |
/api/watch-history |
清空历史(可指定媒体ID) |
登录 |
认证机制细节:
- JWT (HS256) access_token(60分钟)+ refresh_token(30天)
- 密码哈希:pbkdf2_sha256
- 依赖注入:
get_current_user, require_admin, require_permission(permission_field), get_user_permissions
权限系统(19 项细粒度权限):
- 基础权限(默认开启):
can_view_dashboard, can_play_media, can_cast, can_external_player, can_favorite, can_view_history
- 受限功能(默认关闭):
can_edit_media, can_rescrape, can_use_ai, can_capture_frames, can_manage_downloads, can_view_discover, can_manage_subscriptions, can_manage_sites, can_use_ai_assistant, can_manage_users, can_manage_files, can_manage_strm, can_access_settings
- Plus 用户(tier=plus)自动获得所有权限
- 管理员(role=admin)自动获得所有权限
用户角色与层级:
- 角色:admin / user
- 层级:free / plus(免费版限30用户,Plus 无限)
2.2 媒体库模块
源文件:backend/app/media/ (router.py, service.py, repository.py, models.py, schemas.py, scanner.py, scraper.py, organizer.py, watcher.py, subtitle_service.py, duplicate.py, image_proxy.py, bangumi_scraper.py, douban_scraper.py, parse_code.py, providers/)
2.2.1 媒体库管理
| 功能 |
HTTP 方法 |
端点 |
说明 |
权限 |
| 媒体库列表 |
GET |
/api/libraries |
获取所有媒体库 |
登录 |
| 创建媒体库 |
POST |
/api/libraries |
创建新媒体库 |
管理员 |
| 扫描媒体库 |
POST |
/api/libraries/{id}/scan |
触发媒体库扫描+自动刮削 |
管理员 |
| 更新媒体库 |
PUT |
/api/libraries/{id} |
更新媒体库配置 |
管理员 |
| 删除媒体库 |
DELETE |
/api/libraries/{id} |
删除媒体库 |
管理员 |
2.2.2 媒体条目管理
| 功能 |
HTTP 方法 |
端点 |
说明 |
权限 |
| 媒体列表 |
GET |
/api/media |
分页+多维筛选(类型/类型/年份/评分/排序) |
登录 |
| 最近添加 |
GET |
/api/media/recent |
获取最近添加的媒体 |
登录 |
| 媒体统计 |
GET |
/api/media/stats |
获取媒体数量统计 |
登录 |
| 媒体详情 |
GET |
/api/media/{id} |
获取媒体详情(含季/集/字幕) |
登录 |
| 删除媒体 |
DELETE |
/api/media/{id} |
删除媒体条目 |
管理员 |
| 更新媒体 |
PUT |
/api/media/{id} |
手动编辑媒体元数据 |
管理员 |
| 视频截帧 |
GET |
/api/media/{id}/thumbnail |
FFmpeg 视频截帧(缩略图) |
登录 |
2.2.3 元数据刮削
| 功能 |
HTTP 方法 |
端点 |
说明 |
权限 |
| 刮削媒体 |
POST |
/api/media/{id}/scrape |
手动触发刮削(可指定 TMDb ID) |
管理员 |
| 搜索 TMDb |
GET |
/api/search/tmdb |
搜索 TMDb 数据库 |
登录 |
| 搜索豆瓣 |
GET |
/api/search/douban |
搜索豆瓣影视 |
登录 |
| 搜索 Bangumi |
GET |
/api/search/bangumi |
搜索 Bangumi 动漫数据库 |
登录 |
| Adult 刮削测试 |
POST |
/api/media/scrape/test |
测试 Adult Provider 刮削 |
管理员 |
元数据 Provider Chain(多源聚合):
TMDbProvider — TMDb 主数据源(电影/剧集)
DoubanProvider — 豆瓣中文元数据补充
BangumiProvider — Bangumi 番剧/动画数据源
AdultProvider — 18+ 番号刮削(多层 Fallback:JavBus → JavDB → 微服务)
- Provider Chain 支持优先级调度和自动降级
2.2.4 搜索功能
| 功能 |
HTTP 方法 |
端点 |
说明 |
权限 |
| 全局搜索 |
GET |
/api/search |
搜索本地媒体库 |
登录 |
| 高级搜索 |
GET |
/api/search/advanced |
多条件组合搜索(标题/类型/年份/评分/分辨率/字幕) |
登录 |
| 混合搜索 |
GET |
/api/search/mixed |
并发搜索本地+TMDb |
登录 |
2.2.5 推荐系统
| 功能 |
HTTP 方法 |
端点 |
说明 |
权限 |
| 智能推荐 |
GET |
/api/recommend |
基于高评分+热度的推荐 |
登录 |
| 相似推荐 |
GET |
/api/recommend/similar/{id} |
基于同类型/标签/年代的相似内容 |
登录 |
2.2.6 字幕管理
| 功能 |
HTTP 方法 |
端点 |
说明 |
权限 |
| 字幕列表 |
GET |
/api/media/{id}/subtitles |
获取媒体字幕列表 |
登录 |
| 扫描外挂字幕 |
POST |
/api/media/{id}/subtitles/scan |
扫描外挂字幕文件 |
管理员 |
| 检测内嵌字幕 |
POST |
/api/media/{id}/subtitles/extract |
检测内嵌字幕流 |
管理员 |
| 提取内嵌字幕 |
POST |
/api/media/{id}/subtitles/extract/{idx} |
提取内嵌字幕为 SRT |
管理员 |
| 上传字幕 |
POST |
/api/media/{id}/subtitles/upload |
上传字幕文件 |
管理员 |
| 获取字幕内容 |
GET |
/api/subtitles/{id}/content |
获取字幕文件内容 |
登录 |
| 删除字幕 |
DELETE |
/api/subtitles/{id} |
删除字幕(可选删除文件) |
管理员 |
2.2.7 收藏功能
| 功能 |
HTTP 方法 |
端点 |
说明 |
权限 |
| 添加收藏 |
POST |
/api/media/{id}/favorite |
添加收藏 |
登录 |
| 取消收藏 |
DELETE |
/api/media/{id}/favorite |
取消收藏 |
登录 |
| 检查收藏状态 |
GET |
/api/media/{id}/favorite/status |
检查是否已收藏 |
登录 |
| 收藏列表 |
GET |
/api/favorites |
分页获取收藏列表 |
登录 |
2.2.8 重复检测
| 功能 |
HTTP 方法 |
端点 |
说明 |
权限 |
| 计算文件哈希 |
POST |
/api/libraries/{id}/duplicates/hash |
计算文件哈希(重复检测前置) |
管理员 |
| 检测重复 |
POST |
/api/libraries/{id}/duplicates/scan |
检测并标记重复文件 |
管理员 |
| 重复文件列表 |
GET |
/api/libraries/{id}/duplicates |
获取重复文件列表 |
登录 |
| 取消重复标记 |
DELETE |
/api/libraries/{id}/duplicates |
取消所有重复标记 |
管理员 |
| 取消单项重复标记 |
POST |
/api/media/{id}/duplicate/unmark |
取消单个条目重复标记 |
管理员 |
2.2.9 文件整理
| 功能 |
HTTP 方法 |
端点 |
说明 |
权限 |
| 整理文件 |
POST |
/api/media/organize |
手动触发文件整理到媒体库 |
管理员 |
2.2.10 图片代理
| 功能 |
HTTP 方法 |
端点 |
说明 |
权限 |
| 本地图片访问 |
GET |
/api/media/image/{filename} |
访问本地保存的图片(防路径遍历) |
登录 |
| 图片代理 |
GET |
/api/media/proxy-image |
代理外部图片(绕过防盗链) |
登录 |
2.3 播放模块
源文件:backend/app/playback/ (router.py, external.py, service.py, transcoder.py, models.py)
| 功能 |
HTTP 方法 |
端点 |
说明 |
权限 |
| 播放信息 |
GET |
/api/playback/{id}/info |
获取媒体播放信息 |
登录 |
| 视频流 |
GET |
/api/playback/{id}/stream |
直接视频流(支持 Range 断点续传 + query token) |
登录 |
| 外部播放器直链 |
GET |
/api/playback/{id}/external-url |
生成带 token 的外部播放直链 |
登录 |
| 外部播放器协议 |
GET |
/api/playback/{id}/external-players |
生成各播放器协议直链(PotPlayer/VLC/IINA/Infuse/NPlayer/MX/MPV/MPC-HC) |
登录 |
| 外部播放流 |
GET |
/api/playback/{id}/external-stream |
外部播放器流式传输(支持 Range) |
Token |
| HLS 播放列表 |
GET |
/api/playback/hls/{job}/playlist.m3u8 |
HLS m3u8 播放列表 |
Token |
| HLS 分片 |
GET |
/api/playback/hls/{job}/{segment} |
HLS ts 分片 |
Token |
| 转码状态 |
GET |
/api/playback/transcode/{job}/status |
获取转码任务状态 |
登录 |
| 字幕文件 |
GET |
/api/playback/subtitles/{id} |
获取字幕文件流 |
登录 |
| 上报进度 |
POST |
/api/playback/{id}/progress |
上报播放进度 |
登录 |
播放功能特性:
- HTTP Range 断点续传(206 Partial Content)
- 多种认证方式:Bearer Token / Query Token / 一次性票据
- 硬件加速转码(auto/qsv/vaapi/nvenc/videotoolbox/none)
- HLS 转码输出
- 外部播放器协议直链(8种播放器)
- 转码并发控制(max_transcode_jobs)
- 转码缓存自动清理
2.4 下载模块
源文件:backend/app/download/ (router.py, service.py, clients.py, models.py, schemas.py)
2.4.1 下载客户端管理
| 功能 |
HTTP 方法 |
端点 |
说明 |
权限 |
| 客户端列表 |
GET |
/api/download/clients |
获取所有下载客户端 |
登录 |
| 创建客户端 |
POST |
/api/download/clients |
添加下载客户端 |
管理员 |
| 获取客户端 |
GET |
/api/download/clients/{id} |
获取客户端详情 |
登录 |
| 更新客户端 |
PUT |
/api/download/clients/{id} |
更新客户端配置 |
管理员 |
| 删除客户端 |
DELETE |
/api/download/clients/{id} |
删除客户端 |
管理员 |
| 测试连接 |
POST |
/api/download/clients/{id}/test |
测试客户端连接 |
管理员 |
2.4.2 下载任务管理
| 功能 |
HTTP 方法 |
端点 |
说明 |
权限 |
| 任务列表 |
GET |
/api/download/tasks |
分页获取下载任务 |
登录 |
| 添加任务 |
POST |
/api/download/add |
添加下载任务 |
登录 |
| 暂停任务 |
POST |
/api/download/{id}/pause |
暂停下载 |
登录 |
| 恢复任务 |
POST |
/api/download/{id}/resume |
恢复下载 |
登录 |
| 删除任务 |
DELETE |
/api/download/{id} |
删除任务(可选删除文件) |
登录 |
| 同步状态 |
POST |
/api/download/sync |
手动同步下载状态 |
管理员 |
| 自动同步 |
POST |
/api/download/start-auto-sync |
启动后台自动进度同步(5秒间隔) |
登录 |
2.4.3 Aria2 扩展
| 功能 |
HTTP 方法 |
端点 |
说明 |
权限 |
| Aria2 统计 |
GET |
/api/download/aria2/stats |
Aria2 全局统计(活跃/等待/停止/速度) |
登录 |
2.4.4 整理入库
| 功能 |
HTTP 方法 |
端点 |
说明 |
权限 |
| 批量整理 |
POST |
/api/download/organize |
手动触发所有已完成任务整理入库 |
管理员 |
| 单个整理 |
POST |
/api/download/{id}/organize |
手动整理单个下载任务 |
管理员 |
下载客户端适配器:
- qBittorrent(WebUI API)
- Transmission(RPC API)
- Aria2(JSON-RPC)
2.5 订阅与站点模块
源文件:backend/app/subscribe/ (router.py, service.py, site_adapter.py, notifier.py, models.py, schemas.py)
2.5.1 站点管理
| 功能 |
HTTP 方法 |
端点 |
说明 |
权限 |
| 站点列表 |
GET |
/api/sites |
获取所有站点配置 |
登录 |
| 创建站点 |
POST |
/api/sites |
添加站点 |
管理员 |
| 更新站点 |
PUT |
/api/sites/{id} |
更新站点配置 |
管理员 |
| 删除站点 |
DELETE |
/api/sites/{id} |
删除站点 |
管理员 |
| 测试站点 |
POST |
/api/sites/{id}/test |
测试站点连接 |
管理员 |
| 浏览站点资源 |
GET |
/api/sites/{id}/resource |
分页浏览站点资源列表 |
登录 |
| 刷新用户数据 |
GET |
/api/sites/{id}/userdata |
获取站点用户数据(上传/下载量等) |
管理员 |
支持站点类型:
- NexusPHP — 国内绝大多数 PT 站
- Gazelle/Luminance — HDBits/OPS 等
- UNIT3D — BeyondHD/BluTopia 等
- MTeam — 馒头专用 REST API
- Discuz — 论坛型资源站
- Custom RSS — 自定义 RSS
认证方式:
- Cookie / API Key / Authorization Header
2.5.2 资源搜索(跨站聚合)
| 功能 |
HTTP 方法 |
端点 |
说明 |
权限 |
| 跨站搜索 |
GET |
/api/search/sites |
多站点资源聚合搜索 |
登录 |
2.5.3 订阅管理
| 功能 |
HTTP 方法 |
端点 |
说明 |
权限 |
| 订阅列表 |
GET |
/api/subscriptions |
获取订阅列表 |
登录 |
| 创建订阅 |
POST |
/api/subscriptions |
创建订阅 |
登录 |
| 更新订阅 |
PUT |
/api/subscriptions/{id} |
更新订阅 |
登录 |
| 删除订阅 |
DELETE |
/api/subscriptions/{id} |
删除订阅 |
管理员 |
| 按媒体查订阅 |
GET |
/api/subscriptions/media/{mediaid} |
支持 tmdb:/douban:/bangumi: 前缀 |
登录 |
| 触发搜索 |
POST |
/api/subscriptions/{id}/search |
手动触发订阅搜索 |
登录 |
| 分享订阅 |
POST |
/api/subscriptions/{id}/share |
创建订阅分享 |
登录 |
| 复制订阅 |
POST |
/api/subscriptions/{id}/fork |
从分享链接复制订阅 |
登录 |
订阅过滤条件:
- 画质优先级列表
- 最小/最大文件大小
- 包含/排除关键词
2.5.4 通知渠道
| 功能 |
HTTP 方法 |
端点 |
说明 |
权限 |
| 渠道列表 |
GET |
/api/notify/channels |
获取通知渠道列表 |
登录 |
| 创建渠道 |
POST |
/api/notify/channels |
创建通知渠道 |
管理员 |
| 更新渠道 |
PUT |
/api/notify/channels/{id} |
更新通知渠道 |
管理员 |
| 删除渠道 |
DELETE |
/api/notify/channels/{id} |
删除通知渠道 |
管理员 |
| 测试渠道 |
POST |
/api/notify/channels/{id}/test |
发送测试通知 |
管理员 |
通知渠道类型:
- Telegram
- 微信(Server酱)
- Bark (iOS)
- Webhook
- Email
| 功能 |
HTTP 方法 |
端点 |
说明 |
权限 |
| 拉取 RSS |
POST |
/api/rss/pull |
手动拉取所有站点 RSS |
管理员 |
2.6 系统模块
源文件:backend/app/system/ (router.py, settings_router.py, settings_service.py, api_config_router.py, api_config_service.py, api_config_models.py, scheduler.py, events.py, crypto.py, models.py)
2.6.1 系统信息
| 功能 |
HTTP 方法 |
端点 |
说明 |
权限 |
| 健康检查 |
GET |
/api/health |
健康检查端点 |
公开 |
| 系统信息 |
GET |
/api/system/info |
获取系统详细信息 |
登录 |
| 系统状态 |
GET |
/api/system/status |
CPU/内存/磁盘使用率 |
登录 |
| 系统配置 |
GET |
/api/system/config |
获取可编辑系统配置(密钥掩码) |
管理员 |
| 更新系统配置 |
PATCH |
/api/system/config |
更新系统配置(写入 .env) |
管理员 |
2.6.2 SSE 实时事件
| 功能 |
HTTP 方法 |
端点 |
说明 |
权限 |
| 获取 SSE 票据 |
GET |
/api/system/events/ticket |
生成一次性 SSE 票据(OTP,10秒有效) |
登录 |
| SSE 事件流 |
GET |
/api/system/events |
SSE 实时事件推送 |
登录 |
SSE 安全机制:
- 一次性票据(OTP)认证(推荐,防 Nginx 日志泄露 JWT)
- 兼容 Authorization Header 认证
- 兼容 URL query token 认证(旧版)
事件类型:下载进度、扫描进度、通知消息等
2.6.3 定时任务
| 功能 |
HTTP 方法 |
端点 |
说明 |
权限 |
| 调度器信息 |
GET |
/api/system/scheduler |
获取定时任务列表 |
管理员 |
| 触发任务 |
POST |
/api/system/scheduler/{id}/trigger |
手动触发定时任务 |
管理员 |
内置定时任务:
| 任务 ID |
名称 |
间隔 |
说明 |
media_scan |
媒体库扫描 |
60分钟 |
扫描+增量刮削 |
subscription_search |
订阅搜索 |
60分钟 |
处理所有订阅 |
download_sync |
下载状态同步 |
30秒 |
同步下载进度 |
rss_pull |
RSS 拉取 |
30分钟 |
拉取所有站点 RSS |
cache_cleanup |
转码缓存清理 |
每天3:00 |
清理24小时以上的转码缓存 |
download_complete |
下载完成整理 |
5分钟 |
检测完成并自动整理入库 |
2.6.4 整理与刮削配置
| 功能 |
HTTP 方法 |
端点 |
说明 |
权限 |
| 获取所有配置 |
GET |
/api/settings |
获取所有整理/刮削配置 |
管理员 |
| 配置 Schema |
GET |
/api/settings/schema |
获取配置表单 Schema |
管理员 |
| 获取单个配置 |
GET |
/api/settings/{key} |
获取单个配置 |
管理员 |
| 更新单个配置 |
PUT |
/api/settings/{key} |
更新单个配置 |
管理员 |
| 批量更新 |
PATCH |
/api/settings |
批量更新配置 |
管理员 |
| 重置配置 |
DELETE |
/api/settings/{key} |
重置为默认值 |
管理员 |
| 重置所有 |
DELETE |
/api/settings |
重置所有配置 |
管理员 |
2.6.5 API 配置管理
| 功能 |
HTTP 方法 |
端点 |
说明 |
权限 |
| 配置列表 |
GET |
/api/api-config |
获取所有 API 配置 |
管理员 |
| 获取配置 |
GET |
/api/api-config/{provider} |
获取指定 Provider 配置 |
管理员 |
| 获取生效配置 |
GET |
/api/api-config/{provider}/effective |
获取合并后的生效配置 |
管理员 |
| 更新配置 |
POST |
/api/api-config/{provider} |
更新 API 配置 |
管理员 |
| 清除配置 |
DELETE |
/api/api-config/{provider} |
清除 API Key |
管理员 |
| 测试连接 |
POST |
/api/api-config/{provider}/test |
测试 API 连接 |
管理员 |
| Provider 列表 |
GET |
/api/api-config/providers/list |
获取支持的 Provider 列表 |
管理员 |
预置 Provider:
tmdb — TMDb API
douban — 豆瓣
bangumi — Bangumi
thetvdb — TheTVDB
fanart — Fanart.tv
openai — OpenAI 兼容 API
siliconflow — 硅基流动
deepseek — DeepSeek
adult — Adult Provider (JavBus/JavDB)
2.6.6 敏感数据加密
源文件:backend/app/system/crypto.py
- 使用 Fernet (AES-128-CBC) 加密存储 API Key、Passkey 等敏感字段
- 基于 APP_SECRET_KEY 派生加密密钥
- 加密数据前缀标识
enc:v1:,兼容旧版明文迁移
2.7 管理后台模块
源文件:backend/app/admin/ (router.py, service.py, schemas.py, backup_service.py)
2.7.1 定时任务管理
| 功能 |
HTTP 方法 |
端点 |
说明 |
| 定时任务列表 |
GET |
/api/admin/scheduler/tasks |
获取可管理的定时任务 |
| 创建定时任务 |
POST |
/api/admin/scheduler/tasks |
创建自定义定时任务 |
| 更新定时任务 |
PUT |
/api/admin/scheduler/tasks/{id} |
更新定时任务 |
| 删除定时任务 |
DELETE |
/api/admin/scheduler/tasks/{id} |
删除定时任务 |
2.7.2 批量操作
| 功能 |
HTTP 方法 |
端点 |
说明 |
| 批量扫描 |
POST |
/api/admin/media/batch/scan |
批量扫描媒体库 |
| 批量刮削 |
POST |
/api/admin/media/batch/scrape |
批量刮削媒体 |
| 批量删除 |
POST |
/api/admin/media/batch/delete |
批量删除媒体 |
| 批量移动 |
POST |
/api/admin/media/batch/move |
批量移动媒体到其他库 |
| 批量收藏 |
POST |
/api/admin/media/batch/favorite |
批量收藏 |
| 批量标记已看 |
POST |
/api/admin/media/batch/watched |
批量标记为已看 |
| 批量重命名 |
POST |
/api/admin/media/batch/rename |
批量重命名文件 |
| AI 重命名 |
POST |
/api/admin/media/batch/ai-rename |
AI 智能重命名 |
2.7.3 内容分级
| 功能 |
HTTP 方法 |
端点 |
说明 |
| 获取分级 |
GET |
/api/admin/content-rating |
获取内容分级配置 |
| 更新分级 |
PUT |
/api/admin/content-rating |
更新内容分级 |
2.7.4 文件管理
| 功能 |
HTTP 方法 |
端点 |
说明 |
| 浏览文件 |
GET |
/api/admin/files/browse |
浏览文件目录 |
| 文件操作 |
POST |
/api/admin/files/operation |
文件操作(移动/复制/删除) |
| 重命名预览 |
GET |
/api/admin/files/rename/preview |
重命名预览 |
| 批量重命名预览 |
POST |
/api/admin/files/rename/batch-preview |
批量重命名预览 |
| 执行重命名 |
POST |
/api/admin/files/rename/execute |
执行重命名 |
| 创建文件夹 |
POST |
/api/admin/files/folder |
创建文件夹 |
| 重命名文件夹 |
PUT |
/api/admin/files/folder/{path} |
重命名文件夹 |
| 删除文件夹 |
DELETE |
/api/admin/files/folder/{path} |
删除文件夹 |
2.7.5 系统管理
| 功能 |
HTTP 方法 |
端点 |
说明 |
| 系统设置 |
GET/PUT |
/api/admin/settings |
获取/更新系统设置 |
| 系统统计 |
GET |
/api/admin/stats |
获取系统统计信息 |
| 系统备份 |
POST |
/api/admin/backup |
触发系统备份 |
| 备份列表 |
GET |
/api/admin/backup/list |
获取备份列表 |
| 恢复备份 |
POST |
/api/admin/backup/restore |
从备份恢复 |
2.8 统计模块
源文件:backend/app/stats/ (router.py, service.py, schemas.py)
| 功能 |
HTTP 方法 |
端点 |
说明 |
权限 |
| 概览统计 |
GET |
/api/stats/overview |
媒体总数/电影/剧集/大小/用户/播放次数 |
公开 |
| 播放趋势 |
GET |
/api/stats/trend |
按小时/天/周的播放趋势 |
公开 |
| 热门内容 |
GET |
/api/stats/top-content |
播放次数最多的媒体 |
公开 |
| 活跃用户 |
GET |
/api/stats/top-users |
播放次数最多的用户 |
公开 |
| 媒体库统计 |
GET |
/api/stats/libraries |
各媒体库统计 |
管理员 |
| 系统监控 |
GET |
/api/stats/monitor |
CPU/内存/磁盘/网络监控 |
管理员 |
| 用户统计 |
GET |
/api/stats/user/{id} |
用户播放统计 |
管理员 |
| 记录播放 |
POST |
/api/stats/play |
记录播放事件 |
登录 |
2.9 播放列表模块
源文件:backend/app/playlist/ (router.py, service.py, models.py, schemas.py)
| 功能 |
HTTP 方法 |
端点 |
说明 |
权限 |
| 播放列表列表 |
GET |
/api/playlists |
获取用户播放列表 |
登录 |
| 播放列表详情 |
GET |
/api/playlists/{id} |
获取列表详情(含媒体项) |
登录 |
| 创建播放列表 |
POST |
/api/playlists |
创建播放列表 |
登录 |
| 更新播放列表 |
PUT |
/api/playlists/{id} |
更新播放列表 |
登录 |
| 删除播放列表 |
DELETE |
/api/playlists/{id} |
删除播放列表 |
登录 |
| 添加项目 |
POST |
/api/playlists/{id}/items |
添加媒体到播放列表 |
登录 |
| 移除项目 |
DELETE |
/api/playlists/{id}/items/{item_id} |
从播放列表移除 |
登录 |
| 重新排序 |
PUT |
/api/playlists/{id}/reorder |
重新排序播放列表 |
登录 |
2.10 STRM 文件支持模块
源文件:backend/app/strm/ (router.py, schemas.py, __init__.py)
| 功能 |
HTTP 方法 |
端点 |
说明 |
权限 |
| STRM 配置 |
GET |
/api/admin/strm/config |
获取 STRM 配置 |
管理员 |
| 更新 STRM 配置 |
PUT |
/api/admin/strm/config |
更新 STRM 配置 |
管理员 |
| 获取 STRM URL |
GET |
/api/admin/strm/media/{id} |
获取媒体 STRM URL |
管理员 |
| 设置 STRM URL |
PUT |
/api/admin/strm/media/{id} |
设置媒体 STRM URL(协议白名单校验) |
管理员 |
| 清除 STRM URL |
DELETE |
/api/admin/strm/media/{id} |
清除 STRM URL |
管理员 |
| Emby STRM 播放信息 |
GET |
/api/admin/strm/emby/Items/{id}/PlaybackInfo |
Emby 兼容 STRM 播放 |
公开 |
STRM 功能:将外部存储(WebDAV/Alist/S3/HTTP 直链)以"文件"形式加入媒体库,播放时直接访问远程 URL。
2.11 DLNA/投屏模块
源文件:backend/app/dlna/__init__.py(当前为 stub 实现)
| 功能 |
HTTP 方法 |
端点 |
说明 |
权限 |
| 发现设备 |
GET |
/api/dlna/devices |
发现 DLNA 设备 |
登录 |
| 获取设备 |
GET |
/api/dlna/devices/{id} |
获取设备信息 |
登录 |
| 投屏 |
POST |
/api/dlna/cast |
投屏媒体到设备 |
登录 |
注意:当前 DLNA 为 stub 实现,返回空列表。Go 版可考虑完整实现。
2.12 授权管理模块
源文件:backend/app/license/ (router.py, schemas.py, __init__.py)
| 功能 |
HTTP 方法 |
端点 |
说明 |
权限 |
| 授权信息 |
GET |
/api/license/info |
获取基本授权信息 |
登录 |
| 授权状态 |
GET |
/api/license/status |
获取详细授权状态 |
登录 |
| 激活授权 |
POST |
/api/license/activate |
通过授权码激活 Plus |
登录 |
| 解绑授权 |
POST |
/api/license/unbind |
解绑当前设备 |
登录 |
| 授权配置 |
GET/POST |
/api/license/config |
获取/更新授权配置 |
管理员 |
| 测试连接 |
POST |
/api/license/config/test |
测试授权服务器连接 |
管理员 |
| 心跳状态 |
GET |
/api/license/heartbeat-status |
获取心跳状态 |
登录 |
| 刷新授权 |
POST |
/api/license/refresh |
刷新授权状态 |
登录 |
| 生成授权码 |
POST |
/api/license/generate |
生成授权码 |
管理员 |
| 授权码列表 |
GET |
/api/license/list |
获取授权码列表 |
管理员 |
| 激活记录 |
GET |
/api/license/{id}/activations |
获取激活记录 |
管理员 |
| 吊销授权码 |
POST |
/api/license/{id}/revoke |
吊销授权码 |
管理员 |
| 解绑设备 |
POST |
/api/license/activation/{id}/unbind |
解绑指定设备 |
管理员 |
Plus 版特性:
- 无用户数量限制(免费版限30人)
- Plus 用户自动获得所有功能权限
- 授权码格式:
MS-XXXX-XXXX-XXXX-XXXX
- 验证模式:本地验证 / 在线服务器验证
2.13 Emby API 兼容层
源文件:backend/app/emby_api.py(~1800 行,完整的 Emby Server API v3 兼容)
提供 Emby API 子集,让 Infuse、Kodi、Fileball 等客户端可以直接连接 MediaStation。
核心 Emby 端点(仅列出关键部分,实际约 50+ 端点):
| 功能 |
HTTP 方法 |
端点 |
说明 |
| Emby 认证 |
POST |
/api/emby/Users/AuthenticateByName |
Emby 客户端认证 |
| 系统信息 |
GET |
/api/emby/System/Info |
Emby 系统信息 |
| 媒体库列表 |
GET |
/api/emby/Library/VirtualFolders |
虚拟文件夹(媒体库) |
| 媒体列表 |
GET |
/api/emby/Items |
媒体条目列表 |
| 媒体详情 |
GET |
/api/emby/Users/{uid}/Items/{id} |
媒体详情 |
| 搜索 |
GET |
/api/emby/Items?searchTerm= |
媒体搜索 |
| 播放信息 |
GET |
/api/emby/Items/{id}/PlaybackInfo |
获取播放流信息 |
| 视频流 |
GET |
/api/emby/Videos/{id}/stream |
视频流直链 |
| 字幕流 |
GET |
/api/emby/Videos/{id}/Subtitles/{sid}/Stream |
字幕流 |
| 播放进度上报 |
POST |
/api/emby/Sessions/Playing |
上报播放进度 |
| 播放停止 |
POST |
/api/emby/Sessions/Playing/Stopped |
播放停止上报 |
| 最新添加 |
GET |
/api/emby/Users/{uid}/Items/Latest |
最新添加的媒体 |
| 继续观看 |
GET |
/api/emby/Users/{uid}/Items/Resume |
继续观看列表 |
Emby 认证方式:
- X-Emby-Token Header
- Authorization: Bearer Token
- Emby 用户名/密码认证
2.14 发现/探索模块
源文件:backend/app/media/discover_router.py
| 功能 |
HTTP 方法 |
端点 |
说明 |
权限 |
| 可用区块列表 |
GET |
/api/discover/sections |
获取所有推荐区块(含可用状态) |
登录 |
| 聚合发现页 |
GET |
/api/discover/feed |
聚合各数据源推荐内容 |
登录 |
| 图片代理 |
GET |
/api/discover/image-proxy |
代理外部图片(绕过豆瓣防盗链) |
登录 |
推荐区块(12 个):
| Key |
标签 |
数据源 |
recent_movies |
最近添加电影 |
本地 |
recent_tv |
最近添加剧集 |
本地 |
top_rated |
评分最高 |
本地 |
anime |
动漫推荐 |
本地 |
tmdb_trending |
流行趋势 |
TMDb |
tmdb_now_playing |
正在热映 |
TMDb |
tmdb_popular_movies |
TMDB 热门电影 |
TMDb |
tmdb_popular_tv |
TMDB 热门电视剧 |
TMDb |
douban_hot_movies |
豆瓣热门电影 |
豆瓣 |
douban_hot_tv |
豆瓣热门电视剧 |
豆瓣 |
douban_hot_anime |
豆瓣热门动漫 |
豆瓣 |
douban_top250 |
豆瓣 TOP250 |
豆瓣 |
bangumi_daily |
Bangumi 每日放送 |
Bangumi |
3. 数据模型清单
源文件:backend/app/base_models.py, 各模块 models.py
公共基类
| 模型 |
说明 |
Base |
SQLAlchemy 声明基类 |
TimestampMixin |
时间戳混入(created_at, updated_at) |
用户模块
| 表名 |
模型 |
关键字段 |
说明 |
users |
User |
id, username, password_hash, role, tier, avatar, nickname, is_active, last_login |
用户表 |
user_permissions |
UserPermission |
id, user_id, can_* (19个权限字段) |
用户功能权限表 |
system_config |
SystemConfig |
id, key, value, value_type |
系统配置表 |
watch_history |
WatchHistory |
id, user_id, media_item_id, episode_id, progress, duration, completed, last_watched |
观看历史 |
媒体模块
| 表名 |
模型 |
关键字段 |
说明 |
media_libraries |
MediaLibrary |
id, name, path, media_type, scan_interval, enabled, min_file_size, metadata_language, adult_content, prefer_nfo, enable_watch |
媒体库 |
media_items |
MediaItem |
id, library_id, tmdb_id, douban_id, bangumi_id, title, original_title, year, overview, poster_url, backdrop_url, media_type, rating, genres, file_path, file_size, duration, video/audio_codec, resolution, strm_url, hdr_format, audio_channels, frame_rate, color_space, bit_depth, is_duplicate, duplicate_of, file_hash |
媒体条目 |
media_seasons |
MediaSeason |
id, media_item_id, season_number, name, poster_url |
季 |
media_episodes |
MediaEpisode |
id, season_id, episode_number, title, file_path, file_size, duration, air_date, video/audio_codec |
集 |
subtitles |
Subtitle |
id, media_item_id, episode_id, language, language_name, path, source |
字幕 |
favorites |
Favorite |
id, user_id, media_item_id (unique) |
收藏 |
下载模块
| 表名 |
模型 |
关键字段 |
说明 |
download_clients |
DownloadClient |
id, name, client_type, host, port, username, password, enabled, category |
下载客户端 |
download_tasks |
DownloadTask |
id, client_id, subscription_id, media_id, torrent_name, torrent_url, info_hash, save_path, status, progress, total_size, downloaded, speed, seeders, eta, message |
下载任务 |
订阅模块
| 表名 |
模型 |
关键字段 |
说明 |
sites |
Site |
id, name, base_url, site_type, auth_type, cookie, api_key, auth_header, user_agent, rss_url, timeout, priority, use_proxy, rate_limit, browser_emulation, enabled, login_status, upload/download_bytes, downloader |
站点配置 |
subscriptions |
Subscription |
id, name, original_name, tmdb_id, media_type, year, quality_filter, min/max_size, exclude/include_keywords, status, last_search, total_downloaded |
订阅 |
subscription_logs |
SubscriptionLog |
id, subscription_id, action, resource_title, message |
订阅日志 |
notify_channels |
NotifyChannel |
id, name, channel_type, config, enabled, events |
通知渠道 |
播放模块
| 表名 |
模型 |
关键字段 |
说明 |
play_history |
PlayHistory |
id, user_id, media_item_id, played_at, duration, device_type, ip_address |
播放历史 |
playlists |
Playlist |
id, user_id, name, description, cover_url, is_public |
播放列表 |
playlist_items |
PlaylistItem |
id, playlist_id, media_item_id, position, added_at |
播放列表项 |
系统模块
| 表名 |
模型 |
关键字段 |
说明 |
settings |
SettingsKV |
id, key, value |
KV 设置表 |
api_configs |
ApiConfig |
id, provider, api_key, base_url, extra, enabled, description |
API 配置表 |
4. 前端功能清单
源文件:frontend/src/
4.1 页面/视图
| 路由 |
视图文件 |
功能 |
权限 |
/login |
LoginView.vue |
登录页 |
公开 |
/ |
DashboardView.vue |
仪表盘(继续观看/最近添加/统计数据) |
can_view_dashboard |
/media |
MediaLibraryView.vue |
媒体库浏览(列表/海报墙切换) |
can_play_media |
/poster-wall |
PosterWallView.vue |
海报墙视图 |
can_play_media |
/favorites |
FavoritesView.vue |
收藏列表 |
can_favorite |
/tv/:id |
TvSeasonView.vue |
剧集季详情 |
can_play_media |
/media/:id |
MediaDetailView.vue |
媒体详情页 |
can_play_media |
/player/:id |
PlayerView.vue |
视频播放器 |
can_play_media |
/downloads |
DownloadView.vue |
下载管理 |
can_manage_downloads |
/discover |
DiscoverView.vue |
发现/探索页(多源聚合) |
can_view_discover |
/search |
SearchResultView.vue |
搜索结果页 |
登录 |
/subscriptions |
SubscribeView.vue |
订阅管理 |
can_manage_subscriptions |
/sites |
SitesView.vue |
站点管理 |
can_manage_sites |
/site-search |
SiteSearchView.vue |
跨站资源搜索 |
can_manage_sites |
/settings |
SettingsView.vue |
系统设置(多 Tab) |
can_access_settings |
/history |
WatchHistoryView.vue |
观看历史 |
can_view_history |
/profile |
ProfileView.vue |
个人资料 |
登录 |
/files |
FileManagerView.vue |
文件管理器 |
can_manage_files |
/playlists |
PlaylistView.vue |
播放列表 |
登录 |
/playlists/:id |
PlaylistDetailView.vue |
播放列表详情 |
登录 |
/ai-assistant |
AIAssistantView.vue |
AI 助手 |
can_use_ai_assistant |
/profiles-management |
ProfileManagementView.vue |
用户管理 |
管理员 |
/storage |
StorageView.vue |
存储管理 |
管理员 |
/strm |
StrmView.vue |
STRM 文件管理 |
can_manage_strm |
/dlna |
DlnaView.vue |
DLNA 投屏 |
can_cast |
4.2 组件
| 组件 |
说明 |
| AppEmpty.vue |
空状态占位组件 |
| AppModal.vue |
通用模态框 |
| AppToast.vue |
消息提示 |
| BackendStatus.vue |
后端状态检测 |
| FileTree.vue / FileTreeNode.vue |
文件树组件 |
| settings/GeneralTab.vue |
通用设置 Tab |
| settings/AccountTab.vue |
账户设置 Tab |
| settings/UsersTab.vue |
用户管理 Tab |
| settings/LibrariesTab.vue |
媒体库设置 Tab |
| settings/OrganizeScrapeTab.vue |
整理与刮削设置 Tab |
| settings/DownloadTab.vue |
下载设置 Tab |
| settings/NotifyTab.vue |
通知设置 Tab |
| settings/SchedulerTab.vue |
定时任务设置 Tab |
| settings/SystemTab.vue |
系统设置 Tab |
| settings/ApiConfigTab.vue |
API 配置 Tab |
| settings/LicenseTab.vue |
授权管理 Tab |
| settings/AdultTab.vue |
Adult Provider 设置 Tab |
| settings/ConfigGroup.vue / ConfigRow.vue |
配置表单通用组件 |
4.3 状态管理(Pinia Stores)
| Store |
文件 |
说明 |
| auth |
stores/auth.ts |
认证状态 + 用户权限 |
| player |
stores/player.ts |
播放器状态 |
4.4 API 调用模块
| 模块 |
文件 |
说明 |
| auth |
api/auth.ts |
认证相关 API |
| media |
api/media.ts |
媒体库 API |
| playback |
api/playback.ts |
播放 API |
| download |
api/download.ts |
下载 API |
| subscribe |
api/subscribe.ts |
订阅 API |
| system |
api/system.ts |
系统 API |
| settings |
api/settings.ts |
设置 API |
| config |
api/config.ts |
配置 API |
| admin |
api/admin.ts |
管理后台 API |
| license |
api/license.ts |
授权 API |
| profiles |
api/profiles.ts |
用户配置 API |
| playlist |
api/playlist.ts |
播放列表 API |
| strm |
api/strm.ts |
STRM API |
| dlna |
api/dlna.ts |
DLNA API |
| client |
api/client.ts |
HTTP 客户端封装 |
4.5 Composables
| 模块 |
说明 |
| useFormat.ts |
格式化工具(文件大小、时长等) |
| useImageError.ts |
图片加载错误处理(默认占位图) |
| useSSE.ts |
SSE 实时事件连接 |
| useToast.ts |
消息提示封装 |
4.6 前端路由守卫
- 认证检查(requiresAuth)
- 游客页面重定向(guest)
- 管理员权限检查(adminOnly)
- 功能权限检查(requiredPermission)— 与后端 19 项权限对齐
5. 部署配置清单
5.1 Docker
| 文件 |
说明 |
docker/Dockerfile |
多阶段构建(前端构建 + Python 运行时) |
docker/docker-compose.yml |
Docker Compose 编排 |
docker/docker-compose.template.yml |
模板版本 |
docker/.env.template |
环境变量模板 |
docker/deploy-docker.sh |
Linux 部署脚本 |
docker/deploy-docker.ps1 |
Windows 部署脚本 |
docker/check-image-security.sh |
镜像安全检查 |
docker-compose.example.yml |
根目录示例 |
5.2 Helm Chart
| 文件 |
说明 |
deploy/charts/helm/Chart.yaml |
Chart 定义 |
deploy/charts/helm/values.yaml |
默认值 |
deploy/charts/helm/templates/deployment.yaml |
Deployment 模板 |
deploy/charts/helm/templates/service.yaml |
Service 模板 |
deploy/charts/helm/templates/ingress.yaml |
Ingress 模板 |
deploy/charts/helm/templates/pvc.yaml |
PVC 模板 |
deploy/charts/helm/templates/secret.yaml |
Secret 模板 |
deploy/charts/helm/templates/serviceaccount.yaml |
ServiceAccount 模板 |
deploy/charts/helm/templates/_helpers.tpl |
Helm 辅助模板 |
5.3 其他部署
| 文件/目录 |
说明 |
nginx.example.conf |
Nginx 反向代理配置(含 SSE/视频流/HTTPS) |
deploy/scripts/install-linux.sh |
Linux 安装脚本 |
deploy/scripts/install-windows.ps1 |
Windows 安装脚本 |
deploy/templates/unraid/mediastation.xml |
Unraid 模板 |
deploy/charts/truenas/media-station.yaml |
TrueNAS Chart |
deploy/packages/synology/build-spk.sh |
群晖 SPK 打包 |
deploy/DEPLOYMENT.md |
部署文档 |
6. 中间件与基础设施
| 功能 |
源文件 |
说明 |
| CORS 中间件 |
main.py |
可配置 origins,支持凭证 |
| 全局异常处理 |
main.py |
AppError 层级 + 422/500 兜底 |
| SPA 路由回退 |
main.py |
非API请求返回 index.html |
| 路径遍历防护 |
main.py, image_proxy.py |
resolve() 后校验 |
| SQLite WAL 模式 |
database.py |
预设 WAL + NORMAL 同步 |
| SQLite busy_timeout |
database.py |
5000ms 忙等待 |
| PostgreSQL 连接池 |
database.py |
pool_size=10, max_overflow=20 |
| JWT 认证 |
deps.py, user/auth.py |
HS256, access + refresh token |
| 权限检查 |
deps.py |
require_permission() 工厂函数 |
| 敏感数据加密 |
system/crypto.py |
Fernet (AES-128-CBC) |
| SSE 事件总线 |
system/events.py |
僵尸队列检测 + 心跳 + 自动清理 |
| 文件监控 |
media/watcher.py |
文件系统实时监控 |
| 后台任务调度 |
system/scheduler.py |
APScheduler (AsyncIO) |
异常层级
| 异常类 |
HTTP 状态码 |
说明 |
| AppError |
500 |
基础业务异常 |
| NotFoundError |
404 |
资源不存在 |
| ValidationError |
422 |
参数校验失败 |
| UnauthorizedError |
401 |
未认证 |
| ForbiddenError |
403 |
无权限 |
| ConflictError |
409 |
资源冲突 |
| ExternalServiceError |
502 |
外部服务错误 |
| ScraperError |
404 |
刮削失败 |
| TranscodeError |
500 |
转码失败 |
| DownloadClientError |
502 |
下载客户端错误 |
| SiteError |
502 |
站点错误 |
7. 配置系统
源文件:backend/app/config.py
环境变量配置
| 分类 |
变量 |
默认值 |
说明 |
| 应用 |
APP_NAME |
MediaStation |
应用名 |
|
APP_PORT |
3001 |
端口 |
|
APP_DEBUG |
false |
调试模式 |
|
APP_SECRET_KEY |
AUTO_GENERATE |
JWT 密钥(自动生成警告) |
|
DATA_DIR |
./data |
数据目录 |
|
SERVER_URL |
"" |
服务器地址(外部播放器用) |
| 数据库 |
DATABASE_URL |
"" |
留空用 SQLite |
| TMDb |
TMDB_API_KEY |
"" |
TMDb API Key |
|
TMDB_LANGUAGE |
zh-CN |
TMDb 语言 |
|
TMDB_BASE_URL |
https://api.themoviedb.org/3 |
TMDb API 地址 |
| 豆瓣 |
DOUBAN_COOKIE |
"" |
豆瓣 Cookie |
| Bangumi |
BANGUMI_TOKEN |
"" |
Bangumi Token |
| qBittorrent |
QB_HOST |
"" |
qBittorrent 地址 |
|
QB_USERNAME |
admin |
用户名 |
|
QB_PASSWORD |
adminadmin |
密码 |
| Transmission |
TR_HOST |
"" |
Transmission 地址 |
|
TR_USERNAME |
"" |
用户名 |
|
TR_PASSWORD |
"" |
密码 |
| Telegram |
TELEGRAM_BOT_TOKEN |
"" |
Bot Token |
|
TELEGRAM_CHAT_ID |
"" |
Chat ID |
| 微信 |
WECHAT_SENDKEY |
"" |
Server酱 SendKey |
| Bark |
BARK_SERVER |
"" |
Bark 服务器 |
|
BARK_KEY |
"" |
Bark Key |
| AI |
OPENAI_API_KEY |
"" |
OpenAI API Key |
|
OPENAI_BASE_URL |
https://api.openai.com/v1 |
API 地址 |
|
OPENAI_MODEL |
gpt-4o-mini |
模型 |
| FFmpeg |
FFMPEG_PATH |
ffmpeg |
FFmpeg 路径 |
|
FFPROBE_PATH |
ffprobe |
FFprobe 路径 |
|
HW_ACCEL |
auto |
硬件加速 (auto/qsv/vaapi/nvenc/videotoolbox/none) |
|
MAX_TRANSCODE_JOBS |
2 |
最大并发转码 |
|
TRANSCODE_ENABLED |
false |
默认关闭转码 |
| 媒体目录 |
MOVIES_DIR |
"" |
电影目录 |
|
TV_DIR |
"" |
剧集目录 |
|
ANIME_DIR |
"" |
动漫目录 |
| JWT |
JWT_ACCESS_EXPIRE_MINUTES |
60 |
Access Token 有效期 |
|
JWT_REFRESH_EXPIRE_DAYS |
30 |
Refresh Token 有效期 |
| 安全 |
VERIFY_CLIENT_SSL |
true |
下载客户端 SSL 校验 |
| CORS |
CORS_ORIGINS |
"" |
逗号分隔的允许源 |
数据库存储配置(settings 表)
整理/刮削相关配置通过 SettingsKV 表存储,通过 /api/settings 端点管理。
API 配置(api_configs 表)
各数据源 API Key 通过 ApiConfig 表存储,支持加密,通过 /api/api-config 端点管理。
8. 技术栈对照表
| 层次 |
原版 (Python) |
目标 (Go) |
| Web 框架 |
FastAPI |
Gin |
| ORM |
SQLAlchemy (async) |
GORM |
| 数据库 |
SQLite / PostgreSQL |
SQLite / PostgreSQL |
| 认证 |
python-jose (JWT) + passlib |
golang-jwt + bcrypt |
| 任务调度 |
APScheduler |
robfig/cron 或类似 |
| SSE |
sse-starlette |
原生实现 |
| HTTP 客户端 |
httpx |
net/http |
| 模板引擎 |
无(SPA) |
无(SPA) |
| 前端 |
Vue 3 + Pinia + Vue Router |
React + Zustand + React Router |
| UI 框架 |
未明确(推测自定义/Vuetify) |
MUI + Tailwind CSS |
| 构建工具 |
Vite |
Vite |
| 加密 |
cryptography (Fernet) |
crypto/aes |
| 视频处理 |
FFmpeg (subprocess) |
FFmpeg (exec) |
| 容器化 |
Docker + Helm |
Docker + Helm |
| 反向代理 |
Nginx |
Nginx |
附录:API 端点总数统计
| 模块 |
端点数量 |
| 用户与认证 |
19 |
| 媒体库 |
31 |
| 播放 |
11 |
| 下载 |
12 |
| 订阅与站点 |
20 |
| 系统 |
15 |
| 管理后台 |
~20 |
| 统计 |
8 |
| 播放列表 |
8 |
| STRM |
6 |
| DLNA |
3 |
| 授权管理 |
13 |
| Emby 兼容层 |
~50 |
| 发现/探索 |
3 |
| 总计 |
~220 |
文档版本: v1.0 | 分析范围: MediaStation-py 全量源代码