Skip to content

Releases: Downvid/downvid

v1.5.0

Choose a tag to compare

@github-actions github-actions released this 18 Oct 06:46

⬇️ 点击徽章直接下载

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 不随安装包分发:启动后会自动识别机器上已安装的版本并复用,
识别不到时在「设置 → 运行依赖」里一键下载即可,无需提前手动安装。

🐳 Docker / NAS 用户

容器镜像发布在 GHCR(amd64 + arm64 多架构),不需要下载上面的安装包:

docker pull ghcr.io/Downvid/downvid:latest
# 或升级已有的容器
docker compose pull downvid && docker compose up -d downvid

容器版不能自更新(进程跑在只读镜像层上),升级方式就是上面这两条命令;
界面里检测到新版本时也会给出它们。详见 docs/docker.md。

⚠️ 各平台注意事项

  • Windows:安装版会创建开始菜单与桌面快捷方式;便携版解压即用,但不支持自动更新
  • macOS:应用未做代码签名,首次打开需在「系统设置 → 隐私与安全性」中允许;Apple 芯片请勿选 Intel 版
  • Linux:.AppImage 需先 chmod +x;.deb / .rpm 可通过包管理器安装

📝 更新内容

这一版同时发布两套产物:Electron 版(老用户走自动更新)与
Wails 版(新架构预览,手动下载,文件名前缀 DownVid-Wails-)。

新增

  • 新架构预览版(Wails):Go + Wails + Svelte,单文件约 18 MB(Electron 版 128 MB)。
    依赖探测、解析、下载、历史、设置、更新检查全部走 Go 核心(app/internal/ 下 14 个包,
    互相零依赖)。产物独立命名,不进老用户的更新通道。
  • 过渡版能检测到新架构版本:设置 → 更新里会出现提示,显示可用的 DownVid-Wails-*
    产物名。迁移由用户手动确认 —— 装上新架构后回不到 Electron,这是单向门。
  • 直链下载器:抖音 / 快手的 CDN 直链走独立路径(分块队列、.part 断点续传、
    429/503 降并发并遵守 Retry-After)。这两家的直链有效期只有几分钟,
    交给 yt-dlp 会二次请求平台接口、拿不到同一份地址。
  • 代理真正生效:此前只有 yt-dlp 走 --proxy,应用自己的 HTTP(直链下载、
    依赖下载、更新检查)全部直连。现在统一走 internal/netx。
    「测试」按钮也从「正则校验」改成真实连通性探测(带回延迟毫秒数)。
  • 更新日志读真实 CHANGELOG:关于页的版本列表此前是硬编码的三条,
    内容还是占位词条。现在解析内嵌的 CHANGELOG.md,支持 Markdown 粗体 /
    行内代码 / 链接,默认只显示标题、点开看展开说明。

修复

  • 滑块拖不动 / 加速设置不生效:updateSetting('key', value) 被写成了
    单参数签名,运行时把字符串按字符下标展开成 {0:'m',1:'a',…},
    一个字段都没改且不报错。同类问题还有 Go 侧的 accelEnabled /
    accelConnections 只在启动时初始化、a.proxy 从不从设置读回。
  • 同链接不同清晰度无法再次下载:原来只比 URL,下过 1080P 就再也下不了 4K。
    改为 URL + 清晰度 + 模式三项判定;文件名同时补清晰度后缀,
    否则不同清晰度算出同名文件、yt-dlp 静默跳过却报成功。
  • 续传用错格式:暂停后点「继续」读的是解析面板当前选中的格式,
    而用户此时可能已经换视频了。改为把选择固化在任务上。
  • YouTube 多音轨选择无效:DownloadRequest 里根本没有 AudioTrack 字段,
    用户选了日语下下来还是默认音轨。
  • 加速页永远显示「未找到 aria2」:后端 kind 是 aria2,前端按 aria2c 查找。
  • 窗口拖不动、左上角被红绿灯压住:macOS 用 TitleBarHiddenInset(内容铺到顶部),
    而顶栏没设成拖拽区。
  • 关于页看起来「打不开」:实际是内容被右侧「传输」浮层盖住(窄窗口下
    position: fixed 且默认展开)。同时修了 ChangelogHistory 返回 nil 导致
    整页白屏(Go 的 nil 切片 JSON 化是 null,前端 .length 直接抛)。
  • 「作者的话」永远停在打包那天:fetchAnnouncement() 早就写好了却从没被调用。
    同时换掉已失效的 ghproxy.com(它现在返回 301 跳首页,会被当成公告正文),
    并加内容校验防止代理返回 HTML 被当 Markdown 解析。
  • 粘贴按钮弹出权限框:navigator.clipboard 在 WebView 里要授权,
    改为 Go 侧读系统剪贴板(pbpaste / Get-Clipboard / wl-paste)。
  • 设置页的文件夹按钮是「打开」不是「选择」:点一下弹出 Finder,
    想换保存位置只能自己敲路径。
  • 依赖页只剩一条:Wails 版打出来的 app 里根本没有依赖边车
    (Wails 没有 electron-builder 的 extraResources)。改为内嵌进主二进制。

