GIF 影院
将一个简短需求转化为具有因果关系的不同可见动作,然后组装已审核的镜头成为更长的故事。将外观、角色动作、图形运动和交付格式分开处理。保持用户选择的艺术风格和已批准的素材。这是一个作者引导的工作流程,而非自主动画模型。
选择真实的生产路线
- 现有 GIF: 检查每个片段实际显示的内容;围绕这些动作构建故事。捆绑示例无需 API 密钥即可测试此路线。
- 新角色动作: 为每个短生成 GIF 规划一个主要动作。仅使用可用且授权的生成工具/API。检查并接受每个结果后再将其状态扩展到另一个场景。请参见 generation.md。
- 动态设计: 使用包含的本地动画标题渲染器进行排版和强调规则入场。对于分层角色、可移动道具、蒙版或绑定动作,请使用环境中实际可用的合成器并保留其可编辑源。此包不包含通用的分层动画引擎。
不要将摄像机漂移、叠加、反转素材、同一剪辑上的另一个字幕或更长的保持视为新角色动作。长卡通需要额外的故事事件。如果缺少这些绘图且无法生成,请交付诚实的动画分镜或制作计划,而不是声称的已完成卡通。
运行时间和无密钥检查
需要 Python 3.10+、Pillow、Git、FFmpeg 和 ffprobe。使用隔离环境。该技能的助手适用于此经过审核的不可变公共运行时:
python -m venv .venv
# 根据你的 shell 激活 .venv,然后:
python -m pip install "gif-cinema @ git+https://github.com/antropos17/chatgpt-gif-cinema.git@fa82b13366a9ae94a4ece730ec6b2d065cd9a060"
python -m gif_cinema --help
ffmpeg -version
ffprobe -version
该修订版的现有检出或经过测试的兼容更新运行时也可用。不要自动降级一个正在工作的项目。运行时使用附带的源可用评估许可证。GIF Factory 的归属工作流程影响在 THIRD_PARTY_NOTICES.md 中有自己的 MIT 声明。
相对于此技能文件夹解析助手和资产路径。以下示例假设 shell 位于该文件夹中。从其他位置,请使用到助手和输入 JSON 的绝对路径;将输出保留在用户的项目中,切勿放在已安装的技能中。
python scripts/story_project.py compile assets/example/storyboard.json --out output/story-project
python -m gif_cinema render output/story-project/film.json --dry-run --max-api-calls 0
python -m gif_cinema render output/story-project/film.json --execute --max-api-calls 0 --out output/story-render
python scripts/story_project.py export-gif output/story-render/film.mp4 --out output/story.gif
这是一个9.68 秒的源编辑,而非新的长卡通:一个 2 秒的本地动画标题,后接三个现有的 2.56 秒宇航员动作。MP4 使用 25 fps;源角色每个片段有 16 张绘图,而不是每秒 25 张新绘图。GIF 导出默认为 320 px 宽、10 fps、静音、播放一次。--repeat 循环整个结果。某些查看器会覆盖 GIF 循环行为。
对于核心 CLI 回归检查,运行 scripts/smoke_test.py --out NEW_DIRECTORY。两个助手都不需要密钥。故事助手从不进行提供者调用,并拒绝现有的输出项目。story-project.md 记录了其精确的模式、命令、时间和限制。
生成前的指导
对于新故事或大量扩展,请阅读 storytelling.md。生成一个可编辑的故事板:
- 前提和结局;受众、目标时长、宽高比、语言和声音要求(如相关)。推断低风险默认值,而不是再次询问。
- 紧凑的视觉圣经:可识别的角色锚点、调色板/材质、服装、道具数量、所有权、比例、地理和摄像机惯例。
- 节拍/镜头列表:之前的 状态 → 可见动作 → 之后的状态,摄像机、预期时长以及在故事中的目的。跟踪每次剪辑时的手/道具/接触。
- 来源/生成映射:哪些动作已经存在,哪些需要新绘图,哪些是本地图形。将未渲染的镜头标记为未渲染。
通过添加有意义的动作和后果来扩展故事,而不是重复素材直到计时器达到需求。assets/example/long-story.plan.json 中的长故事示例是一个未渲染的 14 动作制作计划。编译它准备 14 个单镜头生成输入;它不会渲染这些动作。
有意地生成和拼接
使用 scripts/story_project.py compile ... 编译故事板。仅源项目有一个可执行的 film.json。包含缺失/生成镜头的项目有单独的 generation/ID.json 输入和一个故意不完整的 assembly-template.json。编译器不执行任何付费批次。
当角色/方法为新的时,使用一个代表性动作来建立可行性。新生成需要用户自己的 API 访问和约定的有限调用上限。对于端点连续性,提取已接受的上一帧最后帧,检查它,然后将那个现有的静态帧加上一个清晰的标识参考附加到下一个镜头输入。编译器不会创建未来参考或自动依赖图。
保留单独的片段文件夹和已接受/拒绝候选记录的记录。重新拍摄必须在两个相邻连接处进行审核。在片段清单中记录每个选定 GIF 的镜头 ID、路径、SHA-256 和审核注释。使用 --takes takes.json 编译,以填充生成的槽位而无需手动更改其模式。助手检查这些确切的字节,测量其实际延迟并保留原始请求。它可以应用部分选择;缺失的动作保持明确未渲染。
每个项目包含一个可移植的 storyboard.json。使用新的片段清单和新输出目录从该文件继续。现有源和已渲染标题已哈希固定,且不能被清单替换。对于有意的重新拍摄,创建原始故事板的编辑副本并在那里选择新的片段;保留早期项目并再次审核两个相邻剪辑。保留项目版本及其审核记录。调用者注释不是自动视觉接受。请参见精确选择格式和无密钥示例。即使碰巧配置了密钥,也使用零调用渲染。
运动、时间和导出
标题卡片是一次性的文本/线条入场,后接保持。字母是局部的,可在故事板中编辑,而不是委托给生成提示。标题是单独的镜头,而非叠加;运行时字幕是单独的 SRT,不会烧录到 GIF 中。如有必要,使用 --font 指定许可的本地字体,并检查其字形。
角色时间来自解码的源 GIF。源重新定时、过渡、插值、音频生成和自动动作合成不由此助手提供。固定的运行时使用硬剪辑,并可以通过其胶片脚本导入可选的本地音频。GIF 没有音频。如果使用较新的编辑工具,请遵循当前运行时帮助;不要暗示固定包包含它们。
首先导出已验证的 MP4,然后导出较小的 GIF 或章节。GIF 调色板转换可能损坏渐变和精细轮廓;也要审核实际的最终 GIF。高播放 FPS 不会创造新运动。review.md 提供了视觉和技术验收检查。
交付实际结果
提供请求的 GIF/MP4 文件,包括实际时长、尺寸、循环行为、源绘图节奏与导出 FPS 之比、静音/音频状态以及已知的视觉缺陷。如有要求,包括可编辑的项目。在共享项目前审核源名称、提示、参考和许可;不要发布私有输入。区分技术验证、你的视觉审核和用户验收。