Cardscards

- Aspect
- 9:16
- Signature
- Gradient background, a centered white card and bold outlined captions; one point per shot
- Fits
- A single selling point, a how-it-works flow, UI demos, physical products and stores, price lists
Apache-2.0 · Commercial use OK · Previewv0.5.1
Write a product brief; the AI picks the shots and writes the copy, and one command renders a vertical promo video (1080×1920, the format Douyin and WeChat Channels use).
Install it as a skill for Claude Code, Codex or opencode, use the DeepSeek Harness plugin, or run the plain script with no agent.
Still a preview: treat each video as a first draft; watch it all and edit before you publish. How far along it is
BrewReel is an open-source tool for AI-assisted promo video production. You provide a product brief and assets, a language model writes the storyboard, and code renders the video locally using a style recipe. Review the result before publishing.
Project author: Finderchangchang. See the GitHub documentation for installation, test records and known limitations.
No.01The recipes
Set meta.style in the storyboard to pick a recipe; leave it out and you get the default, cards. Each recipe ships its own design tokens, shot components, validation rules and narrative templates.
cards
quiz
journey
How to choose
quizjourneycardsthe defaultNo.02Get started
Set up the render environment and run one of the bundled samples first, then pick how the model writes your storyboard.
git clone https://github.com/Finderchangchang/brewreel.git
cd brewreel/template && npm install && npx remotion browser ensure
cd .. && pip install numpy scipy
node scripts/validate.mjs examples/en-focus.json
node scripts/make.mjs examples/en-focus.json --out ../brewreel-out/en-focus
npm install installs the rendering engine and npx remotion browser ensure downloads Chrome Headless Shell once. If the validate command passes, your setup is good; the render takes a few minutes and is done when the last line reads 交付:<mp4 path> ("delivered"). --out must not point inside the repo.
As a skillReady
For AI coding assistants that read SKILL.md. Clone the whole repo into ~/.claude/skills/brewreel/ (Claude Code) or ~/.agents/skills/brewreel/ (a common convention), hand the assistant a brief (template: brief-template.md) and let it follow SKILL.md.
Install as a Claude Code skill
git clone https://github.com/Finderchangchang/brewreel.git ~/.claude/skills/brewreel
export ANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic
export ANTHROPIC_AUTH_TOKEN=<your DeepSeek API key>
export ANTHROPIC_MODEL=deepseek-flash[1m]
Headless scriptReady
The script calls an OpenAI-compatible endpoint directly (DeepSeek by default): brief in, video out. Validator errors go back to the model verbatim for a retry, up to 3 times.
export LLM_API_KEY=<your DeepSeek API key>
export LLM_BASE_URL=https://api.deepseek.com
export LLM_MODEL=deepseek-chat
python scripts/llm_make.py path/to/brief.md
On Windows PowerShell use $env:LLM_API_KEY="..." instead of export. These are placeholders: use your own key, and never commit a key or paste one into an issue. With --dry-run it calls no API and reads no key; it only writes out the assembled prompt and estimates its token count.
DeepSeek HarnessPublished on npm
Published on npm. The plugin has not yet been tested against a real DeepSeek model; please open an issue if you hit problems.
With the plugin installed, the model writes the storyboard by following the skill and uses the plugin's 7 tools to validate, render and verify: check the environment, install dependencies, list recipes and industries, read the docs, validate the storyboard, render in the background with progress, and check the video. Needs dsh 0.1.7-rc.2 or later within 0.1.x (dsh's latest tag on npm still points to the older 0.1.5-rc.3, so pin the version when installing), Node.js 22.x from 22.19 or 24+, and pnpm.
npm install -g @deepseek-ai/dsh@0.1.7-rc.2 pnpm # if dsh is not installed yet
dsh plugin --profile web add dsh-brewreel
dsh web
web can be any profile name; if the profile is already running, restart it for the change to apply. On first use, ask the model to "check the video plugin environment": it calls doctor, and after you agree, calls setup to install the render dependencies. To use unreleased code, clone the repo and run dsh plugin --profile web add ./brewreel/integrations/deepseek-harness from the folder that contains the clone.
No.03How it brews
Good beer comes from a good recipe. A strong model first turns a style into a recipe: ready-made components plus validation rules. A low-cost model like DeepSeek follows it to fill in the storyboard, and scripts handle validation, music, rendering and QA.
01You
You or the merchant fill it in, from the generic template or one of the six industry templates.
brief.md
02You or the model
meta.style picks the recipe, meta.industry the industry pack.
meta
03Cheap model
One JSON file: pick shots, fill in text. No code, no coordinates.
storyboard.json
04Scripts
Hard rules plus ad-law and industry compliance. The report names the shot and field to fix, and goes back to the model.
validate.mjs
05Scripts
Music → render → contact sheet → check frames → manifest. Any ✗ means no delivery.
video.mp4
06You
Photo rights, genuine reviews, price conditions: things a machine can't judge, confirmed by the publisher.
checklist
Dozens of checks cover ad-law superlatives, rules for six industries, line wraps and safe areas, and every error says what to fix.
Layout, blank frames, Chinese characters in an English video: any failed self-check blocks delivery. Every video ships a manifest.json tied to its storyboard.
Original music is synthesized by code, hits the shot cuts and is normalized to -16 LUFS. No copyright issues.
Bilingual docs; captions in Chinese or English. English videos are scanned every half beat, and any Chinese character blocks delivery.
Write meta.voice and one vo line per shot to get a voice-over from MiniMax, Alibaba Cloud or Volcengine. Shot lengths follow the narration, subtitles light up word by word, and the music ducks about 10 dB under speech; each line is synthesized only once, so changing visuals or re-rendering costs nothing more.
No.04Industry packs
Pick an industry with meta.industry. Each pack comes with compliance rules, a recommended shot structure, a brief template for merchants and a regression-test brief.

