OmniChar .char模型:让AI视频角色的脸、身、衣保持一致

OmniChar用.char文件封装角色特征,结合Flux多参考通道与Minimax H3实现跨镜头角色一致性生成。
OmniChar是一个开源角色一致性方案,核心是将虚拟人物的面部、身体与服装特征编码进单一的`.char`文件。底层串联YuNet(人脸定位)、SFace(面部签名提取与交叉校验)、DINOv2(整体主体特征提取)三个视觉模型完成特征工程,生成时通过Flux原生多参考通道注入参考图并前置角色描述,配合Minimax H3实现视频级的角色稳定输出。使用上最关键的原则是"用角色名触发、不重复描述已编码特征",参考图需按脸、身体、服装分槽且职责单一。本地运行需要24GB+显存和64GB内存,项目以GPLv3协议开源。
在AI图像与视频生成中,角色一致性始终是最棘手的问题之一。同一个人物,换个场景、换个动作,脸就变了、衣服也乱了。一位Reddit开发者围绕这个痛点,构建了一个名为 OmniChar 的开源方案,用一个可移植的 .char 文件封装角色的面部、身体与服装特征,并将其接入 Minimax H3 视频生成流程,实现跨镜头的角色稳定输出。

什么是 .char 模型
.char 是作者设计的一种角色封装文件,核心思路是把一个虚拟人物的所有关键特征——面部、身体、服装——编码进一个单一、可携带的文件里。生成时,只需引用这个文件,配合简单的提示词即可复现同一角色。
作者建议在构建时最多放入 9 张参考图,并推荐按 2:2:1(脸:衣服:身体) 的比例分配。其中面部参考是必需项,身体和服装参考则是可选的。这种结构化的分槽设计,是为了让模型清楚地知道每一类特征该从哪里取样。
底层技术如何运作
从技术栈看,.char 的构建过程串联了几个成熟的视觉模型:
- YuNet 负责在参考图中定位人脸;
- SFace 为每张参考图提取一个人脸签名(face signature);
- DINOv2 提取主体(subject)的整体特征签名;
- 参考图经过清洗与归一化后,全部打包进单个
.char文件。
生成阶段,这个文件会把参考图喂入 Flux 的原生多参考通道(native multi-reference channel),并在提示词前面自动拼接一段锁定的角色描述。这种“描述前置 + 多参考图注入”的组合,是保证角色不漂移的关键机制。
值得关注的是,SFace 会自动对面部图像做交叉校验,从而在多张参考图之间维持面部签名的一致性。
这几个模型各有其技术背景。YuNet 是由中科院计算所开发的轻量级人脸检测网络,以极低的计算开销实现高精度的人脸定位,适合在流水线中快速处理批量参考图。SFace 是一种基于球面约束的人脸识别模型,其核心优势在于能够在开放集场景(即训练集中未见过的人脸)下仍保持稳定的特征提取,这使它在处理用户自定义角色时特别可靠。DINOv2 则是 Meta 研究院推出的自监督视觉基础模型,无需标注数据即可学习通用的视觉表征,对人物整体轮廓、姿态和服装纹理的编码能力显著优于传统有监督模型。将三者串联——局部人脸定位、跨图人脸一致性校验、整体主体特征提取——构成了 .char 文件能够稳定复现角色的特征工程基础。
提示词使用要点
作者给出的提示词指南相当实用,也反映出这类工具的一个反直觉之处:描述越少,越准确。
给角色命名并用名字触发
在 encode character 节点里给角色起个名字,比如作者用的 sia。之后生成时只需写 sia walking on the beach,模型就会自动调用该角色的全部特征。
不要重复描述已编码的特征
这是最容易踩的坑。如果在生成提示词里再写“a woman”或“black hair”这类已经编码进 .char 的特征,反而会误导生成结果。所有角色特征应集中写在 encode character 的提示词里,生成时只负责“调度”,不负责“重复”。
处理服装漂移
如果想指定特定款式(如短袖、无袖),需要把它加到生成提示词中。作者坦言服装可能出现轻微漂移——因为身体参考图上本身也带有衣服,会与服装参考产生干扰。解决办法是让每张参考图“职责单一”:脸的图不带身体,身体的图不带脸,服装图同理。
硬件门槛与工作流
这套方案对本地运行的硬件要求不低:
- NVIDIA GPU:24GB+ 显存
- 系统内存:64GB RAM
工作流方面,静态图使用 Flux 2 Klein,视频生成使用 Minimax H3。作者特别提到 Minimax H3 现已支持 int8 量化模型变体,这对显存吃紧的用户是个好消息。案例中的面部由 Flux Klein 9b 生成,而服装图直接取自 Zara 官网——这也侧面说明该方案对真实电商素材的兼容性。
项目以 GPLv3 协议开源,仓库地址为 github.com/omnichar/OmniChar。
int8 量化是一种将模型权重从32位或16位浮点数压缩为8位整数的推理优化技术。量化后模型体积和显存占用通常可减少约50%,推理速度也有所提升,代价是精度上存在轻微损失。对于 Minimax H3 这类参数量较大的视频生成模型,int8 量化意味着原本需要48GB或更高显存才能运行的模型,在消费级 24GB 显卡上也可以加载。Flux 2 Klein 则是 Black Forest Labs 推出的 Flux 系列蒸馏变体,通过流匹配(Flow Matching)框架和减少采样步数来加速静态图像生成,同时保留了 Flux 原生的多参考图注入通道,这是 OmniChar 能够将 .char 文件中的多张参考图直接喂入生成流程的技术前提。
局限与实践建议
作者对方案的边界很诚实。最主要的限制是 参考图冲突:如果两张参考/输入图包含不同的脸,生成时可能产生冲突。因此提供裁剪良好的身体与服装图至关重要——让模型精准取到所需的部位,避免脸槽里混入衣服、衣服槽里混入脸这类“串槽”问题。
一旦角色构建完成,.char 文件即具备可移植性:换一套简单提示词和生成图,同一角色就能在不同场景中复用。这正是这类封装方案相较于每次重新调参的价值所在——把一次性的特征工程,沉淀成可复用的资产。
小结
OmniChar 提供了一条务实的角色一致性路径:用 YuNet、SFace、DINOv2 做特征提取,用 .char 做封装,用 Flux 多参考通道和 Minimax H3 做生成。它不追求“一键出片”,而是通过结构化的参考图管理和克制的提示词策略,把角色漂移控制在可接受范围内。对于需要批量产出同一虚拟人物内容的创作者,这种开源、可移植的思路值得一试。
相关推荐

花10美元到10000美元做同一款游戏,结果有多离谱?
YouTube 频道 CodeBullet 发起实验,委托从 10 美元到 10000 美元不同报价的开发者制作同款《上古卷轴》式游戏并亲自试玩。本文解析各档位游戏的完成度差异,揭示预算在现代游戏开发中究竟买到了什么。

Omni CTO实战:Claude Code如何重塑数据分析Agent
Omni CTO在Code with Claude大会分享如何用Claude Code构建数据分析Agent「Blobby」,复盘语义层设计、agentic loop、trace调试与SQL生成的18个月实战经验与工程心得。

Ponytail插件实测:教AI少写代码,减量54%安全100%
GitHub 14万星的Claude Code插件Ponytail实测:通过七级阶梯约束AI少写代码,代码量减54%、Token省两成、安全项100%通过。本文解析其方法论、四条安全红线、收益数据与安装使用方式。