意图有结构。 自动化可接管。 作品有记忆。 工具有分寸。
它不是给图片模型套了一层表单,也不是聊天网页加右侧预览。
它是一间安静、精密、有流动光学器件的数字工作室:作品是光源,工具围绕作品出现、移动、停靠和收起。
创作现场
一句话同时包含保留、排版、参考与生成。
“保留主体,把标题收小一点。沿用这个构图,再试一版清晨的光。”——AI Canvas 将这些决定落在同一份可编辑的 Scene 中:Agent 与鼠标操作同一组对象,参考编译器组织生成上下文,结果回到画布成为下一次创作的起点。
实际应用截图,来自 2026-09-08 离线验证;画面使用自制合成测试素材,展示编辑交互,不代表真实模型画质。
同一份 Scene · 网页交互示意
对话、画布、生成。
不是三个页面,是三个工作焦点。
它们共享同一个项目、对话、Scene 版本、选择、素材、生成任务、结果、血缘、已提交的撤销历史与项目记忆。切换视图不会复制状态、不会丢失选择、不会重置草稿、不会打断正在运行的任务。
当前作品 4:5 画布 · 7 个元素
你
保留主体,把标题收小一点。沿用这个构图,再试一版清晨的光。
助手
标题已缩小到 72,主体与构图保留。清晨光线方向已记录为本轮偏好。
- 更新画布结构当前选区 · 准确主标题 · 已完成定位 · 撤销
- 记录本轮偏好项目记忆 · 待确认确认
图层属性
- 文准确主标题
- 主香氛瓶身
- 光清晨侧光
- 形展台
- 草叶片 · 仅参考
放入画布继续变化比较导出
-
01 · 对话
表达意图,检查真实动作。
文档式创作记录,不是聊天气泡墙。你说清目标,Agent 回执它实际做了什么:动作、范围、对象、结果、费用与外发摘要,以及可用的撤销、定位、继续。右侧是同一份 Scene 的实时画布,不是静态副本。
- 审阅 · 每步确认
- 协作 · 低风险自动
- 自动 · 边界内连续
- 修正本轮
- 补充本轮
- 排到下一轮
- 立即停止
-
02 · 画布
精确控制,人工接管同一份作品。
选择、移动、缩放、分组、排序、裁剪、编辑文字、绘制草图与蒙版、放置光影。文字与形状保持可编辑;模型返回的成图以图片元素继续参与创作。工具栏、检查器与创作输入是三座独立的光学工具岛。
- 选择 V
- 抓手 H
- 导入图片
- 文字 T
- 草图 B
- 形状
- 主体占位
- 光影
- 蒙版
-
03 · 生成
探索方向,延续分支。
配置一次请求,观察一个真实任务,比较结果,继续变化,把结果放回画布并导出。结果进入「结果家族」:参考、当前、父子变化与恢复形成可理解的血缘。失败时保留原 Prompt、参考与参数,说明真实失败阶段。
- 仅文字
- 当前画布
- 选中结果
- 指定图片
- 首次生成
- 局部修改
- 相似延展
- 画布参考
- 文字效果
Glass Islands
工具围绕作品出现、
移动、停靠、收起。
没有固定的左右侧栏。画布工具栏、检查器和 Agent 创作输入都是独立的浮动仪器:可拖动、可缩放、可停靠四边、内容随方向重排、可收成一颗实用的圆球再恢复,并记住你的布局。下面是可以真正操作的演示。
- 文准确主标题文字 · 96
- 主香氛瓶身主体
- 光清晨侧光光影
- 形展台形状
- 草叶片草图 · 仅参考
拖动顶部把手移动;拖到边缘停靠;点圆球图标收起。布局保存在本地。
- 拖动与缩放只从明确的把手开始;输入、按钮、滑杆、滚动与缩放柄不会误触拖动。Pointer capture 在取消、失焦、卸载时可靠释放。
- 四边停靠顶部/底部停靠后是真正的横向信息架构,不是被压扁的竖表单。
- 收成圆球圆球代表一件被收起的具体工具,显示当前工具与最多一个状态点。它是仪器,不是吉祥物。
- 降级仍完整Reduced Motion 缩短形变;Reduced Transparency 换成可读实色,信息架构不变。拖动时先降低滤镜质量,不牺牲指针精度。
唯一的标志性元素
一条光迹,只在真实动作
与真实对象之间出现。
大胆只花在一个地方。当 Agent 的操作触及画布对象时,一条极细、低饱和的光谱轨迹从创作输入延伸到被影响的对象,然后自行收束。它从不无中生有:没有真实活动、没有真实受影响的元素,就没有光迹。
- 只在存在真实对象关系时出现;起点与终点都有明确语义。
- 不代替选择框、焦点环或错误状态。
- 不持续漂浮,不扫描全屏;没有粒子、闪光雨、呼吸光或节点网络。
- Reduce Motion 下退化为静态细线或完全移除。
- 操作结束后收束或淡出,不成为永久装饰。
Reference Compiler
The scene is a source language.
画布同时承载几何、语义与视觉证据。一次生成需要知道主体在哪里、哪些元素互相遮挡、哪些文字必须准确、哪些辅助对象不应出现在成图里。参考编译器把这些信息编译为语义包与视觉参考,再按 Provider 能力组织请求上下文。
-
00
Scene
可编辑的结构化作品:元素、变换、层级、语义角色、参考策略与来源。
idtypesemanticRolereferencePolicytransformzIndexopacityblendModeprovenance -
01
Prompt IR
布局、层次、遮挡与保护意图可以被继续处理的中间表示。
boundszIndexrelationsocclusionsprotectedElementIdspresentation -
02
Prompt Package
构图、文字、风格与禁止项分别表达,而不是揉成一段提示词。
compositionContracttextContractstyleBiblenegativeConstraints -
03
Reference Manifest
区分参考素材的用途,并保留来源关系;素材读取经过内容哈希核对。
appearance-compositesemantic-sheetsource-imagesketch-underlaymask -
04
Provider Compiled Prompt
在具体服务能力下形成提示内容与限制说明;不支持的能力不会被假装支持。
promptnegativePromptreferenceModewarnings
elements: scene.elements.map((element) => ({
id: element.id,
type: element.type,
// … name, description, semanticRole, provenance
referencePolicy: element.referencePolicy,
presentation: presentationFor(element),
zIndex: element.zIndex,
opacity: element.opacity,
blendMode: resolveBlendMode(element),
bounds: { ...element.transform },
attributes: attributesFor(element)
}))
reference-only 元素可成为语义引导;隐藏、排除、蒙版与分组元素的 presentation 可为 omitted——它们仍可携带结构或保护信息,但不会被直接画成编辑器控件。
编译结果同时携带 sceneId 与 sceneRevision。场景版本改变时请求随之更新,不能只更新说明而未更新请求。
结构参考、视觉参考、同时参考、Prompt Package、历史结果与编辑范围共同约束生成;草图探索与高质量定稿职责明确。
执行契约
A suggestion becomes a checked mutation.
Agent 的修改先表达为有作用域的命令,再经过策略、锁定和版本校验。预览保存操作批次、结果摘要与反向补丁;提交时,Main 再次核对权威 Scene 与执行结果。这条链路解决一个具体冲突:模型规划之后,用户可能已经把画布改了。旧计划不能假装这些修改不存在。
01 提议
有作用域的命令
scope · 元素锁定 · 保护 · 工具策略
02 预览
影子执行
batch · patches · inversePatches · scene digest
expectedSceneRevision = 12
03 提交检查
Main 核对权威 Scene
当前 revision = 12
等待提交
04 持久化
可撤销批次
本地已提交操作保留批次与反向补丁
拒绝
旧版本提交被拒绝
重新读取权威 Scene,重新预览
Scene revision 12 · 尚未提交
| 校验点 | 实现约束 |
|---|---|
| 版本 | expectedSceneRevision 必须与当前权威 Scene 一致;预览后发生人工编辑,提交也会再次检查。 |
| 作用域与权限 | scope、元素锁定、保护与工具策略参与预览许可判断。 |
| 执行身份 | 幂等键绑定工具参数;提交令牌绑定会话、有效期与 prepared 状态。 |
| 结果一致性 | 对照预览核对 batch、patches、inversePatches 与 Scene digest。 |
| 可撤销记录 | 本地已提交操作保留批次与反向补丁;外部请求及费用不随画布撤销而消失。 |
生成运行时
A network timeout is not proof of non-submission.
生成任务保留请求身份、提交状态、结果与来源关联。队列必须区分「确定未发送」和「可能已经发出」,因为一次普通的重试可能变成第二笔付费请求。
连接在发送前失败,请求身份可核对:允许准备新的尝试。
有界付费
请求数、图片数与费用上限由执行策略约束。自动模式达到任一限制后停止并请求决定。未知费用必须明确标记,不伪造精确金额。
- 请求数
- 图片数
- 费用上限
- 持久累计预算
真实状态,不是好看的进度条
每个状态都真实且可操作,可用性不能只在已成功三张美图时成立。
- 排队
- 真实进度
- 部分结果
- 成功
- 取消
- 失败
- 超时
- 外部未知
- 费用未知
- 原身份不可用
错误可区分
凭据、模型、协议、参数、预算、网络与服务端问题分别呈现。未支持的能力不会显示成可用入口;未知协议不猜测兼容。
光学工作室
三种工作室主题,
三种玻璃质感。
作品保持实体,主题与玻璃只改变功能层。精致来自局部而非全圈高亮:少量折射边缘、局部环境染色、层叠接触影、清晰的文本中心与适度透过。高质量折射会在拖动和低能力设备上自动降级。
- --pearl
- --ink
- --cobalt
- --iris
- --champagne
- --glass-blur
- 文准确主标题文字 · 96
- 主香氛瓶身主体
- 光清晨侧光光影
描述你想调整的画面…
- Clear · Regular · Thick · Solid材质按信息任务分层:短暂微工具、工具岛与输入、检查器与设置、降级与长文本。
- 九项光学检查本体透明度、背景模糊与饱和度、顶缘高光、内暗边、局部色差折射、接触影与空间影、邻近作品的环境色、复杂背景对比保护、Solid 降级。
- 不做的事整圈高饱和描边、黑紫赛博、霓虹渐变、扫描线、粒子与呼吸光。局部色差视觉宽度不超过约 2px。
运行边界
Main 是权威。
Renderer 看不到密钥。
Main 负责 Scene、持久化、凭据与外部请求。Renderer 通过 Preload 与窄 IPC 接口操作,窗口开启 sandbox、context isolation 并关闭 Node integration。本地优先指项目存储与控制边界;在线推理仍会发送所需提示词与参考内容到你自己配置的服务。
RENDERER
React · Konva · Zustand · 无 Node、无任意网络、无明文凭据
PRELOAD
contextBridge · 所有输入经 Schema 校验
MAIN
已保存的 Key 只在请求瞬间由 Main 读取 · 模型输出不能选择任意端点
只能访问用户保存并验证过的 Base URL 与响应中经校验的任务/内容地址
LOCAL STORAGE
项目、Scene、素材、Prompt、参考、任务、结果、版本与记忆具有可恢复的完整血缘
- Main 对 Scene、Provider、凭据、外部网络、项目文件与持久写入保持权威。
- 文件访问停留在当前项目/库与明确的导入导出目标内。
- 不确定的外部 POST 不会被自动重复;付费工作受请求、图片数与费用上限约束。
- 自动化测试与视觉 QA 永远不调用真实 LLM 或图片 Provider。
- 项目删除默认进入系统回收站;项目库外文件不因最近项目操作被静默删除。
- Owner Full 是当前项目内的完整产品能力,不是操作系统管理员权限。
Provider
两个可替换的配置槽,
不是产品的中心。
产品保持一个语言模型模块和一个图片模型模块。你配置名称、协议、Base URL、模型、超时、并发、能力与凭据;Runtime 根据已保存配置注册对应实现。在线能力使用你自己的模型服务与额度。
语言模型
ark-responses火山方舟 Responsesopenai-responsesOpenAI Responses 兼容openai-chat-completionsOpenAI Chat Completions 兼容
推理强度 auto → max · 图片细节 auto / low / original · 流式或缓冲传输,连接、首事件、空闲超时可配置。
图片模型
ark-seedream火山方舟 Seedreamopenai-imagesOpenAI Images 兼容task-images异步任务式图片协议
文生图、参考图、编辑、组图分别进行能力门禁;无 Key 时项目、画布与离线 Agent 仍可用,状态诚实。
协议名称相同不保证各服务实现都兼容。参考图、蒙版、编辑和流式输出取决于具体服务能力及实际响应。真实连接验证只使用已保存配置,经用户二次确认后最多发送一个极小请求,失败不自动重试。
工程地图
用可验证的方式构建。
| 目录 | 职责 | 主要技术 |
|---|---|---|
src/domain/ | Scene、命令与领域规则 | TypeScript · Zod · Immer |
src/main/ | Agent、参考编译、生成、存储 | Electron · Sharp · SQLite · Kysely |
src/preload/ | 桌面 API 桥接 | Electron contextBridge |
src/renderer/ | 创作界面、画布与交互状态 | React · Konva · Zustand |
src/shared/ | 跨进程类型与运行时契约 | TypeScript · Zod |
tests/ | 单元、集成与桌面行为验证 | Vitest · Testing Library · Playwright |
验收矩阵
- 1024 × 700
- 1280 × 800
- 1440 × 900
- 1920 × 1080
- 2560 × 1440
- 100% / 125% / 150%
- 浅色 · 暗色
- Reduced Motion
- Reduced Transparency
- 键盘
- IME
- 核心命中区 ≥ 40–44px
工具有分寸
我们不承诺的事。
Product 1.0 表示个人日用产品成熟度,不自动表示公开发布、商业化或多人协作。当前仓库是持续演进中的产品实现。
- 不保证真实模型的画质或商品身份保留;离线生成结果是 Fixture,不是真实 Provider 质量证据。
- 不在模型不支持时冒充自动拆层或透明逐元素生成。
- 没有账号、云同步、多人协作、素材社区、模板商城、插件或模型市场。
- 没有视频、3D、完整矢量套件或完整 Photoshop 功能。
- 没有不受预算和停止条件约束的长期自主 Agent;不展示或伪造思维链。
- macOS / Linux 尚未作为已验证交付平台;当前尚未配置开源许可证。
v0.3.0 · Pre-release
从一句话开始,
在同一件作品里继续。
Windows x64 便携版与安装版,未签名测试候选。源码 ZIP 与 SHA256SUMS 一并提供。新建项目后,在设置中分别配置语言模型与图片模型;本地画布可以先开始使用。
从源码构建 · Node ≥ 22 · pnpm 11.9.0
pnpm install --frozen-lockfile
pnpm dev
pnpm typecheck
pnpm lint
pnpm test
pnpm test:integration
pnpm build
pnpm package:win
首次安装可能下载 Electron 并构建原生模块。自动验证使用离线替身,不调用真实收费 Provider。