software
food
ecommerce
education
beauty
travelValidation blocks
Not supported
The compliance rules don't cover these, so results aren't guaranteed compliant even if you force them.
No.05Known limitations
It's a preview. Here is where things honestly stand; read this before you use it.
Preview
We don't yet recommend publishing a video as rendered, without human edits.
Testing and fixes are ongoing. Treat each video as a first draft: watch it all, edit, then publish. Passing validation alone is not enough.
Recommended use: for industry videos, use the merchant's real photos where you can and pass --brief <brief> when rendering; before delivery, check every price, condition, date, opening hour and distance on screen against the brief.
In the round before v0.2.0, a small model played the cheap model: given only the brief and SKILL.md, it wrote each storyboard from scratch, validated and rendered. 7 is the score we set as "fine to publish as is".
| Category | Overall | Compliance |
|---|---|---|
| Software / tools | 5–6 | 7–8 |
| Industry videos | 4–5 | 4–5 |
meta.facts.No.06Why "BrewReel"
A strong model first gets a video style right; its layout, motion, pacing and rules are then written down as a "recipe": ready-made components plus a validator. A low-cost model like DeepSeek is the ordinary ingredient: it follows the recipe, fills in a storyboard, and brews a video at the same level.
Paths and fields keep their original names: styles/, meta.style, distill/.
Brew with an existing recipe.
node scripts/gen-styles.mjs --new <id> scaffolds a new style; change the palette, fonts and characters. For a color-only variant, editing tokens.json is enough.
Follow the six-step process in distill/ to break down a reference video: extract frames, break it down, replicate, redesign, componentize, then test with a cheap model and review.
The skeleton may stay: narrative structure, rhythm, motion, camera language. The skin must be redone: palette, characters, signature details. check-originality.mjs measures the color difference from the reference (CIEDE2000), and every signature item must say what replaced it or that it was removed.
Setup steps and examples you can refer to when using the project.
Set up the local renderer, validate and render an existing storyboard, then move to a product brief and a human review before publishing.
Specify the audience, product action, supported claims, price conditions and asset sources. Download a blank Markdown brief and a clearly fictional example.
No.07FAQ
Didn't find your answer? Open an issue, or message the WeChat Official Account.
Not yet recommended. Treat the video as a first draft: watch the whole thing, fix awkward copy and repeated selling points, then publish. For industry videos, check every price, condition, date, opening hour and distance on screen against the brief. See "How far along it is" for test results.
The project is free and open source. Model calls use your own API key and are billed by the provider for what you use; the project handles no money. Rendering runs on your own computer. The rendering engine Remotion charges for-profit organizations with 4 or more people; see the Remotion question below.
Yes. It's Apache-2.0: individuals and companies may use, modify and redistribute it, or build it into their own products, with no fee and no prior permission. If you redistribute it or build on it, keep LICENSE and NOTICE and credit the source. Suggested wording:
Based on BrewReel (精酿, https://github.com/Finderchangchang/brewreel)Videos you render with it don't require attribution. Don't use the names "BrewReel" or "精酿" or the brewreel.com domain to imply your work is made or endorsed by the original author. Remotion, which does the rendering, has its own license; see the next question.
Remotion is source-available, not open source: free for individuals, for-profit companies with 3 or fewer people, and non-profits (including commercial use); for-profit organizations with 4 or more people must purchase Remotion's Company License, see remotion.dev/license. This repo's Apache-2.0 license doesn't change Remotion's own terms.
This repo pins remotion / @remotion/cli to 4.0.529. After upgrading to 5.0, Remotion's free tier requires a licenseKey in config (individuals / companies with 3 or fewer people / non-profits use free-license); read THIRD_PARTY_LICENSES.md before upgrading.
scripts/make_bgm.py synthesizes it on the spot with numpy / scipy: instruments, harmony, melody, mixing and mastering all live in the script, with no external sample library. Each shot is one section, notes land on whole or half beats, and every shot change gets a cymbal or a fill, so the music follows the cuts. Loudness is normalized to -16 LUFS.
Because it's synthesized on the spot, there are no copyright issues. When you publish on a platform such as Douyin, you can also render a silent version with --no-bgm and add music on the platform.
Yes. v0.5.0 added MiniMax text-to-speech, and from v0.5.1 you can also use Alibaba Cloud (Model Studio CosyVoice) or Volcengine (Doubao speech). Write meta.voice and a vo per shot, set the matching environment variable (MINIMAX_API_KEY / DASHSCOPE_API_KEY / VOLCENGINE_TTS_API_KEY), and render. Shot lengths follow the narration, subtitles light up word by word, and the music ducks under speech. Without a key, add --voice-provider mock to preview the rhythm with a placeholder voice. Without meta.voice there is no voice-over, as before. When you publish with an AI voice, tick the platform's AI-generated content declaration as it requires.
The project doesn't generate images that look like real photography. Without merchant material, the video falls back to components and simple line illustrations and labels them clearly, rather than passing them off as real photos. With the merchant's real photos (store, finished product, price list), use the real-photo shots; the result is far more convincing. Whether a photo is authorized goes on the human-review list.
npx remotion browser ensure may not reach Google's download endpoint from some networks. Download it manually and point to a local Chrome / Chromium with --browser-executable (results may differ slightly between Chrome versions).
x64 only. Set environment variables the PowerShell way, $env:LLM_API_KEY="...", not export. Always pass storyboards as a file path, never as inline JSON on the command line (the Windows shell mangles the quotes). make.mjs calls python on Windows; if yours lives elsewhere, point the PYTHON environment variable at it.
Open source and free for commercial use. Star it so you don't miss new recipes.
We want to hear real needs: what product do you want a video for? Which recipe or industry is missing? Which compliance rule got in your way? Message the Official Account or open an issue.
Validation rules that block too much or too little, render errors, frames that look wrong. Attaching the storyboard JSON and the error output helps most. Never paste an API key.