renezander030/capcut-cli
352 stars · Last commit 2026-08-16
Independent, unofficial CLI to edit CapCut and JianYing projects — subtitles, timing, speed, volume, templates, cut long-form to shorts. No API needed, reads draft_content.json directly. Not affiliated with ByteDance.
README preview
<p align="center"> <img src="https://raw.githubusercontent.com/renezander030/capcut-cli/master/media/og-card.png" alt="capcut-cli — the CapCut/JianYing CLI any LLM agent can drive: zero dependencies, no server, both namespaces" width="640"> </p> # capcut-cli [](https://github.com/renezander030/capcut-cli/actions/workflows/ci.yml) [](https://www.npmjs.com/package/capcut-cli) [](https://www.npmjs.com/package/capcut-cli) [](https://nodejs.org) [](./LICENSE) English | [中文](./README.zh-CN.md) > **Privacy — update to 0.18.0 if you have ever run `capcut fixture`.** In every version up to and including 0.17.2, the bundle that command produces carries the `device_id`, `mac_address` and `hard_disk_id` CapCut stamps into your drafts. Only home paths and email addresses were redacted, and `SANITIZE_REPORT.json` wrote its own `source_dir` / `out_dir` unredacted, putting the username back. Because the documented flow is to attach that bundle to a public issue, following it published a stable device ID and MAC address while the filename and the report both said "sanitised". Fixed in 0.18.0 ([#59](https://github.com/renezander030/capcut-cli/issues/59)). **Treat any bundle generated by an earlier version as unsanitised.** `npm install -g capcut-cli@latest`. > **Security — update to 0.17.1 or newer.** Versions up to and including 0.17.0 build the automation script behind `export --batch` by pasting the draft folder's name into it, so a folder named with the right characters can run commands of its own on macOS and Windows. Fixed in 0.17.1, together with an ffmpeg filter option injection reachable from a draft's caption colour (`render --burn-captions`), a `compile` spec whose `name` could write outside the draft store, predictable temp files on every draft write, and `serve` echoing credential values into its own output. Both injection paths need a draft folder or draft file you did not author, so the exposure is local rather than remote. `npm install -g capcut-cli@latest`. Details in the [changelog](./CHANGELOG.md). > **Disclaimer:** This is an independent, community-maintained project. It is **not affiliated with, sponsored by, or endorsed by** CapCut, JianYing, or ByteDance Ltd. "CapCut" and "JianYing" (剪映) are trademarks of ByteDance Ltd. All product names, logos, and brands are the property of their respective owners and are used here only for identification (nominative) purposes.