资讯动态

用 Codex 做一致性 AI 动画:5 步工作流,角色不再漂移

发布时间:2026/10/2 6:25:06 来源:尧图企业网站定制
1. 角色漂移的根因不是模型不行是任务没拆开做 AI 动画最让人抓狂的瞬间是第 3 个镜头里主角还是圆脸短发到第 6 个镜头突然变成尖下巴长发。很多人第一反应是「模型太弱」然后换模型、加提示词、反复重抽结果越抽越乱。我试过把同一段故事丢给模型一次性生成 8 个镜头出来的东西像 8 个不同的人演的。问题不在模型在分工。当你让一个模型同时负责「故事走向、分镜设计、画面构图、角色长相、动作幅度、镜头运动」这六件事时它必然顾此失彼。角色漂移只是最显眼的症状背后还有镜头不连续、画风忽明忽暗、动作逻辑断裂。这篇要讲的是用 Codex 搭一条可复用的 AI 动画一致性工作流。核心思路是把「故事 → 剧本分镜 → 提示词 → 参考图 → 视频」拆成一条有文件的流水线每一步只做一件事每件事都有文件可查、可改、可复用。适合做二维手绘动漫短片、需要多镜头角色一致的创作者也适合想把 AI 视频从「抽卡」变成「流程」的人。具体分工是这样的Codex 负责读故事、写剧本分镜、产出两组提示词即梦 Seedance 负责图生视频让每一张参考图动起来。图片 Prompt 决定「画面是什么」视频 Prompt 决定「画面怎么动」两者分开喂角色才不会漂移。下面按 5 步走每一步都有可复制的配置和验证动作。2. 前置准备Codex 与 Seedance 的分工配置在动手之前先把工具链和项目结构定下来。这一步不做后面每一步都会乱。Codex 这边你需要一个能读写项目文件的 AI 编码环境。它的作用是读input/article.md产出结构化的剧本、分镜和提示词文档。如果你用的是 Claude Code 或 Cline 这类工具思路一样只要能「读文件 → 产出结构化文档」就行。本文以 Codex 为例因为它读写项目文件最直接。Seedance 这边用即梦的图生视频功能。它的作用是接收一张参考图 一段视频 Prompt输出一个动态片段。关键点是Seedance 不负责决定角色长什么样角色长相由参考图锁定Seedance 只负责让画面动起来。项目结构是整个方法的地基目录树如下project/ │ ├── input/ │ └── article.md │ ├── script/ │ ├── story-analysis.md │ ├── screenplay.md │ └── storyboard.md │ ├── prompts/ │ ├── image-prompts.md │ └── video-prompts.md │ ├── images/ │ ├── scene01.png │ ├── scene02.png │ ├── scene03.png │ ├── scene04.png │ ├── scene05.png │ ├── scene06.png │ ├── scene07.png │ └── scene08.png │ ├── videos/ │ └── output/ └── final.mp4这个结构的意义是把「故事、分镜、画面、视频」拆成不同阶段。AI 不再一次性完成所有工作而是每一步只负责一件事。input/放原始故事script/放剧本和分镜prompts/放两组提示词images/放参考图videos/放片段output/只放确认过的成片。如果你用 Codex 的配置文件来固定项目上下文可以在项目根目录放一个codex.toml把工作目录和默认读取路径写清楚# codex.toml [project] name ai-animation-consistency root . input_dir input script_dir script prompts_dir prompts images_dir images videos_dir videos output_dir output [defaults] story_file input/article.md storyboard_file script/storyboard.md image_prompt_file prompts/image-prompts.md video_prompt_file prompts/video-prompts.md如果你用的是 Cline 的 MCP 配置或者 Claude Code 的 settings思路一样把 Base URL、Key、Model ID 三件套写全让工具知道去哪里读文件、用什么模型。这里不展开注册流程重点是把项目路径固定下来后面每一步都引用同一个路径避免 Codex 每次重新猜目录。前置准备的核心就一句话让 Codex 知道文件在哪让 Seedance 知道只负责动起来。角色一致性由参考图保证不由视频模型保证。3. 可复制配置角色设定卡、分镜模板与 Seedance 参数这一步是整篇教程最核心的部分直接给可复制的清单。你照着填就能跑通。3.1 角色设定卡模板角色设定卡是防止漂移的第一道锁。把它放在script/story-analysis.md里Codex 每次生成分镜和提示词都会引用它。# 角色设定卡 ## 主角 A - 姓名小满 - 年龄感12 岁左右 - 脸型圆脸下巴略短 - 发型黑色短发齐耳右侧有一缕挑染蓝色 - 眼睛大眼深棕色瞳孔眼尾略下垂 - 服装米白色短袖衬衫外搭浅蓝色背带裙裙摆到膝盖 - 配饰左手腕一条红色编织手绳 - 画风二维手绘动漫线条干净赛璐璐上色 - 禁止写实面孔、3D 渲染、五官比例突变、服装颜色偏移 ## 配角 B - 姓名小白猫 - 体型幼猫圆头圆身 - 毛色白色耳朵内侧浅粉 - 眼睛琥珀色 - 画风与主角同一套二维手绘风格 - 禁止写实毛发、3D 模型感这张卡的作用是给 Codex 一个「不可变清单」。后面生成图片 Prompt 时角色长相、服装、配饰直接从卡里抄不重新描述。生成视频 Prompt 时只写动作和镜头不重复长相。3.2 分镜提示词模板分镜模板放在script/storyboard.md每个镜头一行字段固定。Codex 按这个模板产出后面图片和视频都从这里取数据。# 分镜表 | 镜头 | 时长 | 景别 | 构图 | 镜头运动 | 画面内容 | 情绪 | |------|------|------|------|----------|----------|------| | 01 | 3s | 中景 | 居中 | 固定 | 小满站在窗前手扶窗台窗外有风铃 | 平静 | | 02 | 4s | 近景 | 偏左 | 缓慢推近 | 小满抬头看风铃眼睛微微睁大 | 好奇 | | 03 | 3s | 特写 | 居中 | 固定 | 风铃摆动小满的手绳入画 | 期待 | | 04 | 4s | 中景 | 偏右 | 横移 | 小白猫从桌下探出头 | 惊喜 | | 05 | 3s | 近景 | 居中 | 固定 | 小满蹲下伸手猫靠近 | 温柔 | | 06 | 4s | 中景 | 居中 | 缓慢拉远 | 小满抱起猫风铃继续摆动 | 温暖 | | 07 | 3s | 全景 | 居中 | 固定 | 房间全景阳光斜照一人一猫 | 宁静 | | 08 | 4s | 中景 | 偏左 | 缓慢推近 | 小满低头笑猫在怀里闭眼 | 满足 |这个表是后面所有提示词的唯一数据源。图片 Prompt 从「景别、构图、画面内容」取信息视频 Prompt 从「镜头运动、画面内容」取信息。3.3 图片 Prompt 与视频 Prompt 分离模板这是认知重点两组提示词不能混。放在prompts/image-prompts.md和prompts/video-prompts.md。图片 Prompt 模板# 图片 Prompt ## Scene 01 二维手绘动漫风格赛璐璐上色线条干净。 角色小满圆脸黑色齐耳短发右侧一缕蓝色挑染深棕色大眼米白色短袖衬衫浅蓝色背带裙左手红色编织手绳。 场景室内窗边木质窗台窗外有金属风铃。 构图中景居中固定机位。 光线午后暖光从右侧照入。 负面写实面孔3D 渲染五官比例突变服装颜色偏移多余手指。视频 Prompt 模板# 视频 Prompt ## Scene 01 动作小满手扶窗台头发和裙摆被微风轻轻吹动风铃小幅摆动。 镜头固定机位无移动。 禁止角色长相变化服装变化真人化3D 化镜头漂移。注意视频 Prompt 里没有「圆脸、短发、蓝色挑染」这些长相描述。长相由参考图锁定视频 Prompt 只写动作和镜头。重复描述长相反而会让模型重新画脸导致漂移。3.4 Seedance 参数配置在即梦 Seedance 图生视频界面参数按下面配置参数建议值说明生成模式图生视频必须绑定 Source Image参考图images/sceneXX.png每个镜头绑定自己的参考图提示词对应视频 Prompt只写动作和镜头时长3–4s与分镜表一致运动幅度低到中避免大幅动作导致角色变形风格保持开启锁定参考图画风负面提示真人化、3D、长相变化与视频 Prompt 一致如果你用 API 方式调用请求体大致如下{ model: seedance-image-to-video, source_image: images/scene01.png, prompt: 小满手扶窗台头发和裙摆被微风轻轻吹动风铃小幅摆动。固定机位无移动。, negative_prompt: 角色长相变化服装变化真人化3D化镜头漂移, duration: 3, motion_strength: 0.3, style_lock: true }参数的核心逻辑source_image决定角色和画风prompt只负责动作和镜头motion_strength压低避免变形style_lock锁定画风。这四件事分开控制角色才不会漂。4. 验证请求逐帧比对与回退验证动作配置写完接下来是验证。这一步决定你的工作流是「能跑」还是「跑得稳」。4.1 第 1 步验证故事输入与 Codex 拆解把故事放进input/article.md然后给 Codex 这句 Prompt读取 ./input/article.md。 请将它改编成一部约 30 秒、8 个镜头的原创二维手绘动漫短片。 先不要生成图片或视频只完成 故事分析、角色设定、场景设计、情绪曲线和分镜规划。 输出到 script/ 目录下文件名分别为 story-analysis.md、screenplay.md、storyboard.md。 角色设定必须包含角色设定卡字段固定后续提示词直接引用。验证动作打开script/story-analysis.md确认角色设定卡字段完整打开script/storyboard.md确认 8 个镜头字段齐全。如果 Codex 漏了字段直接补一句「按模板补全字段」不要让它自由发挥。4.2 第 2 步验证两组提示词分离给 Codex 第二句 Prompt读取 script/storyboard.md 和 script/story-analysis.md。 生成两组提示词 1. prompts/image-prompts.md每个镜头一段图片 Prompt包含角色长相、服装、场景、构图、光线、负面限制。 2. prompts/video-prompts.md每个镜头一段视频 Prompt只包含动作、镜头运动、禁止项不重复角色长相。 两组提示词必须按镜头编号一一对应。验证动作打开prompts/video-prompts.md搜索「圆脸」「短发」「蓝色挑染」这些长相词。如果出现说明分离失败让 Codex 删掉长相描述只留动作和镜头。4.3 第 3 步验证参考图一致性按顺序生成images/scene01.png到scene08.png。生成完后把 8 张图并排看。验证动作角色脸型、发型、发色是否一致服装颜色、配饰是否一致画风是否统一为二维手绘是否有某张图突然变成 3D 或写实如果第 5 张图角色脸变尖了不要继续往下做。回到图片 Prompt把角色设定卡里的字段原样抄进去重新生成第 5 张。参考图一旦漂了后面怎么调都救不回来。4.4 第 4 步验证逐镜头视频生成在 Seedance 里每个镜头绑定自己的参考图和视频 Promptscene01.png Scene 01 video prompt scene02.png Scene 02 video prompt scene03.png Scene 03 video prompt ... scene08.png Scene 08 video prompt验证动作生成完 8 个片段后逐帧比对相邻镜头。重点看三件事角色长相是否突变服装颜色是否偏移镜头运动方向是否衔接自然如果第 3 个片段角色眼睛颜色变了回退到第 3 张参考图确认参考图本身没问题再重新生成视频片段。不要直接改视频 Prompt因为长相不由视频 Prompt 控制。4.5 第 5 步验证成片检查片段放进videos/确认无误的成片放到output/final.mp4。导出前检查四件事检查项通过标准不通过时的回退动作角色一致8 镜头长相、服装无突变回退到对应参考图重新生成镜头连续相邻镜头景别、运动方向衔接调整视频 Prompt 的镜头描述二维动漫全程手绘风格无 3D 痕迹检查参考图是否混入 3D 风格无真人化无写实面孔、立体模型感负面提示加「真人化、3D」这套验证动作的核心是「逐帧比对 回退到源头」。角色漂移了回退到参考图镜头不连续了回退到视频 Prompt画风变了回退到图片 Prompt。每一步都有文件可查不用靠运气重抽。5. 常见报错排查401、local proxy failed 与 OAuth 问题跑工作流时最容易卡在工具链的报错上。这里按真实报错逐条排查。5.1 401 Unauthorized报错原文Error: 401 Unauthorized {error:{message:Invalid API key,type:invalid_request_error}}原因Codex 或 Seedance 的 API Key 没配、配错、或过期。排查动作检查codex.toml或环境变量里的 Key 是否完整有没有多余空格。确认 Key 对应的套餐还有额度。如果用的是 Claude Code 或 Cline检查settings.json或 MCP 配置里的 Base URL、Key、Model ID 三件套是否写全。{ base_url: https://taotoken.net/api, api_key: sk-你的Key, model_id: 你的模型ID }三件套缺一不可。只写 Key 不写 Base URL或者 Model ID 写错都会报 401 或 404。5.2 local proxy failed报错原文Error: local proxy failed connect ECONNREFUSED 127.0.0.1:7890原因本地代理配置指向了一个没启动的端口或者代理配置和当前网络环境不匹配。排查动作检查环境变量HTTP_PROXY、HTTPS_PROXY是否指向了一个不存在的端口。如果不需要代理直接清空这两个变量。如果用的是工具内置的代理设置检查端口是否和实际服务一致。# 查看当前代理配置 echo $HTTP_PROXY echo $HTTPS_PROXY # 清空代理配置 unset HTTP_PROXY unset HTTPS_PROXY清空后重启 Codex 或终端重新请求。5.3 reading choices 报错报错原文Error: reading choices unexpected end of JSON input原因模型返回的响应不是标准 JSON通常是请求被截断或返回了空内容。排查动作检查请求的max_tokens是否太小导致响应被截断。检查 Prompt 是否太长超出模型上下文限制。如果是 Codex 读文件时报错确认文件路径正确文件内容不是空的。# 检查文件是否存在且非空 ls -la input/article.md wc -c input/article.md如果文件为空Codex 读不到内容返回就会异常。把故事写进input/article.md再重试。5.4 OAuth 相关报错报错原文Error: OAuth token expired please re-authenticate原因OAuth 令牌过期需要重新认证。排查动作在 Codex 或 Claude Code 里执行重新登录命令。检查auth.json或凭据文件是否过期。如果用的是 API Key 模式确认没有混用 OAuth 和 Key 两种认证方式。{ auth_mode: api_key, base_url: https://taotoken.net/api, api_key: sk-你的Key, model_id: 你的模型ID }认证方式要统一。混用 OAuth 和 API Key 会导致令牌冲突报错信息往往不明确。5.5 角色仍然漂移的排查顺序如果工具链没问题但角色还是漂移按优先级排查先确认 8 张参考图本身风格统一。参考图决定成片上限参考图漂了后面怎么调都救不回来。检查视频 Prompt 是否混入了长相描述。只写动作和镜头不重复长相和服装。确认 Seedance 图生视频绑定了对应的 Source Image。绑错图角色必漂。给 Codex 更短的指令和更明确的分工一次只做一件事。这四条按顺序查基本能定位到问题所在。6. 把流程跑成习惯从抽卡到可复用工作流这套方法跑通一次之后你会发现它最大的价值不是「这次做出来了」而是「下次还能这么做」。文件结构清楚之后做 AI 视频就不靠运气了。故事放进input/分镜放进script/提示词放进prompts/画面进images/视频进videos/最后只把确认过的成片放进output/。每一步都有文件可查每一次修改都有迹可循。如果你想把 Codex 的额度用在刀刃上建议把「读故事、写分镜、产提示词」这三件事分开跑不要一次让 Codex 干很多事。指令越短、分工越明确产出越稳定。图片和任务生成比普通对话更快耗尽额度失败时先查剩余配额别反复重试。需要长期跑这条工作流的话可以到 Coding Plan 看看额度方案把 Codex 的编码和文件读写能力稳定用起来。接入配置和 Key 管理在 API Keys文档和示例在 接入文档。想先验证模型对话效果可以直接在 模型对话 里试。最后留一个实用技巧每次开新项目先把角色设定卡写死再让 Codex 生成分镜。角色设定卡是整条流水线的锚点锚点不动后面 8 个镜头、80 个镜头都不会漂。文件结构 角色设定卡 两组提示词分离这三件事做到AI 动画就从抽卡变成了流程。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