cutsdk 0.0.1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +127 -0
- package/dist/api/audios/add-audios.d.ts +3 -0
- package/dist/api/audios/add-audios.d.ts.map +1 -0
- package/dist/api/audios/add-audios.js +33 -0
- package/dist/api/audios/add-audios.js.map +1 -0
- package/dist/api/audios/get-audios.d.ts +5 -0
- package/dist/api/audios/get-audios.d.ts.map +1 -0
- package/dist/api/audios/get-audios.js +27 -0
- package/dist/api/audios/get-audios.js.map +1 -0
- package/dist/api/captions/add-captions.d.ts +3 -0
- package/dist/api/captions/add-captions.d.ts.map +1 -0
- package/dist/api/captions/add-captions.js +220 -0
- package/dist/api/captions/add-captions.js.map +1 -0
- package/dist/api/captions/get-captions.d.ts +5 -0
- package/dist/api/captions/get-captions.d.ts.map +1 -0
- package/dist/api/captions/get-captions.js +36 -0
- package/dist/api/captions/get-captions.js.map +1 -0
- package/dist/api/cloud/render-draft.d.ts +8 -0
- package/dist/api/cloud/render-draft.d.ts.map +1 -0
- package/dist/api/cloud/render-draft.js +101 -0
- package/dist/api/cloud/render-draft.js.map +1 -0
- package/dist/api/cloud/submit-video-render-task.d.ts +4 -0
- package/dist/api/cloud/submit-video-render-task.d.ts.map +1 -0
- package/dist/api/cloud/submit-video-render-task.js +54 -0
- package/dist/api/cloud/submit-video-render-task.js.map +1 -0
- package/dist/api/cloud/upload-draft.d.ts +4 -0
- package/dist/api/cloud/upload-draft.d.ts.map +1 -0
- package/dist/api/cloud/upload-draft.js +91 -0
- package/dist/api/cloud/upload-draft.js.map +1 -0
- package/dist/api/draft/create-draft.d.ts +3 -0
- package/dist/api/draft/create-draft.d.ts.map +1 -0
- package/dist/api/draft/create-draft.js +11 -0
- package/dist/api/draft/create-draft.js.map +1 -0
- package/dist/api/draft/easy-create-material.d.ts +3 -0
- package/dist/api/draft/easy-create-material.d.ts.map +1 -0
- package/dist/api/draft/easy-create-material.js +64 -0
- package/dist/api/draft/easy-create-material.js.map +1 -0
- package/dist/api/draft/get-draft-info.d.ts +5 -0
- package/dist/api/draft/get-draft-info.d.ts.map +1 -0
- package/dist/api/draft/get-draft-info.js +35 -0
- package/dist/api/draft/get-draft-info.js.map +1 -0
- package/dist/api/draft/list-drafts.d.ts +3 -0
- package/dist/api/draft/list-drafts.d.ts.map +1 -0
- package/dist/api/draft/list-drafts.js +51 -0
- package/dist/api/draft/list-drafts.js.map +1 -0
- package/dist/api/draft-spec/create-and-render-draft.d.ts +3 -0
- package/dist/api/draft-spec/create-and-render-draft.d.ts.map +1 -0
- package/dist/api/draft-spec/create-and-render-draft.js +71 -0
- package/dist/api/draft-spec/create-and-render-draft.js.map +1 -0
- package/dist/api/draft-spec/create-draft-from-spec.d.ts +4 -0
- package/dist/api/draft-spec/create-draft-from-spec.d.ts.map +1 -0
- package/dist/api/draft-spec/create-draft-from-spec.js +96 -0
- package/dist/api/draft-spec/create-draft-from-spec.js.map +1 -0
- package/dist/api/draft-spec/resolve.d.ts +21 -0
- package/dist/api/draft-spec/resolve.d.ts.map +1 -0
- package/dist/api/draft-spec/resolve.js +279 -0
- package/dist/api/draft-spec/resolve.js.map +1 -0
- package/dist/api/draft-spec/time.d.ts +17 -0
- package/dist/api/draft-spec/time.d.ts.map +1 -0
- package/dist/api/draft-spec/time.js +56 -0
- package/dist/api/draft-spec/time.js.map +1 -0
- package/dist/api/draft-spec/validation.d.ts +3 -0
- package/dist/api/draft-spec/validation.d.ts.map +1 -0
- package/dist/api/draft-spec/validation.js +179 -0
- package/dist/api/draft-spec/validation.js.map +1 -0
- package/dist/api/effects/add-effects.d.ts +3 -0
- package/dist/api/effects/add-effects.d.ts.map +1 -0
- package/dist/api/effects/add-effects.js +24 -0
- package/dist/api/effects/add-effects.js.map +1 -0
- package/dist/api/effects/get-effects.d.ts +5 -0
- package/dist/api/effects/get-effects.d.ts.map +1 -0
- package/dist/api/effects/get-effects.js +23 -0
- package/dist/api/effects/get-effects.js.map +1 -0
- package/dist/api/images/add-images.d.ts +3 -0
- package/dist/api/images/add-images.d.ts.map +1 -0
- package/dist/api/images/add-images.js +67 -0
- package/dist/api/images/add-images.js.map +1 -0
- package/dist/api/images/get-images.d.ts +5 -0
- package/dist/api/images/get-images.d.ts.map +1 -0
- package/dist/api/images/get-images.js +30 -0
- package/dist/api/images/get-images.js.map +1 -0
- package/dist/api/keyframes/add-keyframes.d.ts +3 -0
- package/dist/api/keyframes/add-keyframes.d.ts.map +1 -0
- package/dist/api/keyframes/add-keyframes.js +21 -0
- package/dist/api/keyframes/add-keyframes.js.map +1 -0
- package/dist/api/keyframes/get-keyframes.d.ts +6 -0
- package/dist/api/keyframes/get-keyframes.d.ts.map +1 -0
- package/dist/api/keyframes/get-keyframes.js +41 -0
- package/dist/api/keyframes/get-keyframes.js.map +1 -0
- package/dist/api/masks/add-masks.d.ts +3 -0
- package/dist/api/masks/add-masks.d.ts.map +1 -0
- package/dist/api/masks/add-masks.js +63 -0
- package/dist/api/masks/add-masks.js.map +1 -0
- package/dist/api/masks/get-masks.d.ts +6 -0
- package/dist/api/masks/get-masks.d.ts.map +1 -0
- package/dist/api/masks/get-masks.js +44 -0
- package/dist/api/masks/get-masks.js.map +1 -0
- package/dist/api/query/get-audio-duration.d.ts +3 -0
- package/dist/api/query/get-audio-duration.d.ts.map +1 -0
- package/dist/api/query/get-audio-duration.js +12 -0
- package/dist/api/query/get-audio-duration.js.map +1 -0
- package/dist/api/query/get-image-animations.d.ts +3 -0
- package/dist/api/query/get-image-animations.d.ts.map +1 -0
- package/dist/api/query/get-image-animations.js +21 -0
- package/dist/api/query/get-image-animations.js.map +1 -0
- package/dist/api/setup/templates/project/.agents/skills/cut-draft/SKILL.md +77 -0
- package/dist/api/setup/templates/project/cut-sdk/.env.example +7 -0
- package/dist/api/setup/templates/project/cut-sdk/README.md +54 -0
- package/dist/api/setup/templates/project/cut-sdk/api-cheatsheet.md +132 -0
- package/dist/api/setup/templates/project/cut-sdk/examples/01-create-draft.ts +43 -0
- package/dist/api/setup/templates/project/cut-sdk/examples/02-draft-spec.ts +73 -0
- package/dist/api/setup/templates/project/cut-sdk/examples/03-create-and-render.ts +67 -0
- package/dist/api/setup/templates/project/cut-sdk/examples/04-cli-examples.md +71 -0
- package/dist/api/setup/templates/project/cut-sdk/quickstart.md +110 -0
- package/dist/api/sticker/add-sticker.d.ts +3 -0
- package/dist/api/sticker/add-sticker.d.ts.map +1 -0
- package/dist/api/sticker/add-sticker.js +22 -0
- package/dist/api/sticker/add-sticker.js.map +1 -0
- package/dist/api/sticker/get-stickers.d.ts +5 -0
- package/dist/api/sticker/get-stickers.d.ts.map +1 -0
- package/dist/api/sticker/get-stickers.js +23 -0
- package/dist/api/sticker/get-stickers.js.map +1 -0
- package/dist/api/text-style/add-text-style.d.ts +3 -0
- package/dist/api/text-style/add-text-style.d.ts.map +1 -0
- package/dist/api/text-style/add-text-style.js +25 -0
- package/dist/api/text-style/add-text-style.js.map +1 -0
- package/dist/api/videos/add-videos.d.ts +3 -0
- package/dist/api/videos/add-videos.d.ts.map +1 -0
- package/dist/api/videos/add-videos.js +84 -0
- package/dist/api/videos/add-videos.js.map +1 -0
- package/dist/api/videos/get-videos.d.ts +5 -0
- package/dist/api/videos/get-videos.d.ts.map +1 -0
- package/dist/api/videos/get-videos.js +30 -0
- package/dist/api/videos/get-videos.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +339 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/index.d.ts +10 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +26 -0
- package/dist/config/index.js.map +1 -0
- package/dist/draft/drafts/AudioMaterial.d.ts +41 -0
- package/dist/draft/drafts/AudioMaterial.d.ts.map +1 -0
- package/dist/draft/drafts/AudioMaterial.js +45 -0
- package/dist/draft/drafts/AudioMaterial.js.map +1 -0
- package/dist/draft/drafts/Draft.d.ts +272 -0
- package/dist/draft/drafts/Draft.d.ts.map +1 -0
- package/dist/draft/drafts/Draft.js +374 -0
- package/dist/draft/drafts/Draft.js.map +1 -0
- package/dist/draft/drafts/Effects.d.ts +32 -0
- package/dist/draft/drafts/Effects.d.ts.map +1 -0
- package/dist/draft/drafts/Effects.js +78 -0
- package/dist/draft/drafts/Effects.js.map +1 -0
- package/dist/draft/drafts/Huazi.d.ts +47 -0
- package/dist/draft/drafts/Huazi.d.ts.map +1 -0
- package/dist/draft/drafts/Huazi.js +71 -0
- package/dist/draft/drafts/Huazi.js.map +1 -0
- package/dist/draft/drafts/Keyframe.d.ts +57 -0
- package/dist/draft/drafts/Keyframe.d.ts.map +1 -0
- package/dist/draft/drafts/Keyframe.js +66 -0
- package/dist/draft/drafts/Keyframe.js.map +1 -0
- package/dist/draft/drafts/Mask.d.ts +74 -0
- package/dist/draft/drafts/Mask.d.ts.map +1 -0
- package/dist/draft/drafts/Mask.js +93 -0
- package/dist/draft/drafts/Mask.js.map +1 -0
- package/dist/draft/drafts/MediaUtil.d.ts +18 -0
- package/dist/draft/drafts/MediaUtil.d.ts.map +1 -0
- package/dist/draft/drafts/MediaUtil.js +101 -0
- package/dist/draft/drafts/MediaUtil.js.map +1 -0
- package/dist/draft/drafts/Qipaos.d.ts +35 -0
- package/dist/draft/drafts/Qipaos.d.ts.map +1 -0
- package/dist/draft/drafts/Qipaos.js +41 -0
- package/dist/draft/drafts/Qipaos.js.map +1 -0
- package/dist/draft/drafts/Segments.d.ts +74 -0
- package/dist/draft/drafts/Segments.d.ts.map +1 -0
- package/dist/draft/drafts/Segments.js +112 -0
- package/dist/draft/drafts/Segments.js.map +1 -0
- package/dist/draft/drafts/Stickers.d.ts +58 -0
- package/dist/draft/drafts/Stickers.d.ts.map +1 -0
- package/dist/draft/drafts/Stickers.js +64 -0
- package/dist/draft/drafts/Stickers.js.map +1 -0
- package/dist/draft/drafts/TextMaterial.d.ts +119 -0
- package/dist/draft/drafts/TextMaterial.d.ts.map +1 -0
- package/dist/draft/drafts/TextMaterial.js +182 -0
- package/dist/draft/drafts/TextMaterial.js.map +1 -0
- package/dist/draft/drafts/Track.d.ts +18 -0
- package/dist/draft/drafts/Track.d.ts.map +1 -0
- package/dist/draft/drafts/Track.js +30 -0
- package/dist/draft/drafts/Track.js.map +1 -0
- package/dist/draft/drafts/Transitions.d.ts +14 -0
- package/dist/draft/drafts/Transitions.d.ts.map +1 -0
- package/dist/draft/drafts/Transitions.js +21 -0
- package/dist/draft/drafts/Transitions.js.map +1 -0
- package/dist/draft/drafts/VideoMaterial.d.ts +87 -0
- package/dist/draft/drafts/VideoMaterial.d.ts.map +1 -0
- package/dist/draft/drafts/VideoMaterial.js +92 -0
- package/dist/draft/drafts/VideoMaterial.js.map +1 -0
- package/dist/draft/drafts/add_keyframes_v2.d.ts +2 -0
- package/dist/draft/drafts/add_keyframes_v2.d.ts.map +1 -0
- package/dist/draft/drafts/add_keyframes_v2.js +281 -0
- package/dist/draft/drafts/add_keyframes_v2.js.map +1 -0
- package/dist/draft/drafts/add_text_animations.d.ts +7 -0
- package/dist/draft/drafts/add_text_animations.d.ts.map +1 -0
- package/dist/draft/drafts/add_text_animations.js +29 -0
- package/dist/draft/drafts/add_text_animations.js.map +1 -0
- package/dist/draft/drafts/add_video_animations.d.ts +7 -0
- package/dist/draft/drafts/add_video_animations.d.ts.map +1 -0
- package/dist/draft/drafts/add_video_animations.js +29 -0
- package/dist/draft/drafts/add_video_animations.js.map +1 -0
- package/dist/draft/drafts/add_video_effects.d.ts +27 -0
- package/dist/draft/drafts/add_video_effects.d.ts.map +1 -0
- package/dist/draft/drafts/add_video_effects.js +11 -0
- package/dist/draft/drafts/add_video_effects.js.map +1 -0
- package/dist/draft/drafts/data/audio/audio_effect.d.ts +35 -0
- package/dist/draft/drafts/data/audio/audio_effect.d.ts.map +1 -0
- package/dist/draft/drafts/data/audio/audio_effect.js +98 -0
- package/dist/draft/drafts/data/audio/audio_effect.js.map +1 -0
- package/dist/draft/drafts/data/audio//346/250/241/346/213/237.json +4275 -0
- package/dist/draft/drafts/data/audio//347/216/257/345/242/203.json +1673 -0
- package/dist/draft/drafts/data/audio//347/276/216/345/214/226.json +860 -0
- package/dist/draft/drafts/data/effect/cn/effect.d.ts +29 -0
- package/dist/draft/drafts/data/effect/cn/effect.d.ts.map +1 -0
- package/dist/draft/drafts/data/effect/cn/effect.js +122 -0
- package/dist/draft/drafts/data/effect/cn/effect.js.map +1 -0
- package/dist/draft/drafts/data/effect/cn/huamian/aixing.json +3097 -0
- package/dist/draft/drafts/data/effect/cn/huamian/anhei.json +3456 -0
- package/dist/draft/drafts/data/effect/cn/huamian/biankuang.json +8201 -0
- package/dist/draft/drafts/data/effect/cn/huamian/bling.json +5836 -0
- package/dist/draft/drafts/data/effect/cn/huamian/chaoku.json +3554 -0
- package/dist/draft/drafts/data/effect/cn/huamian/dianyin.json +624 -0
- package/dist/draft/drafts/data/effect/cn/huamian/donggan.json +11193 -0
- package/dist/draft/drafts/data/effect/cn/huamian/dv.json +3305 -0
- package/dist/draft/drafts/data/effect/cn/huamian/fanwei.json +10631 -0
- package/dist/draft/drafts/data/effect/cn/huamian/fenpin.json +1016 -0
- package/dist/draft/drafts/data/effect/cn/huamian/fugu.json +7592 -0
- package/dist/draft/drafts/data/effect/cn/huamian/guang.json +5614 -0
- package/dist/draft/drafts/data/effect/cn/huamian/hot.json +16202 -0
- package/dist/draft/drafts/data/effect/cn/huamian/jichu.json +10017 -0
- package/dist/draft/drafts/data/effect/cn/huamian/jinfen.json +2545 -0
- package/dist/draft/drafts/data/effect/cn/huamian/manhua.json +1897 -0
- package/dist/draft/drafts/data/effect/cn/huamian/niuqu.json +2037 -0
- package/dist/draft/drafts/data/effect/cn/huamian/touyin.json +1013 -0
- package/dist/draft/drafts/data/effect/cn/huamian/wenlin.json +2942 -0
- package/dist/draft/drafts/data/effect/cn/huamian/xinnian.json +4627 -0
- package/dist/draft/drafts/data/effect/cn/huamian/zhongyi.json +3063 -0
- package/dist/draft/drafts/data/effect/cn/huamian/ziran.json +4791 -0
- package/dist/draft/drafts/data/effect/cn/huamian/zuixin.json +5677 -0
- package/dist/draft/drafts/data/effect/cn/renwu/anhei.json +900 -0
- package/dist/draft/drafts/data/effect/cn/renwu/danglian.json +1518 -0
- package/dist/draft/drafts/data/effect/cn/renwu/hot.json +20280 -0
- package/dist/draft/drafts/data/effect/cn/renwu/huanrao.json +1447 -0
- package/dist/draft/drafts/data/effect/cn/renwu/kelong.json +1857 -0
- package/dist/draft/drafts/data/effect/cn/renwu/qingxu.json +5641 -0
- package/dist/draft/drafts/data/effect/cn/renwu/shenti.json +2827 -0
- package/dist/draft/drafts/data/effect/cn/renwu/shoubu.json +742 -0
- package/dist/draft/drafts/data/effect/cn/renwu/tousi.json +3129 -0
- package/dist/draft/drafts/data/effect/cn/renwu/xingxiang.json +1397 -0
- package/dist/draft/drafts/data/effect/cn/renwu/zhuangshi.json +5017 -0
- package/dist/draft/drafts/data/font/font.d.ts +11 -0
- package/dist/draft/drafts/data/font/font.d.ts.map +1 -0
- package/dist/draft/drafts/data/font/font.js +9303 -0
- package/dist/draft/drafts/data/font/font.js.map +1 -0
- package/dist/draft/drafts/data/font/font_0427.d.ts +3 -0
- package/dist/draft/drafts/data/font/font_0427.d.ts.map +1 -0
- package/dist/draft/drafts/data/font/font_0427.js +57922 -0
- package/dist/draft/drafts/data/font/font_0427.js.map +1 -0
- package/dist/draft/drafts/data/font/online_font.d.ts +7 -0
- package/dist/draft/drafts/data/font/online_font.d.ts.map +1 -0
- package/dist/draft/drafts/data/font/online_font.js +78 -0
- package/dist/draft/drafts/data/font/online_font.js.map +1 -0
- package/dist/draft/drafts/data/huazi/all_huazi_data.json +94057 -0
- package/dist/draft/drafts/data/huazi/online_huazi.d.ts +9 -0
- package/dist/draft/drafts/data/huazi/online_huazi.d.ts.map +1 -0
- package/dist/draft/drafts/data/huazi/online_huazi.js +163 -0
- package/dist/draft/drafts/data/huazi/online_huazi.js.map +1 -0
- package/dist/draft/drafts/data/texiao/aixin.json +2555 -0
- package/dist/draft/drafts/data/texiao/anhei.json +2909 -0
- package/dist/draft/drafts/data/texiao/biankuang.json +5906 -0
- package/dist/draft/drafts/data/texiao/bling.json +4171 -0
- package/dist/draft/drafts/data/texiao/chaoku.json +1560 -0
- package/dist/draft/drafts/data/texiao/dianyin.json +522 -0
- package/dist/draft/drafts/data/texiao/donggan.json +6157 -0
- package/dist/draft/drafts/data/texiao/dv.json +1796 -0
- package/dist/draft/drafts/data/texiao/fenpin.json +712 -0
- package/dist/draft/drafts/data/texiao/fenwei.json +4405 -0
- package/dist/draft/drafts/data/texiao/fugu.json +4472 -0
- package/dist/draft/drafts/data/texiao/guang.json +2297 -0
- package/dist/draft/drafts/data/texiao/jichu.json +4929 -0
- package/dist/draft/drafts/data/texiao/jinfen.json +1712 -0
- package/dist/draft/drafts/data/texiao/manhua.json +1700 -0
- package/dist/draft/drafts/data/texiao/niuqu.json +708 -0
- package/dist/draft/drafts/data/texiao/remen.json +7147 -0
- package/dist/draft/drafts/data/texiao/texiao.d.ts +53 -0
- package/dist/draft/drafts/data/texiao/texiao.d.ts.map +1 -0
- package/dist/draft/drafts/data/texiao/texiao.js +102 -0
- package/dist/draft/drafts/data/texiao/texiao.js.map +1 -0
- package/dist/draft/drafts/data/texiao/touyin.json +2354 -0
- package/dist/draft/drafts/data/texiao/wenli.json +2118 -0
- package/dist/draft/drafts/data/texiao/ziran.json +2882 -0
- package/dist/draft/drafts/data/texiao/zongyi.json +2287 -0
- package/dist/draft/drafts/data/text/chuchang.d.ts +35 -0
- package/dist/draft/drafts/data/text/chuchang.d.ts.map +1 -0
- package/dist/draft/drafts/data/text/chuchang.js +4547 -0
- package/dist/draft/drafts/data/text/chuchang.js.map +1 -0
- package/dist/draft/drafts/data/text/qipao.d.ts +87 -0
- package/dist/draft/drafts/data/text/qipao.d.ts.map +1 -0
- package/dist/draft/drafts/data/text/qipao.js +17773 -0
- package/dist/draft/drafts/data/text/qipao.js.map +1 -0
- package/dist/draft/drafts/data/text/ruchang.d.ts +35 -0
- package/dist/draft/drafts/data/text/ruchang.d.ts.map +1 -0
- package/dist/draft/drafts/data/text/ruchang.js +5363 -0
- package/dist/draft/drafts/data/text/ruchang.js.map +1 -0
- package/dist/draft/drafts/data/text/text_animations.d.ts +7 -0
- package/dist/draft/drafts/data/text/text_animations.d.ts.map +1 -0
- package/dist/draft/drafts/data/text/text_animations.js +147 -0
- package/dist/draft/drafts/data/text/text_animations.js.map +1 -0
- package/dist/draft/drafts/data/text/text_animations.json +26179 -0
- package/dist/draft/drafts/data/text/xunhuan.d.ts +35 -0
- package/dist/draft/drafts/data/text/xunhuan.d.ts.map +1 -0
- package/dist/draft/drafts/data/text/xunhuan.js +3435 -0
- package/dist/draft/drafts/data/text/xunhuan.js.map +1 -0
- package/dist/draft/drafts/data/tezhi/cn/aixin.json +3625 -0
- package/dist/draft/drafts/data/tezhi/cn/biaoqing.json +3269 -0
- package/dist/draft/drafts/data/tezhi/cn/bohemanbo.json +3270 -0
- package/dist/draft/drafts/data/tezhi/cn/dianshang.json +3269 -0
- package/dist/draft/drafts/data/tezhi/cn/dongri.json +3267 -0
- package/dist/draft/drafts/data/tezhi/cn/hot.json +3379 -0
- package/dist/draft/drafts/data/tezhi/cn/hudie.json +3490 -0
- package/dist/draft/drafts/data/tezhi/cn/hudong.json +3328 -0
- package/dist/draft/drafts/data/tezhi/cn/hunli.json +3290 -0
- package/dist/draft/drafts/data/tezhi/cn/jiari.json +3276 -0
- package/dist/draft/drafts/data/tezhi/cn/keai.json +3269 -0
- package/dist/draft/drafts/data/tezhi/cn/langman.json +3290 -0
- package/dist/draft/drafts/data/tezhi/cn/lvxing.json +3350 -0
- package/dist/draft/drafts/data/tezhi/cn/meishi.json +3294 -0
- package/dist/draft/drafts/data/tezhi/cn/meizhuang.json +3279 -0
- package/dist/draft/drafts/data/tezhi/cn/qingxu1.json +3421 -0
- package/dist/draft/drafts/data/tezhi/cn/qingxu2.json +3368 -0
- package/dist/draft/drafts/data/tezhi/cn/qingxu3.json +3358 -0
- package/dist/draft/drafts/data/tezhi/cn/qingxu4.json +3361 -0
- package/dist/draft/drafts/data/tezhi/cn/regeng.json +3292 -0
- package/dist/draft/drafts/data/tezhi/cn/vip.json +3336 -0
- package/dist/draft/drafts/data/tezhi/cn/vlog.json +3295 -0
- package/dist/draft/drafts/data/tezhi/cn/xiari.json +3411 -0
- package/dist/draft/drafts/data/tezhi/cn/xinnian.json +3274 -0
- package/dist/draft/drafts/data/tezhi/cn/yinyuejie.json +3285 -0
- package/dist/draft/drafts/data/tezhi/cn/yundong.json +3267 -0
- package/dist/draft/drafts/data/tezhi/cn/zhakai.json +3399 -0
- package/dist/draft/drafts/data/tezhi/cn/zhisi.json +3385 -0
- package/dist/draft/drafts/data/tezhi/cn_sticker.d.ts +2 -0
- package/dist/draft/drafts/data/tezhi/cn_sticker.d.ts.map +1 -0
- package/dist/draft/drafts/data/tezhi/cn_sticker.js +41 -0
- package/dist/draft/drafts/data/tezhi/cn_sticker.js.map +1 -0
- package/dist/draft/drafts/data/transitions/cn/MG/345/212/250/347/224/273.json +880 -0
- package/dist/draft/drafts/data/transitions/cn/hot.json +20419 -0
- package/dist/draft/drafts/data/transitions/cn//344/272/222/345/212/250emoji.json +820 -0
- package/dist/draft/drafts/data/transitions/cn//345/205/211/346/225/210.json +3355 -0
- package/dist/draft/drafts/data/transitions/cn//345/210/206/345/211/262.json +2255 -0
- package/dist/draft/drafts/data/transitions/cn//345/217/240/345/214/226.json +2206 -0
- package/dist/draft/drafts/data/transitions/cn//345/271/273/347/201/257/347/211/207.json +4175 -0
- package/dist/draft/drafts/data/transitions/cn//346/211/255/346/233/262.json +2388 -0
- package/dist/draft/drafts/data/transitions/cn//346/213/215/346/221/204.json +1546 -0
- package/dist/draft/drafts/data/transitions/cn//346/225/205/351/232/234.json +1616 -0
- package/dist/draft/drafts/data/transitions/cn//346/226/260/345/271/264.json +2935 -0
- package/dist/draft/drafts/data/transitions/cn//346/234/200/346/226/260.json +3167 -0
- package/dist/draft/drafts/data/transitions/cn//346/250/241/347/263/212.json +1535 -0
- package/dist/draft/drafts/data/transitions/cn//347/273/274/350/211/272.json +904 -0
- package/dist/draft/drafts/data/transitions/cn//350/207/252/347/204/266.json +657 -0
- package/dist/draft/drafts/data/transitions/cn//350/277/220/351/225/234.json +5283 -0
- package/dist/draft/drafts/data/transitions/cn_transitions.d.ts +3 -0
- package/dist/draft/drafts/data/transitions/cn_transitions.d.ts.map +1 -0
- package/dist/draft/drafts/data/transitions/cn_transitions.js +52 -0
- package/dist/draft/drafts/data/transitions/cn_transitions.js.map +1 -0
- package/dist/draft/drafts/data/video/group.d.ts +35 -0
- package/dist/draft/drafts/data/video/group.d.ts.map +1 -0
- package/dist/draft/drafts/data/video/group.js +7496 -0
- package/dist/draft/drafts/data/video/group.js.map +1 -0
- package/dist/draft/drafts/data/video/ins.d.ts +19 -0
- package/dist/draft/drafts/data/video/ins.d.ts.map +1 -0
- package/dist/draft/drafts/data/video/ins.js +3046 -0
- package/dist/draft/drafts/data/video/ins.js.map +1 -0
- package/dist/draft/drafts/data/video/out.d.ts +35 -0
- package/dist/draft/drafts/data/video/out.d.ts.map +1 -0
- package/dist/draft/drafts/data/video/out.js +1640 -0
- package/dist/draft/drafts/data/video/out.js.map +1 -0
- package/dist/draft/drafts/data/video/video_animations.d.ts +7 -0
- package/dist/draft/drafts/data/video/video_animations.d.ts.map +1 -0
- package/dist/draft/drafts/data/video/video_animations.js +138 -0
- package/dist/draft/drafts/data/video/video_animations.js.map +1 -0
- package/dist/draft/drafts/data/video/video_animations.json +22380 -0
- package/dist/draft/drafts/online_effects.d.ts +3 -0
- package/dist/draft/drafts/online_effects.d.ts.map +1 -0
- package/dist/draft/drafts/online_effects.js +57 -0
- package/dist/draft/drafts/online_effects.js.map +1 -0
- package/dist/draft/index.d.ts +23 -0
- package/dist/draft/index.d.ts.map +1 -0
- package/dist/draft/index.js +20 -0
- package/dist/draft/index.js.map +1 -0
- package/dist/index.d.ts +56 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +86 -0
- package/dist/index.js.map +1 -0
- package/dist/shared/cloud-client.d.ts +64 -0
- package/dist/shared/cloud-client.d.ts.map +1 -0
- package/dist/shared/cloud-client.js +121 -0
- package/dist/shared/cloud-client.js.map +1 -0
- package/dist/shared/draft-service.d.ts +9 -0
- package/dist/shared/draft-service.d.ts.map +1 -0
- package/dist/shared/draft-service.js +91 -0
- package/dist/shared/draft-service.js.map +1 -0
- package/dist/shared/errors.d.ts +28 -0
- package/dist/shared/errors.d.ts.map +1 -0
- package/dist/shared/errors.js +138 -0
- package/dist/shared/errors.js.map +1 -0
- package/dist/shared/logger.d.ts +6 -0
- package/dist/shared/logger.d.ts.map +1 -0
- package/dist/shared/logger.js +9 -0
- package/dist/shared/logger.js.map +1 -0
- package/dist/shared/media-downloader.d.ts +14 -0
- package/dist/shared/media-downloader.d.ts.map +1 -0
- package/dist/shared/media-downloader.js +94 -0
- package/dist/shared/media-downloader.js.map +1 -0
- package/dist/shared/media.d.ts +6 -0
- package/dist/shared/media.d.ts.map +1 -0
- package/dist/shared/media.js +92 -0
- package/dist/shared/media.js.map +1 -0
- package/dist/template/attachment_pc_common.json +1 -0
- package/dist/template/draft_agency_config.json +1 -0
- package/dist/template/draft_content.json +132 -0
- package/dist/template/draft_meta_info.json +59 -0
- package/dist/template/template.tmp +1 -0
- package/dist/types/index.d.ts +620 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +67 -4
- package/index.js +0 -1
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getMasks = getMasks;
|
|
4
|
+
const draft_service_1 = require("../../shared/draft-service");
|
|
5
|
+
async function getMasks(params) {
|
|
6
|
+
const draft = await (0, draft_service_1.loadDraft)(params.draftId);
|
|
7
|
+
const masks = draft.materials?.masks || [];
|
|
8
|
+
if (!params.segmentId) {
|
|
9
|
+
const results = [];
|
|
10
|
+
for (const track of draft.tracks || []) {
|
|
11
|
+
for (const segment of track.segments || []) {
|
|
12
|
+
const refs = segment.extra_material_refs || [];
|
|
13
|
+
for (const mask of masks) {
|
|
14
|
+
if (refs.includes(mask.id))
|
|
15
|
+
results.push(toMaskInfo(mask));
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return results.length > 0 ? results : masks.map(toMaskInfo);
|
|
20
|
+
}
|
|
21
|
+
const segment = draft.get_segment_by_id(params.segmentId);
|
|
22
|
+
if (!segment)
|
|
23
|
+
return [];
|
|
24
|
+
const refs = segment.extra_material_refs || [];
|
|
25
|
+
return masks.filter((m) => refs.includes(m.id)).map(toMaskInfo);
|
|
26
|
+
}
|
|
27
|
+
function toMaskInfo(m) {
|
|
28
|
+
return {
|
|
29
|
+
id: m.id,
|
|
30
|
+
name: m.name || '',
|
|
31
|
+
resourceType: m.resource_type || '',
|
|
32
|
+
config: {
|
|
33
|
+
centerX: m.config?.centerX || 0,
|
|
34
|
+
centerY: m.config?.centerY || 0,
|
|
35
|
+
width: m.config?.width || 0,
|
|
36
|
+
height: m.config?.height || 0,
|
|
37
|
+
feather: m.config?.feather || 0,
|
|
38
|
+
rotation: m.config?.rotation || 0,
|
|
39
|
+
invert: m.config?.invert || false,
|
|
40
|
+
roundCorner: m.config?.roundCorner || 0,
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=get-masks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-masks.js","sourceRoot":"","sources":["../../../src/api/masks/get-masks.ts"],"names":[],"mappings":";;AAGA,4BAsBC;AAzBD,8DAAuD;AAGhD,KAAK,UAAU,QAAQ,CAAC,MAA+C;IAC5E,MAAM,KAAK,GAAG,MAAM,IAAA,yBAAS,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAU,KAAK,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC;IAElD,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACtB,MAAM,OAAO,GAAe,EAAE,CAAC;QAC/B,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YACvC,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;gBAC3C,MAAM,IAAI,GAAa,OAAO,CAAC,mBAAmB,IAAI,EAAE,CAAC;gBACzD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;wBAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC7D,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC1D,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IAExB,MAAM,IAAI,GAAa,OAAO,CAAC,mBAAmB,IAAI,EAAE,CAAC;IACzD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,UAAU,CAAC,CAAM;IACxB,OAAO;QACL,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;QAClB,YAAY,EAAE,CAAC,CAAC,aAAa,IAAI,EAAE;QACnC,MAAM,EAAE;YACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC;YAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC;YAC/B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC;YAC3B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC;YAC7B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC;YAC/B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,IAAI,CAAC;YACjC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,IAAI,KAAK;YACjC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,WAAW,IAAI,CAAC;SACxC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-audio-duration.d.ts","sourceRoot":"","sources":["../../../src/api/query/get-audio-duration.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAEjF,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAMxG"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getAudioDurationApi = getAudioDurationApi;
|
|
4
|
+
const media_1 = require("../../shared/media");
|
|
5
|
+
async function getAudioDurationApi(params) {
|
|
6
|
+
const duration = await (0, media_1.getAudioDuration)(params.url);
|
|
7
|
+
if (duration === 0) {
|
|
8
|
+
return { message: 'Failed to get audio duration', duration: 0 };
|
|
9
|
+
}
|
|
10
|
+
return { message: 'ok', duration };
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=get-audio-duration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-audio-duration.js","sourceRoot":"","sources":["../../../src/api/query/get-audio-duration.ts"],"names":[],"mappings":";;AAGA,kDAMC;AATD,8CAA8E;AAGvE,KAAK,UAAU,mBAAmB,CAAC,MAA6B;IACrE,MAAM,QAAQ,GAAG,MAAM,IAAA,wBAAoB,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACxD,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,EAAE,OAAO,EAAE,8BAA8B,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IAClE,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-image-animations.d.ts","sourceRoot":"","sources":["../../../src/api/query/get-image-animations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAIrF,wBAAsB,kBAAkB,CAAC,MAAM,GAAE,uBAA4B,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAehH"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getImageAnimations = getImageAnimations;
|
|
4
|
+
const { Draft } = require('../../draft');
|
|
5
|
+
async function getImageAnimations(params = {}) {
|
|
6
|
+
const mode = params.mode || 0;
|
|
7
|
+
const type = params.type || 'in';
|
|
8
|
+
const draft = new Draft();
|
|
9
|
+
let effects;
|
|
10
|
+
if (type === 'loop') {
|
|
11
|
+
effects = draft.get_all_video_loop_Effects(mode);
|
|
12
|
+
}
|
|
13
|
+
else if (type === 'out') {
|
|
14
|
+
effects = draft.get_all_video_chuchang_Effects(mode);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
effects = draft.get_all_video_ruchang_Effects(mode);
|
|
18
|
+
}
|
|
19
|
+
return { effects };
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=get-image-animations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-image-animations.js","sourceRoot":"","sources":["../../../src/api/query/get-image-animations.ts"],"names":[],"mappings":";;AAIA,gDAeC;AAjBD,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AAElC,KAAK,UAAU,kBAAkB,CAAC,SAAkC,EAAE;IAC3E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;IAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC;IACjC,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;IAE1B,IAAI,OAAc,CAAC;IACnB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,GAAG,KAAK,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;SAAM,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QAC1B,OAAO,GAAG,KAAK,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,KAAK,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cut-draft
|
|
3
|
+
description: >-
|
|
4
|
+
使用 cutsdk 创建和操作剪映/CapCut 草稿工程。用户想创建剪映草稿、添加字幕/图片/视频/音频/特效/贴纸/关键帧/遮罩、
|
|
5
|
+
提交渲染,或提到 cut_sdk、cut、draft spec、剪映、草稿、字幕、CapCut draft 时使用此 skill。
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# cut_sdk 项目级 Skill
|
|
9
|
+
|
|
10
|
+
`cutsdk` 是用于创建剪映/CapCut 桌面端草稿文件夹的 Node.js SDK 和 CLI。生成后的草稿可直接在剪映桌面端打开。
|
|
11
|
+
|
|
12
|
+
## 先读这些
|
|
13
|
+
|
|
14
|
+
写代码前,先阅读本项目内的文档:
|
|
15
|
+
|
|
16
|
+
1. `cut-sdk/README.md`
|
|
17
|
+
2. `cut-sdk/quickstart.md`
|
|
18
|
+
3. `cut-sdk/api-cheatsheet.md`
|
|
19
|
+
|
|
20
|
+
实现时优先从 `cut-sdk/examples/` 里选择最接近的示例改起。
|
|
21
|
+
|
|
22
|
+
## 推荐使用路径
|
|
23
|
+
|
|
24
|
+
- AI 生成完整时间线时,优先使用 `createDraftFromSpec(spec)`。
|
|
25
|
+
- 用户希望“一次创建草稿并提交云渲染”时,使用 `createAndRenderDraft(input)`。
|
|
26
|
+
- 用户要逐步编辑草稿,或 Draft Spec 尚未覆盖某个能力时,再使用低层 API,例如 `createDraft`、`addCaptions`、`addImages`、`addVideos`、`addAudios`、`addMasks`、`addKeyframes`。
|
|
27
|
+
- 只有在用户明确需要命令行,或只是做快速手动操作时,才使用 CLI。
|
|
28
|
+
|
|
29
|
+
## 关键规则
|
|
30
|
+
|
|
31
|
+
- 包导入名是 `cutsdk`。
|
|
32
|
+
- 低层 SDK 和 CLI 的所有时间数值都是微秒:`1s = 1000000`。
|
|
33
|
+
- AI Draft Spec 的时间字符串可写为 `1.5s`、`500ms`、`300000us`。
|
|
34
|
+
- 默认草稿目录是 `~/Movies/JianyingPro Drafts/{draftId}/`;可通过 `CUT_DRAFTS_DIR` 覆盖。
|
|
35
|
+
- 媒体 URL 和本地媒体路径会由 SDK 复制/下载到草稿的 `resources/` 文件夹。
|
|
36
|
+
- 图片必须提供 `width` 和 `height`。
|
|
37
|
+
- 使用低层 API 添加视频或音频时,要提供素材原始时长。
|
|
38
|
+
- 同一轨道内的片段不要重叠,除非目标 API 明确会创建独立轨道。
|
|
39
|
+
- CLI 参数使用 kebab-case,例如 `--font-size`,不要写成 `--fontSize`。
|
|
40
|
+
|
|
41
|
+
## 最小 Draft Spec 示例
|
|
42
|
+
|
|
43
|
+
```ts
|
|
44
|
+
import { createDraftFromSpec } from 'cutsdk';
|
|
45
|
+
|
|
46
|
+
await createDraftFromSpec({
|
|
47
|
+
version: '1.0',
|
|
48
|
+
canvas: { width: 1080, height: 1920 },
|
|
49
|
+
tracks: [
|
|
50
|
+
{
|
|
51
|
+
type: 'text',
|
|
52
|
+
clips: [
|
|
53
|
+
{ type: 'caption', text: '你好剪映', start: '0s', duration: '3s' },
|
|
54
|
+
],
|
|
55
|
+
},
|
|
56
|
+
],
|
|
57
|
+
});
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## 云渲染环境变量
|
|
61
|
+
|
|
62
|
+
云渲染需要:
|
|
63
|
+
|
|
64
|
+
```env
|
|
65
|
+
CUT_API_TOKEN=your_token
|
|
66
|
+
CUT_UPLOAD_API_BASE=http://your-render-backend:8080
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
在调用方项目中使用 `.env`,或在调用 SDK 前自行加载环境变量。
|
|
70
|
+
|
|
71
|
+
## 常见坑
|
|
72
|
+
|
|
73
|
+
1. 不要混用包名。除非项目明确覆盖,否则始终使用 `cutsdk`。
|
|
74
|
+
2. 不要把“秒”直接作为低层 API 的数字传入。数字 `3` 表示 3 微秒,不是 3 秒。
|
|
75
|
+
3. 对动画/特效名有精确要求时,不要凭空编造。先用 CLI 查询可用资源,或使用项目里已有示例。
|
|
76
|
+
4. 除非 SDK 无法表达目标操作,否则不要手动改剪映草稿 JSON。
|
|
77
|
+
5. 生成复杂时间线时,先用 `validateDraftSpec(spec)` 校验 Draft Spec。
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# cut_sdk 项目接入指南
|
|
2
|
+
|
|
3
|
+
这个目录是给 AI Agent 和开发者第一次在项目中使用 `cutsdk` 时看的接入资料。
|
|
4
|
+
|
|
5
|
+
`cutsdk` 可以用 Node.js 代码创建剪映/CapCut 桌面端草稿文件夹,支持字幕、图片、视频、音频、特效、贴纸、关键帧、遮罩、AI Draft Spec,以及可选的云渲染。
|
|
6
|
+
|
|
7
|
+
## 阅读顺序
|
|
8
|
+
|
|
9
|
+
1. 先读 `quickstart.md`。
|
|
10
|
+
2. 再扫一遍 `api-cheatsheet.md`。
|
|
11
|
+
3. 从 `examples/` 中复制最接近需求的示例改起。
|
|
12
|
+
|
|
13
|
+
## 安装
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install cutsdk
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
如果要使用 CLI:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npm install -g cutsdk
|
|
23
|
+
cut draft create --width 1080 --height 1920
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
不全局安装也可以直接用 `npx`:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
npx cutsdk draft create --width 1080 --height 1920
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## 环境变量
|
|
33
|
+
|
|
34
|
+
当项目需要自定义草稿目录或使用云渲染时,把 `.env.example` 复制为 `.env` 并填写:
|
|
35
|
+
|
|
36
|
+
```env
|
|
37
|
+
CUT_DRAFTS_DIR=/absolute/path/to/JianyingPro Drafts
|
|
38
|
+
CUT_API_TOKEN=your_token
|
|
39
|
+
CUT_UPLOAD_API_BASE=http://your-render-backend:8080
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## 核心概念
|
|
43
|
+
|
|
44
|
+
- 一个草稿就是磁盘上的剪映兼容工程文件夹。
|
|
45
|
+
- 默认草稿路径是 `~/Movies/JianyingPro Drafts/{draftId}/`。
|
|
46
|
+
- 低层 SDK API 的时间数值使用微秒。
|
|
47
|
+
- AI Draft Spec 支持更易读的时间字符串,例如 `3s`、`500ms`、`300000us`。
|
|
48
|
+
- 媒体 URL 和本地文件路径会被复制/下载到草稿的 `resources` 文件夹。
|
|
49
|
+
|
|
50
|
+
## 推荐优先使用
|
|
51
|
+
|
|
52
|
+
AI 生成视频草稿时,优先使用 `createDraftFromSpec`。它允许用一个 JSON 对象描述完整时间线,再由 SDK 调用底层草稿 API。
|
|
53
|
+
|
|
54
|
+
创建草稿后还需要补充高级操作时,可以使用带 `afterCreate` 的 `createAndRenderDraft`,或直接调用低层 API。
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# cut_sdk API 速查
|
|
2
|
+
|
|
3
|
+
从 `cutsdk` 导入:
|
|
4
|
+
|
|
5
|
+
```ts
|
|
6
|
+
import {
|
|
7
|
+
createDraftFromSpec,
|
|
8
|
+
validateDraftSpec,
|
|
9
|
+
createAndRenderDraft,
|
|
10
|
+
createDraft,
|
|
11
|
+
getDraftInfo,
|
|
12
|
+
addCaptions,
|
|
13
|
+
addImages,
|
|
14
|
+
addVideos,
|
|
15
|
+
addAudios,
|
|
16
|
+
addEffects,
|
|
17
|
+
addSticker,
|
|
18
|
+
addKeyframes,
|
|
19
|
+
addMasks,
|
|
20
|
+
renderDraft,
|
|
21
|
+
isCutSdkError,
|
|
22
|
+
} from 'cutsdk';
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## 优先选择:AI Draft Spec
|
|
26
|
+
|
|
27
|
+
```ts
|
|
28
|
+
const result = await createDraftFromSpec({
|
|
29
|
+
version: '1.0',
|
|
30
|
+
canvas: { width: 1080, height: 1920 },
|
|
31
|
+
duration: '5s',
|
|
32
|
+
tracks: [
|
|
33
|
+
{ type: 'text', clips: [{ type: 'caption', text: 'Hello', start: '0s', duration: '5s' }] },
|
|
34
|
+
],
|
|
35
|
+
});
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
用于一次性生成完整时间线。
|
|
39
|
+
|
|
40
|
+
## 创建并渲染
|
|
41
|
+
|
|
42
|
+
```ts
|
|
43
|
+
const result = await createAndRenderDraft({
|
|
44
|
+
draft: spec,
|
|
45
|
+
output: {
|
|
46
|
+
draftsDir: process.env.CUT_DRAFTS_DIR,
|
|
47
|
+
name: 'demo-draft',
|
|
48
|
+
},
|
|
49
|
+
render: {
|
|
50
|
+
cloud: true,
|
|
51
|
+
apiToken: process.env.CUT_API_TOKEN,
|
|
52
|
+
apiBase: process.env.CUT_UPLOAD_API_BASE,
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
console.log(result.render?.videoUrl);
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## 低层草稿流程
|
|
60
|
+
|
|
61
|
+
```ts
|
|
62
|
+
const draft = await createDraft({ width: 1080, height: 1920 });
|
|
63
|
+
|
|
64
|
+
await addImages({
|
|
65
|
+
draftId: draft.draftId,
|
|
66
|
+
imageInfos: [
|
|
67
|
+
{ imageUrl: '/absolute/path/bg.png', width: 1080, height: 1920, start: 0, end: 5000000 },
|
|
68
|
+
],
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
await addCaptions({
|
|
72
|
+
draftId: draft.draftId,
|
|
73
|
+
captions: [{ text: 'Hello', start: 0, end: 5000000 }],
|
|
74
|
+
fontSize: 8,
|
|
75
|
+
textColor: '#ffffff',
|
|
76
|
+
});
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
需要逐步添加素材或操作时使用这种方式。
|
|
80
|
+
|
|
81
|
+
## 时间
|
|
82
|
+
|
|
83
|
+
低层 API 使用微秒:
|
|
84
|
+
|
|
85
|
+
| 人类时间 | 数值 |
|
|
86
|
+
|------------|-------|
|
|
87
|
+
| 0.5s | `500000` |
|
|
88
|
+
| 1s | `1000000` |
|
|
89
|
+
| 3s | `3000000` |
|
|
90
|
+
| 10s | `10000000` |
|
|
91
|
+
|
|
92
|
+
Draft Spec 可以使用字符串:
|
|
93
|
+
|
|
94
|
+
```ts
|
|
95
|
+
'1.5s'
|
|
96
|
+
'500ms'
|
|
97
|
+
'300000us'
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## 错误处理
|
|
101
|
+
|
|
102
|
+
```ts
|
|
103
|
+
try {
|
|
104
|
+
await createDraftFromSpec(spec);
|
|
105
|
+
} catch (error) {
|
|
106
|
+
if (isCutSdkError(error)) {
|
|
107
|
+
console.error(error.code, error.operation, error.details);
|
|
108
|
+
} else {
|
|
109
|
+
console.error(error);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
常见错误码:
|
|
115
|
+
|
|
116
|
+
| code | 含义 |
|
|
117
|
+
|------|---------|
|
|
118
|
+
| `INVALID_INPUT` | SDK 参数不合法 |
|
|
119
|
+
| `DRAFT_NOT_FOUND` | 草稿 ID 或草稿文件夹不存在 |
|
|
120
|
+
| `MEDIA_NOT_FOUND` | 本地媒体文件不存在 |
|
|
121
|
+
| `MEDIA_DOWNLOAD_FAILED` | 远程媒体下载失败 |
|
|
122
|
+
| `MISSING_API_TOKEN` | 缺少云渲染 token |
|
|
123
|
+
| `DRAFT_SPEC_VALIDATION_FAILED` | Draft Spec 校验失败 |
|
|
124
|
+
| `DRAFT_SPEC_RESOLVE_FAILED` | Draft Spec 无法归一化 |
|
|
125
|
+
|
|
126
|
+
## 对应 CLI 命令
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
cut draft create --width 1080 --height 1920
|
|
130
|
+
cut captions add <draftId> --captions '[{"text":"Hello","start":0,"end":3000000}]'
|
|
131
|
+
cut cloud render <draftId> --wait
|
|
132
|
+
```
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { addCaptions, addImages, createDraft, getDraftInfo } from 'cutsdk';
|
|
2
|
+
|
|
3
|
+
async function main() {
|
|
4
|
+
const draft = await createDraft({ width: 1080, height: 1920 });
|
|
5
|
+
|
|
6
|
+
await addImages({
|
|
7
|
+
draftId: draft.draftId,
|
|
8
|
+
imageInfos: [
|
|
9
|
+
{
|
|
10
|
+
imageUrl: '/absolute/path/to/background.png',
|
|
11
|
+
width: 1080,
|
|
12
|
+
height: 1920,
|
|
13
|
+
start: 0,
|
|
14
|
+
end: 5000000,
|
|
15
|
+
},
|
|
16
|
+
],
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
await addCaptions({
|
|
20
|
+
draftId: draft.draftId,
|
|
21
|
+
captions: [
|
|
22
|
+
{
|
|
23
|
+
text: '低层 SDK 示例',
|
|
24
|
+
start: 0,
|
|
25
|
+
end: 5000000,
|
|
26
|
+
keyword: 'SDK',
|
|
27
|
+
keywordColor: '#00ffaa',
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
fontSize: 8,
|
|
31
|
+
textColor: '#ffffff',
|
|
32
|
+
bold: true,
|
|
33
|
+
transformY: -0.65,
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
const info = await getDraftInfo({ draftId: draft.draftId });
|
|
37
|
+
console.log({ draft, info });
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
main().catch((error) => {
|
|
41
|
+
console.error(error);
|
|
42
|
+
process.exit(1);
|
|
43
|
+
});
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { createDraftFromSpec, validateDraftSpec } from 'cutsdk';
|
|
2
|
+
|
|
3
|
+
const spec = {
|
|
4
|
+
version: '1.0',
|
|
5
|
+
canvas: { width: 1080, height: 1920 },
|
|
6
|
+
duration: '6s',
|
|
7
|
+
assets: {
|
|
8
|
+
cover: {
|
|
9
|
+
type: 'image',
|
|
10
|
+
src: '/absolute/path/to/cover.png',
|
|
11
|
+
width: 1080,
|
|
12
|
+
height: 1920,
|
|
13
|
+
},
|
|
14
|
+
bgm: {
|
|
15
|
+
type: 'audio',
|
|
16
|
+
src: '/absolute/path/to/music.mp3',
|
|
17
|
+
duration: '6s',
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
styles: {
|
|
21
|
+
title: {
|
|
22
|
+
fontSize: 10,
|
|
23
|
+
color: '#ffffff',
|
|
24
|
+
bold: true,
|
|
25
|
+
shadow: true,
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
tracks: [
|
|
29
|
+
{
|
|
30
|
+
type: 'visual',
|
|
31
|
+
clips: [
|
|
32
|
+
{ type: 'image', asset: 'cover', start: '0s', duration: '6s' },
|
|
33
|
+
],
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
type: 'text',
|
|
37
|
+
clips: [
|
|
38
|
+
{
|
|
39
|
+
type: 'caption',
|
|
40
|
+
text: 'AI Draft Spec 示例',
|
|
41
|
+
style: 'title',
|
|
42
|
+
keyword: 'AI|Spec',
|
|
43
|
+
keywordColor: '#00ffaa',
|
|
44
|
+
start: '0s',
|
|
45
|
+
duration: '6s',
|
|
46
|
+
position: 'bottom',
|
|
47
|
+
},
|
|
48
|
+
],
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
type: 'audio',
|
|
52
|
+
clips: [
|
|
53
|
+
{ type: 'audio', asset: 'bgm', start: '0s', duration: '6s', volume: 0.7 },
|
|
54
|
+
],
|
|
55
|
+
},
|
|
56
|
+
],
|
|
57
|
+
} as const;
|
|
58
|
+
|
|
59
|
+
async function main() {
|
|
60
|
+
const validation = validateDraftSpec(spec);
|
|
61
|
+
if (!validation.valid) {
|
|
62
|
+
console.error(validation.errors);
|
|
63
|
+
process.exit(1);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const draft = await createDraftFromSpec(spec);
|
|
67
|
+
console.log(draft);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
main().catch((error) => {
|
|
71
|
+
console.error(error);
|
|
72
|
+
process.exit(1);
|
|
73
|
+
});
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { addKeyframes, addMasks, createAndRenderDraft } from 'cutsdk';
|
|
2
|
+
|
|
3
|
+
async function main() {
|
|
4
|
+
const result = await createAndRenderDraft({
|
|
5
|
+
draft: {
|
|
6
|
+
version: '1.0',
|
|
7
|
+
canvas: { width: 1080, height: 1920 },
|
|
8
|
+
duration: '5s',
|
|
9
|
+
assets: {
|
|
10
|
+
bg: {
|
|
11
|
+
type: 'image',
|
|
12
|
+
src: '/absolute/path/to/background.png',
|
|
13
|
+
width: 1080,
|
|
14
|
+
height: 1920,
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
tracks: [
|
|
18
|
+
{
|
|
19
|
+
type: 'visual',
|
|
20
|
+
clips: [{ type: 'image', asset: 'bg', start: '0s', duration: '5s' }],
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
type: 'text',
|
|
24
|
+
clips: [{ type: 'caption', text: '创建并云渲染', start: '0s', duration: '5s' }],
|
|
25
|
+
},
|
|
26
|
+
],
|
|
27
|
+
},
|
|
28
|
+
output: {
|
|
29
|
+
draftsDir: process.env.CUT_DRAFTS_DIR,
|
|
30
|
+
name: 'cut-sdk-render-demo',
|
|
31
|
+
},
|
|
32
|
+
afterCreate: async ({ draft, clip }) => {
|
|
33
|
+
const firstImage = clip('image', 0);
|
|
34
|
+
if (!firstImage.segmentId) return;
|
|
35
|
+
|
|
36
|
+
await addMasks({
|
|
37
|
+
draftId: draft.draftId,
|
|
38
|
+
segmentIds: [firstImage.segmentId],
|
|
39
|
+
name: '矩形',
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
await addKeyframes({
|
|
43
|
+
draftId: draft.draftId,
|
|
44
|
+
keyframes: [
|
|
45
|
+
{ segmentId: firstImage.segmentId, property: 'KFTypeScaleX', offset: 0, value: 1.0 },
|
|
46
|
+
{ segmentId: firstImage.segmentId, property: 'KFTypeScaleX', offset: 5000000, value: 1.08 },
|
|
47
|
+
{ segmentId: firstImage.segmentId, property: 'KFTypeScaleY', offset: 0, value: 1.0 },
|
|
48
|
+
{ segmentId: firstImage.segmentId, property: 'KFTypeScaleY', offset: 5000000, value: 1.08 },
|
|
49
|
+
],
|
|
50
|
+
});
|
|
51
|
+
},
|
|
52
|
+
render: {
|
|
53
|
+
cloud: true,
|
|
54
|
+
apiToken: process.env.CUT_API_TOKEN,
|
|
55
|
+
apiBase: process.env.CUT_UPLOAD_API_BASE,
|
|
56
|
+
wait: true,
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
console.log(result.draft.filePath);
|
|
61
|
+
console.log(result.render?.videoUrl);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
main().catch((error) => {
|
|
65
|
+
console.error(error);
|
|
66
|
+
process.exit(1);
|
|
67
|
+
});
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# cut_sdk CLI 示例
|
|
2
|
+
|
|
3
|
+
当用户希望使用命令行而不是 SDK 代码时,参考这些示例。
|
|
4
|
+
|
|
5
|
+
## 创建草稿
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
cut draft create --width 1080 --height 1920 --pretty
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
输出中会包含 `draftId`,后续命令都使用这个草稿 ID。
|
|
12
|
+
|
|
13
|
+
## 添加字幕
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
cut captions add <draftId> --captions '[
|
|
17
|
+
{
|
|
18
|
+
"text": "CLI 字幕示例",
|
|
19
|
+
"start": 0,
|
|
20
|
+
"end": 3000000,
|
|
21
|
+
"keyword": "CLI",
|
|
22
|
+
"keywordColor": "#00ffaa",
|
|
23
|
+
"inAnimation": "渐显",
|
|
24
|
+
"outAnimation": "渐隐",
|
|
25
|
+
"inAnimationDuration": 500000,
|
|
26
|
+
"outAnimationDuration": 500000
|
|
27
|
+
}
|
|
28
|
+
]' --font-size 8 --text-color "#ffffff" --bold --pretty
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## 添加图片
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
cut images add <draftId> --image-infos '[
|
|
35
|
+
{
|
|
36
|
+
"imageUrl": "/absolute/path/to/background.png",
|
|
37
|
+
"width": 1080,
|
|
38
|
+
"height": 1920,
|
|
39
|
+
"start": 0,
|
|
40
|
+
"end": 5000000
|
|
41
|
+
}
|
|
42
|
+
]' --pretty
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## 添加音频
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
cut audios add <draftId> --audio-infos '[
|
|
49
|
+
{
|
|
50
|
+
"audioUrl": "/absolute/path/to/music.mp3",
|
|
51
|
+
"duration": 5000000,
|
|
52
|
+
"start": 0,
|
|
53
|
+
"end": 5000000,
|
|
54
|
+
"volume": 0.7
|
|
55
|
+
}
|
|
56
|
+
]' --pretty
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## 渲染
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
cut cloud render <draftId> --wait --pretty
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## JSON 文件输入
|
|
66
|
+
|
|
67
|
+
大多数 JSON 参数也支持 `@file.json`:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
cut captions add <draftId> --captions @captions.json --pretty
|
|
71
|
+
```
|