Project 01 / Downloader
原神美术风格的多线程下载器
以「地脉」为意象的桌面下载工具。前端用 Vue 3 复刻深蓝地脉底色与金色星落光效, 后端是一套独立可运行的 FastAPI 服务;下载引擎借鉴 aria2 的 byte-range 分片并发思想,把大文件切成若干段并行拉取,配合断点清单实现真正的暂停与续传。 它同时是一个可脚本化的 CLI——不启动界面也能下载。
LEYLINE · 1.0.0
探测服务器能力后按 Range 把文件切成 N 段并发写入,每段各占独立 byte-range,不存在共享 offset 的写冲突。
.part 临时文件配合 .part.json 段状态清单,可随时暂停与恢复;重启后自动扫描清单,把未完成任务恢复为「已暂停」。
不支持 Range 或大小未知的资源改用顺序单流;服务器谎称支持 Range 却返回 200 时,同样降级为单流重下。
速度、剩余时间与百分比由后端主动推送到前端,而非轮询;多任务队列各自独立进度,互不干扰。
全局与单任务两级配置:令牌桶限速、线程数调整、失败重试、HTTP 代理,以及下载完成后的 SHA256 校验。
后端每次启动生成随机端口与随机 token,仅携带令牌的请求可访问 API,防止本机其它网页经端口扫描驱动下载器。
先发 HEAD,必要时退回 Range: bytes=0-0 的 GET,读出 Content-Length、Accept-Ranges 与 Content-Disposition,据此判断大小、可否分片与推荐文件名。
支持 Range 且体积足够时切成 N 段(约每线程一段),各线程带 Range 头从自身偏移并发写入临时文件,互不干扰。
全部段完成后校验文件大小,以 os.replace 原子改名到目标路径并删除清单;中途暂停或出错则保留清单,下次从对应偏移续传。
# 同步依赖并创建虚拟环境
uv sync
# 直接下载单个文件(便于脚本 / 服务器)
uv run teyvat-leyline \
--url "https://example.com/file.zip" \
--output ./downloads
cd app
npm install
npm run dev # 拉起窗口,自动启动 Python 后端
# 打包:先编后端单文件 EXE,再出 NSIS 安装包
.\build-backend.ps1
cd app && npm run dist
Project 02 / Music Player
原神主题风格的桌面音乐播放器
一套完整的本地音乐库加在线播放方案。Python 后端负责扫描、元数据解析、数据库与音频流, Electron 承担主窗口、系统托盘、透明桌面歌词与迷你窗,Vue 3 渲染界面。 三套主题对应蒙德、璃月、稻妻;在线侧兼容洛雪音乐的自定义源脚本, 并内置 QQ / 酷狗 / 网易云 / 酷我 四平台适配器。
MELODY · 1.0.26
界面实录
sources/,视为不可信代码在沙箱中运行,回调异常相互隔离。
flac24bit → flac → 320k → 128k 逐级降档,多源自动换源;酷狗 KRC 解密后支持逐字歌词。
threaded=True 运行,避免长连接音频流堵死单线程。
uv sync # 后端依赖 → .venv
npm install --registry=https://registry.npmmirror.com
cd frontend && npm install && npm run build
cd .. && npm run dev # 主进程自动 spawn Flask
npm test # Node + Python 全套
npm run test:ui # 真实界面端到端
# 打包:NSIS 安装包 + 免安装 ZIP + 便携目录
.\package-electron.ps1
Cross Reference
Shared Skeleton · Different Workloads
两个项目的工程选择高度同构:Python 后端被 PyInstaller 打成单文件 EXE 随安装包分发, Electron 主进程负责拉起它、读端口、管生命周期;前端都是 Vue 3 单页应用。 差异集中在「后端框架」「实时通道」与「数据落点」三处——恰好对应下载与播放两种负载的不同脾气。
| 维度 | 提瓦特地脉 | 提瓦特旋律 |
|---|---|---|
| 定位 | 多线程下载管理器 | 本地音乐库 + 在线播放器 |
| 当前版本 | v1.0.0 | v1.0.26 |
| 后端框架 | FastAPI | Flask(threaded=True) |
| 实时通道 | WebSocket 推送进度 | HTTP Range 流式音频 + IPC |
| 状态存储 | JSON 配置 + .part.json 断点清单 | SQLite + 文件缓存目录 |
| 前端状态 | 组件内状态 + API 封装 | Pinia 多 store + 持久化插件 |
| 安全边界 | 随机端口 + 随机 token 鉴权 | 同源代理 + CSP script-src 'self' |
| 测试 | Python 引擎与接口测试 | Node + Python 双端,另有真实界面 E2E |
| CI / 发布 | ci.yml + release.yml | ci.yml(双平台)+ release.yml |
| 主要语言 | Python 86 KB · Vue 21 KB · CSS 16 KB | JS 610 KB · Vue 292 KB · Python 227 KB |
| 许可 | GPL-3.0 | GPL-3.0-or-later |