1. FaceFusion 3.1 换脸工作流到底变了什么
FaceFusion 3.1 这次更新里,最值得单独拎出来讲的是 DFM 模型加载能力。DFM 是 DeepFaceLive 体系里常用的模型格式,过去想在 FaceFusion 里用自己训练的或下载的 DFM 模型,基本只能靠改代码或等社区适配。3.1 把deep_swapper处理器和 custom 目录打通之后,本地换脸工作流一下子灵活了很多:你可以把 DFM 文件丢进指定目录,在界面里直接切换,不用再重编译。
它适合谁?三类人最明显。第一类是已经在用 DeepFaceLive 做直播或视频通话,手里攒了一堆 DFM 模型的人;第二类是想用 hififace_256 追求更自然表情、但又舍不得 inswapper_128_fp16 稳定性的创作者;第三类是把换脸当成批量任务、需要命令行跑批的工程向用户。3.1 新增的--temp-path、batch-run、h264_qsv/hevc_qsv 编码器,都是冲着这类场景去的。
但本地跑换脸有个绕不开的问题:模型下载、依赖校验、版本对齐经常卡住,尤其是第一次装环境的时候。我的做法是把模型调用和资源获取这类“外部依赖”统一走一个 API 通道,本地只负责推理和渲染。这篇就按这个思路,把 FaceFusion 3.1 的 config.toml、settings.json 骨架、DFM 路径配置、hififace_256 与 deep_swapper 切换,以及通过 TaoToken 统一 Key 完成调用验证,完整走一遍。
2. TaoToken 前置:统一 Key 与 API 通道准备
TaoToken 在这里的角色不是替代 FaceFusion,而是把模型资源、调用凭证、接口地址收敛到一个入口,避免你在多个平台之间反复切换 Key。官网入口是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 基址是 https://taotoken.net/api ,注意 API 地址不带 UTM 参数,配置里直接写这个就行。
你需要先拿到一个可用的 Key。进入控制台后创建 API Key,建议按项目命名,比如facefusion-local,方便后面在 config.toml 里区分。创建完成后复制保存,页面关闭后通常不再完整显示。
如果你后面要跑长期编码任务或者 Agent 类的自动化流程,可以看 Coding Plan 页面,它更适合持续调用的场景;只是做模型对话验证的话,用模型对话入口就够了。接入文档在 doc 页面,API Keys 管理在 api-keys 页面,这几个地址建议先收藏。
注意:Key 只放在本地配置文件或环境变量里,不要写进会提交到 Git 的脚本。FaceFusion 的 config.toml 如果纳入版本管理,记得把 Key 字段单独抽到
.env或本地覆盖文件。
3. 可复制配置:config.toml 与 settings.json 骨架
FaceFusion 3.1 的配置分两层:config.toml管全局路径和运行参数,settings.json管界面状态和处理器选择。下面这份骨架可以直接改路径后用。
先看config.toml:
[paths] # 模型根目录,DFM 自定义模型放在 custom 子目录 models = "E:/InnoTechX-FaceFusion-3.1.0/code/.assets/models" custom_models = "E:/InnoTechX-FaceFusion-3.1.0/code/.assets/models/custom" temp = "E:/facefusion_temp" [execution] execution_providers = ["cuda"] execution_thread_count = 8 execution_queue_count = 1 [face_swapper] model = "hififace_256" # 切换到 DFM 时改为 deep_swapper processors = ["face_swapper"] [deep_swapper] model = "your_custom_model.dfm" # 该值需与 custom 目录下的文件名完全一致 [api] base_url = "https://taotoken.net/api" api_key = "sk-你的TaoTokenKey" timeout = 60 [video] output_encoder = "h264_qsv" # 兼容性优先可换 libvpx-vp9再看settings.json,它记录界面层的选择状态:
{ "ui": { "layout": "default", "webcam_device_id": 0 }, "face_swapper": { "model": "hififace_256", "pixel_boost": "512x512" }, "deep_swapper": { "model": "your_custom_model.dfm", "source_face": null }, "output": { "video_encoder": "h264_qsv", "temp_path": "E:/facefusion_temp" } }关键点有三个。第一,custom_models必须指向.assets/models/custom,DFM 文件放这里才会被扫描到。第二,deep_swapper的model字段要和文件名一字不差,包括大小写。第三,source_face设为null,因为 DFM 模型自带源脸信息,界面里不需要再选源文件,只选目标文件即可。
4. DFM 模型路径配置与处理器切换步骤
DFM 模型的加载逻辑和传统 inswapper 不一样,它把源脸特征编码进模型本身,所以流程是“放文件 → 选处理器 → 选模型 → 只给目标文件”。
第一步,把 DFM 文件复制到 custom 目录:
# Windows 下用资源管理器或命令行都行 copy your_model.dfm "E:\InnoTechX-FaceFusion-3.1.0\code\.assets\models\custom\"第二步,确认文件被识别。启动 FaceFusion 后,在处理器里选deep_swapper,然后打开深度脸部替换模型下拉框。3.1 对 custom 目录做了调整,导入的 DFM 默认排在列表顶部,但下拉框初始位置可能在底部,需要往上滑到顶才能看到。这是很多人第一次用会踩的坑,以为模型没加载成功,其实只是没滑到顶。
第三步,切换 hififace_256 和 deep_swapper。两者不是互斥的,但同一轮处理里建议只启用一个 face_swapper 类处理器,避免叠加导致画面异常。
| 处理器 | 模型 | 适用场景 | 源文件需求 |
|---|---|---|---|
| face_swapper | hififace_256 | 表情自然、通用换脸 | 需要源脸图 |
| face_swapper | inswapper_128_fp16 | 强度高、稳定 | 需要源脸图 |
| deep_swapper | 自定义 DFM | 特定人物、直播复用 | 不需要源脸 |
实测下来,hififace_256 的表情过渡确实比 inswapper_128_fp16 自然,但在大角度侧脸和快速运动场景下,强度会弱一些。如果你追求“像”,inswapper 系列更稳;追求“自然”,hififace_256 更合适。DFM 则取决于你训练数据的质量,好的 DFM 在固定人物上表现非常突出。
第四步,批处理。3.1 支持命令行 batch-run,适合一次处理多个视频:
python facefusion.py batch-run \ --source target_faces \ --target input_videos \ --output output_videos \ --processors face_swapper \ --face-swapper-model hififace_256 \ --temp-path E:/facefusion_temp--temp-path是 3.1 新增的,把临时文件从系统盘挪到大容量盘,能明显减少 C 盘爆满的情况。另外--skip-download已被移除,脚本里如果还留着这个参数会直接报错,记得删掉。
5. 验证请求与成功结果确认
配置写完后,先别急着跑长视频,用一个短片段验证链路。我一般用 3 秒的测试视频,确认三件事:模型加载成功、API 通道可用、输出编码正常。
先验证 TaoToken 通道:
curl -X POST "https://taotoken.net/api/v1/chat/completions" \ -H "Authorization: Bearer sk-你的TaoTokenKey" \ -H "Content-Type: application/json" \ -d '{ "model": "claude-sonnet-4-20250514", "messages": [{"role": "user", "content": "ping"}], "max_tokens": 16 }'返回里带choices字段就说明 Key 和通道都正常。这一步的意义在于,把“网络与凭证问题”和“FaceFusion 推理问题”提前隔离开,后面出错时排查范围小很多。
再跑 FaceFusion 单文件:
python facefusion.py run \ --source source.jpg \ --target target.mp4 \ --output output.mp4 \ --processors face_swapper \ --face-swapper-model hififace_256 \ --execution-providers cuda \ --temp-path E:/facefusion_temp成功时终端会依次打印模型加载、帧处理进度、视频合并进度。3.1 新增了提取与合并的进度条,能直观看到卡在哪一步。输出文件用播放器打开,检查人脸区域是否自然、音频是否对齐。如果音频长度异常,3.1 已修复恢复音频时的视频长度问题,升级到最新版即可。
切到 DFM 时,命令里把处理器换成deep_swapper,并去掉--source:
python facefusion.py run \ --target target.mp4 \ --output output_dfm.mp4 \ --processors deep_swapper \ --deep-swapper-model your_custom_model.dfm \ --execution-providers cuda6. 本篇常见错排查
DFM 模型列表里找不到。先确认文件确实在.assets/models/custom下,扩展名是.dfm。然后检查下拉框是否滑到了顶部,3.1 把 custom 模型置顶,但初始滚动位置在底部。最后确认config.toml里custom_models路径没有多余空格或反斜杠转义问题。
报--skip-download未知参数。3.1 已删除该参数,脚本和快捷方式里的旧参数要清理掉,否则启动即失败。
输出视频在某些播放器打不开。3.1 对 webm 强制使用 libvpx-vp9,如果你选了 webm 容器但编码器不匹配,就会出现兼容问题。优先用 mp4 + h264_qsv 或 hevc_qsv,硬件支持的话速度也更快。
GPU.0 别名与 OpenVINO 冲突。这是 3.1 修复项之一,如果你还在旧版本,升级即可。升级后仍报错,检查execution_providers是否同时列了 cuda 和 openvino,建议只保留实际使用的那个。
换脸后脸部有光晕。3.1 更新了年龄修正处理器来减少光晕,但如果你关了相关处理器,效果会回退。另外 pixel_boost 设太高也会放大边缘伪影,512x512 是比较稳的值。
批处理中途中断。大概率是临时目录空间不足。把--temp-path指到大容量盘,并确认该目录有写权限。批处理量大时,建议按每 20 个文件分批跑,便于定位问题文件。
接入和排障相关的入口,API Keys 在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。模型对话验证走 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,长期编码或 Agent 任务看 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。控制台在 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,Claude Code 相关配置参考 https://taotoken.net/claudecode-anthropic?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。
最后补一个实用技巧:DFM 模型切换后,第一次推理会重新加载权重,耗时明显更长,别以为是卡死。等第一帧出来后再看进度条,后面就正常了。如果你同时装了多个 DFM,建议在文件名前加人物前缀,比如actorA_v3.dfm,下拉框里排序清晰,切换时不容易选错。