| name | capcut-cli |
| description | Guide for using the cli-anything-capcut CLI (v0.4.x) to programmatically build, validate, render,
and refine CapCut/JianYing video drafts. Use this skill whenever the user wants to: scaffold a
CapCut project via CLI, write or import a recipe JSON, troubleshoot CapCut CLI errors, run a
preview/review/render pipeline, generate a draft from natural language, or automate any video
editing workflow with cli-anything-capcut. Trigger when user mentions 'capcut cli',
'cli-anything-capcut', 'capcut recipe', 'capcut draft', 'CapCut ํ๋ก์ ํธ', 'CapCut ๋ ๋',
'draft_content.json', 'pyCapCut', 'pycapcut', 'capcut staging', 'capcut preview', 'capcut review',
'capcut plan', 'capcut preset slideshow / lyric-video / intro-outro / pip', or 'capcut style preset'.
Korean triggers: 'ํ์ฒ๋ฆฌํด์ค', '์บก์ปท์ ๋ฃ์ด์ค', '์์ ํธ์งํด์ค', '์บก์ปท ๋๋ํํธ', '์บก์ปท ํ๋ก์ ํธ',
'ํํฐ ์ ์ฉ', '์ดํํธ ์ถ๊ฐ', '์๋ง ๋ฃ์ด์ค', '์๋ณด์ ', 'ํธ๋์ง์
', 'SRT ์ํฌํธ', '์ฌ๋ผ์ด๋์ผ',
'๊ฐ์ฌ ์์', 'BGM ๊น์์ค', 'CapCut ๋ ๋', 'MP4 ๋ฝ์์ค'.
Even when the user says "make a CapCut project" or "edit this video", use this skill to ensure
v0.4.x CLI patterns are followed (commands, role-based animations, normalized -1..+1 color, staging).
|
CLI version: 0.4.x (cli-anything-capcut --version). v0.3 docs that mention add-with-transition,
add-with-animation, --category for animations, --type for transitions, 0โ100 color values,
recipe-validate/recipe-apply/save --register/doctor/alias search-all are outdated โ
see the rename table below.
๐ฌ Brief ํ์
โ 3ํ์ด์ฆ 16๊ฐ ์ง๋ฌธ (์๋ํ ํ์ดํ๋ผ์ธ ์ ์ฉ)
capcut-cli๋ ์๋ํ๊ฐ ๋ชฉ์ ์
๋๋ค. ํ ๋ฒ ์๋ชป๋ ๋ธ๋ฆฌํ๋ก ํ์ดํ๋ผ์ธ์ด ๋๋ฉด 15~30๋ถ์ง๋ฆฌ
๋ ๋๋ฅผ ํต์งธ๋ก ๋ค์ ํด์ผ ํฉ๋๋ค. ๊ทธ๋์ ๋ธ๋ฆฌํ ๋จ๊ณ์ ์๊ฐ์ ํฌ์ํด ์ฒซ ์๋์ ๋ง๊ฒ ๊ฐ๋
๊ฒ์ด ํจ์ฌ ๋น ๋ฆ
๋๋ค.
์ด์ ์์น
- ํ์ด์ฆ ๋จ์๋ก ๋ฌถ์ด ๋ฌป๊ธฐ โ ํ ๋ฒ์ 3ํ์ด์ฆ ๋ชจ๋ ์์๋ถ์ง ๋ง๊ณ , ํ์ด์ฆ๋ง๋ค ๋ต ๋ฐ๊ณ
ํ์ธํ ๋ค ๋ค์์ผ๋ก. ๊ฐ ํ์ด์ฆ ๋์ ์์ฝ+์น์ธ ์ฒดํฌํฌ์ธํธ 1ํ์ฉ (์ด 3ํ).
- ์ด๋ฏธ ์๋ ค์ค ์ ๋ณด๋ ๋ค์ ์ ๋ฌป๊ธฐ โ "ํ์ธ: X๋ก ์ดํดํ์ด์" ๋ก ๋์ฒด. ์ค๋ณต ์ง๋ฌธ์ ์ง์ฆ ์ ๋ฐ.
- "์์์ ํด์ค" ์ ์ธ ์ โ ํด๋น ํ์ด์ฆ ์ดํ๋ ๋ํดํธ๋ก ์๋ ์งํ + ๋ํดํธ ๊ฐ ๋ช
์.
- ์ง๋ฌธ ๊ฑด๋๋ฐ๊ธฐ ๊ธฐ์ค: Phase 1์ 6๊ฐ์ง๊ฐ ๋ชจ๋ ์์ฒญ์ ๋ด๊ฒจ ์์ผ๋ฉด Phase 1 ์คํต. ๊ฐ ํ์ด์ฆ
๋ง์ฐฌ๊ฐ์ง.
- BOLD ๋ฐฉํฅ์ฑ (frontend-design ์ฐจ์ฉ): ํคยท์คํ์ผ ์ง๋ฌธ์ 2~3์ง์ ๋ค ๋๋ ทํ ์ฝ์
ํธ๋ก
์ ์. "๊ทธ๋ฅ ์์๊ฒ" ๋ต ๋์ CINEMATIC/VIVID/MINIMAL ์ค ํ๋๋ฅผ ๊ณ ๋ฅด๊ฒ ํด ๋ฐ๋ฐํ ํ๊ท ํํผ.
Phase 1 โ ๊ธฐํ (ํ์ 6๊ฐ, ํ ๋ฉ์์ง๋ก)
์์ฌ๊ฒฐ์ ๋ผ๋. ๋ต ์์ผ๋ฉด ์งํ ๋ถ๊ฐ.
์์ ์๋ํ ๋๋ฆฌ๊ธฐ ์ ์ ๊ธฐํ 6๊ฐ๋ง ํ์ธํ ๊ฒ์ (ํ ๋ฒ์ ๋ต์ฃผ์๋ฉด ํ์ด์ฆ 2๋ก ๋์ด๊ฐ๋๋ค):
1) **ํ ์ค ์์ฝ**: ์ด๋ค ์์์ธ๊ฐ์? ์ฉ๋+๋ด์ฉ์ ํ ๋ฌธ์ฅ์ผ๋ก.
์) "์ ๊ท ์ถ์ํ ์ ํ์ ์๊ฐํ๋ ์ธ์คํ ๋ฆด์ค 30์ด"
2) **์์ฒญ์ยท๋ชฉ์ **: ๋๊ฐ ๋ณด๊ณ , ๋ณด๊ณ ๋ ๋ค ๋ญ ํ๊ธธ ์ํด์?
์) "20~30๋ ์ฌ์ฑ, ์์ฝ ํ์ด์ง ๋ฐฉ๋ฌธ ์ ๋"
3) **ํ๋ซํผยท๋น์จยท๊ธธ์ด**: ์ด๋ ์ฌ๋ฆด์ง + ๋๋ต ๊ธธ์ด
(์ผ์ธ =9:16/15~60s, ์ ํ๋ธ ๋ณธํธ=16:9, ๋ฆด์ค=9:16, ๊ฐ์=16:9, ์ธ์คํ ํผ๋=1:1)
4) **์์ฌ ํ์ผ**: ๊ฐ์ง ๊ฒ๋ค์ ๊ฒฝ๋กยท์ข
๋ฅยท๋๋ต ๊ฐ์
์) "D:/์ดฌ์/room1.mp4, room2.mp4 + D:/bgm.mp3 + D:/logo.png"
(์์ผ๋ฉด "์์" โ ์ด ๊ฒฝ์ฐ pexels-media ์คํฌ๋ก ์ ํ or ์ฌ์ฉ์ ์ค๋น ๋๊ธฐ)
5) **์ฐธ๊ณ ยท๋ ํผ๋ฐ์ค**: ๋น์ทํ ์์ URL 1๊ฐ ๋๋ ๋ฌด๋ ํค์๋ ์์ ์์
์) "์ด ๋ฆด์ค์ฒ๋ผ https://... / '๋
ธ์ ๊ฐ์ฑ'"
6) **์ ์ฒด ํค** (BOLD 3์ง์ ๋ค โ ํ๊ท ๊ฐ ๊ธ์ง):
A. **CINEMATIC** โ film ํํฐ, ์ด๋ก๊ณ ๋๋น ๊ฐํจ, ๋๋ฆฐ ์ค, subtitle-bottom ์๋ง
B. **VIVID / SNS POP** โ vivid ํํฐ, ๋ฐ๊ณ ์ฑ๋ ๋์, ๋น ๋ฅธ ์ปท, title-center ํฐ ๊ธ์จ
C. **MINIMAL / CLEAN** โ ํํฐ ์์, ์์ฐ ์๊ฐ, ์ฐจ๋ถํ ํ์ด๋, ๋ฏธ๋๋ฉ ์๋ง
Phase 1 ์ฒดํฌํฌ์ธํธ: ๋ต ๋ฐ์ผ๋ฉด ํ ๋ฌธ๋จ์ผ๋ก ์์ฝํด์ "์ด๋ ๊ฒ ์ดํดํ์ด์, ๋ง์ฃ ?" ํ์ธ โ
์น์ธ ํ Phase 2๋ก. ํค(6๋ฒ)์ด ๋ต ์ ์์ผ๋ฉด ๋ฐ๋์ ์ฌ์ง๋ฌธ (๋ํดํธ ๊ธ์ง).
Phase 2 โ ๊ตฌ์กฐยท์์ธ (ํ์
๋ณ 6๊ฐ, ํ ๋ฉ์์ง๋ก)
Phase 1์์ ์์ ํ์
์ ๊ฐ์ง(์ผ์ธ ยท๋ฆด์ค/์ฌ๋ผ์ด๋์ผ/๊ฐ์ฌ/๊ฐ์/ํ๋ณด/๋ธ์ด๋ก๊ทธ/์ธํฐ๋ทฐ) โ
ํด๋น ํ์
์ ์ฉ 6๊ฐ ์ง๋ฌธ ์ธํธ๋ฅผ references/brief-questions.md์์ ๋ถ๋ฌ์ ํ ๋ฒ์ ๋ฌผ์ผ์ธ์.
๊ณตํต 6์ถ (ํ์
๋ณ๋ก ๊ตฌ์ฒด ๋ฌธ๊ตฌ๋ง ๋ฌ๋ผ์ง):
| # | ์ถ | ์์ (์ผ์ธ ) | CLI ๊ฒฐ์ |
|---|
| 7 | ํ
ยท์คํ๋ | ์ฒซ 3์ด ํ
ํ
์คํธ/์ด๋ฏธ์ง? | text add + add-animation --role intro |
| 8 | ์คํ ๋ฆฌ ํ๋ฆ | ์ปท ์์ + ๊ฐ ๊ตฌ๊ฐ ์ญํ | video add ร N + start ๋ฐฐ์น |
| 9 | ์๋งยทํ
์คํธ | SRT ์์? ๊ฐ์กฐ ๋ฌธ๊ตฌ๋ง? | srt import --style youtube-subtitle ๋๋ text add |
| 10 | ์ค๋์ค | ๋๋ ์ด์
? BGM ๋ถ์๊ธฐยท๋ณผ๋ฅจ? | audio add --track A1/A2 --volume + audio add-fade |
| 11 | ์ปทยทํธ๋์ง์
ยท๋ชจ์
| ์ปท ์๋ + ์ ํ ์ข
๋ฅ + ํคํ๋ ์ | video add-transition --name, keyframe add |
| 12 | CTAยท์๋ฉ | ๋ง์ง๋ง ๋ฌธ๊ตฌ? ์์ํธ๋ก ๋ก๊ณ ? | ๋ง์ง๋ง text add + image add + fade_out |
ํ์
๋ณ ์ ๋ฌธ์ references/brief-questions.md ์ฐธ์กฐ (์ผ์ธ ยท์ฌ๋ผ์ด๋์ผยท๊ฐ์ฌยท๊ฐ์ยทํ๋ณดยท๋ธ์ด๋ก๊ทธยท์ธํฐ๋ทฐ 7์ข
).
Phase 2 ์ฒดํฌํฌ์ธํธ: 6๊ฐ ๋ต์ผ๋ก ํ์๋ผ์ธ ์ด์์ ๊ตฌ๊ฐ๋ณ ํ๋ก ์์ฝ โ ์น์ธ.
ํ์๋ผ์ธ ์ด์์
๋๋ค:
| ์๊ฐ | ํธ๋ | ๋ด์ฉ | ํจ๊ณผ |
|------|------|------|------|
| 0~3s | V1+T1 | ํ
ํ
์คํธ "์ด๊ฑฐ ๋ชจ๋ฅด๋ฉด..." | fade_in + vivid ํํฐ |
| 3~15s | V1 | room1.mp4 | dissolve โ room2.mp4 |
| ...
์ด๋๋ก ๊ฐ๋ ๊ด์ฐฎ์ผ์ธ์?
Phase 3 โ ์ถ๋ ฅยท๋ํ
์ผ (์ ํ 4๊ฐ)
"์์์ ํด์ค" ๋ตํ๋ฉด ๋ํดํธ๋ก ์คํต ๊ฐ๋ฅ. ์ธ๋ถ ์กฐ์ ์ํ๋ฉด ๋ฌผ์ด๋ณด๊ธฐ.
๋ง์ง๋ง 4๊ฐ๋ง ํ์ธํ๋ฉด ๋ ๋๊น์ง ์๋์ผ๋ก ๋๋ฆฝ๋๋ค. ์ธ๋ถ ์กฐ์ ์์ผ๋ฉด "๋ํดํธ"๋ผ๊ณ ๋ง ๋ต์ฃผ์ธ์:
13) **ํํฐยท์๋ณด์ ๊ฐ๋**: ์๋(ํค์ ๋ง์ถค) / ์ฌ์ฉ์ ์ง์ ์์น
๋ํดํธ โ CINEMATIC: `cinematic` 0.4 + brightness -0.05 + contrast 0.15
VIVID: `vivid` 0.5 + saturation 0.15
MINIMAL: ํํฐ ์์ + ๊ธฐ๋ณธ ์๊ฐ
14) **์ธํธ๋กยท์์ํธ๋ก ์ ๋๋ฉ์ด์
๊ฐ๋**
๋ํดํธ โ ์ผ์ธ /๋ฆด์ค: intro `zoom_in` + outro `fade_out`
๊ฐ์: ์์
ํ๋ณด: intro `fade_in` + outro `fade_out` + CTA `bounce_in`
15) **๋ ๋ ๋ฐฉ์**:
A. `render` (CapCut GUI ๊ฒฝ์ ) โ ์ ํํจ, ๋ชจ๋ ํํฐ ๋ฐ์, ๋๋ฆผ, GUI ํ์
B. `render-headless` (ffmpeg ์ง์ ) โ ๋น ๋ฆ, ์ผ๋ถ ํํฐ/ํจ๊ณผ ๋ฏธ์ง์, ๋ฌด์ธ ์๋ฒ OK
๋ํดํธ โ ํ๋ก๋์
/์ต์ข
: A / ํ๋ฆฌ๋ทฐยท๋ฐ๋ณต ํ
์คํธ: B
16) **์ถ๋ ฅ**: ํด์๋(720P/1080P/2K/4K) + ์ ์ฅ ๊ฒฝ๋กยทํ์ผ๋ช
๋ํดํธ โ 1080P, ํ๋ก์ ํธ ํด๋์ `<name>_<timestamp>.mp4`
Phase 3 ์ฒดํฌํฌ์ธํธ: ์ต์ข
ํ์ดํ๋ผ์ธ ์ ์ฒด๋ฅผ bash ๋ธ๋ก์ผ๋ก ์ถ๋ ฅ โ ์น์ธ ํ ์คํ.
์ง๋ฌธ ๊ฑด๋๋ฐ๊ธฐ ๊ท์น (ํ์ด์ฆ๋ณ)
| ์ํฉ | ์คํต ๋์ |
|---|
| ์์ฒญ์ Phase 1์ 6์ถ ๋ชจ๋ ์ธ๊ธ | Phase 1 ์ ์ฒด ์คํต, ํ์ธ๋ง |
| Phase 1 ๋ต๋ณ์ด ํ์
๊น์ง ๋ช
ํ | Phase 2๋ ๋ต ์ ์จ 6์ถ๋ง ๋ถ๋ถ ์ง๋ฌธ |
| "๋นจ๋ฆฌ", "์์์" ์ ์ธ | Phase 3 ์ ์ฒด ์คํต, ๋ํดํธ ์ ์ธํ๊ณ ์คํ |
| ์์ ์์จ ์์ ("๊ทธ๋ฅ ๋ง๋ค์ด์ค") | cli-anything-capcut plan "..." --assets-dir ...๋ก ์์ + ๊ฒฐ๊ณผ ๋จผ์ ๋ณด์ฌ๋๋ฆฌ๊ณ ์์ ๋ฃจํ |
์์ฒญ โ Phase ๋งคํ (์๋ ๊ฒฐ์ ํ
์ด๋ธ)
| ์์ฒญ ์์ | ํ์ | ํ๋ |
|---|
| "์์ ํ๋ ๋ง๋ค์ด์ค" | Phase 1 ์ ์ฒด ํ์ | Phase 1 6๊ฐ ์ง๋ฌธ |
| "์ ํ ๋ฆด์ค 30์ด ๋ง๋ค์ด์ค" | 1ยท3๋ฒ๋ง ๋ต ์์ | Phase 1์ 2,4,5,6๋ฒ ์ง๋ฌธ |
| "D:/์ฌ์ง/ 100์ฅ์ผ๋ก ์๋ค๋งํฑ ์ฌ๋ผ์ด๋์ผ ๋ง๋ค์ด์ค" | 1ยท3ยท4ยท6๋ฒ ๋ต ์์ | Phase 1์ 2,5๋ง ๋ฌผ์ โ Phase 2(์ฌ๋ผ์ด๋์ผ) |
| "์ผ์ธ ๋ง๋ค์ด์ค, ์์ฌ D:/์ดฌ์/, ์๋ค๋งํฑ์ผ๋ก" | Phase 1 ๋๋ถ๋ถ ์ปค๋ฒ โ Phase 2๋ก | Phase 2 6๊ฐ |
| "์์์ ํด์ค, ๋นจ๋ฆฌ" | ์ ๋ถ ์์ | plan ๋ช
๋ น์ผ๋ก ์์, ์ด์ ๋จผ์ ๋ณด์ฌ์ค |
| "์ด JSON์ผ๋ก ๋ฐ๋ก ๋ ๋" | ์ด๋ฏธ recipe ์์ | Brief ์คํต, import-recipe ๋ฐ๋ก |
์ต์ข
์์ฝ ํฌ๋งท (Phase 3 ์น์ธ ์ง์ )
## ๐ ์ต์ข
๋ธ๋ฆฌํ ํ์ธ
**๊ธฐํ** (Phase 1)
- ๋ด์ฉ: [๋ฆด์ค 30์ด / ์ ํ ์๊ฐ]
- ํ๊ฒ: [20~30๋ ์ฌ์ฑ / ์์ฝ ์ ๋]
- ํ๋ซํผ: [์ธ์คํ ๋ฆด์ค 9:16 / 30์ด]
- ์์ฌ: [room1.mp4, room2.mp4, bgm.mp3, logo.png]
- ๋ ํผ๋ฐ์ค: [xxx.url / "๋
ธ์ ๊ฐ์ฑ"]
- ํค: **CINEMATIC**
**๊ตฌ์กฐ** (Phase 2)
- ํ
: ํ
์คํธ "์ด๋ฒ ์ฃผ๋ง, ์ฌ๊ธฐ" 0~3s
- ํ๋ฆ: room1(0-15s) โ dissolve โ room2(15-27s) โ ๋ก๊ณ (27-30s)
- ์๋ง: ์ ๊ณต๋ SRT, `youtube-subtitle` ์คํ์ผ
- ์ค๋์ค: bgm A1 volume 0.3, fade_in 1s / fade_out 2s
- ์ปทยท๋ชจ์
: ๋๋ฆฐ ์ค 1.0โ1.05, dissolve 0.7s
- CTA: "์์ฝํ๊ธฐ ๋งํฌ" 27~30s title-center + bounce_in
**์ถ๋ ฅ** (Phase 3)
- ํํฐ: `cinematic` 0.4 + brightness -0.05 + contrast 0.15
- ์ ๋๋ฉ์ด์
: intro fade_in, outro fade_out
- ๋ ๋: `render` (GUI, ์ ํ)
- ํด์๋ยทํ์ผ: 1080P โ `D:/out/reel_<timestamp>.mp4`
**์คํํ ํ์ดํ๋ผ์ธ** (16๊ฐ ๋ช
๋ น):
```bash
cli-anything-capcut project new -n "my_reel" --preset portrait
cli-anything-capcut video add ...
...
cli-anything-capcut render -p my_reel.session.json -o D:/out/reel.mp4 --resolution 1080P --save-first
์ด๋๋ก ์งํํ ๊น์?
์ด ๋จ๊ณ์ ์น์ธ์ ๋ฐ์ ๋ค์๋ง ์ค์ ์คํ. Phase 3๊น์ง ๋ค ์ง๋๋ฉด **์คํด๋ก ๋ ๋ ์ฌ์คํํ๋
์ผ์ ๊ฑฐ์ ์ฌ๋ผ์ง๋๋ค** โ ์ด๊ฒ ์ง๋ฌธ 16๊ฐ๋ฅผ ๊ฐ์ํ๋ ์ด์ ์
๋๋ค.
---
## โก Quick Start (90% of cases)
> **์ ์ ์กฐ๊ฑด**: `cli-anything-capcut` CLI๊ฐ PATH์ ์์ด์ผ ํฉ๋๋ค. ๋ฏธ์ค์น/๋ฌธ์ ์:
> `cli-anything-capcut diagnose` (์์ `doctor`) ๋ก ํ๊ฒฝ ์ ๊ฒ. ๊ธฐ๋ณธ ์ค์น๋
> `pip install -e ./agent-harness` (pyCapCut ๋ฆฌํฌ ์์์).
```bash
# 0. ํ๊ฒฝ ์ ๊ฒ (ํ ๋ฒ๋ง)
cli-anything-capcut diagnose
# 1. ํ๋ก์ ํธ ์์ฑ (์ธ๋ก ์ผ์ธ ๋ฉด --preset portrait)
cli-anything-capcut project new -n "my_video" --preset landscape
# โ my_video.session.json ์์ฑ
# 2. ๋น๋์ค ์ถ๊ฐ (ํ๊ธ/๊ณต๋ฐฑ ๊ฒฝ๋ก OK โ staging์ด ์๋ ์ฒ๋ฆฌ)
cli-anything-capcut video add -p my_video.session.json \
-f "D:/๋ด ์์/์ดฌ์๋ณธ.mp4" -s 0s -d auto --track V1
# โ op_0 ๋ฐํ
# 3. SRT ์๋ง (์คํ์ผ ํ๋ฆฌ์
์ฌ์ฉ โ 'youtube-subtitle' ๋ฑ ๋ด์ฅ 5์ข
)
cli-anything-capcut srt import -p my_video.session.json \
-f "D:/subs.srt" --track T1 --style youtube-subtitle
# 4. ํํฐ + ์ดํํธ (ํธ๋ ์๋ ๊ด๋ฆฌ)
cli-anything-capcut effect add-filter -p my_video.session.json \
--name cinematic --intensity 0.4
cli-anything-capcut effect add -p my_video.session.json \
--name vignette -s 0s -d auto
# 5. ๋น๋์ค ์ธํธ๋ก/์์ํธ๋ก ์ ๋๋ฉ์ด์
(--role ์ฃผ์: --category ์๋)
cli-anything-capcut video add-animation -p my_video.session.json \
--track V1 --segment-ref op_0 --role intro --name fade_in
cli-anything-capcut video add-animation -p my_video.session.json \
--track V1 --segment-ref op_0 --role outro --name fade_out
# 6. BGM (--volume 0.0~1.0)
cli-anything-capcut audio add -p my_video.session.json \
-f "D:/bgm.mp3" -s 0s -d auto --track A1 --volume 0.3
# 7. ๊ฒ์ฆ โ ๋ฏธ๋ฆฌ๋ณด๊ธฐ โ ์ ์ฅ โ ๋ ๋ (์ ์ฒด ํ์ดํ๋ผ์ธ)
cli-anything-capcut validate -p my_video.session.json # replay dry-run
cli-anything-capcut review -p my_video.session.json # ์๋ QA (๊ฐญ/๊ฒน์นจ/๋ณผ๋ฅจ/์๋ง์๋/๋ ๋ํธํ)
cli-anything-capcut preview -p my_video.session.json --open # HTML ๊ฐํธ์ฐจํธ (์ต์
: --thumbs)
cli-anything-capcut save -p my_video.session.json # CapCut ๋๋ํํธ ๋์คํฌ ์ ์ฅ
cli-anything-capcut render -p my_video.session.json -o "D:/out.mp4" --resolution 1080P --save-first
# CapCut GUI ์์ด ๋น ๋ฅด๊ฒ: render-headless (V1 concat + V2+ overlay + xfade ์ง์)
์๋ง ์๋ ์์ (๋ณํ)
cli-anything-capcut project new -n "visual_only" --preset landscape
cli-anything-capcut video add -p visual_only.session.json -f "D:/clip.mp4" -s 0s -d auto --track V1
cli-anything-capcut audio add -p visual_only.session.json -f "D:/bgm.mp3" -s 0s -d auto --track A1 --volume 0.5
cli-anything-capcut audio add-fade -p visual_only.session.json --track A1 --segment-ref op_1 --fade-in 1s --fade-out 2s
cli-anything-capcut effect add-filter -p visual_only.session.json --name cinematic --intensity 0.4
cli-anything-capcut keyframe add -p visual_only.session.json \
--track V1 --segment-ref op_0 --property uniform_scale --time 0s --value 1.0
cli-anything-capcut keyframe add -p visual_only.session.json \
--track V1 --segment-ref op_0 --property uniform_scale --time 5s --value 1.05
cli-anything-capcut review -p visual_only.session.json
cli-anything-capcut save -p visual_only.session.json
๐ ํ ๋ฐฉ ํ๋ฆฌ์
(project new + ops + save ํ ๋ฒ์)
๋ณต์กํ ์ํฌํ๋ก์ฐ๋ฅผ ๋งค๋ฒ ์ฌ๋ฐ๋ช
ํ์ง ์๊ณ , ์์ฃผ ์ฐ๋ ํํ๋ ๋จ์ผ ๋ช
๋ น์ผ๋ก ๋๋ด์ธ์.
| ์์
| ๋ช
๋ น |
|---|
| ์ด๋ฏธ์ง ํด๋ โ ์ฌ๋ผ์ด๋์ผ | preset slideshow -n NAME -f IMAGE_DIR --duration 3s --transition dissolve --audio "D:/bgm.mp3" --preset-size 9x16 |
| ์ค๋์ค + SRT โ ๊ฐ์ฌ ์์ | preset lyric-video -n NAME -a song.mp3 -s lyrics.srt -b bg.jpg --position subtitle-bottom |
| ๊ธฐ์กด ์ธ์
์ ์ธํธ๋ก/์์ํธ๋ก ๋ถ์ด๊ธฐ | preset intro-outro -p sess.json --intro intro.png --outro outro.png --transition dissolve |
| ๋ฉ์ธ ์์ ์ PIP ์ค๋ฒ๋ ์ด | preset pip -p sess.json -f overlay.mp4 --corner top-right --scale 0.35 |
| ์ผ์ธ /๋ฆด์ค ์ฒซ 3์ด ์๋ ํ
(shake+zoom+flash+bold text) | preset hook -p sess.json -t "์ด๊ฑฐ ๋ชจ๋ฅด๋ฉด ๊ฐ๊ฒฉ 30% ๋ ๋ธ๋ค" --category pattern-interrupt --duration 3s |
| ์ด๋ฏธ์ง N์ฅ โ ์ผ๋ฒ์ค ์ฌ๋ผ์ด๋์ผ (์ค/ํฌ ํคํ๋ ์ ์๋) | preset kenburns -p sess.json --folder D:/images --duration-each 4s --pattern alternating --intensity 0.2 |
์ธ์ ์ฐ๋: ์ฌ์ฉ์๊ฐ "์ด๋ฏธ์ง ํด๋๋ก ์ฌ๋ผ์ด๋์ผ", "๋
ธ๋์ ๊ฐ์ฌ ์๋ง", "์ธํธ๋ก/์์ํธ๋ก ๋ถ์ฌ์ค",
"PIP ํฉ์ฑ", "์ผ์ธ ์ฒซ 3์ด ์ํฉํธ", "์ ํ ์ฌ์ง ์ฌ๋ผ์ด๋์ผ" ๊ฐ์ ์ ํ ์์
์ ์์ฒญํ ๋.
CLI ํธ์ถ 5~10๊ฐ๋ฅผ 1๊ฐ๋ก ์ค์.
preset hook ์นดํ
๊ณ ๋ฆฌ (10์ข
โ content-formulas.md ์น์
1.2)
| ์นดํ
๊ณ ๋ฆฌ | ์ฐ์ถ ํน์ง | ์ถ์ฒ ์ํฉ |
|---|
curiosity | flash ๊ฐํจ + zoom 1.10 | "์ฌ๋ฌ๋ถ ์ด๊ฑฐ ์๊ณ ๊ณ์
จ์ด์?" |
shock | flash ๊ฐ + shake ๊ฐ (0.7) | "์ฌ๊ธฐ๋นํ์ด์" |
pattern-interrupt | shake ์ต๊ฐ (0.9) + color invert flash | ๊ธฐ๋ณธ๊ฐ. ๊ฐ์ฅ ๋ฒ์ฉ |
number | ์ซ์ ์นด์ดํธ๋ค์ด ํค (shake ์ฝ) | "3๊ฐ์ง ์ด์ " |
promise | ๋ถ๋๋ฌ์ด zoom | "5์ด ์์ ์๋ ค๋๋ฆด๊ฒ์" |
contrarian | ๋๋ฆฐ zoom + ์ง์ง (shake ์ฝ) | "์ฌ๋๋ค์ด ํ๋ฆฐ ์ด์ " |
fear | ๋ฎ์ shake + ์งง์ flash | "์ด๊ฑฐ ๋ชจ๋ฅด๋ฉด ํฐ์ผ" |
question | ํฐ ํ
์คํธ ์ค์ | "์ ๊ทธ๋ด๊น์?" |
authority | ๋ถ๋๋ฌ์ด zoom, shake ์์ | ์ ๋ฌธ๊ฐ ํค |
pov | ๋ฏธ๋๋ฉ, shake ์ฝ | 1์ธ์นญ ๋ธ์ด๋ก๊ทธ |
preset kenburns ํจํด (6์ข
)
| ํจํด | ๋์ |
|---|
alternating | ์ง์ index ์ค์ธ(1.0โ1+intensity), ํ์ index ์ค์์ (๊ธฐ๋ณธ๊ฐ, ๊ฐ์ฅ ์์ฐ์ค๋ฌ์) |
random | ๋งค ์ด๋ฏธ์ง๋ง๋ค ์ค์ธ/์ค์์/pan-lr/pan-tb ์ค ๋๋ค (์ฌํํ๋ ค๋ฉด --seed INT) |
zoom-in | ์ ์ฒด ์ค์ธ๋ง |
zoom-out | ์ ์ฒด ์ค์์๋ง |
pan-lr | scale ๊ณ ์ 1.1, ์ข โ ์ฐ ํฌ (transform_x -0.05 โ +0.05) |
pan-tb | scale ๊ณ ์ 1.1, ์ โ ํ ํฌ (transform_y -0.05 โ +0.05) |
intensity ๊ถ์ฅ: 0.1(์์ํ) / 0.2(๊ธฐ๋ณธ) / 0.3(๊ฐํจ). 0.3 ๋์ผ๋ฉด ํ๋ค๋ฆผ ์ฒด๊ฐ.
headless ๋ ๋ ํธํ: render-headless ๊ฐ uniform_scale / transform_x/y ํคํ๋ ์ ์ ํ ๋ณด๊ฐ์ ์ง์ํ๋ฏ๋ก GUI ์์ด๋ ๊ฒฐ๊ณผ๋ฌผ ๋์ผ.
๐ค ์์ฐ์ด โ ๋ ์ํผ (plan / plan-refine)
์์ฐ์ด ์์ฒญ์ ๊ทธ๋๋ก ๋ ์ํผ JSON์ผ๋ก ๋ณํํ ์ ์์ต๋๋ค (Claude API ๋ด์ฅ).
cli-anything-capcut plan "30์ด SaaS ์ ํ ์๊ฐ. ๋ก๊ณ 3์ด fade_in โ ๋ฐ๋ชจ ์์ 20์ด + cinematic ํํฐ โ CTA ํ
์คํธ 5์ด. BGM ๊น๊ณ ." \
--width 1920 --height 1080 --duration 30s --assets-dir D:/myassets \
-o demo.recipe.json
cli-anything-capcut validate-recipe -f demo.recipe.json
cli-anything-capcut import-recipe -p demo.session.json -f demo.recipe.json
cli-anything-capcut plan-refine -i demo.recipe.json -o demo.v2.recipe.json \
--feedback "CTA ํฐํธ ๋ ํฌ๊ฒ, ๋ฐฐ๊ฒฝ์์
๋ณผ๋ฅจ 0.3์ผ๋ก ๋ฎ์ถฐ"
์ธ์ ์ฐ๋: ์ฌ์ฉ์๊ฐ ๋ช
๋ น์ด ์ํ์ค๋ฅผ ์ง์ ์ง๊ธฐ ์ซ์ดํ ๋, ๋๋ ์์ฒญ์ด ์ถ์์ ("์๋ค๋งํฑํ๊ฒ",
"์ ํ๋ธ ์ผ์ธ ๋๋์ผ๋ก")์ผ ๋. --assets-dir๋ก ์ฌ์ฉ ๊ฐ๋ฅํ ํ์ผ์ ํ์ ํ๋ฉด ํ๊ฐ์ด ์ค์ด๋ฆ.
ํต์ฌ ๊ท์น (v0.4.x)
| ๊ท์น | ์ค๋ช
|
|---|
| ํ๊ธ/๊ณต๋ฐฑ ๊ฒฝ๋ก OK | staging์ด ์๋์ผ๋ก ASCII ์บ์ ํด๋๋ก ๋ณต์ฌ. ์๋ฌธ ๊ฒฝ๋ก ๊ฐ์ ๋ถํ์ |
| ์๊ฐ = ๋ฌธ์์ด | "3s", "500ms", "auto", "+2s", "1m30s", "3000000"(us). ๋ฒ ์ด "3.5"=3.5์ด |
--segment-ref op_N | sub-op๋ creation op ๋ฐํ ID๋ก ๋์ ์ง์ (--segment ์์น๊ธฐ๋ฐ์ ๋น์ถ) |
| ์๋ณด์ -1.0~+1.0 | color adjust --brightness 0.1 (์์ 0100 ์๋). temperature๋ -1(cool)+1(warm) |
| ํํฐ intensity 0.0~1.0 | effect add-filter --intensity 0.4 (์์ 40 ์๋) |
์ ๋๋ฉ์ด์
์ --role | `--role intro |
ํธ๋์ง์
์ --name | video add-transition --name dissolve (์์ --type ์๋) |
| ์ด๋ฏธ์ง duration ๋ช
์ | --duration auto ๋ถ๊ฐ. -d 3s ๋ฑ ๋ช
์ |
| ํ
์คํธ fade ๊ธ์ง | ํ
์คํธ์ add-fade ์์. keyframe add --property alpha ์ฌ์ฉ |
| ํธ๋ ์๋ ์์ฑ | --track V1/T1/A1 ์ง์ ์ ์๋. track add ๋ถํ์ |
| ์ ์ฅ ์ review | validate (๊ตฌ์กฐ) โ review (ํ์ง) โ save ์์ |
--color ์๋๋ฒ์ | 0โ255 ๋๋ 0.0โ1.0 ์๋ ๊ฐ์ง. [1.0,1.0,1.0] ๋๋ 255,255,255 |
โ Anti-patterns
| ํ์ง ๋ง์ธ์ | ๋์ |
|---|
draft_content.json ์ง์ ์์ | CLI ์ฌ์ฉ (project new โ ops โ save) |
| CapCut MCP ๋๊ตฌ ํธ์ถ | CLI (ํด๋น MCP ์์) |
| ํ๊ธ ๊ฒฝ๋ก ํํผ์ฉ ์๋ ๋ณต์ฌ | staging์ด ์๋ ์ฒ๋ฆฌ. ๊ทธ๋ฅ ๊ทธ๋๋ก ์ฌ์ฉ |
--category intro (์ ๋๋ฉ์ด์
) | --role intro (v0.4 ๋ณ๊ฒฝ) |
--type dissolve (ํธ๋์ง์
) | --name dissolve (v0.4 ๋ณ๊ฒฝ) |
--brightness 10 (0~100 ๊ฐ์ ) | --brightness 0.1 (-1.0~+1.0) |
--intensity 40 (ํํฐ) | --intensity 0.4 (0~1.0) |
add-with-transition / add-with-animation | v0.4์์ ์ ๊ฑฐ๋จ. ๋ถ๋ฆฌํด์ ํธ์ถ |
video chroma-key / video reverse / video freeze-frame / video blend-mode | v0.4.3์์ ๋ณต์๋จ โ draft_content.json ํจ์น ๋ฐฉ์. --segment-ref op_N ํ์ ์ฌ์ฉ |
color curves / color hsl / video lut / video speed-curve | v0.4.4์์ ๋ณต์๋จ โ draft_content.json ํจ์น ๋ฐฉ์. ์ผ๋ถ JSON ํค ์ด๋ฆ์ GUI ๊ฒ์ฆ ๊ถ์ฅ |
--segment 0 (์์น ๊ธฐ๋ฐ) | --segment-ref op_0 (ID ๊ธฐ๋ฐ) |
alias search-all | alias search -k ํค์๋ |
ํ
์คํธ์ add-fade | keyframe add --property alpha --time 0s --value 0.0 |
๐ v0.3 โ v0.4 ๋ช
์นญ ๋ณ๊ฒฝํ
| v0.3 (๊ตฌ) | v0.4 (ํ) |
|---|
doctor | diagnose |
validate-full | validate (+ review ๋ณ๋) |
recipe-validate | validate-recipe |
recipe-apply | import-recipe |
save --register | save (๋ํดํธ๊ฐ ๋ฑ๋ก) |
save-skip-errors | save --skip-errors ๋๋ save --auto-fix |
alias search-all | alias search -k <kw> |
video add-filter | effect add-filter |
video add-mask | mask add |
video add-background | background add |
text/image/video add-with-* | ์ ๊ฑฐ๋จ โ ๋ถ๋ฆฌ ํธ์ถ |
--category intro (animation) | --role intro |
--type dissolve (transition) | --name dissolve |
๐ Quick Lookup (ํ๊ณ ์ถ์ ๊ฒ โ ๋ช
๋ น์ด)
| ํ๊ณ ์ถ์ ๊ฒ | ๋ช
๋ น์ด |
|---|
| ํ๊ฒฝ ์ ๊ฒ | diagnose |
| ํ๋ก์ ํธ ์์ฑ | project new -n NAME --preset landscape (๋๋ portrait/square/4k/9x16/16x9/1x1) |
| ํ๋ก์ ํธ ์ํ (๊ฒ์ฆ+๊ฐญ+๊ฒน์นจ) | project status -p p.session.json |
| ๋น๋์ค ์ถ๊ฐ | video add -f FILE -s 0s -d auto --track V1 |
| ์ด๋ฏธ์ง ์ถ๊ฐ | image add -f FILE -s auto -d 3s --track V1 |
| ์ค๋์ค ์ถ๊ฐ | audio add -f FILE -s 0s -d auto --track A1 --volume 0.5 |
| ํ
์คํธ ์ถ๊ฐ | text add -t "TEXT" -s 0s -d 3s --font arial --size 6.0 --color 255,255,255 --clip-settings subtitle-bottom |
| ํ
์คํธ (์ ์ฅ๋ ์คํ์ผ) | text add -t "TEXT" -s 0s -d 3s --style youtube-subtitle |
| ํ
์คํธ (์์น ์ง์ ) | text add -t "..." --position-x 0 --position-y -0.7 |
| SRT ์๋ง | srt import -f FILE --track T1 --style youtube-subtitle |
| AI ์๋ ์๋ง (v0.5.1+) | text auto-srt --audio input.mp4 --model small --language ko --initial-prompt "๋๋ฉ์ธ ์ ๋ฌธ ์ฉ์ด ์์" |
| ํํฐ (์ ์ญ) | effect add-filter --name cinematic --intensity 0.4 |
| ์ดํํธ (์ ์ญ) | effect add --name vignette -s 0s -d auto |
| ํธ๋์ง์
| video add-transition --track V1 --segment-ref op_0 --name dissolve --duration 0.7s |
| ๋น๋์ค ์ธํธ๋ก | video add-animation --track V1 --segment-ref op_0 --role intro --name fade_in |
| ๋น๋์ค ์์ํธ๋ก | video add-animation --track V1 --segment-ref op_0 --role outro --name fade_out |
| ํ
์คํธ ์ ๋๋ฉ์ด์
| text add-animation --track T1 --segment-ref op_5 --role intro --name typewriter |
| ํคํ๋ ์ (์ค) | keyframe add --track V1 --segment-ref op_0 --property uniform_scale --time 0s --value 1.0 |
| ํคํ๋ ์ (์ํ/ํ์ด๋) | keyframe add --track T1 --segment-ref op_5 --property alpha --time 0s --value 0.0 |
| ์๋ณด์ | color adjust --track V1 --segment-ref op_0 --brightness 0.05 --contrast 0.1 --saturation -0.1 |
| ์์ ํ | color wheels --track V1 --segment-ref op_0 --shadow-hue 220 --shadow-sat 0.15 --highlight-hue 40 --highlight-sat 0.1 |
| ๋น๋์ค ํ์ด๋ | video add-fade --track V1 --segment-ref op_0 --fade-in 0.5s --fade-out 0.5s |
| ์ค๋์ค ํ์ด๋ | audio add-fade --track A1 --segment-ref op_1 --fade-in 1s --fade-out 2s |
| ์ค๋์ค ํจ๊ณผ | audio add-effect --track A1 --segment-ref op_1 --name noise-reduction |
| ๋ง์คํฌ | mask add --track V1 --segment-ref op_0 --type circle --size 0.5 --feather 20 |
| ๋ฐฐ๊ฒฝ ์ฑ์ฐ๊ธฐ (๋ธ๋ฌ) | background add --track V1 --segment-ref op_0 --mode blur --blur 0.75 |
| ๋ฐฐ๊ฒฝ ์ฑ์ฐ๊ธฐ (๋จ์) | background add --track V1 --segment-ref op_0 --mode color --color "#000000" |
| ์คํฐ์ปค | sticker add -f sticker.png -s 0s -d 3s --track V2 |
| ํ
์คํธ ์คํ์ผ ํจ์น | text style-patch --track T1 --segment-ref op_5 --font ... --border ... (๋ฒ๊ทธ ์ฐํ) |
| ์ญ์ฌ์ (v0.4.3+) | video reverse --track V1 --segment-ref op_0 |
| ํ๋ฆฌ์ฆ ํ๋ ์ (v0.4.3+) | video freeze-frame --track V1 --segment-ref op_0 [--duration 2s] |
| ๋ธ๋ ๋ ๋ชจ๋ (v0.4.3+) | video blend-mode --track V1 --segment-ref op_0 --mode multiply |
| ํฌ๋ก๋ง ํค/๊ทธ๋ฆฐ์คํฌ๋ฆฐ (v0.4.3+) | video chroma-key --track V1 --segment-ref op_0 --color "#00FF00" --intensity 0.5 |
| LUT ํํฐ (v0.4.4+) | video lut --track V1 --segment-ref op_0 --file "lut.cube" --intensity 0.8 |
| ์๋ ์ปค๋ธ (v0.4.4+) | video speed-curve --track V1 --segment-ref op_0 --points "0,1.0;0.5,2.0;1.0,1.0" |
| ์ปฌ๋ฌ ์ปค๋ธ (v0.4.4+) | color curves --track V1 --segment-ref op_0 --rgb "0,0;0.5,0.7;1,1" |
| HSL ์ฑ๋๋ณ (v0.4.4+) | color hsl --track V1 --segment-ref op_0 --target red --hue 10 --saturation -20 --lightness 5 |
| ์ผ์ธ ํ
์๋ (0~3s) | preset hook -p sess.json -t "..." --category pattern-interrupt |
| ์ผ๋ฒ์ค ์๋ (์ด๋ฏธ์ง ์ฌ๋ผ์ด๋์ผ) | preset kenburns -p sess.json --folder DIR --duration-each 4s --pattern alternating |
| ๊ฒ์ฆ (๊ตฌ์กฐ) | validate -p p.session.json |
| ๊ฒ์ฆ (ํ์ง QA) | review -p p.session.json (๋๋ --severity warning, --only volume,gaps) |
| ๋ฏธ๋ฆฌ๋ณด๊ธฐ | preview -p p.session.json --open (๋๋ --thumbs ๋ก ์ฒซ ํ๋ ์ ์ธ๋ผ์ธ) |
| ์ ์ฅ | save -p p.session.json (์คํจ ์ --auto-fix --max-attempts 3) |
| ๋ ๋ (CapCut GUI) | render -p p.session.json -o out.mp4 --resolution 1080P --save-first |
| ๋ ๋ (ffmpeg ์ง์ ) | render-headless -p p.session.json -o out.mp4 --crf 20 --preset medium |
| Undo | undo -p p.session.json (๋๋ -n 3, --type add_filter) |
| ํ์คํ ๋ฆฌ | history -p p.session.json (๋๋ --filter add_video) |
| ASCII ํ์๋ผ์ธ | timeline -p p.session.json |
| ํต๊ณ | stats -p p.session.json |
| ํน์ ์๊ฐ ํ์ฑ ์ธ๊ทธ๋จผํธ | segments-at -p p.session.json --time 5s |
| ๊ฐญ/๊ฒน์นจ ๊ฒ์ถ | gap-detect -p p.session.json / overlap-detect -p p.session.json |
| ์์ด์ ํธ์ฉ ์ํ+๋ค์ | agent status -p p.session.json |
| ์๋ฌ ํด์ | agent explain-error -e "์๋ฌ ๋ฉ์์ง" |
| Alias ๊ฒ์ | alias search -k "ํค์๋" (๋๋ alias list --class TransitionType) |
| ๋ฏธ๋์ด ์ ๋ณด | media-info FILE |
| ํด๋ โ ์ผ๊ด import | asset bulk-import -p p.session.json -f /folder |
| ๋ฏธ๋์ด ํ ํด๋๋ก ๋ฌถ๊ธฐ | asset relocate -p p.session.json -o /collected --update-session |
| ํธ๋์ค์ฝ๋ | asset transcode -i in.mov -o out.mp4 --crf 22 |
| ์ธ์
๋น๊ต | diff-session -p A.session.json --other B.session.json |
| ์ธ์
ํฉ์น๊ธฐ | merge-session -p A.session.json --other B.session.json --offset auto |
| ๋ฏธ๋์ด ๊ฒฝ๋ก ์ผ๊ด ์นํ | session find-replace-media -p p.session.json --pattern OLD --replacement NEW --dry-run |
| ์ธ์
์์ถ | session compact -p p.session.json --dry-run |
| ์ธ์
์๋ save | session watch -p p.session.json --interval 2 |
| ๋ ์ํผ export | export-recipe -p p.session.json -o r.json |
| ์คํฌ๋ฆฝํธ export (์ฌํ์ฉ) | export-script -p p.session.json -o repro.sh |
| ์คํ์ผ ํ๋ฆฌ์
๋ชฉ๋ก | style list (๋๋ --category text) |
| ์คํ์ผ ํ๋ฆฌ์
์ ์ฅ | style save MYNAME --category text --font arial --size 6 --color 255,255,255 --border '...' |
| ์คํ์ผ ํ๋ฆฌ์
์ ์ฉ | style apply-video --track V1 --segment-ref op_0 --style cinematic-warm |
| Staging ์บ์ ํ์ธ | staging list / staging stats / staging clear |
๋ชจ๋ sub-op์ -p session.json ํ์. ์ ์ญ --json ํ๋๊ทธ๋ก ๊ธฐ๊ณ ํ์ฑ ๊ฐ๋ฅ ์ถ๋ ฅ.
ํธ๋ & ์๊ฐ
ํธ๋ ์ปจ๋ฒค์
:
| Type | Name | Layer | ์ฉ๋ |
|---|
| Video | V1, V2 | V2๊ฐ V1 ์ | ๋ฉ์ธ, PiP, ์ค๋ฒ๋ ์ด |
| Audio | A1, A2, A3 | ๋ฏน์ฑ | A1=๋๋ ์ด์
, A2=BGM, A3=SFX |
| Text | T1, T2 | T2๊ฐ T1 ์ | T1=์๋ง, T2=ํ์ดํ |
| Effect/Filter | (์๋) | โ | effect add / effect add-filter ํธ์ถ ์ ์๋ ํธ๋ |
์๊ฐ ํ์: 3s, 1.5s, 1m30s, 500ms, auto, +2s, 3000000(us). ๋ฒ ์ด "3.5" = 3.5์ด.
์ํฌํ๋ก์ฐ ํจํด (CRITICAL)
์ ์ฒด ํ์ดํ๋ผ์ธ์ ๊ฒ์ฆ โ ๋ฏธ๋ฆฌ๋ณด๊ธฐ โ ์ ์ฅ โ ๋ ๋ 4๋จ๊ณ์
๋๋ค. ๊ฐ ๋จ๊ณ๋ ๋ค๋ฅธ ์ผ์ ํ๋ฏ๋ก ๊ฑด๋๋ฐ์ง ๋ง์ธ์.
[ops ์ถ๊ฐ]
โ
โโ validate # replay dry-run โ op ๊ฐ ์์กด/์๊ฐ ์ถฉ๋ ์ฒดํฌ
โโ review # ํ์ง QA โ ๊ฐญ/๊ฒน์นจ/๋ณผ๋ฅจ๋ฐธ๋ฐ์ค/์๋ง์๋/ํด์๋/๋ ๋ํธํ์ฑ
โโ preview --open # ์ฌ๋ ๊ฒ์ฆ โ HTML ๊ฐํธ์ฐจํธ๋ก ํธ๋ ๊ตฌ์กฐ ์๊ฐํ
โโ save # ๋์คํฌ ๊ธฐ๋ก โ CapCut ๋๋ํํธ ํด๋์ commit
โโ render # MP4 ์ถ์ถ โ CapCut GUI(--save-first ๊ถ์ฅ) ๋๋ render-headless
review์์ warning ์ด์์ด๋ฉด ๋ฉ์ถ๊ธฐ: review --severity warning --fail-on-warning ์ผ๋ก CI์์๋
์์ . --only volume,subtitles๋ก ํน์ ์ฒดํฌ๋ง๋ ๊ฐ๋ฅ.
Combo / Recipe / Batch
v0.4์์ ์ add-with-* combo ๋ช
๋ น์ด ์ฌ๋ผ์ก์ต๋๋ค. ๋์ ๋ค์ 3๊ฐ์ง๋ฅผ ์ํฉ์ ๋ง๊ฒ ์ฌ์ฉ:
| ๋ฐฉ๋ฒ | ์ฅ์ | ๋จ์ | ์ฌ์ฉ ์์ |
|---|
| ๊ฐ๋ณ CLI ๋ช
๋ น | undo๋ก ์ฆ์ ๋กค๋ฐฑ ๊ฐ๋ฅ | ํธ์ถ ํ์ ๋ง์ | ํ์์ /๋๋ฒ๊น
|
batch -f ops.json | ํ ๋ฒ์ ์ฌ๋ฌ op, ๋น ๋ฆ | ํ๋ก์ ํธ ์์ฑ ๋ฏธํฌํจ | ๊ธฐ์กด ์ธ์
์ ์ผ๊ด ์ถ๊ฐ |
import-recipe -f r.json | ํ๋ก์ ํธ ๋ฉํ+ops ๋ฌถ์ ์ ์ฉ | ๋ณ๋ JSON ํ์ | ์ ํ๋ก์ ํธ ์ฒ์๋ถํฐ, ์ฌ์ฌ์ฉ |
preset slideshow/lyric-video/intro-outro/pip | ์ ํ ์์
0~1์ค | ์ปค์คํฐ๋ง์ด์ฆ ์ ํ | ์ฌ๋ผ์ด๋์ผ/๊ฐ์ฌ/์ธํธ๋ก/PIP ๋ฑ ์ ํ |
plan | ์์ฐ์ด๋ก ๋ | LLM ํธ์ถ, ๋น๊ฒฐ์ ์ | ์ฌ์ฉ์๊ฐ ๋ช
๋ น ์ง๊ธฐ ์ซ์ ๋ |
Recipe System
cli-anything-capcut validate-recipe -f recipe.json
cli-anything-capcut import-recipe -p sess.json -f recipe.json
cli-anything-capcut export-recipe -p sess.json -o r.json
Recipe ๊ตฌ์กฐ:
{
"name": "demo", "width": 1920, "height": 1080, "fps": 30,
"operations": [
{"id": "clip1", "op": "add_video", "args": {"file": "D:/v.mp4", "track": "V1", "start": "0s", "duration": "auto"}},
{"op": "add_video_animation", "args": {"track": "V1", "segment_ref": "clip1", "role": "intro", "name": "fade_in"}}
]
}
op ์ด๋ฆ์ v0.4 ๋ช
์ธ โ add_video_filter/add_video_mask/add_video_background๋
recipe์์ add_filter/add_mask/add_background๋ก ํต์ผ. references/operations.md ์ฐธ์กฐ.
ํ
ํ๋ฆฟ: references/recipes/ 5์ข
(luxury-b2b, social-short, cinematic, tutorial, music-video).
์ฌ์ฉ๋ฒ์ references/recipe-guide.md. ์ --category / --type / 0~100 ์๊ฐ ๋ฑ์ด ์์ผ๋ฉด
๊ฐ ๋ ์ํผ๋ฅผ v0.4 ์คํ์ผ๋ก ์
๋ฐ์ดํธํด์ผ ํจ.
batch:
cli-anything-capcut batch -p sess.json -f ops.json --skip-errors
์คํ์ผ ํ๋ฆฌ์
(์ฌ์ฌ์ฉ)
style ๋ช
๋ น์ผ๋ก ์์ฃผ ์ฐ๋ ํ
์คํธ/๋น๋์ค/์ค๋์ค ์กฐํฉ์ ์ด๋ฆ์ผ๋ก ์ ์ฅํ๊ณ ํ ์ค๋ก ์ ์ฉ.
๋ด์ฅ ํ๋ฆฌ์
:
- text:
cinematic, lifestyle-brand, minimal-caption, news-title, youtube-subtitle
- video:
cinematic-warm, corporate-clean, social-punchy
- audio:
bgm-background, podcast-voice, sfx-short
cli-anything-capcut style list
cli-anything-capcut style save my-bold --category text --font arial --size 7 --bold --color 255,235,0 \
--border '{"alpha":1,"color":[0,0,0],"width":0.1}' --description "๋
ธ๋ ๊ตต์ ๊ฐ์กฐ"
cli-anything-capcut style apply-video -p p.session.json --track V1 --segment-ref op_0 --style cinematic-warm
cli-anything-capcut text add -p p.session.json -t "OPEN" --style my-bold -s 0s -d 2s
์์ด์ ํธ ์
ํ-๋๋ฒ๊ทธ
cli-anything-capcut agent status -p p.session.json
cli-anything-capcut agent explain-error -e "RuntimeError: segment_ref 'op_5' not found"
cli-anything-capcut save -p p.session.json --auto-fix --max-attempts 3
Alias (enum ๊ฒ์)
cli-anything-capcut alias classes
cli-anything-capcut alias list --class TransitionType
cli-anything-capcut alias search -k "fade"
cli-anything-capcut alias resolve "fade_in"
์์ฃผ ์ฐ๋ alias (๊ฒ์ฆ๋จ):
- TransitionType: dissolve, fade, blur, slide_left, slide_right, slide_up, flash, black_flash, glitch
- IntroType (video): fade_in, zoom_in, slide_up, bounce_in, blur_open
- OutroType (video): fade_out, zoom_out, blur_close, bounce_out
- FilterType: cinematic, vintage, warm, cool, film, vivid, bw, dreamy, sepia
- VideoSceneEffectType: vignette, blur, glitch, light_leak, soft_light, lens_flare, film_grain, bokeh
- TextIntro: typewriter, fade_in, karaoke, slide_up, bounce_in
- TextOutro: fade_out, dissolve_up, trail, blur_out
- AudioSceneEffectType: noise-reduction, echo, reverb
๋ชจ๋ฅด๋ ์ด๋ฆ์ ํญ์ alias search -k "..."๋ก ๊ฒ์. enum์ v0.4์์๋ ํ์ baseline.
ClipSettings Presets
--clip-settings/--position ์ฃผ์ ๊ฐ: center, fill, fit, top, bottom,
pip-top-right, pip-top-left, pip-bottom-right, pip-bottom-left,
subtitle-bottom, subtitle-top, title-center, lower-third, upper-left, watermark-br,
small-center, top-third, bottom-third, left, right.
์์น๋ง ๋ฏธ์ธ์กฐ์ ํ๋ ค๋ฉด text add --position-x 0 --position-y -0.7 ์ฒ๋ผ ์ง์ ์ขํ (-1~1).
ํ๊ธ ๊ฒฝ๋ก์ staging
video add/audio add/image add ๋ฑ์ ํ๊ธ/๊ณต๋ฐฑ ๊ฒฝ๋ก๋ฅผ ๊ทธ๋๋ก ๋๊ฒจ๋ ๋ฉ๋๋ค โ staging ๋ ์ด์ด๊ฐ
ASCII ์บ์ ํด๋๋ก ์๋ ๋ณต์ฌํ๊ณ ์ธ์
์ ์บ์ ๊ฒฝ๋ก๋ฅผ ๊ธฐ๋กํฉ๋๋ค. ์ "์๋ฌธ ๊ฒฝ๋ก ๊ฐ์ " ๋ฃฐ์ v0.4์์
ํ๊ธฐ๋จ.
cli-anything-capcut staging stats
cli-anything-capcut staging list
cli-anything-capcut staging clear
๋จ, ์บ์ ๊ฒฝ๋ก ์์ฒด๋ ์ฝ๊ธฐ/์ฐ๊ธฐ ๋์ ์ ์ง๋์ด์ผ ํจ. CapCut์ด ๋๋ํํธ๋ฅผ ์ด ๋ ๊ทธ ๊ฒฝ๋ก๋ฅผ
์ฐธ์กฐํ๋ฏ๋ก, staging clear๋ ์์
์๋ฃ/๋ ๋ ํ์๋ง.
์๋ฌ ๋ณต๊ตฌ
save ์คํจ โ diagnose โ validate โ agent explain-error "MSG" โ undo --type TYPE โ save --auto-fix
| ์๋ฌ | ํด๊ฒฐ |
|---|
segment_ref 'op_5' not found | history๋ก op ID ํ์ธ. recipe๋ผ๋ฉด id ํ๋ ์คํ ์ฒดํฌ |
File not found | staging ๊ฐ๋ฅํ์ง ํ์ธ (asset relocate๋ก ์ ๋ฆฌ) |
Track 'V1' not found | creation op์ track ์ธ์ ํ์ธ. ๊ธฐ๋ณธ ์๋ ์์ฑ๋จ |
Fade not supported on Text | keyframe add --property alpha ์ฌ์ฉ |
Duration 'auto' not supported for image | -d 3s ๋ฑ ๋ช
์ |
Invalid enum 'fade_in_xxx' | alias search -k "fade"๋ก ์ ํํ alias ํ์ธ |
--category not recognized | --role ๋ก ๋ณ๊ฒฝ (v0.4) |
๋ฐฉ์ด ํจํด: project clone ๋๋ ๋ณ๋ ๋๋ ํ ๋ฆฌ ๋ฐฑ์
โ ์์
โ validate โ review โ
save --auto-fix โ preview --open ์ผ๋ก ์ฌ๋ ํ์ธ โ render.
References
Briefยท์ฐฝ์ ๊ฐ์ด๋ (์์ ๊ธฐํยท๊ฐ๊ฐ)
| ํ์ผ | ๋ด์ฉ | ์ธ์ ์ฝ๋ |
|---|
references/brief-questions.md | 3ํ์ด์ฆ 16์ง๋ฌธ ยท ํ์
๋ณ ํ
ํ๋ฆฟ ยท ๋ํดํธ ์ ์ฑ
| ์ฌ์ฉ์ ์์ฒญ ๋ชจํธํ๋ฉด ์ ์ผ ๋จผ์ |
references/video-design.md | BOLD ์์น ยท ์๋ค๋งํ ๊ทธ๋ํผ 5์์น ยท 10๋ฌด๋ ์๋ณด์ ๋ ์ํผ(-1.0~+1.0) ยท ์๋ง safe zoneยทํฐํธยทํฌ๊ธฐ ยท ํค๋ณ ํฌ๋ฆฌ์์ดํฐ ํ๋ ์ด์
| Phase 1 ํค ๊ฒฐ์ + Phase 3 ์ยท์๋ง |
references/content-formulas.md | ํ
10 ์นดํ
๊ณ ๋ฆฌ(ํ๊ตญ์ด 50+ ์์ยท230๋ง๋ทฐ ๊ณต์) ยท ์ปท ํ
ํฌ 13์ฅ๋ฅด ASL ๋งคํธ๋ฆญ์ค ยท BGM 14์ฅ๋ฅด BPMยท๋ณผ๋ฅจยทํ์ด๋ | Phase 2 ๊ตฌ์กฐยท์์ธ ์ ์ฉ |
references/anti-slop-video.md | AI slop TOP 5 + 30 ์ํฐํจํด ยท โโโ
ยท ๊ฒ์ฆ ํจ์ pseudocode | ๋ ๋ ์ ๊ฒ์ฆ ํ์ |
CLI ์ฌ์ฉ ๋ ํผ๋ฐ์ค
| ํ์ผ | ๋ด์ฉ | ์ธ์ ์ฝ๋ |
|---|
references/operations.md | v0.4 op ์ ์ฒด ๋ชฉ๋ก + recipe args ์คํ | recipe JSON ์์ฑ/๋๋ฒ๊น
|
references/render-workflow.md | validate/review/preview/save/render/render-headless ์์ธ | ๋ ๋ ๋จ๊ณ ๊ฒฐ์ /๋ฌธ์ |
references/recipe-guide.md | recipe ํ๋ ์ด์คํ๋ ์นํ, ์ ์ฉ ์ํฌํ๋ก์ฐ | ๋ ์ํผ ํ
ํ๋ฆฟ ์ฌ์ฉ |
references/advanced.md | ์๋ณด์ ํจํด, ๊ทธ๋ฆฐ์คํฌ๋ฆฐ ํ๊ณ, ์ธ์
๊ด๋ฆฌ, REPL, ์๋ฌ ๋ณต๊ตฌ | ๋ณต์กํ ์๋ณด์ /์ธ์
๋ถ๊ธฐ |
references/recipes/*.json | 5๊ฐ ๋ ์ํผ ํ
ํ๋ฆฟ (v0.4 ์คํ) | ์ ํ๋ก์ ํธ ์์์ |