-
프롬프트는 영화 시나리오가 아니라 체크리스트다 — Seedance 2.0 fast에서 손가락 2개와 10개의 거리IT 2026. 5. 22. 23:00
📡 이 글은 BytePlus Seedance 2.0 fast 모델을 API로 직접 호출해서 영상을 만드는 사용자 기준으로 정리한 글이지만, prompt 작법 자체는 ModelArk 콘솔에서 만드는 분들에게도 거의 그대로 적용됩니다. 비트 시트 형식의 긴 prompt는 콘솔의 입력 길이 제한에 걸릴 수 있으니, 그 부분만 짧게 압축해서 적용해 보세요.
"강조 손동작" — 모델은 의외로 시인이 아니다
가족 영상에서 아이가 "생일파티에 친구가 10명이나 와줬어요!"라고 외치면서 손가락으로 10명을 강조하는 비트를 만들어야 했습니다. 처음 적은 prompt 한 줄은 이랬습니다.
"★ 손가락 두 개를 펴 보이는 듯한 강조 손동작 또는 검지로 한 번 단호하게 가리키는 비트"
원래 의도는 명확했습니다. "손가락을 사용하는 어떤 단호한 강조 모션 — V사인이든 검지든 인상적이면 OK". 영상을 만들어 보는 사람 입장에선 의도가 충분하다고 느꼈죠. 그런데 결과는 이랬습니다.
의도한 타이밍과 달리 "10명이나 와줬어요!"라는 발화에서 영상 속 아이는 손가락 두 개를 들어 보이고 있었습니다. 모델이 prompt를 너무 충실히 직역한 거였죠. "손가락 두 개"라는 어휘를 그대로 가져가서 V사인 모양을 만들어 내고는, "음성이 뭐라고 하는지는 내 일이 아니다"라고 판단한 것처럼요.
웃기지만 의외로 흔한 실수입니다. Seedance 같은 AI 영상 모델은 prompt를 시적인 표현으로 받아들이지 않습니다. 모든 어휘가 거의 동급으로 의미가 있고, 어휘들 사이의 ambiguity는 모델 자기 분포 안에서 임의로 메워집니다. 결과를 통제하고 싶다면 prompt도 시 대신 명세서로 적어야 합니다.
다시 쓴 prompt — 숫자, 동사, 명시적 금지
같은 비트를 위해 다시 적은 prompt는 이랬습니다.
"★ 두 손을 모두 들어 손가락 10개를 모두 펴 보이는 강조 손동작 (왼손 5개 + 오른손 5개, 손바닥은 카메라 쪽으로). 동작은 sharp하게 0.5초 안에 펼쳐지고 1~1.5초 hold. … '10명'이라는 숫자가 시각적으로 명확히 전달되도록 양손 10개 손가락을 또렷이 펼쳐야 한다(2개·3개 등 부분 펼침 절대 금지)."
이번에는 모델이 양손을 활짝 펼친 10개 손가락을 그대로 만들어 줬습니다. 같은 모델, 같은 음성, prompt 한 덩어리만 다른데 결과가 완전히 달랐습니다.
뜯어보면 두 prompt의 차이는 세 가지였습니다.
- 숫자: "손가락 10개", "0.5초 안에", "1~1.5초 hold" 같은 양적 표현이 들어갔습니다.
- 동사·구체적 동작: "두 손을 들어 펼친다", "손바닥은 카메라 쪽으로", "sharp하게" 같은 구체적 동작 어휘.
- 명시적 금지문: "2개·3개 등 부분 펼침 절대 금지". 이게 의외로 큰 역할을 했습니다.
명시적 금지문이 의외로 효과적인 이유
다이어그램이 양쪽 사이의 prompt 차이와 결과 차이를 나란히 보여줍니다. 흥미로운 건 가운데 "모델" 블록이 동일하다는 점입니다 — 모델은 변하지 않았고, 변한 건 모델에 던지는 명세입니다.
명시적 금지문이 효과적인 이유는 단순합니다. 모델은 prompt에 없는 결정을 자기 학습 분포의 default로 채웁니다. "강조 손동작"이라는 어휘에서 모델의 default가 우연히 "손가락 두 개" 쪽으로 떨어졌던 거죠. 거기에 명시적으로 "2개·3개 부분 펼침 금지"라고 못을 박으면 모델은 default 분포의 그 봉우리를 피해서 다른 선택지를 찾습니다. 부드러운 부탁 한 줄보다 단호한 금지 한 줄이 강한 이유입니다.
시간 비트로 분할하기
prompt를 명세서처럼 적는 또 한 가지 방법은 시간 축으로 비트를 쪼개는 것입니다. 한 클립 안에서 0~3초, 3~7초, 7~10초에 무엇이 일어나는지를 분할하면 모델이 각 비트별 모션을 시간에 매핑합니다.
[Beat A — 0~6.6초: 아이가 편지 읽으며 발화 4행] - 0.4~1.6초 "A가 생길지" — 첫 행, 편지 응시. - 2.0~3.1초 "B는 좋은지" — 살짝 고개 갸웃. - 3.6~4.8초 "C인지" — 시선이 한 번 인형 쪽으로 살짝. - 5.5~6.6초 "걱정돼요..." — 가장 걱정스러운 톤, 편지가 살짝 처짐. [Beat B — 6.6~8.24초: 1.6초 silence — 결의 전환] - 아이가 편지를 책상에 내려놓는다. 시선을 천천히 카메라 정면으로. - 표정이 걱정에서 결의로 또렷하게 굳는다. 어깨가 펴진다. [Beat C — 8.24~12초: "시작!" 외침] - 한 손을 sharp하게 뻗는 강한 동작.이 비트 시트는 영상 prompt이지만 read-only 함수의 docstring을 보는 기분에 가깝습니다. "입력은 음성 mp3, 출력은 영상" 사이에 들어가는 명세가 시간 축으로 분할된 행 단위로 적혀 있습니다. 한 줄에 시간 + 음성 내용 + 동작 + 표정 — 정보 밀도가 일반 prompt보다 훨씬 높지만, 모델이 각 비트를 시간 좌표에 매핑할 수 있어 결과 통제가 잘 됩니다.
결과 — prompt를 적는 자세가 바뀐다
이 한 번의 실험으로 그 다음부터 모든 prompt를 적는 방식이 바뀌었습니다. 정리하면 세 줄짜리 작법입니다.
- 체크리스트로 적는다. 각 비트별로 "무엇이 일어나는가"를 동사 + 숫자로. 시 같은 표현은 ambient한 클립에만.
- 명시적 금지문을 한 줄 끼워 넣는다. 모델이 default 분포로 떨어지는 걸 적극 차단할 수 있다.
- 시간 비트로 분할한다. 한 클립이 5초 이상이면 거의 항상 0~Ns, Ns~Ms 같은 형식으로.
영상 prompt든, LLM prompt든, 이미지 prompt든 결국 같은 원리가 흐르고 있다는 걸 이 한 사건이 알려줬습니다. 모델에게 자유도를 주면 자기 분포로 떨어진다. 그게 작품에 맞으면 행운, 아니면 정확한 명세서가 답입니다. 손가락 두 개와 열 개의 거리는 prompt 작법의 거리만큼이었습니다.
이 글은 생성형 AI의 도움을 받아 작성되었습니다. 원본 자료를 기반으로 AI가 초안을 생성하고, 작성자가 검토·편집하였습니다.
'IT' 카테고리의 다른 글