AetherNo2332 9d0bce6bb5 fix(cloud-agent): 续轮交接 - 用有界结构化事实帧替代跨轮散文收束
续轮(POST /agent/runs 带 parentId)过去只把「上一轮已结束(failed)。…已提交生成任务:
a, b」这段散文塞进下一轮历史:新轮看不到上一轮真实改过哪些节点,也无法可靠区分「这是
服务端交接」还是「用户自己写的一句话」。

- 与轮内既有事实帧(cloud_agent_context_frame.go 的 task_repository 帧)同构,把跨轮交接
  也改成有界结构化帧:source=server、kind=run_handoff,带 parentRunId / status /
  failureReason / submittedTaskIds / canvasChanges / omittedCanvasChanges / authority。
  画布改动取自上一轮真实 canvas_updated 事件,最多 12 组(operation、去重后的
  nodeId/title、actionCount),超出只记 omittedCanvasChanges,不静默丢。
- 身份改由 providerTextMessage.AgentContextSource 结构体字段承载,canonical 装配时原样
  透出;isCloudAgentContinuationMessage 要求「来源元数据 + 【运行状态】前缀 + JSON
  source=server/kind=run_handoff」三者同时成立,用户逐字复制帧 JSON 也拿不到该身份
  (此前按内容前缀猜,用户自己写一句「上一轮已结束(…)」就会被认成交接)。
- 旧格式兼容:升级前落库的散文交接没有来源字段,改按「紧跟 assistant 回复 + 旧版文案
  前缀」识别,只用于历史裁剪与轮次计数;canonical 身份仍只认结构体字段。
- cloudAgentLegacyHistory 重建时把落库的 agentContextSource 一起搬,身份不在重建口丢失。
- 帧按字节封顶:单个 nodeId 截 64 字符、整帧 8 KiB,超限按最近改动优先裁剪并累计
  omittedCanvasChanges;失败原因过既有脱敏口径 cloudAgentSafeUserMessage。
- 不搬运 dev 专有内容:不引入事件读取上限常量(上游本就返回全量事件),硬闸口径按上游
  的 64 KiB 注释,也不引入 `dropped := 0` / `_ = dropped` 这类死代码。
- docs/content/docs/backend/http-api.mdx 补帧字段与「非授权」口径。

帧只被 isCloudAgentContinuationMessage 用于「历史怎么裁、怎么数轮」;写入与收费闸门读的
是落库策略(审批闸、生成次数闸、视频秒数闸、工具授权),不读消息内容,因此帧不构成重放
写入、重复提交付费任务或扩大权限的授权依据。
2026-09-22 01:32:21 +08:00
2026-09-14 01:11:56 +08:00
2026-09-14 01:11:56 +08:00

影策 logo

影策

让一个故事,从文字走向银幕

GitHub · 功能 · 文档 · 安全策略

影策是一个开源的 AI 影视与短剧创作工作台:用自由画布组织创作,用结构化工作流管理剧本、角色、场景和分镜,并通过统一的任务系统完成图片、视频、音频与文本生成。

项目仍在快速开发,数据结构和外部接口可能调整。默认适合个人、本地或可信环境部署;未经安全配置,不要直接作为公网多人服务使用。

在线演示:https://ddcat.pronhubcn.com

账号/密码:test/test123456

核心能力

  • 自由画布:节点、连线、框选、缩放、小地图、撤销重做、导入导出和只读分享。
  • 影视创作工作流:剧本、角色、场景、风格板、参考素材、结构化分镜和 3D 导演台。
  • 多媒体生成:文本、图片、视频、音频任务,支持参考图、首尾帧、运镜、续写、局部修改和批量生成。
  • 任务与素材管理:异步队列、进度与日志、取消/重试、素材库、资源引用校验和登录后的跨设备同步。
  • 时间线剪辑:片段编排、拆分、修剪、字幕转写和服务端成片导出,并支持插件化编辑面板。
  • 云端 Agent:支持持久化对话、画布摘要和流式事件回放;当前为只读阶段,真实环境能力以文档和验收清单为准。
  • Agent 技能生态:内置技能覆盖生产流程;社区技能库 judian-skills 补充生成前方法论(短剧节奏校准、提示词组装与质检、图/视频反推、UGC 与广告链路、MiniMax H3 官方规范、FLUX.2 资产图与视觉决策转换层,共 72 个,MIT/Apache-2.0/CC-BY-4.0 许可蒸馏并逐卡署名)。安装:技能页 → 安装技能 → GitHub 标签 → 仓库地址填 https://github.com/itsWyatt-K/judian-skills,子目录填 skills/drama/onlyshot-redfruit-7beats 这类技能路径。
  • 管理与渠道:系统渠道、逻辑模型、用量/积分、功能开关、对象存储、响应拦截和管理后台。

