dsh-brewreel

skillinstall failsnpmApache-2.0

Makes 1080x1920 vertical promo videos from a storyboard JSON with 7 tools (doctor, setup, catalog, guide, validate, render, verify), rendered locally with Remotion.

下载量 / Downloads
1,384
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

Install

dsh plugin --profile web add dsh-brewreel

Sandbox test results

StageResult
1 install✗
2 list—
3 mount—
4 boot—
First error
dsh: initialized profile web at /home/node/.dsh/profiles/web

Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).

README

精酿 · BrewReel — DeepSeek Harness 插件

中文 | [English](README.en.md)

用 DeepSeek 模型写一份分镜 JSON,一次工具调用出一支竖版宣传片(1080x1920,15–45 秒)。

作者:柳伟杰 / Liu Weijie(Finderchangchang) · 许可证:Apache-2.0 · 主仓库:<https://github.com/Finderchangchang/brewreel>

插件包名 dsh-brewreel,0.2.0 起随项目改名(原名 dsh-distill-video,项目原名 promo-video-skill / 蒸馏视频);从旧版升级见[「从 dsh-distill-video 升级」](#从-dsh-distill-video-升级)。

它做什么,不做什么

  • 做:模型只写 storyboard.json(挑镜头、填文字);画面由现成的 Remotion 镜头组件渲染;校验脚本拦下违反规则和《广告法》/行业合规的写法;一次调用完成校验 → 自查 → 配乐 → 渲染 → 版式检查 → 交付清单。同一份 skill 还带两件:口播配画面(有 talk.mp4 时只写 broll.json,跑 scripts/talk.mjs);风格工厂(一句话描述画面风格,读 docs/style-factory.md,跑 scripts/broll/new-style.mjs)。
  • 不做:生成任意视频;替用户判断合规灰区(「需人工复核」条目原样交给用户)。
  • 这是「7 个工具 + 一份 skill 说明」的插件:skill 教模型怎么写分镜,工具负责校验、出片、核对,并管住输出路径、子进程和环境变量。

效果示例

见主仓库 README 里的截图和示例视频。本 README 不放图片;插件包里的 skill 快照会带上主仓库 docs/images/ 的预览图(约 3.5 MB),风格文档里的图片链接指向它们。

环境要求

项 · 要求

Node.js · 22.19 及以上的 22.x,或 24 及以上(和 dsh 本身的要求一致)

DeepSeek Harness · @deepseek-ai/dsh 0.1.7-rc.2 及以上的 0.1.x(0.1.7-rc.2 实测通过)

pnpm · dsh plugin 靠 pnpm 装插件,pnpm 要在 PATH 上

Python(可选) · 3.10+,带 numpy、scipy;缺了配乐静音,不影响出片

磁盘 · 约 1 GB(渲染依赖 + Chrome Headless Shell)

网络 · 首次初始化要从 npm 和 Google 下载依赖

安装

还没装 dsh 的话先装它和 pnpm(dsh plugin 会把参数转给 pnpm):

npm install -g @deepseek-ai/dsh@0.1.7-rc.2 pnpm

版本号要写上:npm 上 dsh 的 latest 和 next 现在都已经是 0.2.0-rc.2,本插件还没在 0.2 上测过,目前只声明支持 0.1.x(0.1.7-rc.2 起),请按上面的命令装 0.1.7-rc.2。已经装过 dsh 的,先用 dsh --version 看一下版本。

下面的命令都以 web profile 为例,换成你自己的 profile 名也行。第一次 dsh plugin --profile web … 会自动建好这个 profile。装完用 dsh web 启动;如果 profile 已经在运行,要重启(dsh 的 bundle 变更在下次启动时生效)。

A. 本地 clone 链接安装(最稳,国内网络友好)

git clone https://github.com/Finderchangchang/brewreel.git
dsh plugin --profile web add ./brewreel/integrations/deepseek-harness

在 clone 的上一级目录执行第二条命令(相对路径按当前目录解析)。插件会直接使用这份 clone 里的 skill(checkout 模式):渲染依赖装在 clone 的 template/node_modules/,出片时 make.mjs 会在 clone 的 template/ 里写临时素材和渲染锁(都已被仓库 .gitignore 忽略);不想碰 clone,就在配置里开 stageCheckout: true,改为复制到运行目录再跑。

B. npm(当前可用)

dsh plugin --profile web add dsh-brewreel

npm 上的 dsh-brewreel@0.5.0 对应仓库 v0.7.0。

C. 本地 tgz

已经下载了发布包时:

dsh plugin --profile web add ./dsh-brewreel-0.3.0.tgz

D. 只装 skill、不装插件

把仓库 clone 到 ~/.agents/skills/brewreel/(或项目的 .agents/skills/),dsh 会自动发现这份 skill,模型用 shell 工具跑 node scripts/…。没有进度、路径保护和结构化报错,只适合临时试用。

卸载:dsh plugin --profile web remove dsh-brewreel,再删掉运行目录(默认 ~/.dsh/brewreel/,从 0.1.x 升级上来的可能是 ~/.dsh/distill-video/;A 方式不开 stageCheckout 时依赖在 clone 的 template/node_modules/)。

首次初始化

对模型说「检查一下视频插件环境」,它会调 brewreel_doctor。环境没就绪时,模型会先问你,再调 brewreel_setup:

1. stage:把 skill 复制到运行目录(npm / tgz 安装时必做;不联网);

2. deps:在 template/ 里 npm ci(Remotion 等,约几百 MB);

3. browser:下载 Chrome Headless Shell(约 110 MB)。

国内网络:在配置里设 npmRegistry(如 https://registry.npmmirror.com)。Chrome Headless Shell 下载失败时,按主仓库 README「常见问题」一节(Chrome Headless Shell 下载失败?)的手动办法处理,放到 doctor 结果里 runtimeRoot 下的 template/node_modules/.remotion/chrome-headless-shell/,再调一次 setup(已存在会跳过)。

Python 依赖插件只检测、不安装;需要配乐就自己执行 doctor 给出的 python -m pip install numpy scipy。

怎么用

示例对话:

你:给我的记账 App 做一支 20 秒左右的抖音宣传片。卖点:拍小票自动记账、月底超支提醒。简报在 promo/ledger/brief.md。
模型:(调 brewreel_catalog)这个产品单一卖点、要演示界面,用默认的 cards 风格、software 行业。(调 brewreel_guide 读 cards 的 recipes 和 hook 镜头说明,写 promo/ledger/storyboard.json)
模型:(调 brewreel_validate)第 3 镜字幕太长,按提示改成两行……再校验,通过。
模型:(调 brewreel_render,后台任务 brewreel-1;用 job_output 看到「渲染 420/735 帧」)
模型:出片完成。成片:…/promo/ledger/video.mp4(24.5 秒),拼图 sheet.png。发布前请你确认这 2 条「需人工复核」:……

出片产物(都在输出目录里):

文件 · 说明

video.mp4 · 成片。只有工具结果里 video.path 给出的才算交付

sheet.png · 拼图,一眼看全片

check/ · 检查帧

report.txt · 校验、机器自查、版式自查的完整报告

manifest.json · 分镜 sha256、成片 sha256 / 时长、各项检查结论

「只认交付行」:video 字段只在四个条件同时满足时出现——退出码 0、make.mjs 最后一行是「交付:…」、manifest 状态为 delivered、文件 sha256 与 manifest 一致。失败时留下的 video.rejected.mp4 只给人看哪里坏了,不能交付。stills(单帧预览)永远不是成片。

工具一览

工具 · 用途 · 写文件 · 后台

brewreel_doctor · 检查环境(Node、skill 文件、依赖、Chrome、Python、输出目录、渲染锁) · 否 · 否

brewreel_setup · 一键初始化:stage / deps / browser · 运行目录 · 默认是

brewreel_catalog · 列出风格、行业、配色主题 · 否 · 否

brewreel_guide · 读 skill 说明、风格 recipes、行业 recipe、镜头说明、样例 · 否 · 否

brewreel_validate · 校验分镜,给出 errors / warnings / human 三档,每条带「怎么改」 · 否 · 否

brewreel_render · 出片(约 3–10 分钟,看机器),报进度;stills 只出单帧 · 输出目录 · 默认是

brewreel_verify · 核对成片是否还对应当前分镜 · 否 · 否

同一条校验错误连续 3 轮都没改掉,validate 会在 stuck 里提示模型停下来问你,避免便宜模型死循环。

配置项

在 Web UI 的插件设置里改(表单由配置 schema 自动生成),或写进 profile 的 cordis.patch.yml:

- id: brewreel
  config:
    outputRoot: promo
    npmRegistry: https://registry.npmmirror.com
    renderTimeoutMin: 40

注意:patch 会整体替换这一行的 config,想保留的键都要写上。

键 · 默认 · 说明

skillRoot · '' · 指定一份精酿 BrewReel 的 clone;空 = 自动查找(插件外两级的 clone → 包内快照)

stageCheckout · false · clone 模式下也先复制到运行目录再跑,不碰 clone

runtimeDir · '' · 空 = $DSH_HOME/brewreel(~/.dsh/brewreel);只有 0.1.x 留下的 ~/.dsh/distill-video 时直接沿用它

outputRoot · promo · 输出根目录,相对会话工作区

extraWriteRoots · [] · 额外允许读写的目录(绝对路径)

renderInBackground · true · 出片默认走后台任务

maxConcurrentRenders · 1 · 插件同时跑几个出片进程(1–4)

renderTimeoutMin · 30 · 单次出片硬超时(分钟),到点终止整个进程树

queueTimeoutMin · 20 · 等渲染锁的上限(分钟)

bgm · true · 默认生成配乐

autoSetup · false · 出片发现依赖缺失时自动先跑 setup(会联网下载)。默认关,让你知情

npmRegistry · '' · setup 用的 npm 源,必须是 https

python / ffmpeg · '' · 指定 Python / ffmpeg 可执行文件

registerSkill · true · 是否注册 skill 说明

skillLang · zh · 注册中文还是英文 SKILL,也决定工具文字的语言

maxResultChars · 16000

…(truncated)

Rendered from the README published on npm. Formatted only, not edited.

Versions

Published on npm::4,最后更新 2026-10-07

Links

GitHub · Homepage · npm

Same category