Community코딩 & 개발github.com

orange9angel/dula-voice

애니메이션 단편의 모든 대사를 캐릭터별로 일관된 음성으로 생성하고, 분위기와 효과음까지 제작합니다. 사용자의 Volcano Engine Seed-Audio 키를 활용합니다.

dula-voice란 무엇인가요?

Dula-Voice는 애니메이션 제작을 위한 AI 음성 및 사운드 디자인 스킬로, 사용자의 Volcano Engine Seed-Audio 계정을 통해 각 캐릭터의 음성을 일관되게 유지하면서 모든 대사를 생성합니다. Claude Code, Cursor, Codex 등 다양한 AI 에이전트 플랫폼에서 사용 가능하며, 주요 기능으로는 캐릭터 목소리 설계, 대사 오디오 생성, 음성 연기, 배경 분위기 음향 및 효과음 제작이 포함됩니다. 사용자는 `config/film.json`에 캐릭터별 음성 설명(desc)과 대사 전달 방식(delivery)을 JSON 형식으로 정의하고, `speak.py` 스크립트를 통해 음성을 생성합니다. 첫 번째 대사는 이후 모든 대사의 음성 참조 기준이 되므로 품질 확인이 중요하며, 변경된 부분만 재생성하여 효율적으로 작업할 수 있습니다. 이 스킬은 별도 녹음 파일이나 외부 도구로 생성한 오디오와도 호환되어 유연한 워크플로우를 지원합니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/orange9angel/dula-craft/tree/HEAD/skills/dula-voice

Installed? Explore more 코딩 & 개발 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

음성

스크립트 경로는 이 SKILL.md를 기준으로 하며, speak.py는 film 폴더에서 실행됩니다. 이 단계는 선택 사항입니다: 녹음 파일이나 다른 도구의 오디오도 사용할 수 있습니다. 해당 파일은 audio/voice/<line id>.wav에 넣거나, 라인에 file을 설정하세요.

상대방의 언어로 대화하세요.

키 설정 (최초 한 번)

비용은 사용자의 계정으로 청구됩니다. 사용자가 자신의 터미널에서 다음을 실행하도록 요청하세요:

python <dula-start 폴더>/scripts/configure.py

Claude Code에서는 ! python <path>/configure.py라고 입력하면 됩니다.

대화에서 키를 요청하지 말고, ~/.dula-craft/config.env를 읽거나 출력하지 마세요. 키 설정 여부를 확인하려면 configure.py --status를 사용하세요. 누군가가 대화에 키를 붙여넣으면, 콘솔에서 키를 폐기하고 새로 만들도록 안내하세요.

음성 설계

config/film.json의 최상위 레벨에 voices를 추가하세요:

"voices": {
  "mochi": {"desc": "여덟 살 정도의 남자아이, 밝고 활기찬, 빠른 호흡, 가벼운 숨결"},
  "gran": {"desc": "일흔 살 여성, 따뜻하고 약간 쉰 목소리, 느리며 매우 또렷한 발음"}
}

라인에는 delivery를 지정할 수 있습니다:

{"id": "l03", "who": "mochi", "text": "진-짜?", "delivery": "놀라며 기뻐함, 첫 단어에 떨림, 끝에서 올라감"}

선택적 음성 필드: lang은 언어를 설정하며 (기본값은 라인의 언어), speaker는 공식 Volcano 음성 ID를 지정하고, reference는 사용자가 사용할 권리가 있는 참조 오디오를 가리킵니다.

desc와 delivery는 영어 또는 라인의 언어로 작성하세요. 음성 자체를 설명하세요: 나이, 긴장도, 호흡, 속도, 무게. "행복한"만으로는 음성이 바뀌지 않습니다. "특정 배우나 캐릭터처럼 들린다"라고 쓰지 말고, 유명 캐릭터나 실제 인물을 모방하는 음성을 선택하지 마세요. 음성도 초상권과 저작권 문제를 일으킬 수 있습니다.

생성

python <이 폴더>/scripts/speak.py --dry-run   # 비용 없이 프롬프트 확인
python <이 폴더>/scripts/speak.py

각 캐릭터의 첫 번째 라인은 이후 라인의 음성 참조 기준이 되므로 첫 번째 라인을 먼저 들어보세요. 마음에 들지 않으면 desc를 변경하고 다시 생성하세요. 첫 번째 라인을 변경한 후에는 --only를 사용하여 해당 캐릭터의 이후 라인만 새 음성에 맞게 다시 생성하세요.

라인이나 음성을 변경한 후 다시 실행하면 변경된 부분만 재생성됩니다.

분위기 및 효과음

python <이 폴더>/scripts/speak.py --sound "조용한 낡은 방, 가끔 멀리서 새소리" --seconds 10 --out audio/sfx/room.wav

항상 --seconds를 지정하세요. 과금은 길이에 따라 부과되며, 지정하지 않으면 클립이 30초 이상 재생될 수 있습니다. 이 값은 근사치이며, 매우 짧은 요청은 실제로 더 길게 생성되는 경향이 있습니다. 생성된 클립은 종종 소리가 작으므로, film.json에서 스토리 사운드에 level_db를 설정하세요 (film.json 참조 참고).

한 번에 하나씩 생성하세요. 대사, 효과, 음악을 하나의 프롬프트로 요청하지 마세요. 그렇게 하면 레벨을 개별적으로 조정할 수 없고 입 모양이 맞지 않게 됩니다.

결과 확인

  • 가능하면 들어보세요. 들을 수 없다면 "이 오디오는 귀로 확인되지 않았습니다"라고 말하세요.
  • 직접 할 수 있는 작업: 길이가 적절한지 확인하세요 (짧은 라인에 5초면 문제입니다). Whisper 같은 전사 도구를 사용할 수 있다면 텍스트를 대본과 비교하세요. 매우 조용한 단어가 누락될 수 있으며, 이는 다시 생성해야 한다는 신호입니다.
  • delivery는 요청일 뿐, 정확한 제어가 아닙니다. 특히 멈춤 길이는 신뢰할 수 없으므로, 속도가 맞지 않으면 라인을 줄이거나 다시 생성하세요.
  • 동일한 프롬프트는 매번 다른 결과를 생성하므로, 오류 시 다시 생성하세요.

일반적인 문제

증상해결 방법
키 거부됨, 또는 Audio Generation 1.0이 활성화되지 않음서비스가 활성화되었는지 확인하세요. 키는 음성 콘솔에서 가져와야 하며, Ark 키는 작동하지 않습니다
단어가 잘못 읽힘다시 생성하거나 라인을 다시 작성하세요
라인들이 한 사람처럼 들리지 않음첫 번째 라인이 올바른지 확인한 후 --only로 이후 라인을 다시 생성하거나 speaker를 설정하세요
라인 끝이 잘림더 느린 delivery를 요청하거나 다시 생성하세요

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

관련 스킬