完整功能以功能清单为准。

快速开始

环境要求

  • Bun:前端和文档站
  • Go 1.25:后端
  • Docker Compose:仅在使用容器开发或部署时需要

宿主机启动

git clone https://github.com/ddcat-ai/open-ai-canvas.git
cd open-ai-canvas

# 使用 Git 忽略的目录保存本地开发数据和缓存
mkdir -p .local/project-workbench-debug .local/cache/go-build .local/cache/go-mod

# 终端一:后端
cd backend
CANVAS_BACKEND_ADDR=127.0.0.1:8080 \
CANVAS_BACKEND_DATA_DIR=../.local/project-workbench-debug \
GOCACHE=../.local/cache/go-build \
GOMODCACHE=../.local/cache/go-mod \
go run ./cmd/server

# 终端二:前端
cd ../web
bun install --frozen-lockfile
bun run dev

打开 http://localhost:3000。首次使用时注册管理员账号,并在设置中配置模型渠道。前端默认将 /api 代理到 http://127.0.0.1:8080;如需修改代理目标,可设置 VITE_API_PROXY_TARGET。

Windows PowerShell 用户可在仓库根目录执行:

.\scripts\start-local.ps1

Docker 开发与本地构建

源码热更新:

LOCAL_UID=$(id -u) LOCAL_GID=$(id -g) \
  docker compose -f docker-compose.dev.yml up --build

本地构建并运行 release 镜像:

docker compose -f docker-compose.local.yml up -d --build

默认前端端口为 3000、后端端口为 8080;端口冲突时可通过 CANVAS_WEB_HOST_PORT 和 CANVAS_BACKEND_HOST_PORT 覆盖。

更多本地开发说明(包括时间线字幕转写)见本地开发文档。

架构概览

浏览器(web/)
  ├─ React 工作区、画布、任务中心和素材库
  ├─ Zustand / localForage 本地状态与降级缓存
  └─ 登录态 API、资源请求和 SSE
          │
          ▼
后端(backend/)
  ├─ Gin handler -> service -> repository/model
  ├─ SQLite(本地)或 PostgreSQL + Redis(部署)
  ├─ 异步任务 worker、权限、资源存储和模型中转
  └─ provider / outbound -> 外部模型渠道

前端业务 API 统一经 web/src/services/api/request.ts 调用。生产环境由 Nginx 托管前端并代理后端,公网只需暴露 web 入口;SSE 仅在明确的流式路径关闭代理缓冲。

服务器部署

源码构建(推荐)

适用于 Linux 云服务器。脚本会安装 Docker、拉取源码、生成受保护的 .env,并启动 PostgreSQL、Redis、后端和网页:

curl -fsSL https://raw.githubusercontent.com/ddcat-ai/open-ai-canvas/main/scripts/install-server.sh | sudo bash

默认访问 http://服务器IP:3000。更新或排查:

cd /opt/open-ai-canvas
sudo docker compose --env-file .env \
  -f docker-compose.deploy.yml -f docker-compose.build.yml ps
sudo docker compose --env-file .env \
  -f docker-compose.deploy.yml -f docker-compose.build.yml logs -f --tail=200

使用 GHCR 镜像

不需要源码时,可使用镜像部署脚本:

curl -fsSL https://raw.githubusercontent.com/ddcat-ai/open-ai-canvas/main/scripts/install-server-image.sh | sudo bash

生产环境请在 /opt/open-ai-canvas/.env 中将 CANVAS_IMAGE_TAG 固定为具体 Release,不要使用 latest。更新流程、数据库迁移、备份和回退说明见系统更新文档。

安全边界

  • 首次管理员注册应在受控网络完成,公网部署保持 CANVAS_REGISTRATION_ENABLED=false。
  • 设置准确的 CANVAS_CORS_ORIGINS,不要在公网使用 *;使用 HTTPS 并正确转发代理头。
  • 后端默认拒绝本机、私网和链路本地模型地址。开发时只通过 CANVAS_ALLOWED_PRIVATE_UPSTREAM_HOSTS 精确放行可信主机,不要使用全量放行开关。
  • 用户 API Key 不应出现在 URL、日志、错误上报或服务端长期明文存储中;只在可信部署和 HTTPS 链路中使用真实密钥。
  • 后端 8080 应留在 Compose 网络内,不要直接暴露到公网;限制 .env、数据库、上传目录、备份和 .settings-key 的权限。
  • 媒体资源可使用后端数据目录、阿里云 OSS 或腾讯云 COS;删除素材前会检查业务引用。

安全问题请按 SECURITY.md 报告,不要在公开 Issue 中粘贴密钥、Cookie、数据库或生产日志。

文档与验证

文档导航

