Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@

All notable changes to capcut-cli are documented here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); the project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.33.1] — 2026-11-06

### Fixed

- The `fixture --anonymize` test accepts either path separator in the report's `source_dir`, so the Windows platform smoke passes; the anonymized path itself was already correct on Windows.
- The Chinese command reference lists `diff --since-write` and `fixture --anonymize` / `--check`, the README keeps the v0.32.0 note beside the v0.33.0 one, and `docs/command-reference.json` reports the package version (0.33.0 shipped it regenerated before its version bump).

## [0.33.0] — 2026-11-06

### Added
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ The host reads a draft and passes its JSON as tool input. The component itself h

> **New in v0.33.0:** `caption` reports speech its cues leave uncaptioned and reuses a cached transcription when only the styling changes; `loudness --tolerance` and `--max-true-peak` gate a delivery with an exit code; `lint` gains opt-in pacing and silent-stretch checks; `diff --since-write` shows what CapCut changed after the CLI's last write; `fixture --anonymize` makes a shareable bundle; and `render --burn-captions` draws captions in the draft's own font. Full details in the [changelog](./CHANGELOG.md).

> **New in v0.31.0:** experimental, unofficial `caption --cloud` that transcribes without a local Whisper install by uploading the audio to ByteDance's CapCut servers ([#157](https://github.com/renezander030/capcut-cli/pull/157)), uploads nothing in a dry run, retries flaky requests and waits as long as the audio needs; loudness to a delivery target (`loudness --target -14`, applied as segment volume and undoable); faster compiles that reuse media hashes across repeated cuts; and three `lint` checks for clips that play silent after a copy, keyframes on trimmed or re-timed clips, and `UNIFORM_SCALE` zooms on JianYing 11.6+. Full details in the [changelog](./CHANGELOG.md).
> **New in v0.32.0:** time arguments reject malformed or unsafe values before writing; translation responses must contain exactly one string per input; and subtitle imports reject malformed UTF-8 instead of silently corrupting caption text. Full details in the [changelog](./CHANGELOG.md).



Expand Down
2 changes: 1 addition & 1 deletion docs/command-reference.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "capcut-cli",
"version": "0.32.0",
"version": "0.33.1",
"schema_version": 2,
"description": "Edit CapCut/JianYing draft_content.json directly. JSON in, JSON out.",
"global_flags": [
Expand Down
4 changes: 2 additions & 2 deletions docs/command-reference.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@
| `replace-media` | `capcut replace-media <project> <segment-id> <new-file> [--retime]` | 是 | 替换片段的源文件(占位素材 → 成片素材),保留其时间、特效与关键帧。 |
| `timeline` | `capcut timeline <project> [--cols <number>]` | 否 | 显示轨道/片段布局(JSON;-H 显示 ASCII 条形图)。 |
| `projects` | `capcut projects [query] [--drafts <path>] [--names]` | 否 | 列出磁盘上的 CapCut/剪映草稿文件夹。 |
| `diff` | `capcut diff <project-a> <project-b>` | 否 | 比较两个草稿(片段/素材/轨道的增、删、改)。 |
| `diff` | `capcut diff <project-a> (<project-b> \| --since-write)` | 否 | 比较两个草稿(片段/素材/轨道的增、删、改);加 --since-write 时,比较草稿与 capcut-cli 上次写入的内容。 |
| `concat` | `capcut concat <project-a> <project-b> [--out <path>]` | 是 | 把一个草稿追加到另一个的时间线末尾(ID 安全),写入 --out 或原地写入。 |
| `config` | `capcut config` | 否 | 显示解析后的配置(.capcutrc + 生效的默认值)。 |
| `describe` | `capcut describe [--compact] [--command <name>]` | 否 | 以 JSON 输出命令契约;可按命令名筛选,或输出精简的命令发现索引。 |
Expand All @@ -80,7 +80,7 @@
| `harvest-enums` | `capcut harvest-enums [<project> \| --sync \| --add <kind> <slug> <resource-id>] [--apply] [--catalogue <path>]` | 否 | 把商店资源 ID 学习进用户级素材目录:来源可以是单个草稿、整个草稿库(--sync),或手动添加(--add)。 |
| `doctor` | `capcut doctor [--drafts <dir>]` | 否 | 环境预检(Node、whisper、API key、项目目录),并统计草稿目录中可读 / 无标记 / 已加密 / 无法读取的项目。 |
| `diagnose` | `capcut diagnose <project> [--bundle <report.json>]` | 否 | 检查草稿的规范文件、文件间分歧与编辑器写入安全性。 |
| `fixture` | `capcut fixture <project> --out <dir>` | 否 | 构建可分享、已脱敏的兼容性包(仅时间线 JSON),用于版本支持 issue,内含蒙版关键帧证据报告(#44)。 |
| `fixture` | `capcut fixture <project> --out <dir> [--anonymize] [--check]` | 否 | 构建可分享、已脱敏的兼容性包(仅时间线 JSON),用于版本支持 issue,内含蒙版关键帧证据报告(#44)。 |
| `sync-timelines` | `capcut sync-timelines <project-dir> [--apply]` | 是 | 从只读的 draft_content.json 出发,协调已漂移的时间线镜像文件(template-2.tmp、draft_info.json)(默认输出带 mtime 的计划;--apply 只重写发生漂移的镜像)。 |
| `restore` | `capcut restore <project> [--step <number> \| --list]` | 是 | 从 .bak / 快照历史撤销写入(--step N、--list)。 |
| `serve` | `capcut serve [--queue <path>] [options]` | 否 | 从 stdin/--queue 运行无状态的 JSONL 任务队列。 |
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "capcut-cli",
"version": "0.33.0",
"version": "0.33.1",
"description": "Independent, unofficial CLI to create and edit CapCut projects — build drafts from scratch, add video/audio/text, subtitles, timing, speed, volume, templates, cut long-form to shorts. No API needed. Not affiliated with ByteDance.",
"type": "module",
"bin": {
Expand Down
2 changes: 1 addition & 1 deletion test/fixture-anonymize.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ describe("fixture --anonymize", () => {
assert.equal(report.anonymized, true);
assert.equal(report.anonymization.media_files, 2);
assert.equal(report.anonymization.folders, 2);
assert.match(report.source_dir, /\/project$/);
assert.match(report.source_dir, /[\\/]project$/);
assert.match(readFileSync(join(p.out, "README.md"), "utf-8"), /--anonymize/);

for (const { rel, text } of bundledFiles(p.out)) {
Expand Down
Loading