What you can and can't do with an encrypted draft_content.json from JianYing (剪映) 6.0 and above — version-by-version, with the verbatim error strings users paste into Google and Baidu.
Last tested: May 2026 (capcut-cli v0.5.0, JianYing 5.9.0 / 6.0 / 7.x / 10.3.0). See Changelog at the bottom.
If this saves you a JianYing reinstall, follow @renezander030 for more reverse-engineering notes on the CapCut / JianYing draft format.
Source CLI used for detection: github.com/renezander030/capcut-cli (
capcut decrypt,capcut version).
| Your JianYing version | What works | What doesn't | Recommended action |
|---|---|---|---|
| 5.9.x and below | Everything. draft_content.json is plain JSON. |
— | Pin this version. Block auto-update. |
| 6.0.0 to 6.5.x | Reading is blocked. Open-source toolchains fail. | pyJianYingDraft, JianYingProDraft, capcut-cli writes | Downgrade to 5.9, OR switch to CapCut International |
| 7.0.0 to 9.x | Same encryption, stricter cover-image checks | Same as 6.x | Same as 6.x |
| 10.0.0 to 10.3.x | Encryption + a known macOS "内容已损坏" / "draft corrupted" bug on freshly created drafts | All open-source draft generators | Roll back; report against pyJianYingDraft #177 |
| CapCut International (any version) | Fully unencrypted. Schema diverges in slug namespace only. | — | Use this instead if your audience tolerates it |
This is not a "how to decrypt JianYing" gist. The decryption algorithm is intentionally not bundled in capcut-cli — it's a moving target, the legal posture is unclear, and every published "decrypt" script in the ecosystem has broken on the next JianYing release. This gist documents detection + viable workarounds, honestly.
- Run
capcut version <draft>first. Get a deterministic read on what app, what version, and which schema flags are present. - If JianYing 5.9.x: keep it pinned. Block
update.exe/VEDetector.exe. Open-source toolchains all work. - If JianYing 6.0+: decide between (a) downgrading to 5.9, or (b) switching to CapCut International, which is unencrypted across all versions.
- Don't try to decrypt. The community-maintained decrypt scripts are stale and break on each JianYing release.
capcut-cli ships an encryption-detection command that exits cleanly with a structured JSON verdict:
npm i -g capcut-cli
# point it at the draft
capcut decrypt ~/path/to/draft_content.json
# → {"encrypted":true,"app":"lv","app_version":"6.0.0",
# "workaround":"downgrade-to-5.9 OR switch to CapCut International",
# "doc":"https://github.com/renezander030/capcut-cli/blob/master/docs/version-support.md"}
# on a JianYing 5.9 draft (or CapCut International)
capcut decrypt ~/path/to/draft_content.json
# → {"encrypted":false,"app":"lv","app_version":"5.9.0",
# "ready":true}The detection is heuristic on file shape — encrypted drafts are binary with high entropy, plain drafts are valid UTF-8 JSON starting with {. No false positives observed in our test fixtures (CapCut 6.x–9.x, JianYing 5.9.0).
These are the exact symptoms users paste into Google and Baidu. If you searched for one of these and landed here, this is the section that matches.
Reported in pyJianYingDraft #177. Drafts that open fine in older versions throw "内容已损坏" / "draft corrupted" the moment JianYing 10.3 on Apple Silicon opens them. The cover-image validator changed; if your draft has no cover frame, or the cover frame has the wrong mime/path, JianYing 10.3 refuses to load it instead of regenerating one.
Workaround:
# set the cover frame explicitly before handing the draft to JianYing 10.3
capcut add-cover ./project ./first-frame.png --time 0If capcut decrypt says encrypted:true, this won't help — the parent encryption issue is upstream of the cover bug.
Discussed in pyJianYingDraft #92 (46 comments) and several Coze (扣子) plugin threads.
Two facts to internalise:
- Drafts created by Coze (扣子) JianYing plugins are unencrypted — they're written by the plugin, not by JianYing. If you only consume freshly generated drafts and never re-save them inside JianYing 6.0+, you can avoid encryption entirely.
- The moment JianYing 6.0+ opens that draft and re-saves it, it gets encrypted. There's no toggle.
Workaround: generate, don't roundtrip. Treat 6.0+ as a write-only renderer for plugin-generated drafts. Edit in your toolchain, save in JianYing, then never edit again in code.
pyJianYingDraft #115 (33 comments). JianYing aggressively replaces 5.9 with newer encrypted versions.
Windows:
1. Quit JianYing.
2. In the install dir, delete (or rename) update.exe and VEDetector.exe.
3. Right-click the parent folder → Properties → Security → set the folder Read-only
via ACLs so JianYing can't recreate those binaries.
4. Reopen JianYing. It can no longer self-update.
macOS: as of May 2026, no clean documented workaround. The auto-update path on macOS is harder to ACL-block than on Windows. Community is asking for help — see issue #115 comments.
Cloud Windows VM: install JianYing 5.9 once, snapshot the VM, restore the snapshot on every boot. Brittle but works.
pyJianYingDraft #174. The text-template / 花字 IDs live inside the encrypted material payload. There's no read path without decryption.
Workaround: use the JianYing 5.9 template library — the slugs carry forward to newer versions. Once you know the effect_id / resource_id, capcut bubble-text --effect-id <id> --resource-id <id> writes the reference into any draft. The IDs themselves aren't encrypted, just their lookup tables.
pyJianYingDraft #169. This file is the editor's UI state, not the project. It's encrypted with the same scheme but nobody actually needs it for draft automation. Skip it. Edit draft content via capcut-cli, let JianYing manage its own window layout.
$ capcut decrypt ./draft_content.json
│
├── encrypted: false ──────────────► You're on JianYing 5.9 or CapCut International.
│ All open-source toolchains work. Pin the version.
│
└── encrypted: true
│
├── app_version starts with "6" ──► Downgrade to 5.9, OR switch to CapCut Intl.
│
├── app_version starts with "7"–"9" ──► Same as 6.x. Same workarounds.
│
└── app_version starts with "10"
│
└── Plus "内容已损坏" on open ──► Set cover frame explicitly (capcut add-cover),
OR roll back to a version below 10.3.
| Workaround | Effort | Stability | Caveats |
|---|---|---|---|
| Downgrade to JianYing 5.9 + pin | Medium (uninstall, reinstall, block updater) | High once pinned | Lose new templates, lose new effects, lose new export presets |
| Switch to CapCut International | Low (different app) | High — no encryption | Your audience must accept CapCut Intl. instead of the CN version. Slug namespace differs (use capcut enums without --jianying) |
| Cloud Windows VM with snapshot | High (VM setup) | Medium — depends on VM provider | Cost. Latency. But it works for teams |
| Generate-only, never roundtrip | Low | Medium — fragile, easy to forget | Tell your team: edit in code, open in JianYing, don't save. One careless Cmd+S and the draft is encrypted forever |
| Run a community decrypt script | Low to attempt | Zero | Every published one breaks on the next JianYing release. Skip |
| Wait for capcut decrypt's full algorithm | Zero | Pending | Not on the v0.6 roadmap. Detection is the deliberate scope. |
- pyJianYingDraft — most mature Python alternative. Same encryption stance as capcut-cli: detection yes, decryption no.
- CapCutAPI — HTTP server for draft editing. Same scope (5.9-only for JianYing).
- capcut-cli — zero-dep Node CLI, JSON-in / JSON-out,
capcut decryptships in v0.5.
All three converge on the same answer: JianYing 6.0+ encryption is a moving target. Pin 5.9 or use CapCut International.
- pyJianYingDraft #92 — Coze plugin + draft encryption questions (46 comments)
- pyJianYingDraft #115 — how to block 5.9 auto-update (33 comments)
- pyJianYingDraft #169 — mainwindowLayoutConfig.json
- pyJianYingDraft #174 — 6.0+ text-template ID extraction
- pyJianYingDraft #177 — JianYing 10.3 mac "内容已损坏" on freshly created drafts
- capcut-cli docs/version-support.md — tested version matrix
If you've hit a version not listed here, comment with:
- App + exact version (
capcut version <draft>output is ideal) - OS (Windows / macOS Intel / macOS Apple Silicon)
- The verbatim Chinese / English error string from the JianYing UI
- The workaround that worked (or didn't)
Particularly wanted: clean macOS update-blocking recipe for JianYing 5.9, and confirmation on whether JianYing 11.x changed the encryption scheme again.
- Initial publication. Covers JianYing 5.9 / 6.x / 7.x / 10.3 + CapCut International unencrypted path.
- Cross-links: capcut-cli repo + four pyJianYingDraft issues. Not part of PAAN series — pain-driven gist, not AI-automation pattern.
Independent project — not affiliated with or endorsed by ByteDance. "CapCut"/"JianYing" are trademarks of their owner; used nominatively.