Open Source · Desktop · Genshin Aesthetic

提瓦特双璧

两个独立的开源桌面项目,共享同一套工程范式:Electron 桌面壳 承载 Vue 3 前端,Python 本地服务承担重活,PyInstaller 与 electron-builder 收束为 Windows 安装包。一个负责把文件稳稳拖进磁盘,一个负责把旋律稳稳送进耳朵。

多线程下载 · 断点续传 本地音乐库 · 在线播放 GPL-3.0 双许可 Windows x64

Project 01 / Downloader

提瓦特地脉

Teyvat Leyline

原神美术风格的多线程下载器

以「地脉」为意象的桌面下载工具。前端用 Vue 3 复刻深蓝地脉底色与金色星落光效, 后端是一套独立可运行的 FastAPI 服务;下载引擎借鉴 aria2 的 byte-range 分片并发思想,把大文件切成若干段并行拉取,配合断点清单实现真正的暂停与续传。 它同时是一个可脚本化的 CLI——不启动界面也能下载。

v1.0.0 GPL-3.0 Python 3.11+ Node 18+ Windows x64
提瓦特地脉 应用图标 LEYLINE · 1.0.0
01 / CORE

多线程分片下载

探测服务器能力后按 Range 把文件切成 N 段并发写入,每段各占独立 byte-range,不存在共享 offset 的写冲突。

02 / RESUME

断点续传

.part 临时文件配合 .part.json 段状态清单,可随时暂停与恢复;重启后自动扫描清单,把未完成任务恢复为「已暂停」。

03 / FALLBACK

自动退化为单流

不支持 Range 或大小未知的资源改用顺序单流;服务器谎称支持 Range 却返回 200 时,同样降级为单流重下。

04 / REALTIME

WebSocket 进度推送

速度、剩余时间与百分比由后端主动推送到前端,而非轮询;多任务队列各自独立进度,互不干扰。

05 / CONTROL

限速 · 并发 · 重试 · 校验

全局与单任务两级配置:令牌桶限速、线程数调整、失败重试、HTTP 代理,以及下载完成后的 SHA256 校验。

06 / SECURITY

本地服务鉴权

后端每次启动生成随机端口与随机 token,仅携带令牌的请求可访问 API,防止本机其它网页经端口扫描驱动下载器。

Electron 桌面壳app/src/main
main/index.jsspawn 后端子进程、读取 PORT/TOKEN、目录选择 IPC、单实例锁
preload/index.jscontextBridge 桥接渲染层与主进程
前端渲染层Vue 3 + Vite
App.vue主界面与任务编排
api.jsfetch + WebSocket 封装,自动携带 token、端口变化重探测
components/TaskCard · SettingsModal · HistoryModal · Toaster
Python 后端FastAPI + WebSocket
server.pyHTTP API 与实时通道
core/engine.py任务调度、分片多线程、断点落盘
core/http_client.py探测 / Range / 文件名解析
core/ratelimiter.py限速与并发控制
01

探测

先发 HEAD,必要时退回 Range: bytes=0-0 的 GET,读出 Content-Length、Accept-Ranges 与 Content-Disposition,据此判断大小、可否分片与推荐文件名。

02

分片

支持 Range 且体积足够时切成 N 段(约每线程一段),各线程带 Range 头从自身偏移并发写入临时文件,互不干扰。

03

收尾

全部段完成后校验文件大小,以 os.replace 原子改名到目标路径并删除清单;中途暂停或出错则保留清单,下次从对应偏移续传。

CLI · 无界面下载
# 同步依赖并创建虚拟环境
uv sync

# 直接下载单个文件(便于脚本 / 服务器)
uv run teyvat-leyline \
  --url "https://example.com/file.zip" \
  --output ./downloads
桌面开发 · Electron
cd app
npm install
npm run dev   # 拉起窗口,自动启动 Python 后端

# 打包:先编后端单文件 EXE,再出 NSIS 安装包
.\build-backend.ps1
cd app && npm run dist

v1.0.0 · 2026-09-07 发布

NSIS 安装包约 94 MB · 免安装 ZIP 约 123 MB · 附 latest.yml 供自动更新

Project 02 / Music Player

提瓦特旋律

Teyvat Melody

原神主题风格的桌面音乐播放器

一套完整的本地音乐库加在线播放方案。Python 后端负责扫描、元数据解析、数据库与音频流, Electron 承担主窗口、系统托盘、透明桌面歌词与迷你窗,Vue 3 渲染界面。 三套主题对应蒙德、璃月、稻妻;在线侧兼容洛雪音乐的自定义源脚本, 并内置 QQ / 酷狗 / 网易云 / 酷我 四平台适配器。

