Skip to content

v1.3.2

Choose a tag to compare

@github-actions github-actions released this 14 Oct 05:05
如果你在更新页面开到这个开头,请往下滑看详细的更新日志 ### ⬇️ 点击徽章直接下载

Windows
macOS
macOS
Linux
Linux

不知道选哪个?见下方对照表 · 首次使用请留意各平台注意事项


📦 下载对照表

平台 架构 安装包
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 · 遇到问题请先看 故障排除