工程

  • CI 七处长期红叉全清,五条工作流(Linux / macOS / Windows / Docker / CodeQL)全绿。
    其中两处是真 bug:process_tree.go 在 Windows 上根本编译不过
    (syscall.Kill 不存在)、runtime 包的数据竞争(并行探测互相重置扫描预算,
    go test -race 抓到)。
  • 新增三条 CI 检查:svelte-check(.svelte 里的类型错误,tsc 看不见)、
    lint:i18n:app(中英词条成对 / 无演示文案 / t() 引用的 key 存在)、
    sync:changelog(内嵌副本与根部 CHANGELOG 一致)。
  • 删除 core/ 空壳目录(Wails 方案里可复用的核心是 Go 的 app/internal/*)。
    lint:boundaries 改为守护 Go 分层:internal 包之间不得互相 import。


完整历史见 CHANGELOG.md · 遇到问题请先看 故障排除

v1.4.0

Choose a tag to compare

@github-actions github-actions released this 16 Oct 05:35

⬇️ 点击徽章直接下载

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 可通过包管理器安装

📝 更新内容

新增

  • 关于页新增官网入口,以及赞助 / 商务合作接洽方式:关于页原来只有 GitHub 与「问题反馈」两个入口,
    想找官网或谈合作只能去翻 README。现在多一个官网入口(下载安装包、看功能介绍),
    并在「支持 DownVid」里列出赞助支持与商务合作(广告位)两个邮箱入口,点开即带好邮件主题。
    官网、README 与关于页用的是同一个地址(shared/app.ts 的 CONTACT_EMAIL),
    新增 tests/app-links.test.ts 与 lint:website 的一致性校验——邮箱写错不会报错,
    只是信寄不到,要等对方放弃才知道
  • 界面支持中英双语:此前界面是 1217 处硬编码中文(29 个文件),海外用户装上就是纯中文界面。
    现在 254 条词条 × zh-CN / en-US,t() 读响应式 ref,切换语言立即重渲染;设置里新增
    「界面语言」(默认「跟随系统」),选择器放在「下载」分区最上面——海外用户第一件事就是找它。
    刻意不引 vue-i18n:只有两种语言、没有复数/日期格式化需求,与「不引 ESLint/Prettier」同一套理由。
    新增 pnpm lint:i18n 并挂进三个 ci-*.yml,拦下四类不会报错的失效:词条缺英文
    (该处永远显示中文)、占位符集合不一致(永远显示 {count})、t() 用了不存在的键
    (界面直接显示 key)、src/ 下新写的硬编码中文
  • 官网下载按钮按系统直链安装包:打开页面即识别系统(Chrome / Edge 还能读到芯片架构),
    主按钮直接指向 releases/latest 里对应的产物直链——点一下就下载,不再跳到 Releases 页面。
    同平台的其他格式(便携版、Intel 版、deb / rpm)在展开菜单里;识别不准或拉取失败一律退回
    Releases 页面,不留死链。平台图标也换成各系统的标准品牌标识
  • 官网按参考 deepseek.com/harness 重做版式:居中 hero + 大预览图、两列卡片网格、
    「安装与运行」代码块(带复制按钮)、居中的社区 CTA、极简页脚;顶栏改成浮动圆角胶囊,
    滚动时钉在顶部并加深底色,且去掉了「功能 / 下载 / FAQ / GitHub」那排导航链接
    (页面一路往下滑),品牌在左、中英切换在右。顶栏有两种形态:贴顶时是通栏细条(原样),
    往下滑超过 12px 才收成浮动圆角胶囊并钉住,滑回顶部自动还原
    ;下载按钮改为分体按钮,
    主按钮直链当前系统的安装包,右侧箭头展开全部平台与格式;「查看源码」补上 GitHub 品牌图标。
    配色仍取自应用本身
  • 官网「能做什么」的卡片改成和桌面端一样能点:平台 / 画质 / 浏览器分组单选(画质会带出
    对应体积)、下载加速可以开始 / 暂停并让进度条走起来、依赖识别逐个检出、「检查更新」用
    真实拉到的最新版本号作答。纯前端演示,不联网改状态
  • 官网 hero 的预览图换成应用主界面的可交互复刻:结构 / 文案 / 配色照 src/components/
    的下载界面组件搬过来,解析视频信息、格式单选、立即下载(任务进右侧队列并跑进度)、
    下载历史 / 关于软件 标签页都能点;默认就停在「已粘贴 + 已解析 + 正在下载」的样子,
    缩略图用原链接的预览图(src/assets/demo-thumb.jpg)。画布按应用窗口的 1100px 宽度设计再
    等比缩放,lint:website 会比对复刻里抄来的 @theme 颜色 token
  • 官网下载量与星标改用 README 同款 shields.io 徽章,数字实时,不再需要发布后手动刷新;
    原先的 scripts/gen-website-stats.mjs(pnpm website:stats)已删除
  • pnpm lint:website 新增校验,拦的是本地看不出来的失效:页面脚本里的仓库坐标、
    下载产物名模板与 electron-builder.json5 的 artifactName 是否一致、脚本拼装文案的
    中英词条是否成对、shields.io 徽章里的仓库坐标是否正确;另加
    tests/website-download.test.ts(36 例),用真实产物列表(含 .blockmap、latest*.yml
    等干扰项)钉住「哪个系统拿哪个包」与菜单分组

修复

  • 依赖探测可能挂住几十秒到几分钟:超时后只杀直接子进程,而候选可能是
    shell 脚本或 PyInstaller 启动器,其孙进程仍持有 stdout 管道,cmd.Run()
    会一直等 I/O。实测一个 sleep 300 的假二进制把 5 秒预算的探测拖成 300 秒;
    用户侧表现是界面卡住、最后报「依赖检测达到时限」。现在用 cmd.WaitDelay
    兜住管道(单元测试里真实复现并回归)
  • 卡死的系统副本会拖垮整次检测:候选执行预算改为按来源区分——
    托管副本 15 秒(官方 macOS 构建首次执行最慢实测 12.4 秒),系统副本 5 秒
    (通常是 0.2 秒的 zipapp)。此前一律 15 秒,候选表里十几个路径时最坏能把
    一次检测拖到几分钟。这个问题由 CI 的 Windows 原生回归抓出
  • 浏览器 Cookie 库读不出来时整个解析直接失败(#53):yt-dlp 会在浏览器目录下挑最新的那个
    Cookies 文件来读,它若是空库、不是 SQLite 或拷贝时损坏,yt-dlp 只打出 sqlite3 的原始异常
    (如 ERROR: no such table: meta)。这类报错此前不算「Cookie 读取失败」,于是不换来源,
    后面的浏览器、快照和「不带 Cookie」一个都轮不到。现在照常换来源:不需要登录的视频直接解析成功,
    该浏览器十分钟内跳过;确实需要登录时给出 Cookie 提示。下载走同一套回退,一并修复。
    四种报错形态都用真实 yt-dlp 复现过

工程

  • README 与官网都加上赞助 / 商务合作入口:README 顶部导航行与正文各放一处,
    官网在「加入开源社区」之后新增独立区块。两处都写明软件本身不含任何广告——
    README 的卖点里有「无任何弹窗广告」,只加合作入口而不作区分,读者会以为要往安装包里塞广告

  • CI 按平台拆成三个工作流(ci-linux / ci-windows / ci-macos):
    失败时一眼看出是哪个平台哪一层,Windows/macOS 排队也不再拖住 Linux 的结论。
    macOS 侧新增三项只有那里能验的检查:产物确实未签名、边车在本机能执行且架构正确、
    Info.plist 版本与 package.json 一致(不一致会让用户永远看到「有新版本」)。

  • 新增三层回归脚本(此前完全没有自动化覆盖):test:updater(14 例,
    更新流程)、test:settings:migration(15 例,设置兼容)、
    test:package(9 例,真实打包产物内容)。含公共骨架 scripts/lib/harness.mjs。

  • 发布流程新增 gate job:全量测试通过才允许构建;新增 prerelease 选项,
    让测试版本不进稳定用户的更新通道。

  • 设置读取统一到 readSettings():此前 deps.ts / download.ts /
    DownloadView.vue 各复制了一份读法,filenameTemplate 因此出现过两个不同的默认值。

  • scripts/test-parse-integration.mjs 此前从未接进任何工作流(能通过但没人跑),
    现已挂上。

  • 版本与清单一致时仍显示「更新」按钮:界面只看「该依赖由 DownVid 托管」就渲染
    「更新」,与版本无关。用户点下去白下 37MB,下完还是同一个版本,看起来像更新失败。
    现在由后端回传 requiredVersion,界面用 isOutdated() 比对当前版本与清单要求,
    一致时显示「已是最新」;只有确实落后才给「更新」。系统自带的那份永不提示更新
    (覆盖它会踩到用户的包管理器)

  • 更新检查失败时会静默回答「已是最新」:electron-updater 走
    releases.atom + /releases/latest 两步,任一环节被网络或限流打断就进 catch,
    而 catch 里直接返回 hasUpdate: false —— 用户看到的就是「检测不到新版本」。
    现在失败时改用 GitHub API 兜底(只需一个请求),两条路都失败才如实报错

  • 更新流程一条日志都不写,打包应用出问题只能靠猜。现在检查的每个阶段
    (开始 / 缓存复用 / 结果 / 兜底 / 失败)都写进 userData/downvid.log


完整历史见 CHANGELOG.md · 遇到问题请先看 故障排除

v1.3.4

Choose a tag to compare

@github-actions github-actions released this 14 Oct 12:15

⬇️ 点击徽章直接下载

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 可通过包管理器安装

📝 更新内容

修复

  • 下载运行依赖后仍显示「下载」、根本无法使用(紧急):用户点「下载」看着进度条跑完,
    界面仍然显示「下载」,反复点也没用。根因不在下载而在下载后的回读:
    yt-dlp 的 macOS 官方构建是 PyInstaller 打包的(约 37MB),--version 本机实测要
    8~10 秒,刚下载完的首次执行最慢 12.4 秒(ad-hoc 签名校验与页面缓存都还没热);
    而探测单个候选只有 3 秒预算,于是刚装好的托管副本被判为
    「执行超时,文件可能损坏」而被跳过,结果回落到系统里的旧版本(或直接报缺失)。
    Homebrew / uv 装的是 Python zipapp,0.2 秒就能应答——所以只有
    「没有可用系统副本、必须走托管副本」的机器会踩到。现在:
    • 单候选预算 3 秒 → 15 秒;每个依赖 15 → 30 秒;检测总时限 45 → 80 秒
      (Electron 侧 60 → 90 秒),扫描预算 3 → 18 秒
    • 超时后重试一次:暖机后 8~10 秒即可应答,避免「第二次点才行」的体验
    • 超时提示不再断言「文件可能损坏」——下载好的文件同样会超时,
      这个措辞会把人引向反复重下(见 AGENTS.md 的「运行依赖」一节,
      这几个数字不要再随手调小)

完整历史见 CHANGELOG.md · 遇到问题请先看 故障排除

v1.3.3

Choose a tag to compare

@github-actions github-actions released this 14 Oct 11:38

⬇️ 点击徽章直接下载

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 可通过包管理器安装

📝 更新内容

修复

  • 贡献者列表报 403:原先启动时请求 GitHub 的 /contributors 与 /commits,
    而未认证请求限额是 60 次/小时且按来源 IP 共享 —— 一次刷新 3 个请求,
    多人共用出口 IP 时很容易耗尽。现改为固定名单,不再请求接口:
    稳定、离线可用、也没有失败态
  • 「继续下载」点了没反应、任务卡在「下载中」:resumeTask 先把状态置为
    downloading,而 processProcess 开头的守卫正是拒绝该状态,把自己挡了回去
  • 字幕任务「继续下载」报 An object could not be cloned:subtitles 恢复时
    来自响应式对象(Vue Proxy),而 Proxy 无法被 structured clone
  • 直链断点续传与暂停竞态(@hailaij):保留 .part 与逐段检查点,恢复时只请求
    未写入范围;校验 URL / 总长度 / ETag / Last-Modified / 文件长度 / 分段布局,
    不把预分配长度当作完成进度;快速恢复时旧结果不再覆盖新任务
  • 文件名模板重复追加扩展名(@hailaij):模板已含 %(ext) 时不再补
  • 下载目录生效时机(@hailaij):新任务立即读取最新目录,暂停任务保留原目录以续用片段
  • 国内网络下应用完全打不开(@jwfstars):字体样式表改为异步加载,
    不再阻塞首屏脚本执行

新增

  • 可配置的下载加速(@hailaij):直链改为小块工作队列(默认 8 路、上限 16 路),
    快连接不必等慢连接;可选 aria2c(>= 1.36)用于 yt-dlp 的 HTTP 多连接,
    缺失自动回退内置、不自动安装、不改系统 PATH。含 429/503 降并发与 Retry-After 等待、
    30 秒无数据超时重试、aria2 片段隔离。本地受控场景实测约为旧四段实现的 1.88 倍
    (不是对真实站点速度的承诺 —— 多连接解决不了服务器总限速、总带宽与 DRM)
  • 自动更新可显式控制:设置里新增「更新」分区 —— 「启动时自动检查更新」(默认开)
    与「发现新版本时自动下载」(默认关)。此前自动更新是隐式的:启动 3 秒后静默检查一次,
    用户既看不到也关不掉
  • 关于页贡献者改为固定名单 + 格子布局:不再显示提交次数(那是个会变的数字),
    也不再需要缓存与失败态
  • 产品官方落地页(Vercel 静态托管):新增 website/ 单文件落地页(无第三方打包依赖、响应式、纯前端双语),由 vercel.json 托管静态目录并以 Vercel 的 Git 集成自动发布,提供直观的跨平台下载与功能介绍
  • 官网展示累计下载量:hero 增加「已被下载 N 次」,数字取 GitHub Releases 全部产物的 download_count 之和。
    刻意不做实时拉取(官网零第三方依赖,且未认证 API 限额按出口 IP 共享,见上一节),
    改为 pnpm website:stats 一条命令刷新

改进

  • 更新弹窗里正确渲染 Markdown:此前 v-html 直接把 Release 正文当 HTML 显示,
    而它是 Markdown,于是 ### 修复、- **…** 原样显示成一大坨纯文本。
    现用 marked 转换,并关掉 breaks(否则 CHANGELOG 里 ~80 字符的手工折行
    会被当成硬换行,一段话被切成好几行)
  • 关于页区块顺序调整为「贡献者 → 开源组件 → 技术栈 → 开源协议 → 支持」,顶部描述精简
  • 真人贡献者此前没有任何身份标(只有 DEV / BOT / AI),现补上 CONTRIBUTOR
  • README 徽章与视觉全面升级:
    • 徽章栏全线升级为带品牌官方矢量 Logo 与专属配色(Downloads、Release、Stars、AlternativeTo、CodeQL、License)
    • 中英文 README 项目简介(About)大幅充实扩展,结构化呈现跨平台与无水印下载亮点
    • 新增 ### 贡献者 动态头像网格(contrib.rocks),展示社区贡献者
    • 新增 AlternativeTo 软件条目收录链接与 CodeQL 自动化安全扫描状态
    • 补充 OpenGraph 社交预览卡片与生成脚本(scripts/gen-social-preview.mjs)
  • package.json 补齐中英双语详细描述与搜索关键词标签(keywords)

工程

  • Dependency Review 在仓库未开启 Dependency graph 时不再报错,改为给出明确提示并跳过
    (该开关只能手动在网页设置里打开,GitHub API 不提供)。此前多位贡献者被这个红叉误导
  • 删除已无用的 electron/utils/contributors.ts(163 行)与相关 IPC、缓存、脚本
  • 删除 Deploy website 工作流(pages.yml):仓库从未在 Settings → Pages 里选过发布源,
    actions/configure-pages 因此每次都稳定报 Get Pages site failed,却没有任何东西依赖它。
    官网改由 Vercel 的 Git 集成发布,原先那套站点自检(引用资源存在、中英词条成对)
    重写成可本地运行的 pnpm lint:website,挂到 test.yml 的 frontend job——
    官网的坑是「改完不报错、线上才裂」,值得留在 CI 里而不是随工作流一起删掉

完整历史见 CHANGELOG.md · 遇到问题请先看 故障排除

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 · 遇到问题请先看 故障排除

v1.3.1

Choose a tag to compare

@github-actions github-actions released this 12 Oct 11:22

⬇️ 点击徽章直接下载

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 可通过包管理器安装

📝 更新内容

修复

  • 点击解析后额外多开一个 DownVid(严重):YouTube 解析时会把 Electron 二进制
    当作 JS 运行时交给 yt-dlp(并误标为 deno),yt-dlp 执行它于是又拉起了一整个应用。
    现在只使用真正的 node / deno,并新增单实例锁——重复启动只会聚焦已有窗口
  • 应用内更新弹窗混入下载引导区:更新弹窗此前会把 Release 正文里的下载徽章、
    平台对照表一并显示(渲染成一堆图片链接)。现在只显示真正的更新内容


完整历史见 CHANGELOG.md · 遇到问题请先看 故障排除

v1.3.0

Choose a tag to compare

@github-actions github-actions released this 12 Oct 11:04

⬇️ 点击徽章直接下载

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 可通过包管理器安装

📝 更新内容

升级提示:本版起安装包不再内置 yt-dlp 与 ffmpeg。升级后如果机器上没有这两个工具,
DownVid 会在「设置 → 运行依赖」中提示,点一下即可自动下载安装(带 SHA-256 校验)。
如果你已用 Homebrew / winget / apt 等装过,会自动识别并直接复用,无需任何操作。

重要变更

  • 安装包不再内置 yt-dlp 与 ffmpeg,改为运行时按「系统优先,缺失才下载」的顺序解析:
    手动指定的路径 → DownVid 托管目录(userData/runtime/bin/)→ 登录 shell 的 PATH 与
    各平台常见安装目录(Homebrew / MacPorts / scoop / winget / apt)→ 裸命令名。
    代价是首次使用若两侧都没有,需要点一下「下载」;收益是安装包体积减小约 30%
    (macOS arm64 从 182.6 MB 降到 128.8 MB),且不再重复占用磁盘
  • 仓库移除 bin/ 目录与 Git LFS 追踪(此前 .git 已膨胀到 804 MB)

新增

  • 运行依赖管理:「设置 → 运行依赖」显示每个依赖的版本、来源(系统安装 / DownVid 托管 /
    手动指定)、完整路径与未找到的原因;支持逐个下载、更新、取消与打开安装目录
  • 缺依赖时一键下载引导:启动检测、解析失败、开始下载前三处都会拦截并给出下载入口,
    而不是丢一句「未找到 yt-dlp」让用户自己猜
  • 依赖下载带 SHA-256 校验,先校验后解压安装,写入 DownVid 自己的目录,不污染系统;
    macOS 上自动去除隔离属性并做 ad-hoc 签名(否则 Apple Silicon 会直接 killed: 9)
  • 进阶设置可手动指定 yt-dlp / ffmpeg / ffprobe 的绝对路径
  • Cookie 使用引导浮窗:说明自动读取与手动导入两种方式,并提供一键跳到 Cookie 设置;
    不再跳转仓库 wiki
  • 关于页新增「开源组件」致谢(Material Symbols / yt-dlp / FFmpeg 等及其许可)
  • 新增 pnpm deps:manifest 与「更新运行依赖清单」工作流:从上游抓取版本号与 SHA-256

修复

  • macOS 上 Logo 不显示:Header 为避让原生红绿灯按钮留出了左内边距,但 Logo 被
    v-if="!isMac" 排除了,那块位置一直空着
  • Windows 多出一条菜单栏:应用菜单在所有平台注册,而 Windows/Linux 的 Electron 会把它
    渲染成窗口内的菜单栏,与自绘标题栏重复;改为仅 macOS 注册
  • Cookie 提示误报:此前仅按 URL 域名就提示「需要 Cookie」,即使用户已配好、上次解析也
    成功读到登录态;现在依据真实的 Cookie 来源状态决定是否提示
  • macOS 读取 Safari Cookie 失败会导致整个解析失败:权限错误
    (Operation not permitted ... Cookies.binarycookies)未被识别为「Cookie 读取失败」,
    因而没有退到下一个浏览器来源。现会正确跳过并继续尝试
  • 任务队列的文件夹图标点了没反应:用的是"用系统程序打开文件"(视频会直接播放)而不是
    定位目录,且失败时静默;改为在文件管理器中定位并选中,失败时给出提示
  • 代理测试结果不可信:原实现没有真正走代理(用全局 fetch,既不读参数也不读环境变量),
    实际只在测「本机能否直连 google.com」——代理挂掉也会报成功。现改为通过一次性 session
    真实请求,并加直连对照与错误原因翻译
  • 界面路径暴露用户名:下载目录等改为显示成 ~/Downloads/DownVid,悬停仍可看到完整路径
  • 解析进度条此前是虚构的百分比(与真实进度无关),改为不确定进度条 + 已用时间
  • 检查更新重复点击每次都发请求:加 60 秒结果缓存与并发合并,下载完成后失效缓存
  • 图标字体改为内嵌,修掉离线或网络受限时图标退化成文字的问题;并修复
    high_definition(不是有效的 Material Symbols 名,会渲染成文字「HIGH_DEFINITION」)

改进

  • 应用菜单(仅 macOS)新增「设置…」⌘,
  • 设置改为居中模态浮窗(与错误 / 更新提示同一形态),并修掉打开慢的问题:
    依赖探测曾阻塞首帧渲染(需启动 Go 边车,冷启动 1~3 秒),现改为后台进行
  • 打包排除 asar 内的 node_modules(依赖已被内联进构建产物),asar 40 MB → 3.8 MB
  • 图标、按钮与状态标签补齐图标;技术栈徽章更新并补上 Go 与 Vitest

文档与工程

  • 新增安全政策、贡献者行为准则、
    仓库规范、发布流程、项目结构、
    .github/CODEOWNERS
  • Release 正文顶部新增「点徽章即下载」引导区,链接按实际产物生成,不会死链
  • 文档记录真实的下载量口径:release 资源下载量总和会被 latest*.yml(每次检查更新都请求)
    与 *.blockmap(仅自动更新)放大,不能直接当作装机量
  • 明确不引入客户端匿名统计,理由与替代口径见 docs/release.md
  • CI 新增 CodeQL 扫描、依赖审查、Go 检查、单元测试与图标名 / IPC 契约校验
  • 引入 Vitest 与 57 个纯逻辑单测(格式选择、依赖错误识别、yt-dlp 参数组装、
    解析器共用工具、Cookie 错误识别)
  • 拆分超长文件:electron/ipc/download.ts 445 → 95 行;
    UpdateModal.vue 467 → 344 行(更新状态机抽为 composables/useUpdater.ts);
    抖音与快手抽出共用的 parsers/shared.ts
  • 仓库坐标与外部链接集中到 shared/app.ts(此前散落 9 处)
  • 修正架构文档中已不存在的内置二进制描述

移除

  • bin/ 目录、bin/download-deps.sh 与 pnpm download-deps* 脚本
  • 「更新二进制」工作流(由「更新运行依赖清单」取代)
  • 解析页的「支持解析平台」区块(占版面,信息已在文档中)


完整历史见 CHANGELOG.md · 遇到问题请先看 故障排除

v1.2.1

Choose a tag to compare

@github-actions github-actions released this 27 Sep 08:36
76d2e6c

修复

  • macOS 上解析全部失败,报 EEXIST: file already exists, mkdir '.../downvid/cookies'(#31):macOS/Windows 文件系统不区分大小写,Cookie 快照目录 cookies 与 Electron 自身的 Cookies 数据库文件冲突。目录改名为 ytdlp-cookies;目录不可用时退回系统临时目录,仍不可用则不导出快照;Cookie 准备阶段的任何异常只跳过该来源,不再导致解析失败
  • 浏览器 Cookie 读取失败(如 Windows 上 Chrome 运行中报 Could not copy Chrome cookie database,#9)时,解析不再整体失败而是继续尝试其他来源;若视频最终仍需要登录,错误弹窗会给出具体解决办法(退出浏览器重试、改用 Firefox 登录、手动导入 cookies.txt)

v1.2.0

Choose a tag to compare

@github-actions github-actions released this 27 Sep 00:39
b23fffb

新增

  • 抖音/快手直链支持多连接分段下载(CDN 限速场景下提速约 4 倍),分段失败自动断点重试,并支持暂停
  • HLS/DASH 分片并发下载;下载直接复用解析结果,不再重复解析,开始下载更快
  • 下载进度显示速度、剩余时间与文件大小(此前这些字段始终为空)
  • 应用内更新:macOS 支持自动下载安装(自动去除隔离属性并重新签名,安装失败自动回滚);启动时自动移除应用自身的隔离属性
  • 便携版、tar.gz 等不支持自动安装的方式,检测到新版本时引导前往下载页
  • 关于页完整展示所有贡献者,包含匿名作者、Bot 与 AI 共同作者
  • Windows 便携版随版本一同发布(DownVid-Portable-x.y.z.exe)

修复

  • X (Twitter) 视频无法下载:解析时格式被全部过滤;下载时选择器退化为只下载音频;多视频推文解析失败;访客接口失败时自动回退
  • 浏览器 Cookie 读取失败(Chrome 运行中锁库、Windows 解密失败、macOS 钥匙串等)导致解析/下载整体失败:现依次尝试各浏览器 → Cookie 快照 → 无 Cookie,并在下载时复用解析时的 Cookie
  • Linux 内置 ffmpeg 读取 MPEG-TS 时崩溃,HLS 视频合并全部失败
  • macOS Apple Silicon 内置的 ffmpeg 实为 x86_64 版本(需 Rosetta 转译,合并缓慢,无 Rosetta 时失败),替换为原生 arm64
  • 存储空间始终显示"未知"(Windows 11 24H2 已移除 wmic;下载目录不存在时查询失败;目录切换后不刷新)
  • 应用内更新:下载完成后界面一直停留在"正在下载";启动自动检查新版本不弹窗;检查时即在后台静默下载;更新请求不走设置的代理
  • Windows 自动更新校验失败:安装包被同名便携版覆盖,与更新清单不一致(旧版本升级到本版本起恢复正常)
  • Linux deb/rpm 安装无法自动更新:更新清单缺少对应安装包
  • 贡献者头像上的 DEV/BOT 标签与悬停名称被裁切不可见
  • 依赖升级后构建失败:TypeScript 回退至 5.x(vue-tsc 不支持 TypeScript 7),样式迁移至 Tailwind CSS v4
  • 设置面板左侧导航选中项背景色此前未生效

变更

  • 内置 yt-dlp 更新至 nightly 2026.09.16,ffmpeg 更新至 8.1(Windows/Linux)
  • 更新失败时给出具体原因(网络、校验、限流、权限、磁盘空间),并提供重试与"前往下载页手动更新"

说明

  • macOS 1.1.0 及更早版本的应用内更新依赖代码签名,无法完成,请手动下载安装一次本版本,此后即可应用内自动更新
  • Windows 与 Linux (AppImage/deb/rpm) 旧版本可直接通过应用内更新升级

v1.1.0

Choose a tag to compare

@github-actions github-actions released this 24 Aug 04:34

新增

  • 自定义错误弹窗:可复制错误信息 + 一键提交 GitHub Issue
  • 代理设置:全局代理支持 http/https/socks5,保存即生效,带连接测试
  • 启动时自动检查更新,有新版本自动弹窗提醒
  • 解析结果缓存:同一 URL 30 分钟内重复解析秒出
  • 任务队列实时显示磁盘可用空间
  • 贡献者页面显示 Bot 标签和开发者标签
  • macOS/Windows/Linux 窗口行为适配:自定义标题栏、拖拽、窗口控制按钮
  • 设置页面改为右侧浮层面板 + 左侧栏分类导航(下载/Cookies/代理)
  • 解析结果分辨率标签智能清理:自动将 1080p60、hd1080、sd480 等格式转为标准显示
  • Puppeteer 浏览器实例复用池,解析速度大幅提升
  • GitHub Dependabot 自动依赖更新

修复

  • 下载任务 status 误设为 downloading 导致 IPC 调用永不执行
  • 下载历史"打开文件夹"在 macOS 上路径错误(Windows 路径分隔符问题)
  • 进度条超过 100% 的问题
  • 进度条动画平滑度优化(指数衰减)
  • 文件大小估算逻辑:优先使用平台提供的 quality_label 而非像素推算
  • 下载进度实时更新:stderr 进度解析 + 本地速度计算兜底
  • 所有 alert() 替换为自定义弹窗
  • 解析流程添加顶层 try-catch,防止未捕获异常导致 renderer 崩溃
  • Renderer 崩溃后自动重载

变更

  • 进度更新节流从 500ms 降至 200ms
  • yt-dlp 解析添加 --no-warnings --quiet 减少开销
  • 自动更新不再需要手动点击检查