2D 和 3D 虚拟形象
有两个可下载的智能体能给角色和用户角色配上会动的虚拟形象,回复流式输出时它会跟着做出反应。2D Avatars(2D 虚拟形象) 显示 PNGTuber 风格的立绘或网格虚拟形象。3D Avatars(3D 虚拟形象) 显示 VRM、MMD PMX、GLB 和 FBX 模型。表情跟着回复变化,嘴巴跟着文字或语音合成动。
不支持 Live2D 模型。即使是免费的开源应用,Live2D 的许可也要求另外签订协议,而且它的运行时不能随 Marinara Engine 一起分发。
安装虚拟形象智能体
所有安装都能在 Agent Organizer(智能体管理器) 的 Roleplay 和 Game 筛选项下找到这两个智能体。它们需要 Marinara Engine 2.5.1 或更新版本,旧版 Engine 会拒绝安装。它们是分开下载的,所以只装你想要的那个就行。两者都适用于 Roleplay(角色扮演) 和 Game(游戏模式) 聊天里的角色和用户角色,聊天时也不会向你的 AI 模型发送额外请求。
- 打开 Agents → Agent Organizer(智能体 → 智能体管理器),安装 2D Avatars、3D Avatars 或两个都装。都不需要重启。
- 在该智能体的页面上设置每个虚拟形象(见设置虚拟形象)。
- 在 Roleplay 或 Game 聊天里,打开 Chat Settings → Agents → Misc Agents(聊天设置 → 智能体 → 其他智能体),添加这个智能体。
聊天开启了智能体、并且添加了对应的智能体时,虚拟形象就会显示在 Roleplay、Visual Novel(视觉小说) 或 Game 聊天里。有没有 Expression Engine 它都能用。虚拟形象不会隐藏全身立绘,如果要用虚拟形象代替全身立绘,请自己把全身立绘关掉。虚拟形象站在全身立绘原本的位置,大小也和它一样。
设置虚拟形象
打开 Agents,再打开 2D Avatars 或 3D Avatars,使用靠近顶部的 Avatars(虚拟形象) 区域。
- 在 Character or persona(角色或用户角色) 里选择给谁配虚拟形象。标有“(has an avatar)”的名字已经有一个了。
- 在 Avatar type(虚拟形象类型) 里选择种类。2D Avatars 提供 PNGTuber sprites(PNGTuber 立绘) 和 Mesh avatar(网格虚拟形象)。3D Avatars 提供 VRM model(VRM 模型)、MMD PMX model(MMD PMX 模型) 和 GLB or FBX model(GLB 或 FBX 模型)。
- 在下方该类型的区域里设置:使用你的立绘或导入文件,为每种情绪选择表情,或者把它移除。
- 用 Preview(预览) 查看效果。Try a face(试试表情) 切换情绪,Talk(说话) 让嘴巴动起来。还没有内容可显示时,预览里会显示一个示例虚拟形象。
- 开启 Show this avatar in chats(在聊天中显示这个虚拟形象)。
Show this avatar in chats 用来打开或关闭已配置的虚拟形象,不会删除它。在你设置好虚拟形象或可用的立绘之前,它一直是关闭的。仅有头像图片不会创建 2D 虚拟形象。
Movement(动作) 有三个适用于所有类型的开关:Lip sync(口型同步) 让嘴巴动,Blinking(眨眼) 每隔几秒眨一次眼,Idle motion(待机动作) 在等待时呼吸和轻轻摇摆。如果一个角色有不止一种虚拟形象类型,Show this one(显示这个) 决定聊天使用哪一种。某个聊天里该类型的智能体关闭时,聊天会改为显示另一种智能体已开启的类型。移除一个类型会删除它的文件。你的立绘会保留。
在聊天里调整虚拟形象的大小和位置
- 打开 Chat Settings → Agents,再打开 Avatars。
- 在列表里选一个虚拟形象,用它的大小滑块调整。
- 选择 Arrange(排列) 来移动虚拟形象。可以用鼠标或手指拖动它们,也可以先选中一个再用方向键移动(按住 <kbd>Shift</kbd> 移动得更远)。
- 选择 Done(完成)。之后虚拟形象会停在你放的位置,点击也会重新作用于聊天。Reset(重置) 会把所有虚拟形象放回原位。
3D 虚拟形象还有 Framing(取景):Portrait(肖像) 显示头和肩膀(默认),Half body(半身) 显示到臀部,Full body(全身) 显示整个模型。虚拟形象的大小不变,取景范围越大,显示的模型就越多。2D 虚拟形象没有取景选项。
布局按聊天保存在这台设备上,不会同步到其他设备。Expression Engine 自己的 Arrange 按钮也能移动虚拟形象。
虚拟形象文件存放在哪里
导入的文件在保存前会先经过检查。唯一的大小限制是服务器常规的上传上限。文件存放在数据文件夹的 avatar-models/<character or persona>/<id>/ 下,旁边是保存设置的 avatar.json。备份和档案导出都包含这个文件夹。删除角色或用户角色会一并删除它的虚拟形象,在设置的 Danger Zone(危险区域) 里清除全部 Characters(角色)、Personas(用户角色) 或 Media & Assets(媒体与素材) 时也一样。导出角色卡时永远不会包含虚拟形象。
群聊
群聊会显示所有已保存并开启虚拟形象、且对应智能体已开启的成员,没有固定上限。Individual(各自独立) 模式下,由正在回复的角色说话和表达情绪。Merged (Narrator)(合并叙述) 模式下,说话人标签和带名字的对白会指向对应角色。开启声音时,口型同步会跟随当前正在播放声音的角色。
2D 虚拟形象:PNGTuber 立绘和网格虚拟形象
2D Avatars 显示两种虚拟形象之一。PNGTuber 立绘是会换表情、张嘴和眨眼的平面图片。网格虚拟形象是能流畅移动头部、眼睛和嘴巴的画作。选好角色或用户角色后,在该智能体的页面上设置这两种。
PNGTuber 立绘
有表情立绘的角色或用户角色可以把它们用作 PNGTuber 虚拟形象,立绘就是各张脸。有半身立绘时用半身立绘,否则用全身立绘,所以同一个虚拟形象不会混用两种。先预览,再开启 Show this avatar in chats 或用 Use my sprites(使用我的立绘) 保存。
- 说话和眨眼图片:添加以表情命名的立绘,张嘴的加
_talk,闭眼的加_blink,例如happy_talk、happy_blink,两者都有的用happy_blink_talk。_talking、_speak、_mouth_open、_blinking和_eyes_closed也可以。没有这些图片的表情,说话时仍会跳动。 - Face for each feeling(每种情绪的表情):选择 Neutral(平静)、Happy(开心)、Angry(生气)、Sad(难过)、Relaxed(放松) 和 Surprised(惊讶) 各显示哪个表情。Resting face(待机表情) 使用 Neutral 的表情。所有立绘都可供选择,包括后来添加的,最多 64 个表情。从 PNGTuber Plus 导入的虚拟形象只提供它自己的表情。Expression Engine 或游戏主持人(GM)选中一张你已有的立绘时,就会显示那个表情本身。
- More feelings(更多情绪):在 Face for each feeling 下打开 More feelings,为 23 种更具体的情绪选择表情,它们分别归在那六种情绪之下(见下表)。在你另选之前,每一种都使用其主情绪的表情。以其中某种情绪命名的立绘,比如
fear、amusement,或者scared、laughing这样的词,不用任何设置就会用于该情绪。 - Movement:Hop while talking(说话时跳动) 和 Hop height(跳动高度) 设置弹跳。Time between blinks(眨眼间隔) 是平均值。每次眨眼会稍早或稍晚一点。设备开启了减少动态效果时,虚拟形象不会跳动或呼吸,但表情和嘴巴仍会变化。
- 立绘按原样显示:画在背景上的立绘会连同背景一起显示,你的文件也绝不会被修改。想要没有背景的表情,请用用头像生成表情。
- Use my sprites 会把立绘保存为表情。选择表情或修改动作也会保存。Update from sprites(从立绘更新) 会加入你后来添加的立绘,并保留你选好的表情。导入之后,选择 Remove(移除) 可以回到你的立绘。
| 更多情绪所属的主情绪 | 情绪 |
| Neutral | Curiosity(好奇) |
| Happy | Admiration(钦佩)、Amusement(逗乐)、Desire(渴望)、Embarrassment(尴尬)、Excitement(兴奋)、Gratitude(感激)、Optimism(乐观)、Pride(自豪) |
| Angry | Annoyance(烦躁)、Disapproval(不赞成)、Disgust(厌恶) |
| Sad | Disappointment(失望)、Grief(悲痛)、Nervousness(紧张)、Remorse(懊悔) |
| Relaxed | Approval(赞同)、Caring(关怀)、Love(爱意)、Relief(释然) |
| Surprised | Confusion(困惑)、Fear(害怕)、Realization(恍然大悟) |
Import PNGTuber Plus save(导入 PNGTuber Plus 存档) 读取由 PNGTuber Plus 保存的虚拟形象(一个 .save 文件)。每套服装变成一个表情,服装里的说话和眨眼图层变成说话和眨眼图片。服装按图片名称匹配情绪,例如 angry eyes.png。名称没有覆盖到的情绪,请自己选一个表情。有些内容不会带过来:
- 晃动、拖拽、旋转和拉伸不会导入。虚拟形象把每个图层显示为静止状态。
- 动画图层只显示第一帧。
- 很旧的存档只记录图片在作者电脑上的路径。请先用较新版本的 PNGTuber Plus 重新保存。
- 特别大的虚拟形象会缩小到 2048 像素,好让手机放得下每一张图片。
导入存档需要服务器能做图片处理。有些 Android 安装(Termux)没有这项能力,在那里导入会被拒绝,并显示一条消息。
网格虚拟形象
网格虚拟形象是一个 .mavatar 文件。Marinara 可以用一张立绘生成一个(见生成网格虚拟形象),你也可以用 Mesh Avatar Studio 自己做一个(见 Mesh Avatar Studio)。选择 Import .mavatar file(导入 .mavatar 文件) 添加,或选择 Replace file(替换文件) 换掉。开启待机动作时,虚拟形象会自己呼吸、四处张望。它会眨眼,嘴巴也会跟着回复动。文件里画好的口型会直接使用,否则会画出简单的口型。
在 Look for each feeling(每种情绪的样子) 下,选择每种情绪显示什么:六种情绪之一,或者 Smile(微笑)、Shy(害羞)、Half-closed eyes(半闭眼) 或 Wink(单眼眨眼)。
每个文件在导入时都会检查。损坏的文件、细节太多无法流畅播放的文件,或者解包后超过上传上限的文件,都会被拒绝,并附一句简短的原因。只保留虚拟形象需要的部分,所以文件里的原始插画不会保存下来。作品属于它的创作者,所以分享之前请先确认它的许可。
网格虚拟形象需要 WebGL2,当前的浏览器都支持。没有 WebGL2,或者浏览器为了省内存停掉了图形时,会改为显示你的 PNGTuber 设置或立绘。
3D 虚拟形象:VRM 模型
3D Avatars 显示 VRM 模型。VRoid Studio、VRM add-on for Blender 和 Unity 的 UniVRM 导出的都是这种格式。VRM 1.0 和 0.x 文件都能用。还没有模型的话,可以在 VRoid Studio 里做一个,它是一款免费应用。
- 打开 3D Avatars,选好角色或用户角色。
- 在 VRM model 下选择 Import VRM(导入 VRM),然后选一个
.vrm文件。 - 阅读 The author's terms(作者条款)。这些条款来自模型文件,说明谁可以把它用作虚拟形象,是否允许商用、修改以及色情或非常暴力的内容;对于 VRM 1.0,还会说明是否必须署名作者、能否分享文件。文件里如果有许可证链接,也请打开看看。Marinara 只显示这些条款,并不强制执行,所以请自己遵守。
- 在 Faces and mouth shapes(表情和口型) 下,检查每种表情(Neutral、Happy、Angry、Sad、Relaxed、Surprised)、每种口型(A、I、U、E、O)以及眨眼分别用模型的哪个表情。Set by the model(由模型设定) 表示它带有标准的 VRM 表情。Guessed from its name(按名称推测) 表示它自己的某个表情名称与之匹配。空表情什么都不会改变,所以只会填给 Neutral。推测看起来不对时,换一个表情,或者选 None(无)。
- 可选:在 Idle animation(待机动画) 下添加一个
.vrma文件,模型等待时会播放它。没有的话,它会轻轻呼吸和摇摆。
Replace model(替换模型) 会保留待机动画,因为 VRM 动画适用于任何 VRM 模型。Remove model(移除模型) 会把两者都删除。
在聊天里,模型会看着你;有眨眼表情时会自己眨眼;思考或倾听时会歪头。有些 VRM 1.0 模型在做出某个表情时会让嘴巴保持不动。这类模型说话时,那个表情只以部分强度显示,好让嘴巴能动。开启减少动态效果时,表情和嘴巴仍会变化,但模型不再摇摆、呼吸,也不播放待机动画。
导入没成功时,会说明原因。常见原因有:
- 压缩过的模型:Draco 或 meshopt 压缩,以及 KTX2 纹理,都无法加载。请关闭压缩后重新导出。
- 普通 3D 模型:没有 VRM 数据的
.glb或.gltf没有表情,也没有人形骨骼。已绑定骨骼的.glb可以作为 GLB or FBX model 导入(见 GLB 和 FBX 虚拟形象),也可以把它转换成 VRM 格式(见 Blender)。 - 不完整的模型:缺少 VRM 必需的骨骼,或者指向文件里不存在的部分、指向文件以外的文件,这样的模型会被拒绝。
大模型加载更慢,在手机上尤其明显。
MMD 虚拟形象:PMX 模型和 VMD 动作
- 在 3D Avatars 页面上,在 Avatar type 下选择 MMD PMX model。
- 选择 Import PMX or ZIP(导入 PMX 或 ZIP)。选一个包含单个 PMX 模型及其图片的 ZIP。请保留模型的文件夹和文件名,包括日语名称。不需要图片的模型可以只用一个
.pmx。 - 在 Faces and mouth shapes 下,为每种情绪、口型和眨眼选择表情。常见的英语和日语名称会自动匹配。请检查预览并纠正错误的推测。没有合适表情的模型仍可显示并活动身体。
- 可选:在 VMD motion(VMD 动作) 下添加为该模型制作的
.vmd。它会在 Idle motion 开启时播放,你选定的表情仍会跟着聊天变化。没有 VMD 时,模型会轻轻摇摆。
缺少图片、路径不安全或文件损坏时,会在替换你已保存的模型之前被拒绝。设置界面会列出前 256 个表情名称,超出时会提示。替换 PMX 会移除旧的 VMD,所以请为新模型添加动作。移除 MMD 模型会删除它的图片和动作,其他虚拟形象类型不受影响。减少动态效果会停止动画,但保留表情和口型同步。
支持的格式:PMX 2.0 和兼容的 PMX 2.1 模型,以及 PNG、JPEG、BMP 和 TGA 图片,包括 .sph 和 .spa。部分较新的 PMX 2.1 功能不受支持,导入时会说明原因。不支持 PMD 模型、VPD 姿势以及相机或灯光动作。不进行物理模拟,所以头发和衣服的效果可能与 MikuMikuDance 不同。图片路径超过 256 个、路径过长、图片占用内存过多或绑定结构过于复杂的模型会被拒绝。请测试你的模型,尤其是在手机上。
MMD 虚拟形象需要 WebGL2,并使用与其他虚拟形象相同的暂停、帧率和取景控制。模型只会从你自己的 Engine 加载。请遵守作者的许可协议和条款。导入或播放它不会向 AI 服务发送任何内容。
GLB 和 FBX 虚拟形象:已绑定骨骼的模型
- 在 3D Avatars 页面上,在 Avatar type 下选择 GLB or FBX model。
- 选择 Import GLB or FBX(导入 GLB 或 FBX),然后选一个已绑定骨骼的角色的
.glb或.fbx文件。
普通模型没有为骨骼命名的 VRM 数据,所以导入时会按名称匹配骨骼。Mixamo、Unity、VRoid、Unreal、Blender、3ds Max、Maya HumanIK、Character Creator 和 DAZ 的骨骼绑定使用的名称都能被识别。这个区域会显示匹配上了多少根身体骨骼。模型至少需要髋部、脊柱、头部,以及左右两侧的上臂和前臂。否则导入会拒绝这个模型,并说明缺少哪些骨骼。请在你的 3D 软件里给这些骨骼改名,或者用 Mixamo 给模型绑定骨骼。以 A 字姿势站立、背对镜头或以厘米为单位制作的模型,会自动替你摆正、转过来并调整大小。
表情来自模型的混合形状(也叫形态键或变形目标)。在 Faces and mouth shapes 下,常见名称会自动匹配:VRoid、VRChat 和 Oculus 的口型(aa、A、viseme_aa、Fcl_MTH_A)、张开下巴(mouthOpen、jawOpen)、情绪(happy、Joy、mouthSmile)以及眨眼(blink,或者左右成对的眨眼,比如 ARKit 的 eyeBlinkLeft 和 eyeBlinkRight)。请检查预览并纠正错误的推测。没有混合形状的模型仍会活动身体,说话时也会点头。
支持的格式:所有内容都已嵌入的二进制 glTF(.glb),以及 FBX 2014(7.4) 或更新版本,二进制或 ASCII 格式均可。导出 FBX 时请开启 Embed Media(或 Embed Textures),否则模型会显示成没有图片的样子。Draco、meshopt 和 KTX2 压缩无法加载,带有单独附属文件的 .gltf 也无法使用。保存成 .glb 的 VRM 应该在 VRM model 下导入。不支持模型自带的动画、物理效果和姿势编辑。请遵守作者的条款。导入或播放它不会向 AI 服务发送任何内容。
获取 3D 模型
如果角色或用户角色没有 VRM 模型,可以用 VRoid Studio 做一个。它是 pixiv 出品的免费应用,支持 Windows、macOS 和 iPad。用它做出的模型可以随你使用,但少数内置素材以及你购买的纹理有各自的使用条款。它做出的模型自带六种表情、五种口型和眨眼,所以表情和口型同步可以直接使用。
在 3D Avatars 页面上选好角色或用户角色。在 Get a 3D model(获取 3D 模型) 下,Read the guide(阅读指南) 会打开本节,Copy prompt(复制提示词) 会复制一段描述其外貌的文字。
- 下载并安装 VRoid Studio。
- 可选:选择 Copy prompt,把内容粘贴到图像生成工具里,再把生成的图片当作参考。VRoid Studio 没有可以输入提示词的地方。
- 在 VRoid Studio 里新建一个模型。选择和角色最接近的发型、脸、眼睛、身体和服装,再调整形状和颜色,直到吻合为止。
- 把模型导出为 VRM(1.0 或 0.0)。询问时,填写模型的信息和使用条款。
- 在 Agents 里打开 3D Avatars,选好角色或用户角色,然后在 VRM model 下选择 Import VRM。VRoid Studio 模型的每种表情、口型和眨眼都已经填好了。
这段提示词为根据文字生成图片或 3D 模型的工具描述这个角色:一个动漫风格的全身角色,摆着 T 字姿势,正面朝前,背景为纯色。外貌取自 Appearance(外观) 字段;开启了 Image Appearance Override(图像专用外貌) 标签时改用这些标签;没有外貌时则用描述。它只包含名字和外貌,不含角色卡里的其他任何内容,也不含你的聊天内容。它是英文的,可以随意修改。
其他工具做出的 VRM 可能表情少一些,甚至一个都没有。Faces and mouth shapes 会显示它有哪些。有些网站声称能根据一张图片做出带面部表情的 VRM,但截至 2026 年 10 月没有一个能得到证实,所以本指南不推荐任何一个。用已移除的 Tripo 生成器早先做出的模型仍然可以加载,身体也会动,但脸不会动。
表情和嘴巴如何跟随回复
虚拟形象会自己做出反应。这里不需要任何设置。
Roleplay 中的表情。 回复流式输出时,Marinara 会读取每个写完的句子,猜测它的情绪。为了避免表情来回闪变:
- 只有新情绪明显强过当前情绪时,表情才会改变。
- 一个表情至少保持两秒。
- 连续出现两个平静的句子后,表情会回到平静;回复结束约四秒后也会如此。
关闭流式输出时,每个句子仍然有各自的情绪,表情会按顺序在回复的说话时长内变化。语音合成朗读回复时,表情改为跟随声音(见下文)。
PNGTuber 虚拟形象如果有更多情绪的表情,就能显示更具体的情绪,比如开心时的 Amusement。它遵循同样的规则,没有专属表情的情绪会显示其主情绪的表情。Expression Engine 和 GM 的选择也是如此:没有名为 scared 的表情时,虚拟形象会显示 Fear。3D 和网格虚拟形象只显示六种情绪。
情绪是怎么读出来的。 不会询问你的聊天模型,你的聊天文本也绝不会发送给外部服务。
- 内置词表在任何地方都能立刻给出结果,认识多种语言里常见的情绪词。
- 在能运行它的电脑上,会改用一个小型情绪模型来读句子,也就是情绪识别器(mood reader)。它能理解 36 种语言。第一次打开开启了 2D Avatars 或 3D Avatars 的 Roleplay 聊天时,它会下载一次,大约 300 MB。Agents 里每个虚拟形象智能体的页面都会显示进度。下载失败时,大约 10 分钟后会重试。它准备好之前由词表给出结果,之后它可以离线使用。使用时它大约占用 1 GB 内存,空闲 10 分钟后卸载。Lite 版安装、Android 和内存少于 3 GB 的电脑会继续使用词表。
Game Mode 中的表情。 GM 显示的每一行都带有一个表情,正在说话的角色的虚拟形象会换成这个表情,即使有声音朗读这一行也是如此。内心想法会改变表情,但不会让嘴巴动。
Expression Engine。 开启它时,它在回复之后选出的表情就是这条回复的最终表情。如果它的选择在你发出下一条消息之后才到,这个选择只作用于它自己的那条回复。使用语音合成时,这个选择会在声音结束时显示。
嘴巴。 按文字驱动时,嘴巴只在对白时动(引号里的话、[Name]: 行和说话人标签),旁白时不动,速度大约和说话一样。如果文字出现得比任何人说话都快,嘴巴会加快,然后直接跳到后面。关闭流式输出时,一条回复的对白会在八秒内说完。语音合成朗读一行时,改由声音驱动嘴巴。
身体。 从你发送消息到它说出第一句话之间,虚拟形象处于思考状态;嘴巴动时处于说话状态;别人说话或你打字时处于倾听状态;其他时候处于休息状态。
群聊。 在 Individual 模式的群聊里,由正在回复的成员说话,你切换某个成员消息的备选回复时也是如此。在 Merged 模式的群聊里,说话人标签会控制该角色的对白和表情,即使标签位于提到其他角色的段落中也是如此。带名字的对白也会跟随其说话人。没有标签的旁白属于它提到的第一个角色,没有提到就属于上一段的角色。一段还没提到任何人的文字正在出现时,它的对白会先等着,直到出现名字或这一段结束,才确定是谁说的。在 Individual 模式的群聊里关闭流式输出时,目前只有最后一个成员的回复会让虚拟形象动起来。
配合语音合成的口型同步
语音合成朗读 Roleplay 回复时,正在说话的角色的虚拟形象会跟着声音动嘴。声音大时嘴张得更大,停顿时会闭上,发“oo”这类音时嘴会变圆,发“s”这类音时会露出牙齿。要开启它,按 Text to Speech (TTS) 设置里的说明设置语音合成。之后它就能配合 Auto-play(自动朗读) 和消息上的 Speak(朗读) 按钮工作,视觉小说布局也一样。
开启 Auto-play 朗读回复时,声音通常在文字出现几秒后才开始,所以虚拟形象会等它。
- 文字出现期间,虚拟形象照常眨眼和活动,但嘴巴保持闭合,表情也暂时不变。
- 声音开始后,嘴巴跟着声音动,声音读到每个句子时表情随之变化,除非 Expression Engine 已经选好了表情。
- 表情在声音结束约四秒后放松。台词之间的短暂停顿不会让它放松。
- 如果声音失败,或者几秒内没有开始,虚拟形象会按文字把这条回复的表情和嘴巴播放一遍。如果声音在之后才失败,虚拟形象会显示最后的情绪,然后放松。
- 等了 30 秒仍没有声音,虚拟形象就不再等待。之后才开始的声音仍会让嘴巴动。
细节:
- 谁在说话:动嘴的是用自己声音朗读这一行的角色,也就是 Voice option(声音分配方式) 为其选择声音的那个角色。每个角色只在自己的台词期间动嘴。用旁白声音朗读的行,以及不是聊天中角色的说话人,都不会让任何嘴巴动。关闭 Only read dialogues(只朗读对白) 时,角色自己的旁白叙述会用它的声音朗读,它的嘴巴也会跟着动。
- 暂停、停止和切换聊天:暂停或停止声音时,嘴巴也会停下。回复还在朗读时切换聊天,那里的虚拟形象会保持不动。声音还在播放时回来,虚拟形象会重新跟上声音。
- 音量:Line volume(单条音量) 改变的是声音的大小,不是嘴张开的幅度。
- 用户角色:用户角色的嘴巴不会因为你自己的消息而动。
- Game Mode:开启语音合成和 Auto-play 时,嘴巴会等待自己角色的声音,然后跟随它动。没有声音的行会保持文字动画。旁白和玩家的声音不会让任何角色动嘴。内心想法仍不朗读。
口型同步不会改变声音的播放方式。Marinara 会读取每段语音的一份单独副本来安排嘴巴的时机,所以播放和以前一样,在 Safari 以及 iPhone 和 iPad 上也是如此。第一段语音如果在时序准备好之前就开始播放,嘴巴会先跟随它的文字,直到改由语音时序接管。如果浏览器读不了某段语音,声音照常播放,只是嘴巴不再跟着它动。
用立绘制作虚拟形象
在 2D Avatars 页面上,选择一个角色或用户角色,然后使用 Make an avatar from a sprite(用立绘制作虚拟形象)。它以角色或用户角色已有的立绘为基础。在你保存某个结果之前,虚拟形象不会变化,所以想试多少次都可以。
用头像生成表情
Make faces from the avatar(用头像生成表情) 会生成没有背景的表情,还没有任何立绘的角色或用户角色也能用。它需要一个头像和一个图像生成账号。它会打开和角色、用户角色编辑器里相同的立绘生成窗口,以头像作为参考图。
- 选择 All faces(全部表情) 生成全部 29 种情绪,选择 Main faces(主表情) 生成那六种,或者自己挑选表情。每种额外情绪在有自己的表情之前,都归在它的主表情那一行里。
- 表情分批绘制,主表情优先。较早的 GPT Image 模型每张图只画一个表情。失败的图片会再试一次。如果仍然失败,生成会停下并显示 Retry picture(重试图片)。Cancel(取消) 会保留已经生成的表情。
- 开启 Expose media prompts before sending(发送前显示媒体提示词) 时,你会在第一条提示词发出之前一次性检查所有提示词。每个表情都画成睁着眼、闭着嘴的样子,这样眨眼和说话图片才有可以闭上和张开的地方。
- Marinara 在纯色背景上绘制这些表情,去掉这层颜色,再保存为角色或用户角色的立绘。新立绘会替换同名的立绘,所以想保留旧的,就在最后一步给新立绘改名。
虚拟形象已经保存时,每个新表情都会成为它所对应情绪的表情,即使改了名也一样。其他立绘会保留。重新生成的表情一开始没有眨眼和说话图片,因为旧图片和它对不上。请在眨眼和说话图片下生成新的。从 PNGTuber Plus 导入的虚拟形象会保留它自己的表情。
眨眼和说话图片
虚拟形象为各种情绪显示的每个表情各占一行,Face(表情) 旁边是它的 Eyes closed(闭眼) 和 Mouth open(张嘴) 图片。这些可以是你保存过的图片、你添加的 _blink 和 _talk 立绘,或者新生成的。有半身立绘时,只会使用半身立绘,因为虚拟形象不会混用半身和全身的表情。不是你自己立绘的表情,比如从 PNGTuber Plus 导入的表情,会显示它的图片,但无法为它生成新图片。
- 检查 Image model(图像模型),你的默认图像账号已经替你选好。
- 点击 Make(生成) 画出缺少的某一张图片,或者点击 Make N pictures(生成 N 张图片) 按钮把缺少的全部画出来。每张图片都是一次图像请求。在设置里开启 Expose media prompts before sending 后,你会先看到每条提示词,并可以修改它。
- 新图片会一张一张出现。看着合适的选 Keep(保留),其他的选 Try again(再试一次)。Try again 也可以重画一张你已经有的图片。正在重画的图片会变暗并显示加载图标。Cancel 会停止它,服务器上的生成也会一并停止。如果 Try again 失败,旧图片会保留。想重做一张已保留的图片,先选 Kept(已保留) 取消保留。
- 选择 Save kept pictures(保存已保留的图片)。它们会成为虚拟形象的眨眼和说话图片,旁边还会存一份绘制它们所用的立绘副本,确保始终对齐。如果你在保存前替换了某张立绘,请重新为它生成图片。
使用能接受参考图的图像账号时,你的立绘会作为唯一的参考图,按模型接受的尺寸和形状发送,并附上只要求改动眼睛或嘴巴的提示词。模型会移动、缩放返回的图片或给它加边距,所以会先把它和你的立绘对齐。只从中取出眼睛(用于眨眼)或嘴巴(用于说话)。其余部分都保留你立绘本身的像素,所以虚拟形象不会跳动。如果眼睛没闭上、嘴巴没张开,或者图片偏得太远、无法对齐,这张图片就会失败,并显示一条消息。请再试一次。
有些账号不能编辑图片,比如 Pollinations、Together AI、Horde、DALL-E,或者没有参考图插槽的 ComfyUI 工作流。使用这类账号时,Make 会画出一个新表情,并把它的眨眼和说话图片画在同一张图里,好让三者一致,和用头像生成表情的做法一样。这一行会显示 New face(新表情)。Keep 会把表情和它的两张图片一起保留,保存后,新表情会成为该情绪的表情。你的立绘不会改变。这需要角色或用户角色填写了外貌或描述。
生成网格虚拟形象
- 选一张 Sprite to use(要使用的立绘)。有全身的 Neutral 立绘时会替你选好它。正面朝前的全身立绘或胸像效果最好。
- 选择 Chat provider that can see pictures(能看图的聊天服务商)。The agent's provider(智能体的服务商) 会使用 2D Avatars 页面上设置的那个,没有的话就用你的默认智能体账号。它的模型必须能接受图片。
- 选择 Make mesh avatar(生成网格虚拟形象)。聊天模型会找出脸部,Marinara 再按原样用你的立绘构建虚拟形象。Cancel 可以停止。
- 检查预览:轮廓线应该落在眼睛、眉毛和嘴巴上。选择 Save as mesh avatar(保存为网格虚拟形象),或者选择 Discard(放弃),换一张立绘或换个模型再试。
生成的网格虚拟形象会移动头部、眼睛、眉毛和嘴巴,并用自己的眼皮和嘴巴眨眼、说话。头发跟着头部移动。手、单缕头发和垂挂的饰品没有绑定骨骼。小立绘会先用放大的副本来构建,好让嘴巴与脸相称。如果脸占了一张大立绘的大部分,会改用缩小的副本,好让制作保持快速。
生成眨眼和说话图片时,你的立绘会发送给图像账号(如果设置了后备图像账号且它能接受参考图,也会发送给它);生成网格虚拟形象时,会发送给聊天模型。不能编辑图片的账号只会收到提示词,其中包含外貌。提示词随 2D Avatars 智能体提供。开启 Expose media prompts before sending 后,你可以阅读和修改每条提示词。开启调试模式后,每条提示词都会写入服务器日志。
自己制作模型
角色或用户角色不用画图就能把已有的表情立绘用作 PNGTuber 虚拟形象。用立绘制作虚拟形象还能替你加上眨眼和说话图片,或构建一个网格虚拟形象。如果想自己制作模型,可以用下面这些工具。所有文件都在 Agents 里该智能体的页面上导入,然后开启 Show this avatar in chats。
| 想要的 | 工具 | 得到的 |
| PNGTuber 立绘 | 任意绘图应用,再加上角色的 Sprites(立绘) 选项卡 | 立绘 |
| 带图层和服装的 PNGTuber 立绘 | PNGTuber Plus | 一个 .save 文件 |
| 网格虚拟形象 | Mesh Avatar Studio | 一个 .mavatar 文件 |
| 3D 模型 | VRoid Studio,或者 Blender 搭配 VRM Add-on for Blender | 一个 .vrm 文件,可选再加一个 .vrma 待机动画 |
自己画立绘
- 每种情绪画一张图,所有图尺寸相同,角色也在同一位置。每张图按它的情绪命名:
neutral、happy、angry、sad、relaxed、surprised。包含情绪词的名字也可以,比如smile、cry、calm或shock。对于可选的更多情绪,图片可以命名为amusement、fear或gratitude这样的名字。 - 想让嘴巴动,就画一张嘴巴张开、其余都一样的图,在名字后加
_talk,例如happy_talk。想要眨眼,就闭上眼睛,加_blink。两者都有时加_blink_talk。 - 在 Sprites 选项卡的 Facial Expressions(面部表情) 下添加这些图片。每个文件名会成为对应立绘的名称。见角色立绘。
- 在 Agents 里打开 2D Avatars,选择角色或用户角色,再开启 Show this avatar in chats。
PNGTuber Plus
- 用分开的图层搭建虚拟形象。张开的嘴只在说话时显示,闭着的嘴只在安静时显示。闭着的眼睛只在眨眼时显示,睁开的眼睛只在不眨眼时显示。
- 为每种情绪做一套替换眼睛或嘴巴的服装,并按情绪给这些图片命名,例如
angry eyes.png或happy_mouth.png。具体的情绪也一样,例如fear eyes.png。第 1 套服装是待机表情。 - 保存虚拟形象,得到一个
.save文件。 - 在 Agents 里打开 2D Avatars,选择角色或用户角色,然后选择 PNGTuber sprites 和 Import PNGTuber Plus save。名称没有覆盖到的情绪,请自己选一个表情。
Mesh Avatar Studio
- 从一张透明背景、正面朝前的头肩图开始。Mesh Avatar Studio 用 Node.js 在你的电脑上运行,由 Claude Code 或 Codex 这类编程智能体为图片绑定骨骼。它的 README 会一步步带你完成。
- 可选:在 Drawn variants 下添加手绘的眼睛和嘴巴。Marinara 会使用口型
mouth_a、mouth_i、mouth_o和mouth_a_half,以及闭眼eyes_closed_0和eyes_closed_1。每个网格虚拟形象都内置了六种情绪,所以不需要命名任何东西。 - 选择 Export .mavatar。不要自己把项目文件夹打成 zip 压缩包。
- 在 Agents 里打开 2D Avatars,选择角色或用户角色,然后选择 Mesh avatar 和 Import .mavatar file。
VRoid Studio
- 在 VRoid Studio 里制作角色。它的表情、口型和眨眼都是标准 VRM 表情,会被自动识别。
- 导出为 VRM(1.0 或 0.0)。询问时,填写模型的信息和使用条款。
- 在 Agents 里打开 3D Avatars,选择角色或用户角色,再选择 Import VRM。
Blender 搭配 VRM Add-on for Blender
- 在 Blender 的 Preferences 里,从 Get Extensions 安装 VRM Add-on for Blender。4.2 之前的 Blender 则在 Add-ons 下安装插件的 ZIP 文件。
- 给模型加上人形骨架,并指定它的 VRM 骨骼。插件可以自动指定。
- 在插件的 VRM 面板里设置表情:VRM 1.0 用 Expressions,VRM 0.x 用 VRM 0.x Blend Shape Proxy。每个表情都必须驱动一个形态键或一个材质:空表情什么都不改变,所以导入时只把它用作 Neutral。名称清楚的自定义表情,比如
Smile或Shock,也会被匹配。
- 表情:Happy、Angry、Sad、Relaxed 和 Surprised。VRM 0.x 把前四个叫作 Joy、Angry、Sorrow 和 Fun,而且没有惊讶的预设,所以要添加一个名为
Surprised的自定义表情。 - 口型:Aa、Ih、Ou、Ee 和 Oh;VRM 0.x 中为 A、I、U、E 和 O。
- 眨眼:Blink。
- 用 File → Export → VRM (.vrm) 导出。想要待机动画,就给骨架做动画,然后用 File → Export → VRM Animation (.vrma) 导出。插件只会从设为 VRM 1.0 的模型导出动画,所以如果想要动画,第 3 步请选 VRM 1.0。
- 在 Agents 里打开 3D Avatars,选择角色或用户角色,再选择 Import VRM。在 Idle animation 下用 Add animation(添加动画) 添加动画。
导出时要避免的问题
- 压缩:Draco 或 meshopt 压缩以及 KTX2 纹理都无法加载。上面的 VRM 导出方式都不会用到它们,但 Blender 的普通 glTF 导出提供 Draco,模型优化工具也可能把这三种都加上。请关闭压缩后重新导出。
- 普通 glTF:普通的
.glb缺少为表情和骨骼命名的 VRM 数据。可以把它作为 GLB or FBX model 导入,或者导出.vrm。 - 分散的文件:纹理或数据放在单独文件里的模型无法使用。请导出单个
.vrm文件。 - PNGTuber Plus 的额外效果:晃动、拖拽和动画不会带过来。每个图层都显示为静止状态,动画图层只显示第一帧。
性能和设备
每种虚拟形象类型的绘制代码只在该类型的虚拟形象第一次显示时才下载,所以没有虚拟形象的聊天不会额外加载任何东西。
| 手机 | 电脑 | |
| 同时绘制的虚拟形象 | 无固定上限 | 无固定上限 |
| 说话时的每秒帧数 | 30 | 30 |
| 待机时的每秒帧数 | 20,手机繁忙时为 15 | 30 |
| 清晰度(像素比) | 最高 1.5× | 最高 2× |
聊天会按角色的顺序显示所有已配置并开启的虚拟形象,然后显示你的用户角色。可以按屏幕调整参与者的大小与位置。标签页被隐藏、窗口在后台、外观设置打开着,或者聊天不在屏幕上、被面板或编辑器挡住时,虚拟形象会停止绘制。开启 Reduce Ambient Animations & Effects(减少环境动画和特效) 或设备的减少动态效果设置时,虚拟形象仍会换表情、动嘴,但不再呼吸、摇摆,也不做等待姿势。
相关指南
- 智能体:聊天里的 AI 帮手
- 可下载智能体参考