Skip to content

Instantly share code, notes, and snippets.

@renezander030
Last active May 31, 2026 07:19
Show Gist options
  • Select an option

  • Save renezander030/521e6c6e8590a2a6e917009d9313bc55 to your computer and use it in GitHub Desktop.

Select an option

Save renezander030/521e6c6e8590a2a6e917009d9313bc55 to your computer and use it in GitHub Desktop.
JianYing 6.0+ draft_content.json encryption: detection, workarounds, and what doesn't work

JianYing 6.0+ draft_content.json encryption: detection, workarounds, and what doesn't work

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).

TL;DR — what to do based on your 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.

Recommended path

  1. Run capcut version <draft> first. Get a deterministic read on what app, what version, and which schema flags are present.
  2. If JianYing 5.9.x: keep it pinned. Block update.exe / VEDetector.exe. Open-source toolchains all work.
  3. If JianYing 6.0+: decide between (a) downgrading to 5.9, or (b) switching to CapCut International, which is unencrypted across all versions.
  4. Don't try to decrypt. The community-maintained decrypt scripts are stale and break on each JianYing release.

Detecting encryption with capcut decrypt

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).

Verbatim error strings you may have hit

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.

"内容已损坏" — "content corrupted" when opening a draft on JianYing 10.3 (mac)

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 0

If capcut decrypt says encrypted:true, this won't help — the parent encryption issue is upstream of the cover bug.

"draft_content.json 加密" — "draft is encrypted" on JianYing 6.0+

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.

"5.9 自动升级了 这个怎么禁止" — "5.9 auto-upgraded, how do I block it"

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.

"6.0以上加密了没办法获取他的ID" — "6.0+ encrypted, can't get text-template ID"

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.

"mainwindowLayoutConfig.json" — "is there a way to decrypt the window layout config"

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.

Diagnose-your-version flow

$ 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 comparison

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.

Related work in the ecosystem

  • 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 decrypt ships 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.

Sources

Reader contributions

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.

Changelog

2026-05-25

  • 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment