capcut(Python 客户端) · capcut (Python client)
中文 | English
用 Python 创建和编辑 CapCut / 剪映草稿。这是 capcut-cli 的一层薄封装:每次调用启动一次 capcut 命令,不经过 shell,返回它打印的那一份 JSON。没有服务、没有守护进程,磁盘上的草稿就是全部状态。打开剪映时,每一轨都还是可编辑的。
安装
npm install -g capcut-cli # 命令行本体,需要 Node ≥ 18
pip install capcut # 本包,纯 Python,无依赖
capcut doctor # 检查环境
五行起步
import capcut
d = capcut.run("quickstart", "旁白短视频", video="clip.mp4", ratio="9:16")
capcut.run("add-text", d["draft_path"], "0s", "3s", "你好,世界", font_size=16)
print(capcut.run("lint", d["draft_path"])["summary"])
- 关键字参数就是命令行选项:
font_size=16→--font-size 16,karaoke=True→--karaoke,列表会重复该选项,None/False直接省略。 - 位置参数原样传递,每个参数就是一个 argv,中文、空格、引号都不需要转义。
- 全部命令、参数和选项见命令参考(中文),或者在 Python 里
capcut.describe()。使用capcut.describe(compact=True)获取精简索引,capcut.describe(command="compile")获取单个命令的完整契约(命令行需要 v0.28.0 或更新版本)。
出错时
命令非零退出会抛出 capcut.CommandError,带 status、data(CLI 打印的 JSON,通常含 error)、stdout、stderr:
try:
capcut.run("lint", path)
except capcut.CommandError as e:
print(e.status, e.data) # lint 有错误时退出码为 2
不想抛异常就用 capcut.run_raw(...),它返回 Result(ok、status、data、error)。找不到 capcut 命令时抛 capcut.CliNotFound,提示里有安装命令;也可以用环境变量 CAPCUT_CLI 指定,例如 CAPCUT_CLI="node /path/to/capcut-cli/dist/index.js"。
Windows 上的 CAPCUT_CLI 使用双引号包住带空格的路径(不是 POSIX 单引号)。例如在 PowerShell 中:
$env:CAPCUT_CLI = '"C:\Program Files\nodejs\node.exe" "C:\CapCut Tools\dist\index.js"'
批量:serve
capcut serve 是一个无状态的 JSONL 任务队列。从 Python 喂任务进去,拿回每个任务一条结果:
results = capcut.serve([
capcut.Job("add-text", project=path, args=["8s", "2s", "关注我"], id="title"),
capcut.Job("lint", project=path),
], workers=2)
for r in results:
print(r["id"], r["ok"], r["status"], r["stdout"])
失败的任务是一条 ok: false 的结果,不是异常。
剪映 6.0+ 用户
新建的草稿是明文,据报告剪映 11.4(macOS)能打开并就地升级,其他版本未验证;已有的加密草稿本 CLI 不读取。capcut.doctor() 会报告环境,capcut.run("decrypt", path) 会报告某个草稿的加密状态;来龙去脉见 jianying-encryption.zh-CN.md。
反馈与商业合作
- 在用 Python 驱动 CapCut / 剪映?到 这个讨论 说说你在做什么,这决定 Python 客户端下一步做什么。
- 与赞助无关:如果你正在把 capcut 集成进自己的产品,或者需要它实现目前还不支持的功能,我会承接少量集成项目。请发邮件至 rene@renezander.com,写明你在做什么。
- 想支持这个项目:成为赞助者。
English
Create and edit CapCut / JianYing drafts from Python. A thin layer over capcut-cli: each call spawns the capcut binary once, without a shell, and returns the one JSON document it prints. No server, no daemon; the draft on disk is the only state, and every track stays editable in the app.
Install
npm install -g capcut-cli # the CLI itself, Node >= 18
pip install capcut # this package, pure Python, no dependencies
capcut doctor # environment check
Five lines
import capcut
d = capcut.run("quickstart", "Narrated short", video="clip.mp4", ratio="9:16")
capcut.run("add-text", d["draft_path"], "0s", "3s", "Hello, world", font_size=16)
print(capcut.run("lint", d["draft_path"])["summary"])
- Keyword arguments are flags:
font_size=16→--font-size 16,karaoke=True→--karaoke, a list repeats the flag,None/Falseare dropped. - Positional arguments pass through as they are, one argv token each: text with spaces or quotes never needs escaping.
- Every command, argument and option: command reference, or
capcut.describe()from Python. Usecapcut.describe(compact=True)for the small discovery index andcapcut.describe(command="compile")for a complete command contract (requires CLI v0.28.0 or newer). A list selects several names.
Errors
A non-zero exit raises capcut.CommandError with status, data (the CLI's JSON, usually with error), stdout, stderr:
try:
capcut.run("lint", path)
except capcut.CommandError as e:
print(e.status, e.data) # lint exits 2 on errors
capcut.run_raw(...) never raises; it returns a Result (ok, status, data, error). A missing binary raises capcut.CliNotFound with the install line; CAPCUT_CLI can point at one explicitly, e.g. CAPCUT_CLI="node /path/to/capcut-cli/dist/index.js".
On Windows, quote paths with double quotes inside CAPCUT_CLI. For example in PowerShell:
$env:CAPCUT_CLI = '"C:\Program Files\nodejs\node.exe" "C:\CapCut Tools\dist\index.js"'
When setting the variable from Python, subprocess.list2cmdline([node_path, cli_path]) builds Windows quoting; shlex.join(...) is for POSIX. Command arguments are passed directly to the child process without shell expansion.
Batch: serve
capcut serve is a stateless JSONL job queue. Feed it jobs from Python and get one result per job:
results = capcut.serve([
capcut.Job("add-text", project=path, args=["8s", "2s", "Subscribe"], id="title"),
capcut.Job("lint", project=path),
], workers=2)
for r in results:
print(r["id"], r["ok"], r["status"], r["stdout"])
A failed job is a result with ok: false, not an exception.
Feedback and commercial work
- Driving CapCut or JianYing from Python? Tell us what you are building in this discussion; it decides what the Python client gets next.
- Separate from sponsorship: if you are building capcut into a product, or you need it to do something it does not do yet, I take on a small number of integration engagements. Write to rene@renezander.com and say what you are building.
- To support the project: become a sponsor.
Development
cd python && python -m unittest discover -s tests -v
python -m build
MIT, same as capcut-cli.
Metadata
Release files for capcut 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| capcut-0.1.3.tar.gz | 11.2 kB | Without provenance | Details for capcut-0.1.3.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| capcut-0.1.3-py3-none-any.whl | Python 3 | none | any | Details for capcut-0.1.3-py3-none-any.whl |
Total release size: 20.2 kB
Release files / capcut-0.1.3.tar.gz
| Download URL | capcut-0.1.3.tar.gz |
|---|---|
| Size | 11.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f1aaae524679b4b351fe904caee1db49ce58dc47dbd6866c228cbd15f9e2550c
|
|
BLAKE2b-256 checksum How to use checksums |
904d1ffa3e5aced752d6dcf5fc6d670aa9914c257421ae2dc28b6a1f646022c0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.5
|
Release files / capcut-0.1.3-py3-none-any.whl
| Download URL | capcut-0.1.3-py3-none-any.whl |
|---|---|
| Size | 9.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3c58c3cde794b8e680710b609584228c69be9a7b0baeb1e88517dd3143eef804
|
|
BLAKE2b-256 checksum How to use checksums |
d0bb2686946c676fd0cc85051e5ba65915c847396278b9a00a47994907940f1f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.5
|
Security for capcut 0.1.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.