基于 Electron + Python(FastAPI) + Vue 3 混合架构、依赖由 uv 全托管的原神风多线程下载器。 byte-range 分片并发、断点续传、暂停恢复与多任务队列,还带限速 / 代理 / SHA256 校验与本地接口鉴权, GUI 以深蓝地脉与金色「星落」光效复刻提瓦特的美术质感。
参考 aria2 的分片并发思想,兼顾速度、可控性与稳定性。
探测服务器后按 Range 把大文件切成多段并发下载,充分利用带宽。
.part 临时文件 + .part.json 段状态清单,随时暂停 / 恢复 / 取消;重启应用会自动扫描清单,把未完成任务恢复为「已暂停」。
对不支持 Range 或未知大小的资源自动改用顺序单流;服务器声称支持 Range 却返回 200 时,也会自动降级重下。
后端经 WebSocket 推送速度、剩余时间与百分比,前端实时渲染,直观不卡顿。
同时管理多个下载任务,各自独立进度、互不干扰,支持逐任务调整线程数。
全局与每任务均可配置限速、并发数、失败重试、HTTP 代理与 SHA256 校验。
后端启动时生成随机 token 并只监听本机,仅携带令牌的请求可访问 API,防止其它网页经端口扫描驱动下载。
后端意外退出时自动重启(上限 5 次),前端重新探测端口恢复连接;单实例锁避免双开。
深蓝地脉底色 + 金色「星落」光效、毛玻璃卡片与发光任务卡,美术质感拉满。
HEAD(必要时退回 Range GET)读取 Content-Length、Accept-Ranges 与 Content-Disposition,得知大小 / 是否分片 / 推荐文件名。
支持 Range 且体积足够时,切成 N 段,每段一个线程用 Range 从各自偏移并发写入去重临时文件。
全部段完成校验大小后 os.replace 改名;中途暂停则保存清单,下次从对应偏移续传。
下载引擎跑在本机 HTTP 服务里,Electron 只做壳与窗口控制,数据落在正确的位置。
FastAPI 提供 HTTP + WebSocket 接口,启动时向 stdout 打印 PORT=<n> 与 TOKEN=<hex>,由前端分别以随机端口与 X-Teyvat-Token 头访问。
主进程 spawn 后端、读取端口、提供目录选择 IPC;窗口关闭时一并回收子进程,异常退出时自动重启并让前端重连。
开发模式把下载、配置、历史与断点放在当前运行目录;打包后经 TEYVAT_DATA_DIR 指向 %APPDATA%\teyvat-leyline-app,卸载时不会被连带删除。
Python 依赖由 uv 全托管(uv sync / uv run);GUI 位于 app/(Electron + electron-vite + Vue 3)。 要求 Python 3.11+(推荐 3.12)与 Node.js 18+。
安装版与免安装版两种分发,Python 后端已用 PyInstaller 打成独立 exe 内置,无需自备运行环境。
安装版(exe):NSIS 安装程序,可自定义安装目录;后端 exe 会被放到安装目录的 resources/backend/ 下,由主进程启动。
免安装版(zip):解压即用,直接运行主程序即可,适合放在任意目录试用。
数据位置:打包版的下载目录、配置、历史与断点清单统一放在 %APPDATA%\teyvat-leyline-app,不写进安装目录,卸载不会连带删除你的下载记录。
提醒:安装包未做代码签名,Windows SmartScreen 可能拦截,点「更多信息 → 仍要运行」即可。