Repository navigation
v1.3.2
📦 下载对照表
| 平台 | 架构 | 安装包 |
|---|---|---|
| Windows | x64 | 安装版 .exe(推荐) |
| Windows | x64 | 便携版 .exe |
| macOS | Apple 芯片(M 系列) | .dmg(推荐) |
| macOS | Intel | .dmg(推荐) |
| Linux | x64 | .AppImage(推荐) |
| Linux | x64 | .deb |
| Linux | x64 | .rpm |
| Linux | arm64 | .AppImage |
运行依赖 yt-dlp / ffmpeg 不随安装包分发:启动后会自动识别机器上已安装的版本并复用,
识别不到时在「设置 → 运行依赖」里一键下载即可,无需提前手动安装。
⚠️ 各平台注意事项
- Windows:安装版会创建开始菜单与桌面快捷方式;便携版解压即用,但不支持自动更新
- macOS:应用未做代码签名,首次打开需在「系统设置 → 隐私与安全性」中允许;Apple 芯片请勿选 Intel 版
- Linux:
.AppImage需先chmod +x;.deb/.rpm可通过包管理器安装
📝 更新内容
修复
-
Windows(及所有 x64 平台)无法下载运行依赖:平台键用的是 Go 命名
(windows/amd64)而资产表是 electron-builder 命名(win32/x64),查表必然失败,
点「下载」报「暂不支持 windows/amd64 平台的 yt-dlp 下载」。三个 x64 平台都受影响,
arm64 只因两种命名恰好一致而正常 -
「继续下载」点了没反应、任务卡在「下载中」:
resumeTask先把状态置为
downloading,而processDownload开头的守卫正是拒绝该状态,于是把自己挡了回去 -
字幕任务「继续下载」报
An object could not be cloned:subtitles在恢复时
来自响应式对象(Vue Proxy),而 Proxy 无法被 structured clone。现统一在交给 IPC
前做一次拍平(toPlainData),不再逐字段展开——逐字段太容易漏 -
在设置里点「保存」会丢失依赖的手动指定路径:设置面板与依赖面板各写各的整个
settings对象,前者字段里没有depPaths,整体覆盖时把它抹掉。现改为合并写入
(新增src/stores/settings.ts),并统一了全部 6 个写入点 -
winget 装的依赖检测不到:候选目录只覆盖用户级的
WinGet\Links,漏掉了
WinGet\Packages(zip + nested portable 真正解压的位置)与机器级
(--scope machine)的整套路径 -
国内网络下应用完全打不开(纯白窗口):
index.html里的 Google Fonts 是跨域且
render-blocking 的样式表,当fonts.googleapis.com请求一直 pending(国内直连基本必挂)时,
Chromium 会连带阻塞后面的<script type="module">,Vue 永不挂载 —— 窗口停在纯白,
日志里连did-finish-load都不出现。改为media="print"+onload异步加载,
连不上时回退到系统字体栈(感谢 @jwfstars) -
依赖探测会把「执行失败的文件」当成可用:原先只要输出了版本号就认,不看退出码;
现在要求命令成功退出且版本格式匹配。同时给检测加了总时限(45 秒 / 单依赖 15 秒 /
单候选 3 秒),避免依次等待多个候选时超过 Electron 的 60 秒超时 -
损坏或过旧的副本会遮蔽正常版本:扫描遇到不可用的同名副本后继续遍历,而不是直接放弃
-
Windows 的 WinGet / Scoop / Chocolatey 路径改为读实际环境变量,支持自定义目录与
迁移后的LOCALAPPDATA;补齐 WinGet 用户级与机器级、Scoop、.deno/bin的查找 -
Windows 上暂停后仍在继续下载:先杀 yt-dlp 父进程再
taskkill /T时,
PyInstaller 子进程可能存活并继续下载(界面已显示暂停、文件却最终下完)。
现改为先终止完整进程树并等待退出;恢复任务会等待暂停请求完成,避免旧调用清理复用
taskId 的新任务(感谢 @hailaij) -
下载历史出现重复记录 / 文件状态不同步:历史改为按本地文件合并,并同步文件是否存在
(感谢 @hailaij)
新增
- 依赖的保底扫描:已知位置都没命中时,在常见目录做一次有界扫描,
避免"明明装了却提示缺失"。结果标记为「扫描发现」并以不同颜色显示。
三道闸限制耗时:深度 4 层、目录数 3000、wall-clock 3 秒
修复
- 在设置里点「保存」会丢失依赖的手动指定路径:设置面板与依赖面板各写各的整个
settings对象,而设置面板的字段里没有depPaths,整体覆盖时把它抹掉。
现改为合并写入(新增src/stores/settings.ts),并统一了全部 6 个写入点——
这类"每加字段就要改所有写入点"的 bug 不会再出现 - winget 装的依赖检测不到:候选目录只覆盖
WinGet\Links,漏掉了
yt-dlp.FFmpeg这类 zip + nested portable 真正解压出来的WinGet\Packages路径
新增
- 依赖的保底扫描:已知安装位置都没命中时,会在常见目录(下载/桌面/文档、
Homebrew、Program Files 等)做一次有界扫描,避免"明明装了却提示缺失"。
扫描结果标记为「扫描发现」并在界面上以不同颜色提示,便于判断来源。
限制深度、访问条目数与跳过目录,不会拖慢启动
修复
An object could not be cloned:开始下载时把手动的响应式数组(Vue Proxy)直接传给了
主进程,而 structured clone 无法克隆 Proxy,因此报错。IPC 载荷统一拍平为普通对象/数组- 缺依赖的提示出现时机不对:开始下载前会
await deps.refresh()——它会启动 Go 边车做一次
完整探测(冷启动 1~3 秒),用户每次点下载都要白等,且提示可能落在"正在提取元数据"之后。
元数据解析本就不需要 ffmpeg(只需要 yt-dlp,而解析成功已证明它可用),因此改为读已有缓存
状态,不重新探测 - 暂停后按钮消失、只能重新下载:主进程在暂停时返回
{ paused: true },但界面无条件把
结果标成"已完成";且 pause 之后残留的 completed 进度事件会把状态覆盖回去、清掉暂停标记 - 下载历史出现重复记录:此前无论成功、暂停还是失败都写入历史,现在只在确实拿到文件时写
改进
- 下载速度大幅提升:此前只对分片流(HLS/DASH)做了并发,而 YouTube 等站点给的是
单个 mp4 直链,走单连接,会被 CDN 限速。改为分块请求后,同一个 17.6 MB 文件实测
从 109 秒(0.16 MB/s)降到约 3 秒(5 MB/s 量级),快 30 倍以上。
对不支持分块的服务器会自动退化为普通下载
致谢
这一版有三位社区贡献者提交了高质量的修复,质量与自证程度都值得记录:
- @jwfstars(#41)
修掉了国内网络下应用完全打不开的问题。报告里用 headless Chrome 做了对照实验,
用一个「accept 之后永不响应」的本地服务冒充被墙的字体域名——比 connection refused
更贴近真实情况——并给出readyState/#app的前后对比。这种复现方式比我自己的
第一版尝试更准确。 - @hailaij(#42、#44)
连续提交了三处 Windows 相关的修复(依赖探测与时限、损坏副本不再遮蔽正常版本、
暂停时终止完整进程树),并实际安装构建产物做真机验收:下载 30 MB 文件核对
暂停/续传后的 SHA-256 一致、确认 yt-dlp 父子进程确实退出。同时给 Windows CI 加了
原生 exe 集成回归,还如实标注了未覆盖范围(仅公开 MP4 / Generic 路径)。
他们都在 PR 里做了变异验证(破坏被测逻辑确认用例会失败),这与本仓库的约定一致。
完整历史见 CHANGELOG.md · 遇到问题请先看 故障排除