验证命令

按改动范围运行最小验证:

# 前端
cd web && bun run lint && bun run build

# 后端
cd backend && go test ./...

# 文档站
cd docs && bun run types:check

交流与反馈

Issue 反馈、技术讨论和产品升级建议可以在微信交流群中沟通;群内也会不定期组织 AI 学习与培训交流会。

影策 微信交流群

许可证和上游

本项目采用 MIT 协议。影策基于 basketikun/infinite-canvas 的早期版本进行二次开发,上游作者和贡献者保留其对应代码的权利与署名。


赞助商

感谢以下赞助商对影策项目的支持:

LOGO 类型 赞助商名称 说明 网站
ArtDance 商业 ArtDance 本项目 Seedance 模型的天使投资人。 artbox.top
soonstudio 商业 soonstudio API 一站式网站,自研系统,非 New API;支持手机、短信接码,覆盖国内外几乎所有模型 API 接口,并发高、稳定性强。源于开源,步入 AI 领域,感谢开源。 soonstudio.ai
快乐机艺术小组 团队 快乐机艺术小组 一支跨学科的艺术创作团队,持续探索数字与艺术的全新表达形式。 暂无
秘塔 企业 秘塔 提供 MiniMax H3 视频生成 API,支持原生 2K、音画同步和 OpenAI 兼容协议。 metaso.cn
浮瑞万相AI 企业 浮瑞万相AI 一家专注于AI视听的AI Native公司 暂无
喜马抓马 团队 喜马抓马 中国AI视听先锋厂牌/AI 视听全链路综合服务平台 himadrama.com
羽宇科技 企业 羽宇科技 一站式AI应用平台。提供模型算力入口、AI短剧视频制作(Studio)、企业数字员工(Agent)及内容出海(OPC)全栈解决方案。 暂无

贡献者与团队

感谢参与产品设计、开发、测试、内容和社区建设的成员。以下为紧凑展示,完整保留每位成员的头像、昵称、联系方式和个性签名:

ddCat ddCat
项目发起者 · 微信:ddcat0829

ddcat666@126.com
在计算机里头没有任何黑魔法,所有的东西只不过是我现在不知道而已,总有一天我会把所有的细节、所有的内部的东西全搞明白的。
爱笑的毛毛虫 爱笑的毛毛虫
用户名:sikongyue

315515767@qq.com
正在啃 main 分支,争取下次 merge 的时候变成蝴蝶
delve-s delve-s
3013141136@qq.com
我亦无他,惟手熟尔
CyrusAuyeung CyrusAuyeung
cyrusauyeungho@gmail.com
HKUST(GZ) UG
奶大佬 奶大佬
1304634970@qq.com
人生就是要不断的探索
dyh dyh
1613203335@qq.com
无
kyori kyori
1771634408@qq.com
励志成为未来最好用的画布仓库的贡献者
Bowen Bowen
admin@bowen.games
剑走偏峰,雷厉风行。
ken ken
2506802@qq.com
走自己的路
fish fish
cihai.sea@gmail.com
AI 界热于助人的拖油瓶
QAyong QAyong
ID:QAyong
B站:QAyong

2110491559@qq.com
AI 短剧合规,资产确权
_K37ix. _K37ix.
2773843782@qq.com
Making things that think
Rou Rou
rou325089@163.com
上善若水
vv vv
dy/xhs:荣灵

2838033228@qq.com
就是水水
Dominic1556 Dominic1556
184026530@qq.com
Done is better than perfect
宇熙 宇熙
53121904@qq.com
年轻的时候不狂,老了拿什么回忆
影子 影子
305818148@qq.com
年纪大佬才明白人要顺势而为。
Ray Ray
cnraylee@qq.com
AI时代的全栈落地工,欢迎找我聊需求
不见山谷 不见山谷
VV:yu170718

1762202553@qq.com
空山不见人,但闻人语响
yep yep
1239738103@qq.com
思考,坚持
汉堡爸爸 汉堡爸爸
VV:jxs62888

309151651@qq.com
没什么大不了
bensharp bensharp
VV:jiahezuiai

275008147@qq.com
在哪跌倒,就在哪睡一觉
daqzia daqzia
VV:wangzhiwei-8234

wzwzcb@gmail.com
NullPointerException
醒梦 醒梦
VV:love-is-heart-is

1948863412@qq.com
Always believe that good things will happen
morrow morrow
VV:morrow0127

3201190041@qq.com
最难不过坚持
春秋 春秋
Agent记忆核心贡献者 · VV:A13068788886

558328@qq.com

Description
No description provided
Readme MIT 862 MiB
Languages
TypeScript 50.7%
Go 33.1%
CSS 11.8%
JavaScript 2.5%
Python 1.7%
Other 0.1%