WIP: [编辑器] 支持 Spine 序列帧多模态生成与后处理链路 #171
Reference in New Issue
Block a user
Delete Branch "feat/spine-sequence-export-v2"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
背景
为编辑器补齐 Spine 序列帧动画的完整创作链路:
主要变更
1. Spine 序列帧多模态生成
新增统一的 Spine 序列帧生成面板,支持:
AI 生成链路继续使用现有 Seedance、FFmpeg 抽帧和逐帧抠图能力,最终发布为正式的
character-animation/image-sequence资源。2. 视频直接转换
新增视频直接转换链路:
/api/editor/character-animations/video-conversions3. 序列帧去背景
序列帧去背景改为独立的 durable 派生任务:
external_generation_job队列;#00FF00绿幕;character-animation.remove-backgroundaction。当前 v1 只允许以下源序列帧执行去背景:
character-animation.generate;backgroundColor=green。以下情况由后端拒绝,前端也不展示去背景入口:
4. 序列帧拆帧
新增序列帧拆帧能力:
/api/editor/character-animations/frame-splitsassetObjectId/objectKey;5. 资产来源与安全校验
在序列帧去背景前,对每一帧执行正式资产对象校验:
assetObjectId必须存在;asset_object必须存在;objectKey必须与帧中声明的路径完全一致;source_job_id必须与源序列资源的task_id一致;content_type必须是image/*;所有帧验证完成后才会开始下载、抠图、上传和发布,避免通过伪造
imageSequenceFrames读取其他用户的 OSS 对象。6. 前端编辑器能力
补齐以下前端能力:
character-animation.remove-background加入生成 action 白名单;7. 后端与共享契约
关键产品约束
验证
已通过:
character_animation定向测试:90 passed;npm run typecheck;npm run lint:eslint;npm run check:encoding;npm run check:rustfmt;npm run check:spacetime-schema;git diff --check。Review 状态
已完成 pre-PR review:
Review 结果:No findings。
风险与后续关注
本次当前 head 仍有两个 P1,均会在正常允许的输入下产生错误结果或耗尽 worker 资源,需修复后再合并:
请在前后端和 durable worker 一致收口资格与容量门禁,并补普通背景拒绝、绿幕允许、9/10 张边界、单图大小与像素上限的回归。
@@ -643,0 +1124,4 @@Ok(())}fn editor_character_animation_sequence_is_video_conversion([P1] 这里仅把 version=2 且 action=character-animation.convert 当作可去背景资格,但直接转换允许任意 MP4/MOV,配方也没有可验证的绿幕/键色字段。后续算法固定删除 #00FF00;因此普通实拍或非绿幕视频也会进入任务并发布背景未去除、或误删绿色主体的正式序列资源。请把可信绿幕/键色元数据写入并由后端复验,再与前端入口共同要求该条件;否则普通视频应拒绝或改走通用分割。补非绿幕拒绝、绿幕允许和绿色主体保护回归。
@@ -793,0 +1823,4 @@editor_character_animation_bad_request("角色外观图仅支持视频模式。"),));}for appearance_src in &payload.appearance_reference_srcs {[P1] appearanceReferenceSrcs 在此逐项解析、下载并完整解码,却没有先限制数量或资源预算;后面的通用视频引用规范化才有“最多 9 张”门禁,但本路径会直接把全部 appearance_object_keys 传给 Provider。正常操作中连续添加第 10 张即可让长任务先下载解码超额输入;大尺寸或压缩炸弹图片也会在无像素上限的 DynamicImage::from_decoder 前占用 worker 内存。请在入队与 worker 执行前统一规范化为最多 9 张,并为单图/总字节和解码边长/像素设硬上限;前端追加和恢复同样拒绝超额。补 9/10 张、超 30MB 与超像素边界测试。
Pull request closed