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.16.0
Two paths, each one command: write a product brief and render a vertical promo, or drop in one talking-head clip and get pictures that explain it.
For a promo, install it as a skill for Claude Code, Codex or opencode, use the DeepSeek Harness plugin, or run the plain script with no agent. Talking-head B-roll is a separate command.
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 with three paths. Promo: you provide a product brief, a language model writes the storyboard, and code renders it locally from a recipe. Talking-head B-roll: you provide one talking-head video, and one command adds motion cards or AI pictures. Lesson videos: 16:9 animated slides with a presenter. Review either result before publishing.
Project author: Finderchangchang. See the GitHub documentation for installation, test records and known limitations.
Write a product brief, let a cheap model write the storyboard, and render a vertical promo with one command. Three recipes, six industries.
No.02 Talking-head B-rollDrop in one talking-head video. One command adds motion cards or AI pictures.
No.03 Lesson videos16:9 lessons: animated slides with a presenter in the corner, 20 layouts, re-render only the page you changed, and vertical clips.
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.02Talking-head B-roll
If you already have a talking-head video, you do not write a brief. After on-device transcription, DeepSeek picks a picture for each line: a motion card, which does not charge, or an AI picture. Scripts handle timing, cost and the final cut.
Available since v0.9
node scripts/talk.mjs <project-dir> --out <output-dir>
Put talk.mp4 in the project directory. The command transcribes on your machine (the first run downloads about a 240MB model), asks DeepSeek to pick a picture per line, then renders. The output directory must sit outside the repo. AI pictures default to 2 clips at most. The first pass is a stand-in and does not charge; real MiniMax generation prints an estimate first, and a person reviews the sheet and approves before the official cut. Talking-head B-roll needs a full ffmpeg.
These do not charge. Every word is copied from what was said, and it lights up as that word is spoken. From v0.11 there is an optional cut-paper look: paper grain, hand-cut cards that toss up on key words and land. From v0.12 every render is checked for motion that freezes or flickers, and a failing video is not delivered.
Small scenes from MiniMax H3. The whole video shares one robot. Two AI clips at most, by default. Ink sketch is experimental and only a stand-in preview.
Motion cards, on-device transcription and the final cut do not charge. AI pictures print an estimate first, and a person approves before the official cut. A MiniMax subscription key is shown in credits: about 280 credits for 4 seconds. MiniMax's own dashboard is what counts.
Style factoryv0.10
Describe the material and the color in one sentence. The script drafts an AI picture style. The vision check is only the first screen. A person decides whether it is kept.
DeepSeek writes the config and reference images are generated. MiniMax looks at the pictures and checks for text, studs, resemblance to a known work, a mouth, an antenna, and an empty frame. The script picks images, then makes one still. An optional 4-second video test spends credits. Then there is a review page.
node scripts/broll/new-style.mjs --id <id> --name "<name>" --desc "<one sentence>"
Without --yes it only prints the requests it would send. Add --yes after you confirm. A 4-second video test needs both --video and --yes, and it prints about 280 credits before submitting. node scripts/broll/approve-style.mjs <id> can only be run by a person in a terminal. An assistant must not run it. Styles you make are welcome back as contributions.
No.03Get started
Set up the render environment and run one of the bundled samples first. For a promo, then pick how the model writes the storyboard. Talking-head B-roll uses the third command below.
git clone https://github.com/Finderchangchang/brewreel.git
cd brewreel/template && npm install && npx remotion browser ensure
cd .. && pip install numpy scipy imageio-ffmpeg
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. Talking-head B-roll also needs a full ffmpeg: imageio-ffmpeg in that install is that build. The slim ffmpeg bundled with Remotion is missing filters and is not enough.
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-flash
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. This version of the plugin does not include talking-head B-roll.
node scripts/talk.mjs <project-dir> --out <output-dir>
Put talk.mp4 in the project directory. The output directory must sit outside the repo. The first transcription downloads about a 240MB model. Pictures, cost and limits are in Talking-head B-roll.
No.04How 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.
A data-chart shot can draw a bar, line, dot, stacked or donut chart. Every number on it has to appear in the cited facts. cards also has 12 optional color sets; if you do not pick one, an old storyboard renders as before.
No.05Industry 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.06Known 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 |
talk.srt before you publish, and fix mistakes there.imageio-ffmpeg (pip install imageio-ffmpeg), put ffmpeg on PATH, or point the FFMPEG environment variable at it.meta.facts.No.07Why "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.08FAQ
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, voiceover APIs, and AI pictures in talking-head B-roll use your own key and are billed by the provider; the project handles no money. Rendering runs on your own computer. Motion cards, on-device transcription and the final cut do not charge. The rendering engine Remotion charges for-profit organizations with 4 or more people; see the Remotion question below.
Motion cards, on-device transcription and the final cut do not charge. AI pictures use MiniMax H3. An estimate is printed first, and a person approves before the official cut. Two AI clips at most, by default. A subscription key is shown in credits, about 280 credits for 4 seconds. A pay-as-you-go key is billed per second; the price table says 0.5 yuan per second at 768P. Under the default cap, the AI pictures in one video are about 2–12 yuan on that table, or about 280–1680 credits on a subscription key. What MiniMax actually charges is whatever its dashboard shows. DeepSeek uses your own key to write the plan.
Yes. You can draft one. The style factory takes the material and the color in one sentence:
node scripts/broll/new-style.mjs --id <id> --name "<name>" --desc "<one sentence>"
DeepSeek writes the config and reference images are generated. MiniMax checks the pictures for text, studs, resemblance to a known work, a mouth, an antenna, and an empty frame. The script picks images and makes one still. An optional 4-second video test spends credits. A person looks at the review page. approve-style.mjs can only be run by a person in a terminal. An assistant must not approve it. Styles you make are welcome back as contributions.
The shipped regular styles are wood blocks (the default), clay stop-motion and layered paper. The whole video shares one robot. Ink sketch is still experimental and only a stand-in preview.
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.