@ninkch/dsh-infinite-canvas 0.17.11 → 0.17.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -18
- package/README.zh-CN.md +83 -40
- package/assets/canvas-studio/SKILL.md +31 -7
- package/client.js +710 -70
- package/docs/guide.en.md +225 -0
- package/docs/guide.zh-CN.md +229 -0
- package/index.js +34 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
**A node-based short-drama studio inside DeepSeek Harness.** Start from a one-line idea, walk out with a storyboarded, voiced, subtitled video cut — right on an infinite canvas.
|
|
4
4
|
|
|
5
|
-
English | [简体中文](./README.zh-CN.md)
|
|
5
|
+
English | [简体中文](./README.zh-CN.md) · **User guide: [English](./docs/guide.en.md)** · [操作手册(中文)](./docs/guide.zh-CN.md)
|
|
6
6
|
|
|
7
7
|
<!-- Badges: add CI / npm / license badges here after publishing -->
|
|
8
8
|
|
|
@@ -12,23 +12,57 @@ Infinite Canvas is a [DeepSeek Harness](https://github.com/deepseek-ai) plugin t
|
|
|
12
12
|
|
|
13
13
|
Everything runs locally in your Harness. Bring your own generation APIs, or use the built-in demo mode to learn the whole flow with zero configuration.
|
|
14
14
|
|
|
15
|
+
## Drive it from the chat
|
|
16
|
+
|
|
17
|
+
The canvas and the agent share one brain. Every node is an AI workbench, and the **chat side is the director**: ask in plain language and the agent operates the canvas tools for you — batch work especially.
|
|
18
|
+
|
|
19
|
+
> *"Create a project called Time-Postman, write the world view and series bible first."*
|
|
20
|
+
> *"Write episode 1 based on the bible."* → the script node generates one episode (60–120s), every scene marked with a `【场N】` header.
|
|
21
|
+
> *"Expand episode 1 into scenes."* → per-scene text nodes + storyboard nodes appear, wired automatically.
|
|
22
|
+
> *"Generate reference images for every character, scene and prop."* → ten image nodes created and generated in one go.
|
|
23
|
+
> *"Generate scene 1's video."* → storyboard shots + reference images compose one multi-shot video call.
|
|
24
|
+
> *"Send episode 1 to FilmCraft for an MP4 render."* → FCP7 XML + SRT land in your data root for the Craft suite.
|
|
25
|
+
|
|
26
|
+
The heavy lifting — bibles, episode scripts, storyboard breakdowns, batches of reference images — is exactly what the agent is fast at. You then fine-tune the 20% you care about directly on the nodes: tweak a prompt, reorder references, re-roll one shot, pull an older result from history.
|
|
27
|
+
|
|
28
|
+
## Case study: Time-Postman (时空邮递员)
|
|
29
|
+
|
|
30
|
+
A full episode produced end to end with the flow above. The canvas at 32% — the script node, the expanded per-scene text + storyboard groups, the scene-1 video node with its bound references and preview, and the Assets panel:
|
|
31
|
+
|
|
32
|
+

|
|
33
|
+
|
|
34
|
+
Scene 1 up close — text → storyboard → video wiring, with the storyboard's shot list and the video node's bound references:
|
|
35
|
+
|
|
36
|
+

|
|
37
|
+
|
|
38
|
+
A scene video node: model picked from the provider's model list, duration/ratio/resolution on the node, four reference images bound in order:
|
|
39
|
+
|
|
40
|
+

|
|
41
|
+
|
|
42
|
+
Providers are configured once (URL + key + vendor-specific extra params) and can hold many models — one is starred as the default route:
|
|
43
|
+
|
|
44
|
+

|
|
45
|
+
|
|
46
|
+
The Settings panel — data root, Craft status (12/12 ready), skills, text model, and the image/video/TTS provider lists (EN / 中文 versions of the same UI):
|
|
47
|
+
|
|
48
|
+

|
|
49
|
+
|
|
15
50
|
## How it works
|
|
16
51
|
|
|
17
52
|
```mermaid
|
|
18
53
|
flowchart LR
|
|
19
|
-
A[Script node<br>
|
|
20
|
-
B --> C[
|
|
21
|
-
C --> D[
|
|
22
|
-
|
|
23
|
-
E -->
|
|
24
|
-
|
|
25
|
-
G --> D
|
|
54
|
+
A[Script node<br>ONE episode · scene headers] --> B[Expand to scenes<br>text + storyboard per scene]
|
|
55
|
+
B --> C[Multi-shot video per scene<br>shots + refs in ONE call]
|
|
56
|
+
C --> D[Tail-frame chaining<br>scene N last frame → N+1 first frame]
|
|
57
|
+
A --> E[Reference image gen<br>characters · scenes · props]
|
|
58
|
+
E --> C
|
|
59
|
+
D --> F[Final cut / FilmCraft<br>transitions · subtitles · voices]
|
|
26
60
|
```
|
|
27
61
|
|
|
28
62
|
## Highlights
|
|
29
63
|
|
|
30
64
|
### Consistent characters, scene after scene
|
|
31
|
-
A per-project **series bible** (style baseline + character/scene/prop cards) is injected into every AI call, so wardrobes, locations and props stay coherent across shots and episodes. After each storyboard run, a
|
|
65
|
+
A per-project **series bible** (style baseline + character/scene/prop cards) is injected into every AI call, so wardrobes, locations and props stay coherent across shots and episodes. Entities referenced with `@name` in a prompt automatically carry their bible description and reference assets. After each storyboard run, a consistency check flags any name that isn't registered yet, and the agent fills the gaps.
|
|
32
66
|
|
|
33
67
|
### References that actually bind
|
|
34
68
|
Reference images connect as an ordered, visible list — `[图1] 角色:Lin Ning`, `[图2] 场景:The Old House` — and that exact order is what reaches the model. Multi-character frames stay unambiguous, and Volcano Engine **Seedance**'s native `[图N]` convention is supported end to end (first frame, up to 4 reference images, official task API).
|
|
@@ -40,28 +74,32 @@ Reference images connect as an ordered, visible list — `[图1] 角色:Lin Ni
|
|
|
40
74
|
Pan, zoom, marquee select, alignment guides, groups that fold, a minimap, 60-step undo/redo, per-node media history (last 8 results), mask-based inpainting, and middle-click everything — the canvas part should feel like an editor, not a chat sidebar.
|
|
41
75
|
|
|
42
76
|
### Bring your own models
|
|
43
|
-
Text models come from Harness itself (no extra keys, no per-plugin parameters). Image
|
|
77
|
+
Text models come from Harness itself (no extra keys, no per-plugin parameters). Image and video backends use a **provider + model** structure: configure a provider once (URL, key, optional vendor-specific **extra params** as JSON) and list as many model IDs under it as you like; star one as the **default route** for nodes that don't pick one. Video endpoints are auto-adapted — OpenAI-style task APIs, Seedance-native `content[]` gateways and Sora-style `/v1/videos` are covered by an automatic fallback chain, resolutions/ratios/first-frames/references are mapped to each vendor's conventions, and oversized references are downscaled before sending. Every gateway call is relayed through the local Harness host process, so **any vendor works** (no CORS headaches). No backend configured? Demo mode synthesizes placeholder images and animated videos locally so the entire pipeline is testable offline.
|
|
44
78
|
|
|
45
79
|
### A portable data root
|
|
46
|
-
Set a **data root folder** once and everything lands there, organized by **project name**: nodes and the series bible in `project.json`, the asset index in `assets.json`, media under `image/ video/ audio/ text/`, and Craft post-production under `craft/`.
|
|
80
|
+
Set a **data root folder** once and everything lands there, organized by **project name**: nodes and the series bible in `project.json`, the asset index in `assets.json`, media under `image/ video/ audio/ text/`, and Craft post-production under `craft/`. **Moving to a new machine = copying the folder**: point the new install's data root at it and every project (assets, bible, media) is recognized — plus a one-click **Import from data root** for anything not yet on disk. Put the folder inside a cloud-sync directory and multiple machines stay in sync automatically.
|
|
47
81
|
|
|
48
82
|
## Quick start
|
|
49
83
|
|
|
50
84
|
1. Install the plugin (bundle folder) and restart Harness once.
|
|
51
|
-
2. Click the **Infinite Canvas** button in the left sidebar.
|
|
52
|
-
3.
|
|
53
|
-
4.
|
|
54
|
-
5.
|
|
85
|
+
2. Click the **Infinite Canvas** button in the left sidebar, and set a **data root** in Settings.
|
|
86
|
+
3. In the chat: *"Create a project called <your idea>, write the world view and series bible first."*
|
|
87
|
+
4. *"Write episode 1."* → script node generates one episode with `【场N】` scene headers → click **Expand to scenes** (or ask the agent) to get text + storyboard nodes per scene.
|
|
88
|
+
5. *"Generate reference images for all characters, scenes and props."* → named, bible-consistent asset images in one batch.
|
|
89
|
+
6. *"Generate scene 1's video."* → storyboard shots + references compose one multi-shot video call; chain scenes via tail-frame → first-frame.
|
|
90
|
+
7. Open a **Final Cut** node for the preview cut, or export to FilmCraft for a true MP4.
|
|
55
91
|
|
|
56
92
|
> Without any generation API configured, every step runs in demo mode — the full pipeline works offline.
|
|
57
93
|
|
|
94
|
+
The full walkthrough (with screenshots, model configuration and data-root migration) lives in the [Chinese user guide](./docs/guide.zh-CN.md).
|
|
95
|
+
|
|
58
96
|
## Generation backends
|
|
59
97
|
|
|
60
98
|
| Kind | Protocol | Notes |
|
|
61
99
|
|---|---|---|
|
|
62
|
-
| Text | Harness LLM service |
|
|
63
|
-
| Image | OpenAI-compatible `/images/generations`, multi-reference via `/images/edits` |
|
|
64
|
-
| Video |
|
|
100
|
+
| Text | Harness LLM service | Episode scripts & storyboard writers; pick any configured model, or override per node |
|
|
101
|
+
| Image | OpenAI-compatible `/images/generations`, multi-reference via `/images/edits` | Provider + model list with starred default; size (1K/2K/4K) × ratio; extra params as JSON; mask inpainting via `edits` + PNG mask |
|
|
102
|
+
| Video | OpenAI-style task APIs, Seedance-native `content[]`, Sora-style `/v1/videos` — automatic fallback chain | Episodes per scene (≤15s), 480P/720P/1080P, ratio, first frame, multi-reference (auto-downscaled), voice references via `audios[]` |
|
|
65
103
|
| TTS | OpenAI-compatible `/audio/speech` | Per-shot voices mixed into the final cut |
|
|
66
104
|
|
|
67
105
|
All gateway calls are relayed by the local Harness host process (no browser CORS limits) — any vendor endpoint with an OpenAI-style shape works.
|
package/README.zh-CN.md
CHANGED
|
@@ -2,92 +2,135 @@
|
|
|
2
2
|
|
|
3
3
|
**DeepSeek Harness 内的节点式短剧工作室。** 从一句话创意出发,在无限画布上完成剧本、分镜、角色资产、画面生成、视频生成,直到带转场、字幕、配音的成片。
|
|
4
4
|
|
|
5
|
-
[English](./README.md) | 简体中文
|
|
5
|
+
[English](./README.md) | 简体中文 · **操作手册:[中文版](./docs/guide.zh-CN.md)** · [English guide](./docs/guide.en.md)
|
|
6
6
|
|
|
7
7
|
<!-- 徽标位:发布后在顶部添加 CI / npm / license 徽标 -->
|
|
8
8
|
|
|
9
9
|
## 这是什么?
|
|
10
10
|
|
|
11
|
-
无限画布是一个 [DeepSeek Harness](https://github.com/deepseek-ai) 插件:它在 Web
|
|
11
|
+
无限画布是一个 [DeepSeek Harness](https://github.com/deepseek-ai) 插件:它在 Web 界面侧边栏加入一个完整的创作工作室。你像导演一样工作——无限画布上的节点连成流水线:剧本、分镜、角色与场景资产、图片生成、视频生成,最终在成片节点完成转场、字幕与配音。
|
|
12
12
|
|
|
13
13
|
全部本地运行于你的 Harness。生成后端自带或自配均可;未配置任何 API 时有内置演示模式,整条流水线离线可学可测。
|
|
14
14
|
|
|
15
|
+
## 用对话驱动画布
|
|
16
|
+
|
|
17
|
+
画布与对话共享同一个"大脑"。每个节点都是一个 AI 工位,而**对话侧就是导演**:用自然语言下指令,Agent 替你操作画布工具——批量工作尤其如此。
|
|
18
|
+
|
|
19
|
+
> 「创建一个叫《时空邮递员》的项目,先写世界观和设定集。」
|
|
20
|
+
> 「根据设定集写第一集。」→ 剧本节点生成一整集(60–120 秒),每个场景带【场N】分场标记。
|
|
21
|
+
> 「把第一集铺开到场景。」→ 每场一个文本节点 + 分镜表节点自动出现并连线。
|
|
22
|
+
> 「把所有角色、场景、道具的参考图都生成了。」→ 十个图片节点一次建好、逐个生成。
|
|
23
|
+
> 「生成场1的视频。」→ 分镜镜头 + 参考图合成一次多镜头视频调用。
|
|
24
|
+
> 「把第一集交给 FilmCraft 渲染 MP4。」→ FCP7 XML + SRT 落盘,Craft 套件接手。
|
|
25
|
+
|
|
26
|
+
设定集、整集剧本、分镜拆解、成批参考图——这些批量工作正是 Agent 最快的部分。跑完后你只需要在画布上精修真正在意的那 20%:改提示词、调参考图顺序、重掷某一个镜头、从历史里回退旧结果。
|
|
27
|
+
|
|
28
|
+
## 案例:时空邮递员
|
|
29
|
+
|
|
30
|
+
用上面的流程完整制作的一集。整集铺开后的画布全览(32%)——左侧:剧本 → 各场文本 → 各场分镜表 → 场1视频(带预览与参考图);右侧:资产面板:
|
|
31
|
+
|
|
32
|
+

|
|
33
|
+
|
|
34
|
+
场1 连线细节——场1文本 → 场1分镜表 → 场1视频,分镜表带镜头清单与逐镜台词标注:
|
|
35
|
+
|
|
36
|
+

|
|
37
|
+
|
|
38
|
+
场景视频节点:模型来自供应商模型列表,时长/比例/分辨率在节点上可调,四张参考图按顺序绑定:
|
|
39
|
+
|
|
40
|
+

|
|
41
|
+
|
|
42
|
+
供应商配置一次(地址 + Key + 厂商专属扩展参数),下面可挂多个模型——点 ★ 星标作为默认路由:
|
|
43
|
+
|
|
44
|
+

|
|
45
|
+
|
|
46
|
+
设置页签——数据根目录、Craft 状态(12/12 就绪)、技能增强、文本模型与图片/视频/TTS 供应商列表:
|
|
47
|
+
|
|
48
|
+

|
|
49
|
+
|
|
15
50
|
## 工作方式
|
|
16
51
|
|
|
17
52
|
```mermaid
|
|
18
53
|
flowchart LR
|
|
19
|
-
A[剧本节点<br
|
|
20
|
-
B --> C[
|
|
21
|
-
C --> D[
|
|
22
|
-
|
|
23
|
-
E -->
|
|
24
|
-
|
|
54
|
+
A[剧本节点<br>一集 · 场景标记] --> B[铺开到场景<br>每场 文本+分镜表]
|
|
55
|
+
B --> C[每场多镜头视频<br>镜头+参考图一次生成]
|
|
56
|
+
C --> D[尾帧串联<br>场N尾帧 → 场N+1首帧]
|
|
57
|
+
A --> E[参考图生成<br>角色 · 场景 · 道具]
|
|
58
|
+
E --> C
|
|
59
|
+
D --> F[成片 / FilmCraft<br>转场 · 字幕 · 配音]
|
|
25
60
|
```
|
|
26
61
|
|
|
27
62
|
## 核心亮点
|
|
28
63
|
|
|
29
64
|
### 角色一致,跨镜跨集
|
|
30
|
-
项目级**设定集**(风格基调 +
|
|
65
|
+
项目级**设定集**(风格基调 + 角色/场景/道具卡)注入每一次 AI 调用,服装、场景、道具跨镜跨集保持一致。提示词里的 `@名称` 自动携带该实体的设定描述与参考资产。每次分镜生成后一致性检查会标出未登记实体,Agent 自动补全。
|
|
66
|
+
|
|
67
|
+
### 参考图真正绑定
|
|
68
|
+
参考图以有序、可见的列表连线(`[图1] 角色:陈拾`、`[图2] 场景:褶皱巷`),这个顺序就是到达模型的顺序。多角色画面不再含糊;Volcano **Seedance** 的原生 `[图N]` 约定端到端支持(首帧、最多 4 张参考图、官方任务 API)。
|
|
31
69
|
|
|
32
|
-
###
|
|
33
|
-
|
|
70
|
+
### 从分镜到可看成片
|
|
71
|
+
**一个分镜表 = 一次多镜头视频生成。** 全部镜头(顺序 + 每镜时长)合成一条提示词,视频模型一次调用渲染整段——硬切由模型完成,没有逐镜拼接的接缝。每场 ≤ 15 秒,多场之间用**尾帧 → 首帧**串联。**成片节点**按顺序拼接片段——交叉溶解或黑场转场、烧录字幕、原声与 TTS 配音混音——即时导出预览版;接 [ArtCraft](#artcraft-桥接)(FilmCraft)则写出 **FCP7 XML 时间线 + SRT** 渲染真正的 MP4。
|
|
34
72
|
|
|
35
|
-
###
|
|
36
|
-
|
|
73
|
+
### 编辑器级画布
|
|
74
|
+
平移缩放、框选、对齐参考线、可折叠分组、小地图、60 步撤销重做、节点媒体历史(最近 8 次)、蒙版局部重绘、全要素中键——画布应该像剪辑软件,不像聊天侧栏。
|
|
37
75
|
|
|
38
|
-
###
|
|
39
|
-
|
|
76
|
+
### 模型自带或自配
|
|
77
|
+
文本模型直接来自 Harness(无额外 Key)。图片/视频后端采用**供应商 + 模型**两级结构:供应商配一次(地址、Key、可选的厂商专属**扩展参数 JSON**),下面挂任意多个模型 ID,点 ★ 星标作为默认路由。视频端点自动适配——OpenAI 风格任务接口、Seedance 原生 `content[]`、Sora 风格 `/v1/videos` 由自动降级链覆盖,分辨率/比例/首帧/参考图按厂商惯例映射,超大参考图发送前自动压缩。所有网关调用经本地 Harness 宿主进程转发(无浏览器 CORS 限制)。什么都没配?演示模式本地合成占位图与动画视频,整条流水线离线可测。
|
|
40
78
|
|
|
41
|
-
###
|
|
42
|
-
|
|
79
|
+
### 便携数据根目录
|
|
80
|
+
设置一次**数据根目录**,所有数据按**项目名**落盘:节点与设定集在 `project.json`,资产索引在 `assets.json`,媒体在 `image/ video/ audio/ text/`,Craft 后期产物在 `craft/`。**换电脑 = 复制文件夹**:新机器把数据根目录指过去,所有项目(资产、设定集、媒体)自动识别——另有**「从数据根导入」**一键合并。把目录放进网盘同步文件夹,多台机器自动保持一致。
|
|
43
81
|
|
|
44
82
|
## 快速开始
|
|
45
83
|
|
|
46
|
-
1. 安装插件(bundle
|
|
47
|
-
2.
|
|
48
|
-
3.
|
|
49
|
-
4.
|
|
50
|
-
5.
|
|
84
|
+
1. 安装插件(bundle 目录)并重启一次 Harness。
|
|
85
|
+
2. 点侧边栏 **Infinite Canvas**,在设置里配好**数据根目录**。
|
|
86
|
+
3. 对话:*「创建一个项目叫〈你的创意〉,先写世界观和设定集。」*
|
|
87
|
+
4. *「写第一集。」* → 剧本节点生成带【场N】标记的一集 → 点**铺开到场景**(或让 Agent 做),得到每场的文本+分镜表组合。
|
|
88
|
+
5. *「把所有角色、场景、道具的参考图生成了。」* → 一批命名规范、与设定集一致的资产图。
|
|
89
|
+
6. *「生成场1的视频。」* → 分镜镜头 + 参考图合成一次多镜头调用;场与场之间尾帧串联。
|
|
90
|
+
7. 打开**成片节点**导出预览版,或交给 FilmCraft 渲染正式 MP4。
|
|
51
91
|
|
|
52
|
-
> 未配置任何生成 API
|
|
92
|
+
> 未配置任何生成 API 时,全部步骤以演示模式运行——整条流水线离线可用。
|
|
93
|
+
|
|
94
|
+
完整的图文教程(含截图、模型配置与数据目录迁移)见[中文操作手册](./docs/guide.zh-CN.md)。
|
|
53
95
|
|
|
54
96
|
## 生成后端
|
|
55
97
|
|
|
56
98
|
| 类型 | 协议 | 说明 |
|
|
57
99
|
|---|---|---|
|
|
58
|
-
| 文本 | Harness LLM 服务 |
|
|
59
|
-
| 图片 | OpenAI 兼容 `/images/generations`,多参考走 `/images/edits` |
|
|
60
|
-
| 视频 |
|
|
61
|
-
| TTS | OpenAI 兼容 `/audio/speech` |
|
|
100
|
+
| 文本 | Harness LLM 服务 | 整集剧本与分镜拆解;可选任意已配置模型,或按节点覆盖 |
|
|
101
|
+
| 图片 | OpenAI 兼容 `/images/generations`,多参考走 `/images/edits` | 供应商+模型列表(星标默认);尺寸(1K/2K/4K)× 比例;扩展参数 JSON;`edits`+PNG 蒙版局部重绘 |
|
|
102
|
+
| 视频 | OpenAI 风格任务接口、Seedance 原生 `content[]`、Sora 风格 `/v1/videos`——自动降级链 | 每场一集(≤15s)、480P/720P/1080P、比例、首帧、多参考图(自动压缩)、`audios[]` 声音参考 |
|
|
103
|
+
| TTS | OpenAI 兼容 `/audio/speech` | 每镜配音混入成片 |
|
|
104
|
+
|
|
105
|
+
所有网关调用由本地 Harness 宿主进程转发(无浏览器 CORS 限制)——任何 OpenAI 风格的厂商端点都可用。
|
|
62
106
|
|
|
63
107
|
## ArtCraft 桥接
|
|
64
108
|
|
|
65
|
-
|
|
109
|
+
安装姊妹插件 [`dsh-artcraft`](../dsh-artcraft/README.md) 后,画布可与本地 **Craft 家族**(PhotoCraft、FilmCraft、EffectCraft、LightCraft、VectorCraft、DesignCraft 等 12 个)经同源 HTTP 协作。把 ArtCraft 的数据根目录指向与画布相同的位置,全部后期产物落在 `projects/<项目>/craft/`:资产按项目同步、图片支持 PhotoCraft 无头调色(单个/批量)、成片导出 FCP7 XML + SRT 交 FilmCraft 渲染 MP4。设置面板的状态卡为每个 Craft 显示一盏状态灯与 n/n 就绪摘要。
|
|
66
110
|
|
|
67
111
|
## 发布(维护者)
|
|
68
112
|
|
|
69
|
-
|
|
113
|
+
维护者手册(红线、分支模型、版本规则)见 [`RELEASING.md`](RELEASING.md);操作细节见 [`docs/release.md`](docs/release.md);已发布变更见 [`CHANGELOG.md`](CHANGELOG.md)——**GitHub Release 正文一律英文**,从 changelog 复制。
|
|
70
114
|
|
|
71
|
-
发布走 **npm Trusted Publishing**(OIDC
|
|
115
|
+
发布走 **npm Trusted Publishing**(OIDC)——任何地方都不存在 npm 令牌:
|
|
72
116
|
|
|
73
|
-
-
|
|
74
|
-
-
|
|
75
|
-
- `publish.yml` 从 release tag(或手动输入)解析版本号,发布时带 `provenance` 徽标。
|
|
117
|
+
- **发布流程**:dev 测试通过并获批准 → 合并进 `main` → 创建 GitHub Release(tag `v0.17.11`,…)→ Actions 自动发布该版本。
|
|
118
|
+
- `publish.yml` 工作流内置守卫:release 提交必须在 `main` 上、tag 必须与 `package.json` 一致,然后带 `provenance` 徽章发布。
|
|
76
119
|
|
|
77
120
|
## 数据与隐私
|
|
78
121
|
|
|
79
|
-
-
|
|
80
|
-
- AI
|
|
81
|
-
- 图片/视频/TTS
|
|
122
|
+
- 画布文档、项目与设置存于浏览器 `localStorage`(`dsh-ic:*`);资产元数据存于 IndexedDB(`dsh-infinite-canvas`);设置数据根目录后媒体文件**落盘**(按项目名分目录,插件后端带 HTTP Range 支持视频拖动)。
|
|
123
|
+
- AI 文本生成经 Harness 宿主进程(用你已配置的模型,无额外 Key)。
|
|
124
|
+
- 图片/视频/TTS 网关调用由本地 Harness 宿主进程转发(规避浏览器 CORS);你的端点与 Key 都留在本地。
|
|
82
125
|
- 插件自身不向任何第三方上传数据。
|
|
83
126
|
|
|
84
127
|
## 环境与限制
|
|
85
128
|
|
|
86
|
-
- DeepSeek Harness 0.2.0-rc.2
|
|
87
|
-
-
|
|
129
|
+
- DeepSeek Harness 0.2.0-rc.2+;演示模式成片导出需要 MediaRecorder(Chromium)。
|
|
130
|
+
- 预览成片为实时录制 WebM;多轨剪辑的 MP4 母版请配合 ArtCraft FilmCraft 或任意 NLE。
|
|
88
131
|
- 图片 `edits`/蒙版重绘需要模型支持该端点(如 gpt-image-1)。
|
|
89
|
-
-
|
|
132
|
+
- 宿主侧插件更新需重启一次 Harness;Web 半区热加载。
|
|
90
133
|
|
|
91
|
-
##
|
|
134
|
+
## 许可证
|
|
92
135
|
|
|
93
136
|
Apache-2.0
|
|
@@ -61,6 +61,19 @@ description: 用无限画布(Infinite Canvas)做短剧/视频创作时使用
|
|
|
61
61
|
用 `canvas_node_status` 验证连线与产物正确,再继续下一个。
|
|
62
62
|
12. **读不到就问**:必需的项目状态(分镜内容/镜头清单/设定集条目)读不到时,那是**应当向用户确认的缺口**,
|
|
63
63
|
不是可以自行绕过的障碍——绝不把"编一份"当作替代方案。
|
|
64
|
+
13. **分镜连贯靠连线,绝不靠名字/序号推断。** 分镜表节点**顶部**有「衔接上一镜」输入口(`prev`)、
|
|
65
|
+
**底部**有「尾镜」输出口(`tail`)。需要与上一场连贯时:
|
|
66
|
+
`canvas_connect({ projectId, fromNode: 上一分镜表id, toNode: 本分镜表id, fromPort: 'tail', toPort: 'prev' })`。
|
|
67
|
+
连上后,本场分镜**生成时**会自动把上一场尾镜的「画面 / 最后一个动作 / 台词 / 音效」作为**硬性承接约束**
|
|
68
|
+
写进提示词:第 1 镜必须从上一镜的**最后一个动作**继续、画面重叠 **≤ 0.2 秒**、**背景声连续**、
|
|
69
|
+
不得重新建立场景或跳回远景交代。**禁止**用节点名("场1/场2")、节点位置或剧本序号去猜衔接关系——
|
|
70
|
+
名字会改,只有连线是可靠依据。修复已有项目时:先补连 `tail → prev`,再重新生成对应分镜表。
|
|
71
|
+
14. **音话同步(口型)是硬要求。** 分镜里带 `dialogue` 的镜头,必须让说话角色**在画面内开口说话**:
|
|
72
|
+
近景/中近景、脸部朝向可见(正面或 3/4 侧脸),**禁止**背对镜头、脸部被遮挡、人物出画;
|
|
73
|
+
`visual` 或 `motion` 里要写明「开口说话、口型清晰可见」。
|
|
74
|
+
台词**绝不能**处理成画外音/旁白——成片里人嘴闭着、声音飘在背景,就是这个错误。
|
|
75
|
+
视频提示词会自动带上该约束(画面内开口、口型与台词同步);发现分镜把有台词的镜头写成背影/空镜,
|
|
76
|
+
必须重新生成该分镜。
|
|
64
77
|
|
|
65
78
|
## 二、标准工作流(对话填提示词+连线+触发,生成由节点完成)
|
|
66
79
|
|
|
@@ -82,6 +95,11 @@ description: 用无限画布(Infinite Canvas)做短剧/视频创作时使用
|
|
|
82
95
|
`canvas_write_node({ projectId, nodeId: 文本节点id, target: 'output', text: 该场原文 })` +
|
|
83
96
|
`canvas_create_node({ projectId, type: 'storyboard', name: '第X节-场Y分镜表', connectFrom: 该场文本节点id })`;
|
|
84
97
|
- **【铁律】每个分镜表的源端 = 对应场景文本(连线取)**;整集剧本节点**绝不**直接连分镜表(体量超限,见硬约束 9)。
|
|
98
|
+
- **连贯连线(要连贯就必须连,见硬约束 13)**:把**上一场分镜表的 `tail` 输出口**连到**本场分镜表的 `prev` 输入口**:
|
|
99
|
+
`canvas_connect({ projectId, fromNode: 上一场分镜表id, toNode: 本场分镜表id, fromPort: 'tail', toPort: 'prev' })`。
|
|
100
|
+
逐场依次串联(场1→场2→场3…),**连好之后再生成该场分镜**——连上后生成的分镜第 1 镜会承接上一场尾镜
|
|
101
|
+
(从上一镜最后一个动作续、重叠 ≤0.2s、背景声连续)。已有分镜是"旧约束"产物时,补连后
|
|
102
|
+
**重新 `canvas_run_node` 该分镜表**即可修正(重生成分镜不花钱,只有视频花钱)。
|
|
85
103
|
4. **逐场生成视频(多镜头一次生成)**:
|
|
86
104
|
- `canvas_run_node({ 分镜表 })` → `canvas_node_status` 读 `shots`(镜头清单以此为准,绝不编造镜头表);
|
|
87
105
|
- `canvas_create_node({ projectId, type: 'video-gen', name: '第X节-场Y视频', connectFrom: 分镜表节点id, duration: 各镜时长之和 })`
|
|
@@ -92,13 +110,19 @@ description: 用无限画布(Infinite Canvas)做短剧/视频创作时使用
|
|
|
92
110
|
一旦发现自己在批量创建"第X节-场Y-镜Z"这类镜头图片/视频节点 = 走错路,**立即停止**并回到本条。
|
|
93
111
|
- 参考图:把角色/场景/道具参考图资产连到视频生成节点的 `ref` 端口(`canvas_connect`);
|
|
94
112
|
提示词里的 `@引用` 命中的资产也会自动挂上
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
113
|
+
- **【跨段连贯:分镜承接 + 尾帧 → 首帧】**连贯分两层,先文本后画面:
|
|
114
|
+
**①分镜承接(文本层,先做)**:上一分镜表 `tail` → 本分镜表 `prev`(见硬约束 13 / 工作流第 3 步),
|
|
115
|
+
让分镜第 1 镜从上一场尾镜的最后一个动作继续、重叠 ≤0.2s、背景声连续;
|
|
116
|
+
**②画面承接(视频层,后做)**:每个视频节点生成完成后会**自动提取尾帧**并挂到 `last` 输出端口。
|
|
117
|
+
多场视频按顺序串联:上一视频节点的 `last` 端口 → 下一视频节点的 `frame` 端口
|
|
118
|
+
(`canvas_connect({ projectId, fromNode: 上一段, toNode: 下一段, fromPort: 'last', toPort: 'frame' })`)。
|
|
119
|
+
第一段的 `frame` 用开场定帧图(若生成了首帧关键图)或留空。
|
|
120
|
+
**【衔接模式】**下一段视频节点若有 frame 连线,节点上有「衔接」下拉三选一:
|
|
121
|
+
**参考图融合**(默认:尾帧降级为第 1 张参考图,保留实体参考图,衔接为软约束)、
|
|
122
|
+
**硬首帧(弃参考图)**(用真首帧参数,画面绝对承接——网关禁止首帧与参考图混用)、
|
|
123
|
+
**忽略首帧**。需要画面严格承接选「硬首帧」,新实体参考图占主导选「参考图融合」。
|
|
124
|
+
**按顺序触发**:上一段 `canvas_node_status` 为 done 后再连线、再触发下一段
|
|
125
|
+
(连线可以提前建好——frame 在下一段真正运行时才解析)。
|
|
102
126
|
- **【声音一致(可选)】**视频接口配置里的「生成同步音频」勾选后才发送 `generate_audio:true`——
|
|
103
127
|
模型生成**自带音轨**的视频(对白/环境声与画面同步);不勾 = 无声视频(声音另行 TTS 配音)。
|
|
104
128
|
要让同一角色**跨视频保持音色**:用视频/成片节点的「提取声音参考」按钮——
|