Repository navigation
📦 下载对照表
| 平台 | 架构 | 安装包 |
|---|---|---|
| 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 · 遇到问题请先看 故障排除