🪟

云端数字人·分享版

CloudDH Share

一个点开就能和数字人实时语音对话的 Windows 悬浮窗:识别、大模型、语音合成、数字人渲染全部在云端,本地只管窗口、麦克风与连线——单文件 exe,解压即用。

GitHub 仓库★ 114
🖥 WindowsPythonFastAPIWebView2WPFVidu S2Nuitka📜 个人使用免费 · 禁止转售📅 发布 ✏️ 更新

这个项目和站里的另一篇《DSH 语音 AI 女友》是同一条技术树的两个方向:女友项目把 ASR / TTS / 数字人渲染全搬本地(GPU、模型、容器一大堆);而这个分享版反过来——云端包办一切(走 Vidu 的实时数字人能力 S2 Live),本地只剩一个单文件 exe,负责悬浮窗、麦克风和信令。

结果是:不用装 Python、不用下模型、不用配显卡,解压双击,填上自己的 Vidu API Key,五分钟就能和数字人开口聊。这个「塞进一个 exe」的过程,比想象中难得多,也是这篇文章最想讲的部分。

它是怎么做的

整个程序是四个薄层:

  • 壳(PowerShell + WPF):无边框悬浮窗,可拖动、可缩放、窗口比例自动跟随视频流;点最小化进托盘,双击 exe 把窗口拉回前台;
  • 页面(WebView2):连线前是 /wall 落地页 + ⚙ 设置面板(5 组标签页),连线后是 /stage 数字人画面 + 字幕 + 控制台 + S2 换装面板;
  • 桥接(FastAPI,127.0.0.1:8790):会话生命周期、护栏(静默挂断/时长上限)、信令、录制、资产管理,全部慢请求走线程池;
  • Vidu 云端:ASR → LLM → TTS → 口型驱动一条龙,音视频走阿里云 RTC 回传。

这是实拍的悬浮窗(未连线状态):

云端数字人悬浮窗:未连线落地页

攻克了哪些技术

① 页面和配置不落明文盘:ChaCha20 + HMAC-SHA256 载荷加密。前端页面、默认配置、人设全部以密文形式编进 exe,每次构建随机 32 字节密钥、密钥材料分 4 段掩码存放;运行时解密到内存。副作用是「改一个字都起不来」——密文被改动 HMAC 校验就失败,这恰好也是防篡改自检的地基。

② 用户设置绝不能跟着构建密钥走(真实事故)。早期 state.bin(用户设置)用构建期载荷密钥加密——结果每次重新打包,密钥换了,老用户的设置全部解不开。最终方案:状态文件改用独立的稳定密钥 state.key(与构建无关),装一次用到底。

③ <video> 元素上绝不加 transform / filter(实测教训)。给视频加个 CSS 滤镜或缩放,Chromium 就会放弃视频硬件叠加层——用户的英伟达插帧/超分立即失效。所以连线出画动画做成「黑色遮罩淡出」(动画只作用在遮罩层),<video> 本身保持零样式污染。代价是等待动画的表现力受限,但画质链路一根毛都不能碰。

④ 防转卖:唯一指纹 + 防篡改自检。每份分发包带唯一编号(程序里可见「本份编号」),作者侧记录发给谁/何时/哪条渠道;程序写死「天工开帧 · 免费分享」署名,被改掉会自检失败、连线被拒。分享版与完整版数据目录隔离——这也是真实事故改出来的:早期两版共用目录,分享版会读到作者本机完整版的 Key/动作库/记忆。

底部免费声明与溯源编号特写

⑤ 启动脚本的代码页双坑。cmd 会按控制台代码页解码 .cmd 文件:标准中文系统(ACP 936)下 GBK 脚本能跑,但用户开了 UTF-8 代码页(65001)就启动失败;反过来 UTF-8 脚本缺 BOM 又会在 GBK 机器上被 PowerShell 误读。最终启动脚本改成纯 ASCII(需要中文提示时 base64 交给 PowerShell),壳脚本落盘强制 UTF-8 BOM,并加了 PowerShell 解析器预检——启动失败也要弹窗说人话。

⑥ 各种「看起来很小」的工程活:WebView2 运行时预检(缺失时弹窗引导静默安装)、单实例守护(health 指纹识别自己,重复启动只拉起窗口)、看门狗(窗口消失 15 秒仍不退就兜底强杀)、--autoplay-policy=no-user-gesture-required(否则新页面拿不到用户手势,出不了声出不了画)。

快速开始

  1. 到 Releases 下载 CloudDH-Share-v1.1.42.zip(约 20MB),解压到任意目录(exe 和两个 cmd 要放在一起);
  2. 双击 云端数字人-分享版.exe(首次运行自解压,启动约 1~3 秒;未做代码签名,SmartScreen 提示「更多信息 → 仍要运行」);
  3. 还没填过 Key 会自动弹出引导页:去哪注册 → 在哪拿 Key(vda_ 开头)→ 粘贴后点「保存并验证」,当场告诉你账号里有几个形象/音色;
  4. 选一个形象和音色(没有资产可以在面板底部直接传一张图注册,或克隆音色)→ 保存,下次连线生效;
  5. 点 ▶ 连线(按钮转圈计时,正常 5~10 秒),对着麦克风说话就行。

💰 计费提示:会话费用由你自己的 Vidu 账号承担(实时数字人约 0.094 元/2 秒)。程序默认「静默 5 分钟挂断、单场 10 分钟上限」,面板里可调,且会实时显示「满打满算要花多少积分」——防止忘挂断烧钱。

S2 能力在哪用

能力在哪用
通话中实时换装/换背景/换手持物画面底栏 🎭:传 1~3 张参考图 + 一句描述(例:「给她戴上这顶红色棒球帽」)
通话中人设热更🎭 → 人设:改完这句说完就生效,不用挂断重连
待机小动作 / 冷场主动搭话⚙ → 待机小动作 / 说话节奏(设 5~8 秒,不出声她自己找话题)
打断灵敏度⚙ → 说话节奏:server(过滤背景音)或 semantic(一开口就打断)
长期记忆⚙ → 长期记忆:跨场次记得你(按 ID 隔离)
录制回放⚙ → 挂断后约 2 分钟出片,24 小时有效下载链接
模型回退⚙ → 模型:S2 是 beta,遇到问题可一键切回 S1

连线后进入舞台页,数字人画面、字幕、控制台都在这里:

舞台页:连线后的数字人画面入口

⚠️ 两条实测换装经验:① 画面里没有的东西改不了——形象图是胸像,就改不了袜子/裤子,想改下半身先换全身照;② 她说「好哒,换好啦」不代表画面真的变了——那只是模型话术,生效与否看画面。

常见问题

Q:窗口出来了但里面纯黑一块? 目标机没有 WebView2 运行时。重新运行 exe,弹窗问「要不要现在装」点「是」即可。

Q:双击启动脚本没反应,只有乱码横幅? 老版脚本在 UTF-8 代码页机器上的已知问题(v1.1.1 已修)。临时办法:直接双击 exe,一样能启动。

Q:通话方式选 audio 怎么没画面? audio 是官方定义的纯语音模式,平台不会推数字人画面——选 video。

Q:想恢复出厂? 删掉 %LOCALAPPDATA%\CloudDH-Share\ 整个目录即可(Key、人设、窗口位置全清)。排查问题时,这个目录里的 launcher.log、bridge.log 就是全部现场。

链接