v1.0.26 GPL-3.0-or-later Python 3.12 Electron + Flask SQLite
提瓦特旋律 应用主视觉 MELODY · 1.0.26

界面实录

提瓦特旋律 在线搜索界面
在线搜索四平台结果合并成一张表,按来源打标,命中量可翻页浏览
歌曲右键菜单
右键菜单播放、下一首、加入队列、收藏、加入歌单,并可直接指定音质
加入歌单弹窗
歌单管理选择既有歌单,或就地输入名称新建
设置面板 播放行为
播放设置播放模式、默认速度与音量、启动续播、系统级快捷键、切歌淡入淡出
设置面板 在线缓存
缓存管理缓存开关、容量上限(256 MB–2 GB)、占用统计与一键清空

本地音乐

  • 选目录扫描入库,文件自动归集到根目录 music,数据与软件同处一处
  • HTTP Range 分段流式播放,拖动进度条即时定位
  • 解析采样率、码率、声道与格式,列表展示「音质」列
  • 专辑封面读取与本地缓存;LRC 歌词随播放滚动并高亮当前句
  • 我的收藏、多歌单管理、按歌名/艺术家/专辑实时筛选
  • 全屏播放器(旋转封面 + 滚动歌词)、最近播放自动记录

主题与交互

  • 三套主题:蒙德 / 璃月 / 稻妻,以景区地标图标切换,无限循环
  • 毛玻璃质感可整体开关;主题主色联动,切主题自动清空自定义主色
  • 无原生标题栏的自绘控制栏,手动 IPC 拖拽以绕开毛玻璃合成冲突
  • 系统托盘显示/隐藏主窗;全局键盘快捷键
  • 界面语言中文/English 一键切换

播放增强

  • Web Audio 图形均衡器 + 10 段预设(原声/重低音/清澈人声/现场/游戏/古典/流行/自定义)
  • 播放速度 0.5×–2×(细调 0.25×–3×),控制条与设置页均可调
  • 双语歌词:按 |、//、/、制表符分隔渲染副歌词行
  • 全屏播放页字体自定义,支持系统字体与上传 .ttf / .otf / .woff2
  • 启动恢复上次播放队列;睡眠定时

桌面歌词与迷你窗

  • Electron 透明窗口 + HTML 渲染,逐字高亮的横排卡拉 OK 效果
  • 全透明/深色卡片两种背景,颜色、字号、字体均可自定义
  • 顶部工具栏含播放控制、锁定位置与关闭,hover 时显示
  • 双击歌词切换播放/暂停
  • 迷你播放器置顶小窗,展示封面、标题与进度并可遥控播放

在线播放链路

自定义源 .js · Node vm 沙箱 → 搜索 tx / kg / wy / kw → 解析 音质降级 + 换源重试 → 同源代理 透传 Range · 伪装 Referer → 缓存 稳定键 · LRU 淘汰
  • 不内置任何音乐源:源脚本由用户自行放入 sources/,视为不可信代码在沙箱中运行,回调异常相互隔离。
  • 音质按 flac24bit → flac → 320k → 128k 逐级降档,多源自动换源;酷狗 KRC 解密后支持逐字歌词。
  • 远程资源一律经同源代理转发,不放宽 CSP;Flask 以 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

v1.0.26 · 2026-09-21 发布

NSIS 安装包约 89 MB · 免安装 ZIP 约 119 MB · 启动静默检查 GitHub Release 提示更新

Cross Reference

同一套骨架,两种负载

Shared Skeleton · Different Workloads

两个项目的工程选择高度同构:Python 后端被 PyInstaller 打成单文件 EXE 随安装包分发, Electron 主进程负责拉起它、读端口、管生命周期;前端都是 Vue 3 单页应用。 差异集中在「后端框架」「实时通道」与「数据落点」三处——恰好对应下载与播放两种负载的不同脾气。

Electron 主进程托管spawn Python 子进程,读启动日志拿端口,窗口关闭时一并回收
PyInstaller 打包后端后端编为单文件 EXE,随安装包放入 resources 目录
Vue 3 + Vite 前端构建产物由本地服务托管,CSP 限制为同源脚本
electron-builder + NSIS同时产出安装包与免安装 ZIP,支持自定义安装目录
维度提瓦特地脉提瓦特旋律
定位多线程下载管理器本地音乐库 + 在线播放器
当前版本v1.0.0v1.0.26
后端框架FastAPIFlask(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.ymlci.yml(双平台)+ release.yml
主要语言Python 86 KB · Vue 21 KB · CSS 16 KBJS 610 KB · Vue 292 KB · Python 227 KB
许可GPL-3.0GPL-3.0-or-later