🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

无限画布 NINKCH/dsh-infinite_canvas

DeepSeek Harnessv0.17.4
NINKCH5 天前有提交已提供中文文档扫描:含敏感能力

在 DeepSeek Harness 里搭一个节点式短剧工作室。从一句话点子出发,直接在无限画布上拿到分镜、配音、字幕齐全的成片。

32.9/100
综合分
4
GitHub 星标
2,864
npm 周下载
—/5
用户评分

数据截至 2026/10/29 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add @ninkch/dsh-infinite-canvas
npm 源 · @ninkch/dsh-infinite-canvas 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · other
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功(非静态推断);本次验证针对插件 v0.19.6,当前版本为 v0.17.4
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 5 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包@ninkch/dsh-infinite-canvas @ 0.17.4
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/12 08:17:55

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 149 处,展示前 39 条)
  • 读取本地文件
    index.js:27
    VERSION = JSON.parse(readFileSync(path.join(HERE, 'package.json'), 'utf8')).version || VERSION;
  • 读取本地文件
    index.js:46
    if (existsSync(path.join(HERE, '.git'))) return null;
  • 读取本地文件
    index.js:51
    const m = JSON.parse(readFileSync(path.join(dir, 'package.json'), 'utf8'));
  • 读取本地文件
    index.js:66
    for (const entry of readdirSync(runtimes)) {
  • 读取本地文件
    index.js:71
    try { if (existsSync(c)) return { kind: 'script', node: process.execPath, script: c }; } catch { }
  • 读取本地文件
    index.js:73
    try { if (existsSync('C:\\Program Files\\nodejs\\pnpm.cmd')) return { kind: 'path', command: 'pnpm' }; } catch { }
  • 执行外部命令来自配置/变量
    index.js:96
    ? spawn(pnpm.node, args, { cwd: PROFILE_DIR, windowsHide: true, env: { ...process.env, ELECTRON_RUN_AS_NODE: '1' } })
  • 执行外部命令来自配置/变量
    index.js:97
    : spawn(pnpm.command, args, { cwd: PROFILE_DIR, windowsHide: true, shell: process.platform === 'win32' });
  • 删除本地文件
    index.js:139
    try { unlinkSync(target); } catch { }
  • 删除本地文件
    index.js:145
    try { rmdirSync(target); } catch { }
  • 写入本地文件
    index.js:152
    mkdirSync(path.dirname(CONFIG_PATH), { recursive: true });
  • 写入本地文件
    index.js:153
    writeFileSync(CONFIG_PATH, JSON.stringify(cfg, null, 2) + '\n', 'utf8');
  • 写入本地文件
    index.js:190
    mkdirSync(path.dirname(f), { recursive: true });
  • 写入本地文件
    index.js:193
    writeFileSync(tmp, JSON.stringify(meta, null, 1), 'utf8');
  • 写入本地文件
    index.js:194
    renameSync(tmp, f);
  • 写入本地文件
    index.js:238
    mkdirSync(root, { recursive: true });
  • 删除本地文件
    index.js:424
    if (existsSync(abs)) unlinkSync(abs);
  • 删除本地文件
    index.js:442
    unlinkSync(abs);
  • 删除本地文件
    index.js:445
    try { unlinkSync(abs + suffix); } catch { }
  • 删除本地文件
    index.js:790
    if (existsSync(abs)) { unlinkSync(abs); result.files++; }
  • 执行外部命令固定命令
    index.js:1056
    collect(spawn('powershell.exe', ['-NoProfile', '-STA', '-ExecutionPolicy', 'Bypass', '-WindowStyle', 'Hidden', '-Command', script], { windowsHide: tru
  • 执行外部命令固定命令
    index.js:1058
    collect(spawn('osascript', ['-e', 'POSIX path of (choose folder with prompt "选择数据根目录")'], { windowsHide: true }));
  • 执行外部命令固定命令
    index.js:1060
    collect(spawn('zenity', ['--file-selection', '--directory', '--title=选择数据根目录'], { windowsHide: true }));
  • 发起网络请求
    index.js:1426
    const upstream = await fetch(url, {
  • 发起网络请求
    index.js:2739
    const res = await fetch(base + NPM_LATEST_PATH, {
  • 发起网络请求
    index.js:2757
    const res = await fetch(NPM_REGISTRIES[kind] + NPM_LATEST_PATH, { headers: { accept: 'application/json' }, signal: AbortSignal.timeout(3000) });
  • 执行外部命令来自配置/变量
    index.js:3226
    const child = spawn(open, [root], { detached: true, stdio: 'ignore' });
  • 发起网络请求
    client.js:5190
    const r = await fetch(url);
  • 发起网络请求
    client.js:5220
    const r = await fetch('/' + NS + '/api/asset?rel=' + encodeURIComponent(rel), { method: 'POST', body: blob });
  • 发起网络请求
    client.js:5299
    const r = await fetch('/' + NS + '/api/asset?rel=' + encodeURIComponent(rel), { method: 'POST', body: rec.blob });
  • 发起网络请求
    client.js:5373
    const r = await fetch(url, { method: 'HEAD' });
  • 发起网络请求
    client.js:5445
    const r = await fetch('/' + NS + '/api/poster?rel=' + encodeURIComponent(rec.rel), {
  • 发起网络请求
    client.js:5514
    try { const r = await fetch(url, { method: 'HEAD', cache: 'no-store' }); return !!(r && r.ok); } catch { return false; }
  • 写入剪贴板
    client.js:13673
    try { await navigator.clipboard.writeText(storyboardAssetText(shots)); toast(T('copiedOk')); }
  • 写入剪贴板
    client.js:17589
    h('button', { type: 'button', className: 'dshic-dir-mini', 'data-action': 'dir-spec-copy', onClick: () => { try { const txt = JSON.stringify(ENG.compi
  • 写入剪贴板
    client.js:20661
    if (navigator.clipboard && navigator.clipboard.writeText) { navigator.clipboard.writeText(text).then(() => toast(okMsg)).catch(() => toast(text)); ret
  • 读取本地文件
    skill-pack-loader.js:43
    try { st = statSync(abs); } catch { return null; }
  • 读取本地文件
    skill-pack-loader.js:46
    const data = readFileSync(abs, 'utf8');
  • 读取本地文件
    skill-pack-loader.js:58
    if (!existsSync(abs)) throw new Error('缺少 pack.js:' + abs);
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 一句话生成短剧成片
  • 节点式画布创作
  • 分镜配音字幕齐全
v0.19.202026-11-02
· 重点更新 · 素材面板严格按项目隔离。通用项目的素材不再混进每个项目的视图——范围过滤更严格,「通用项目」和「全部」是查看共享素材的明确入口。搜索框(内嵌放大镜)和项目选择器现在共用一行(搜索约占 2/3,选择器约占 1/3),文本素材(剧本/分镜)也获得和媒体卡片一样的项目下拉菜单。 · 画布节点直接采用素材名称。不再有 图片1/视频2/文本1——单条添加和批量添加都按素材命名节点。多余的「图片」素材分类已移除(角色/道具/场景本身就是图片;其余都归入通用,旧版带图片标签的素材在读取时自动归一)。 · 统一导入支持文本。一个导入按钮按文件类型分流:图片/视频照旧,另外 .txt/.md 文件作为剧本文本素材导入(以文件名命名)——百章小说一次导入,再批量放到画布上作为分镜来源。 · 题材卡 v3:选项菜单式机制库,不强制故事走向。全部 37 张题材卡重建,故事机制(冲突、角色、回报钩子、节奏)都是选项菜单——每个库 3 个以上可选方向,可组合、可调整、可跳过。剧本切片开头现在写明原则(条目是可组合的部件;事件和走向属于剧本)和素材优先级(已有小说/剧本文本和设定集优先于题材库;风格和镜头始终生效)。新增山海神话题材卡,附带异兽图志/法术能力/神器地理素材库(只供素材表使用,剧本/分镜永不读取)和七族特效词库。回归门禁禁止所有卡片再出现旧的单方向模板段落和措辞。 完整更新日志:
v0.19.192026-11-01
· 亮点 · Sanbao 图片任务改为异步,可查询。发往 sanbaobeauty.com 的图片请求自动走 POST /openapi/v1/images(任务 id 存在节点上,轮询后再下载,带瞬时重试窗口)。原来兼容 OpenAI 的同步接口在代理处 504,又没有任务 id,图和费用一起丢。本地参考图通过 /openapi/v1/uploads/raw 上传,用扩展参数 uploadKey;也可以显式选「Sanbao 图片任务」模式。通用的兼容 OpenAI 图片提交在 502/503/504/429/408 上多一次瞬时重试。 · FX 驱动分镜契约(fx_motion)。奇幻题材和风格现在解锁专用镜头契约:动感可由特效承载,身体保持不动;FX 镜头用画面状态节拍替代强制的身体节拍;一份奇幻 VFX 词表;每个角色的 FX 签名逐字引用;速度铁律(瞬时事件是跨剪辑的状态差异,绝不在镜头内做动画);以及关键帧优先的提示。开关落在奇幻 / 仙侠修真 / 武侠 / 小镇怪谈题材、四种奇幻风格,以及新的山海神话题材卡(七族 FX 词表)。写实项目不受影响。 · state_jump 镜头和真正的容量检查。同构图状态跳变(灯笼一闪揭示、影子已在那里)现在是合法剪辑,配专用提示词和精确负面词。分镜容量警告按真实镜头数(100)判断,不再按剧本长度,之前每个细节丰富的场景都会误报。 · 每个视频只留一帧尾帧。两条不协调的流水线可能各自为同一视频保存一份「尾帧」素材,一次生成就产出三份尾帧。现在生成路径独占抽取(tailPending 锁),只存一帧(最佳帧或最后一帧),两个链式端口都指向它。 完整更新日志:
v0.19.182026-11-01
· 重点更新 · Sanbao 下载现在会在 CDN 缓存预热期间重试。任务成功只代表转码完成;文件分发过程中,首次 GET 可能返回 HTTP 502,持续 2-3 分钟(最坏约 5 分钟)。下载现在会在 10 分钟窗口内每 10 秒重试一次,每次尝试前先从任务状态刷新签名 URL。401/400 仍立即失败,窗口超时会报告任务 id,方便找回结果。 · 素材预览刷新后不再丢失,也能重新同步到主机。历史清理不再抹掉 assetId(存储层加了保护,清理改为非破坏性),孤立节点每次启动都会重新关联(主流程 2 秒、兜底 10 秒,带 [IC] asset-relink 诊断),主机同步也不再拿 null 覆盖修好的指针。 · 素材页:工具栏合并为一行,分页器支持跳页。全量同步、导入、选择本页、批量添加/删除/清空和分页现在共用项目选择器下方那一行。按钮改为描边样式(透明背景、1px 边框,删除用红色描边)。分页用页码输入框,回车或失焦跳转,非法文本忽略,越界值收敛到范围内,总数显示在右侧。 · 素材支持多选,可批量添加到画布、批量删除。批量添加通过 layoutBatchColumns 把节点放在最右侧节点右边(每列最多 5 个,零重叠),音频会跳过并提示数量;批量删除复用单个素材的删除路径,只弹一次确认。 完整更新日志:
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
无限画布(DeepSeek Harness 版) DeepSeek Harness 内的节点式短剧工作室。 从一句话创意出发,在无限画布上完成剧本、分镜、角色资产、画面生成、视频生成,直到带转场、字幕、配音的成片。 这是什么? 无限画布是一个 DeepSeek Harness 插件:它在 Web 界面侧边栏加入一个完整的创作工作室。你像导演一样工作——无限画布上的节点连成流水线:剧本、分镜、角色与场景资产、图片生成、视频生成,最终在成片节点完成转场、字幕与配音。 全部本地运行于你的 Harness。生成后端自带或自配均可;未配置任何 API 时有内置演示模式,整条流水线离线可学可测。 用对话驱动画布 画布与对话共享同一个"大脑"。每个节点都是一个 AI 工位,而对话侧就是导演:用自然语言下指令,Agent 替你操作画布工具——批量工作尤其如此。 「创建一个叫《时空邮递员》的项目,先写世界观和设定集。」 「根据设定集写第一集。」→ 剧本节点生成一整集(60–120 秒),每个场景带【场N】分场标记。 「把第一集铺开到场景。」→ 每场一个文本节点 + 分镜表节点自动出现并连线。 「把所有角色、场景、道具的参考图都生成了。」→ 十个图片节点一次建好、逐个生成。 「生成场1的视频。」→ 分镜镜头 + 参考图合成一次多镜头视频调用。
展开完整文档(README 剩余 1 节)
无限画布(DeepSeek Harness 版)

DeepSeek Harness 内的节点式短剧工作室。 从一句话创意出发,在无限画布上完成剧本、分镜、角色资产、画面生成、视频生成,直到带转场、字幕、配音的成片。

这是什么?

无限画布是一个 DeepSeek Harness 插件:它在 Web 界面侧边栏加入一个完整的创作工作室。你像导演一样工作——无限画布上的节点连成流水线:剧本、分镜、角色与场景资产、图片生成、视频生成,最终在成片节点完成转场、字幕与配音。

全部本地运行于你的 Harness。生成后端自带或自配均可;未配置任何 API 时有内置演示模式,整条流水线离线可学可测。

用对话驱动画布

画布与对话共享同一个"大脑"。每个节点都是一个 AI 工位,而对话侧就是导演:用自然语言下指令,Agent 替你操作画布工具——批量工作尤其如此。

「创建一个叫《时空邮递员》的项目,先写世界观和设定集。」
「根据设定集写第一集。」→ 剧本节点生成一整集(60–120 秒),每个场景带【场N】分场标记。
「把第一集铺开到场景。」→ 每场一个文本节点 + 分镜表节点自动出现并连线。
「把所有角色、场景、道具的参考图都生成了。」→ 十个图片节点一次建好、逐个生成。
「生成场1的视频。」→ 分镜镜头 + 参考图合成一次多镜头视频调用。
「把第一集交给 FilmCraft 渲染 MP4。」→ FCP7 XML + SRT 落盘,Craft 套件接手。

设定集、整集剧本、分镜拆解、成批参考图——这些批量工作正是 Agent 最快的部分。跑完后你只需要在画布上精修真正在意的那 20%:改提示词、调参考图顺序、重掷某一个镜头、从历史里回退旧结果。

案例:门缝里的字条

用上面的流程完整制作的一集。整集铺开后的画布全览——左侧一列图标添加节点,右侧「项目」面板管理当前项目的画布(第1集 / 第2集),资产与设定集在项目内共享:

画布全览(中文界面)

场1 的镜头组——场1分镜表 → 角色/场景多视图 → 场1视频,节点之间用连线表达参考关系:

场1 分镜与参考图

节点 + 生成面板:点击节点内容区弹出面板,参考图在顶部缩略图条里可拖拽排序,模型/比例/清晰度/张数一行排开:

节点与生成面板

设定集弹窗——世界观、风格基调、角色/场景/道具条目,每条都可以绑定参考资产:

设定集弹窗

资产弹窗——卡片网格,搜索/分类/项目筛选,视频以首帧作为缩略图:

资产弹窗

左上角项目名点开是项目下拉:每行显示「项目名 · 画布名」,可直接就地改名,超过 5 个项目自动分页并可跳页:

项目下拉

设置页签——数据根目录、Craft 状态、技能增强(通用专家)、文本模型与图片/视频/TTS 供应商:

设置页签

快捷键与操作:

快捷键与操作

帮助与反馈:

帮助与反馈

在对话旁边工作

画布不是必须切过去的另一个窗口——它可以作为 Harness 右侧面板里的一个页签打开,左边对话、右边分镜,同时进行:在对话里提要求,右边节点实时跟着变。

1. 打开右侧面板(开始),点击 无限画布 卡片。
2. 画布以页签形式出现在对话右侧,与全屏面板共享同一批项目、节点与资产。
3. 需要更大空间时,把右栏拖宽,或用右栏的全屏按钮。

无限画布作为右侧面板页签

同一时刻只有一个画布实例(共享节点图与生成状态):在右栏打开时若全屏面板也开着,画布会被移动到右栏而不是复制一份——另一侧显示「把画布切换到这里」按钮。

3D 导演台(预演)

同一项目里内置的摆位与预演工作台:把真实 glTF 角色与场景陈设摆进场景,用真实机位取景,再把结果作为图片或视频节点导回画布。

- 内置「媒体创作」预设模式:导演第一视角的引导式创作(选透镜 → 定题材/规格/影调 → 一句话故事 → 分镜 → 生成 → ArtCraft 后期),随插件安装、在模式选择器直接可选;附带的导演工作坊技能一次只问一个问题,带新手走完全程。
- 三种模式:静态预演(影棚外观、暂停摆位)、动态预演(影棚外观 + 时间轴播放)、实时渲染(成片外观:日光、阴影、材质,无辅助线)。
- 资产库:人物、树木、家具、建筑、几何体,以及古街陈设(坡屋顶、摊位、石阶),一个搜索栏全覆盖。
- 直接操作:局部轴移动/旋转/缩放操作轴、框选、Alt + 拖轴端方块 = 等比缩放、W/A/S/D + Q/E 键盘漫游(按住 Shift 加速 4 倍)。
- 分镜与时间轴:分镜轨、单镜起止、机位关键帧、缓动曲线、标记、循环播放。
- 机位与光学:FOV、焦段、传感器尺寸、滚筒角联动一致;景别预设直接显示当前构图占比。
- 导出:PNG 截图或 MP4/WebM 预演视频,直接落成画布上的图片/视频节点。

静态预演——影棚视口、对象属性与快捷键列表

动态预演——时间轴、分镜轨与机位关键帧

实时渲染——日光、真实阴影与太阳参数

资产与画布共享:你已经生成的角色、树木、家具、建筑,可以直接拿来当预演场景的摆件。

完整操作(资产页签、操作轴、快捷键表、分镜、导出):操作手册 → 3D 导演台。

技能页:导演 / 题材 / 规格 / 影调

右栏第三个页签「技能」决定整部片怎么拍。它不是提示词模板,而是会被自动拼进每一次剧本、分镜、图片、视频生成的硬约束。页面里没有任何下拉框,全部是图标瓦片,点一下选中、再点一下取消。

四层各管什么

| 层 | 数量 | 决定 | 为什么单独一层 |
| 导演 | 45 | 镜头语言、灯光色彩、剪辑节奏、风格参数 | 它同时约束分镜的机位字段、图片关键帧、视频运镜——整部片最不可替换的决策 |
| 题材 | 叙事 36 / 行业 10 | 压力机制、观众回报、场面颗粒、集尾钩子 | 同一个「复仇打脸」,王家卫拍是抽帧暧昧,徐克拍是凌厉升格;混进导演层会互相污染 |
| 规格 | 8 | 结构块、平均镜长下限、节奏、质量档 | 它决定「这是短剧、电影质感还是商业片」,与题材正交 |
| 影调 | 9 | 成像底层、材质、渲染质感 | 2D 厚涂 / 国漫 3D / 游戏 CG 是成像域,不是导演;塞进导演会让「怎么剪」和「长什么样」打架 |

导演(45 位):华语 16(王家卫、张艺谋、侯孝贤、毕赣、徐克、路阳、袁和平、乌尔善、李安、杨德昌、贾樟柯、姜文、杜琪峰、宁浩、周星驰、王晶)· 日韩 7(黑泽明、朴赞郁、奉俊昊、是枝裕和、李沧东、宫崎骏、新海诚)· 欧美 22(斯皮尔伯格、希区柯克、库布里克、斯科塞斯、费里尼、伯格曼、塔可夫斯基、诺兰、维伦纽瓦、芬奇、雷弗恩、马力克、迈克尔·曼、科恩兄弟、雷德利·斯科特、大卫·林奇、阿方索·卡隆、伊纳里图、韦斯·安德森、乔治·米勒、阿莫多瓦、盖·里奇)。

规格(8 种):短剧 · 电影质感 · 商业片 · 纪实 · 音乐视频 · 预告 · 解说 · 访谈。

- 短剧是单集 60–180 秒的自足单元,同时覆盖单集与连续多集——一部剧就是一集一集往下做,不需要单独的「连续剧」规格。
- 电影质感是质感规格,不是长片规格:它约束每一镜怎么做才像电影(ASL 1.5 秒以上、24 帧、动机光、真材质),成片长度档只到 30–300 秒。原因很实际——AI 视频模型单次只出 3–8 秒(本插件默认 5 秒),所谓「一部 120 分钟的电影」只能是几百上千个片段接起来。
- 商业片把「宣传片 / 广告片 / 产品片」合成一张卡——它们是相近需求,靠段位配比内部分流。

画幅不在技能里决定

横屏、竖屏、方屏、宽银幕都能用任何规格——画幅与分辨率是视频节点生成时的选项。短剧竖屏投放很常见,但那是发行选择,不是创作规格;短剧同样可以横屏、可以按电影标准拍。

注入到哪

| 节点 / 能力 | 拿到的内容 |
| 剧本节点 | 题材卡 + 导演的叙事/节奏/表演节 + 规格的结构块 |
| 分镜表节点 | 导演的镜头语言/灯光/风格参数/拍摄清单 + 规格 + 运镜词典 |
| 图片节点 | 「风格增强锁」:风格参数 + 影调成像材质 + 题材颗粒 + 三份负向词 |
| 视频节点 | 同上(有上游分镜表时也追加,不打断结构化字段) |
| 角色/场景/道具设定图 | 导演的灯光色彩 + 影调卡 |
| 设定集 AI 草稿 | 同剧本 |

四层全空时什么都不注入——老项目行为完全不变。

三个按钮

- 预览:显示当前配置注入到剧本的切片全文与字节数
- 写设定集:把风格摘要写进设定集的「风格基调」,对话侧也能读到
- 清空:四层归零,生成行为回到默认

对话侧同样生效

配置存在项目文档里(与设定集同一套同步机制),所以对话侧读得到、面板上也看得到。在对话里说「用王家卫的风格拍这段」,Agent 会调 canvas_list_skills 看有哪些技能、再调 canvas_skill_pack 取对应切片——和画布自生成用的是同一套口径。

完整说明见 操作手册 → 技能页。

工作方式

flowchart LR
A[剧本节点一集 · 场景标记] --> B[铺开到场景每场 文本+分镜表]
B --> C[每场多镜头视频镜头+参考图一次生成]
C --> D[尾帧串联场N尾帧 → 场N+1首帧]
A --> E[参考图生成角色 · 场景 · 道具]
E --> C
D --> F[成片 / FilmCraft转场 · 字幕 · 配音]

核心亮点

角色一致,跨镜跨集

项目级设定集(风格基调 + 角色/场景/道具卡)注入每一次 AI 调用,服装、场景、道具跨镜跨集保持一致。提示词里的 @名称 自动携带该实体的设定描述与参考资产。每次分镜生成后一致性检查会标出未登记实体,Agent 自动补全。

参考图真正绑定

参考图以有序、可见的列表连线([图1] 角色:陈拾、[图2] 场景:褶皱巷),这个顺序就是到达模型的顺序。多角色画面不再含糊;Volcano Seedance 的原生 [图N] 约定端到端支持(首帧、最多 4 张参考图、官方任务 API)。

从分镜到可看成片

一个分镜表 = 一次多镜头视频生成。 全部镜头(顺序 + 每镜时长)合成一条提示词,视频模型一次调用渲染整段——硬切由模型完成,没有逐镜拼接的接缝。每场 ≤ 15 秒,多场之间用尾帧 → 首帧串联。成片节点按顺序拼接片段——交叉溶解或黑场转场、烧录字幕、原声与 TTS 配音混音——即时导出预览版;接 ArtCraft(FilmCraft)则写出 FCP7 XML 时间线 + SRT 渲染真正的 MP4。

编辑器级画布

平移缩放、框选、对齐参考线、可折叠分组、小地图、60 步撤销重做、节点媒体历史(最近 8 次)、蒙版局部重绘、全要素中键——画布应该像剪辑软件,不像聊天侧栏。

模型自带或自配

文本模型直接来自 Harness(无额外 Key)。图片/视频后端采用供应商 + 模型两级结构:供应商配一次(地址、Key、可选的厂商专属扩展参数 JSON),下面挂任意多个模型 ID,点 ★ 星标作为默认路由。视频端点自动适配——OpenAI 风格任务接口、Seedance 原生 content[]、Sora 风格 /v1/videos 由自动降级链覆盖,分辨率/比例/首帧/参考图按厂商惯例映射,超大参考图发送前自动压缩。所有网关调用经本地 Harness 宿主进程转发(无浏览器 CORS 限制)。什么都没配?演示模式本地合成占位图与动画视频,整条流水线离线可测。

便携数据根目录

设置一次数据根目录,所有数据按项目名落盘:节点与设定集在 project.json,资产索引在 assets.json,媒体在 image/ video/ audio/ text/,Craft 后期产物在 craft/。换电脑 = 复制文件夹:新机器把数据根目录指过去,所有项目(资产、设定集、媒体)自动识别——另有「从数据根导入」一键合并。把目录放进网盘同步文件夹,多台机器自动保持一致。

快速开始

1. 安装插件(bundle 目录)并重启一次 Harness。
2. 点侧边栏 Infinite Canvas,在设置里配好数据根目录。
3. 对话:「创建一个项目叫〈你的创意〉,先写世界观和设定集。」
4. 「写第一集。」 → 剧本节点生成带【场N】标记的一集 → 点铺开到场景(或让 Agent 做),得到每场的文本+分镜表组合。
5. 「把所有角色、场景、道具的参考图生成了。」 → 一批命名规范、与设定集一致的资产图。
6. 「生成场1的视频。」 → 分镜镜头 + 参考图合成一次多镜头调用;场与场之间尾帧串联。
7. 打开成片节点导出预览版,或交给 FilmCraft 渲染正式 MP4。

未配置任何生成 API 时,全部步骤以演示模式运行——整条流水线离线可用。

完整的图文教程(含截图、模型配置与数据目录迁移)见中文操作手册。

生成后端

| 类型 | 协议 | 说明 |
| 文本 | Harness LLM 服务 | 整集剧本与分镜拆解;可选任意已配置模型,或按节点覆盖 |
| 图片 | OpenAI 兼容 /images/generations,多参考走 /images/edits | 供应商+模型列表(星标默认);尺寸(1K/2K/4K)× 比例;扩展参数 JSON;edits+PNG 蒙版局部重绘 |
| 视频 | OpenAI 风格任务接口、Seedance 原生 content[]、Sora 风格 /v1/videos——自动降级链 | 每场一集(≤15s)、480P/720P/1080P、比例、首帧、多参考图(自动压缩)、audios[] 声音参考 |
| TTS | OpenAI 兼容 /audio/speech | 每镜配音混入成片 |

所有网关调用由本地 Harness 宿主进程转发(无浏览器 CORS 限制)——任何 OpenAI 风格的厂商端点都可用。

ArtCraft 桥接

安装姊妹插件 dsh-artcraft 后,画布可与本地 Craft 家族(PhotoCraft、FilmCraft、EffectCraft、LightCraft、VectorCraft、DesignCraft 等 12 个)经同源 HTTP 协作。把 ArtCraft 的数据根目录指向与画布相同的位置,全部后期产物落在 projects/<项目>/craft/:资产按项目同步、图片支持 PhotoCraft 无头调色(单个/批量)、成片导出 FCP7 XML + SRT 交 FilmCraft 渲染 MP4。设置面板的状态卡为每个 Craft 显示一盏状态灯与 n/n 就绪摘要。

发布(维护者)

维护者手册(红线、分支模型、版本规则)见 RELEASING.md;操作细节见 docs/release.md;已发布变更见 CHANGELOG.md——GitHub Release 正文一律英文,从 changelog 复制。

发布走 npm Trusted Publishing(OIDC)——任何地方都不存在 npm 令牌:

- 发布流程:dev 测试通过并获批准 → 合并进 main → 创建 GitHub Release(tag v0.17.11,…)→ Actions 自动发布该版本。
- publish.yml 工作流内置守卫:release 提交必须在 main 上、tag 必须与 package.json 一致,然后带 provenance 徽章发布。

数据与隐私

- 画布文档、项目与设置存于浏览器 localStorage(dsh-ic:*);资产元数据存于 IndexedDB(dsh-infinite-canvas);设置数据根目录后媒体文件落盘(按项目名分目录,插件后端带 HTTP Range 支持视频拖动)。
- AI 文本生成经 Harness 宿主进程(用你已配置的模型,无额外 Key)。
- 图片/视频/TTS 网关调用由本地 Harness 宿主进程转发(规避浏览器 CORS);你的端点与 Key 都留在本地。
- 插件自身不向任何第三方上传数据。

环境与限制

- DeepSeek Harness 0.2.0-rc.2+;演示模式成片导出需要 MediaRecorder(Chromium)。
- 预览成片为实时录制 WebM;多轨剪辑的 MP4 母版请配合 ArtCraft FilmCraft 或任意 NLE。
- 图片 edits/蒙版重绘需要模型支持该端点(如 gpt-image-1)。
- 宿主侧插件更新需重启一次 Harness;Web 半区热加载。

许可证

Apache-2.0
预览分享卡片长什么样 ↓NINKCH/dsh-infinite_canvas
分享 · DeepSeek Harness Hub
NINKCH/dsh-infinite_canvas

在 DeepSeek Harness 里搭一个节点式短剧工作室。从一句话点子出发,直接在无限画布上拿到分镜、配音、字幕齐全的成片。

这是你的仓库?认领条目

回到顶部