放大
2.0×
|
上下位移
5%
放大的是渲染面本身(缓冲跟着变大),不是拉伸位图 —— 放大后仍然清晰。
shapeV2 口型(点击 → 三个 riv 同时切到该 Mouths_Talk)
键盘 ← → 可顺序切换口型
实测:三个 riv 的 32 个
Mouth value_* 输入默认值都是 100(不是 0),
SDK 只写「当前形状」那一个、把「上一个形状」归零。但只有当前
Mouths_Talk 对应的那一路影响画面——其余输入停在 100 还是写 0,
画面完全一致(2026-08-06 截图逐像素比对)。所以「写 0」只是让读值干净,
不改变观感。当前形状的 value 才是开口大小的主驱动:0=闭嘴,100=大张。
浮点口型强度(Mouth value_*)
|
开口值
100
这个数直接写进
Mouth value_<当前形状>(0=闭嘴,100=满开),关掉开关则不写、纯枚举姿态。
线上(2026-08-07 起)所有中文口型统一用后台那一个强度值,不再按音素规则值分层 ——
区分交给 shapeV2 姿态本身;只有 p/b/m 闭唇帧恒为 0。真实序列去第二个 tab 看。
请求 core(真实 socket.io + TTS,noGenerateResponse 纯直读,不走 LLM)
endpoint
path
provider
|
apiKey
直改后台 ·
裁剪档
|
口型强度
100
admin passkey
⚠️ core 的 TTS 缓存 key 是
hash(text + options),裁剪档不在 options 里——
切完档位用同一句话请求会命中旧缓存、帧数看着没变。换一句新文本才能看到真实效果。
(实测同一句固定在 14 帧,换新文本则 nucleus/skeleton/full = 23/34/38 帧。)
viseme 序列
| # | 字 | shapeV2 | Talk | 音素 | value | 起–止 % | 时长 |
|---|---|---|---|---|---|---|---|
| 尚未请求 | |||||||
播放
style
口型对照表 · 龙虾小女孩 Mouths style=1
(headless chrome 实截,非手绘;换 riv 后跑 node gen-mouth-chart.mjs 重生成)
逐字口型表(离线预算,数据出自 core 管线;点字 → 右侧定住该帧)
裁剪档
|
口型强度
100
|
存的是规则值;线上已改为统一强度(非零规则值一律换成上方那个值,只有 0/null 保留),
所以规则值现在只用来分类闭唇帧。滑块现算,改了不用重新生成数据。
帧序列与裁剪由 core 的
annotateMouthValues / simplifyChineseVisemes 真跑,非前端重实现。
键盘 ← → 切字,↑ ↓ 切帧。
加载中…
未选字