Communitygithub.com

husniadil/dalang

Dalang — 모든 주제를 완성된 애니메이션 비디오로 변환합니다 (내레이션, 무료 로컬 AI 음성, 음악, 음향 효과, HyperFrames 시각 자료): 스크립트 → 음성 → 단어별 타이밍 → 시각 자료, 각 단계는 에이전트 자체적으로 제어합니다. 모든 주제, 언어 및 플랫폼 (Shorts, Reels, TikTok, YouTube, Instagram)을 지원하며, 스타일화되어 실제처럼 보입니다. 사용자가 주제, 아이디어, 기사 또는 메모에서 비디오, 애니메이션, 설명 영상 또는 쇼츠를 요청할 때 사용하거나 ('X에 대한 비디오 만들어 줘', 'Z에 대한 영상 만들어 줘'), 참조 비디오의 스타일을 윤리적으로 차용할 때 사용합니다. 기존 영상을 편집하거나 자막을 추가하는 용도는 아닙니다.

dalang란 무엇인가요?

Dalang은 AI 에이전트가 주제를 입력받아 완성된 애니메이션 비디오를 제작할 수 있게 해주는 고급 스킬입니다. Claude Code, Cursor, Codex와 같은 플랫폼에서 작동하며, 스크립트 작성, 음성 생성(무료 로컬 AI 음성), 단어별 타이밍 동기화, HyperFrames 기반 시각 자료 생성 등 전체 워크플로우를 자동화합니다. 이 스킬의 핵심은 '시각적 명제 우선', '단어 우선, 그림은 나중에', '모든 변경 사항은 단어에 매핑', '모든 질문은 처음에, 사용자 개입 최소화' 등 8가지 원칙에 기반합니다. Express 모드(기본, 2.5D Canvas 2D)와 Studio 모드(three.js 기반 정밀 제어)를 지원하며, 등각 투영 패밀리(isometric-world, cutaway, blueprint)와 object-studio 룩을 제공합니다. 각 단계(브리핑, 스크립트, 음성, 룩, 빌드, QC, 최종)는 게이트로 구분되어 에이전트가 자체적으로 품질을 검증하며, 실패 시 자동으로 리소스를 상향 조정합니다. 토큰을 절약하기 위해 파일 기반 상태 관리, 지연 로딩, 작은 출력, 병렬 실행 등의 최적화 기법을 사용합니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/husniadil/sandalkuilang-dalang/tree/HEAD

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

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

문서


name: dalang description: Dalang — 모든 주제를 완성된 애니메이션 비디오로 변환 (내레이션, 무료 로컬 AI 음성, 음악, 음향 효과, HyperFrames 시각 자료): 스크립트 → 음성 → 단어별 타이밍 → 시각 자료, 각 단계는 에이전트 자체적으로 제어합니다. 모든 주제, 언어 및 플랫폼 (Shorts, Reels, TikTok, YouTube, Instagram), 스타일화되어 실제처럼 보입니다. 사용자가 주제, 아이디어, 기사 또는 메모에서 비디오, 애니메이션, 설명 영상 또는 쇼츠를 요청할 때 사용하거나 ('X에 대한 비디오 만들어 줘', 'Z에 대한 영상 만들어 줘'), 참조 비디오의 스타일을 윤리적으로 차용할 때 사용하세요. 기존 영상을 편집하거나 자막을 추가하는 용도는 아닙니다.

Dalang — 주제에서 비디오로

모드와 룩은 Brief에서 질문하고, 그것이 확정된 후에 (references/looks.md) 잠급니다. Express (기본값; Canvas 2D에서 2.5D, references/express.md) 또는 Studio (정밀도: three.js, 코드 우선 히어로, 레퍼런스 보드, 벤치마크, 리뷰). 룩: 등각 투영 패밀리 (isometric-world 메인, cutaway, blueprint) 또는 object-studio (옅은 배경 위의 연구 모델). 3D 룩이 절대 영화를 Studio로 옮기지 않습니다. 6단계 이후의 룩 변경은: 모든 빌더를 중지하고, SPEC.md를 다시 작성하고, 모든 그룹을 한 메시지에서 다시 시작합니다. 내레이션과 음성은 그대로 유지됩니다.

원칙

7번은 Studio 전용입니다. 나머지는 두 모드 모두에 적용됩니다.

  1. 시각적 명제 우선 (references/looks.md): 룩의 번호 매겨진 규칙이 모든 프레임과 QC를 결정합니다. object-studio: 옅은 스튜디오, 하나의 악센트, 전체 히어로 60–70%, 하나의 입력 기계, 실제 악기, 고정된 샷.
  2. 단어 우선, 그림은 나중에: 스크립트 승인 → 음성 → 모든 단어 타이밍 → 시각 자료.
  3. 화면의 모든 변경 사항은 단어에 매핑되며, 타이밍 데이터에서 비롯됩니다.
  4. 주제는 모든 샷에서 행동합니다; 정지 이미지 위에 카메라를 두는 것은 슬라이드쇼입니다.
  5. 측정하세요, 추측하지 마세요: 보고된 모든 숫자는 로그나 스크립트에서 비롯됩니다.
  6. 모든 질문은 처음에, 사용자 개입 없음. 모든 질문은 1단계에서 이루어집니다. 이후에는 사용자를 기다리지 않습니다. 4개의 게이트를 각각 통과시키면, 한 줄로 통과를 알리고 완성된 영화로 진행합니다. 이후의 변경 사항은 새로운 라운드입니다. 마지막 렌더링 전에 최종 품질 렌더링을 하지 마십시오 (Gate 3의 스타일 프레임 및 후크 샘플 제외).
  7. 스타일화되었지만 현실에 충실합니다. 영화당 하나의 룩; 푸티지, 포토리얼 렌더링, 생성된 이미지 또는 클립 없음. 부품, 비율, 스케일 및 동작은 실제 참조와 일치합니다 (references/visual-direction.md §1).
  8. 최고 스튜디오, 절대 과장되지 않음: 스타일 프레임, 폴리싱, 리뷰 루브릭. 초안은 10 fps; 최종은 --quality high --fps <brief fps>로 모든 검사를 통과합니다.
  9. 기본적으로 무료. 유료 또는 계량 서비스 (ElevenLabs, HeyGen)는 사용자가 요청할 때만 사용하며, "유료"라고 표시합니다. 상업적으로 사용 가능한 라이선스를 선호합니다. 그렇지 않은 경우 명시합니다.

일반 목적. 모든 주제, 언어, 플랫폼. 다른 video/<slug>/ 폴더를 열지 마십시오. 사용자가 선택한 시리즈 키트 (references/brief.md "Series kit")를 제외하고 이전 내용이 이월되지 않습니다. engine/three/는 도구 상자이지, 한계가 아닙니다: 없는 주제는 자체 법칙으로 모델링되거나 3D 없이 룩에서 표시됩니다.

언어. 사용자의 언어로 채팅합니다. 모든 AskUserQuestion은 영어로 합니다. 이름에서 언어를 추론하지 마십시오.

빠르게 작업하고, 적은 토큰 사용

  • 하나의 비디오 = 하나의 세션; 상태는 파일에 있습니다. 재개: node <skill-dir>/scripts/state.mjs next, BRIEF.md, PRODUCTION.md의 끝.

  • 서브에이전트 유형, 나열된 경우: 빌더 (수정 라운드, 스크립트, 음성) dalang-builder, 모든 평결 dalang-checker, 사실 dalang-research; 그 외에는 일반 목적.

  • 스킬 버전: next의 DALANG v…를 먼저 말하세요; 절대 git을 사용하지 마세요.

  • 지연 읽기: 각 단계에서 state.mjs next --print가 출력하는 내용만, 전체를, 한 번에 읽습니다 (Step 0은 Step 1도 출력합니다; 첫 번째 approve <n>은 다음 단계를 출력합니다: next 턴 없음, --step 앞서지 않음); "필요할 때 조회"는 그곳으로 보내진 경우에만 수행합니다. 참조, 엔진 README 또는 lessons.md를 전체 또는 섹션을 두 번 읽지 마십시오; /hyperframes에서는 필요한 가이드만 읽습니다.

  • 작은 출력: --json으로 필터링; words.json, *.response.json 또는 전체 로그를 출력하지 마십시오; 백그라운드 출력은 바이트 단위로 (tail -c 1500). 장면 변경은 Edit 호출이며, sed -i 또는 전체 파일 쓰기를 사용하지 마십시오.

  • 장면 코드는 빌더 서브에이전트에 남아 있습니다. 메인 에이전트는 src/ 또는 assets/*.js를 절대 쓰거나 읽지 않습니다 (생성된 데이터는 제외; 스타일 프레임은 빌더로 전송됩니다). 파일럿, 각 그룹, 어셈블리 및 각 수정 라운드는 새 빌더 (마지막 보고서 + 경로, look-build.md / express.md의 예산)로 이동합니다. 리뷰어는 절대 빌더가 아닙니다.

  • 이미지는 서브에이전트에 남아 있습니다. 메인 에이전트는 정지 이미지, 스트립, 시트, 스코프 또는 스타일 프레임을 절대 Read하지 않습니다: 서브에이전트가 경로와 next의 "서브에이전트용" 명령을 받고 텍스트 평결을 반환합니다. 예외: style-frames/src/의 작성자는 첫 번째 쓰기 전에 각 review/refs-board-<frame>.jpg를 한 번 엽니다.

  • 작업당 모델, 절대 묻지 않음: state.mjs next는 각 단계의 서브에이전트 작업을 모델과 노력과 함께 출력합니다 (state.mjs models: 전체, top/mid/light의 의미). 에스컬레이션, 반복 금지. 실패한 작업 (빨간색, 사용 불가, P0 미해결)은 한 단계 위의 새 에이전트로 이동합니다: 노력 (low → medium → high), 그 다음 모델 (light → mid → top); top · high가 최대입니다: P0 미해결은 분류됩니다 (hero-asset.md §3). 절대 다운그레이드하거나 두 번 실행하지 마십시오; 깨끗한 작업은 절대 다시 실행하지 않습니다. ≤ 3개의 복사 또는 타이밍 수정: 한 단계 아래. 각 설정을 기록합니다.

  • 메인 에이전트는 조정만 하고, 실제 작업은 하지 않습니다. 당신의 턴은 세션을 다시 읽습니다 (~서브에이전트의 10배); 루프 (쓰기 ↔ 린트, 테이크 ↔ 재테이크, 수정 ↔ 확인)는 하나의 작업 내에서 실행됩니다 (3-4단계도 포함); 각 응답이 당신을 깨웁니다: 작업은 평결까지 실행됩니다; 함께 시작된 N개의 작업은 wait.mjs . --expect N (timeout: 600000)으로 해당 메시지를 종료합니다: 한 턴, 한 줄. 실행기 (express.mjs / studio.mjs <step>)는 하나의 포그라운드 호출 (timeout: 600000)로, 약 9분 이내에 종료될 때 체인이나 폴링을 절대 하지 않습니다. Agent 프롬프트는 작업과 경로입니다 (≤ 15줄; next --step <n> --sub를 통해 읽음). Checker는 평결 파일을 작성하고, Builder는 review/reports/<job>.md를 작성합니다; 둘 다 간결하게 응답하고 절대 다시 입력하지 않습니다. state.mjs log는 단계의 명령에 &&를 붙여 탑승하며, 자체 턴을 갖지 않습니다.

  • 컴팩트: workspace.mjs init는 자동 컴팩트를 설정합니다 (200K); Gate 2-4에서 /compact가 안전하다고 한 번 말합니다.

  • 기본적으로 병렬 실행. 독립적인 작업은 하나의 메시지에서 시작되며, 각 에이전트는 자체 파일에서 작업합니다. 무거운 작업 (VoxCPM, 렌더링, 확인, 스냅샷)은 단독으로 실행되며, 모델 작업 옆에 절대 두지 않습니다. while kill -0 <pid>로 대기열을 만듭니다. 함께: 사전 점검 ‖ 주제 질문; 참조 ‖ 리서치 작업; Gate 1 후 음성 작업 ‖ 자산(장면 제외); Gate 2에서 플래너와 음악; 6단계 Studio: 파일럿, 그 다음 모든 그룹; Express: 모든 그룹을 한 번에, 파일럿 없음 (깨끗한 테이크는 express.mjs after-voice를 통해 Gate 1-2를 자체 통과; 플래너는 express.mjs scaffold . 실행); 7단계 초안 검사, 그 다음 리뷰어 ‖ 퀴즈 ‖ 세트/현실 확인; 8단계 POST.md는 렌더링 중에 작성.

  • 저렴한 것 먼저, 비싼 것 나중에: 테이크 전에 --sample; {}만 움직일 때 --from-response; 반복 중 스냅샷; 수정은 라운드당 배치; QC는 --fps 10 --quality draft; 하나의 최종 렌더링.

  • 사용자의 요청이 우선입니다: 이를 위반하는 규칙을 한 줄로 표시하십시오; 조용히 전달하지 마십시오.

  • 짧은 메시지: 변경된 사항, 결정할 사항, 링크; 대기 시 다음 게이트의 실제 시간; 약 2분이 지난 단계는 예상 시간을 제공합니다.

프로젝트 파일 (video/<topic-slug>/)

state.mjs log "<step> | <output> | <problems or ->"로 기록합니다. 폴더 는 HyperFrames 프로젝트입니다. 해당 폴더에서 명령을 실행합니다. *.tpl.html만 편집합니다. node <skill-dir>/scripts/fill_times.mjs src/index.tpl.html index.html은 index.html을 재생성합니다 (수동으로 하지 않음, 두 번째 루트 .html 없음).

단계

단계수행종료 조건읽기 (references/)
0 설정preflight.mjs, 보고된 내용 수정, 프로젝트 폴더PRODUCTION.mdbrief.md §0
1 브리핑주제 먼저, 모든 질문 지금BRIEF.mdbrief.md §1
2 참조 (선택 사항)제작 기법 측정, 절대 복사하지 않음reference-measurements.mdmeasure-reference.md
3 스크립트리서치, 작가, 읽어보기 작업; approve 1은 린트를 실행Gate 1script-voice.md §3
4 음성하나의 음성 작업; after-voice 패딩, 게이트 1-2Gate 2script-voice.md §4
5 룩SPEC.md, 히어로, 스토리보드, 자산, 스타일 프레임, 벤치마크Gate 3look-build.md §5
6 빌드빌더, BEATS/WORDS의 타이밍, 오디오 믹스index.html, 린트 깨끗함look-build.md §6
7 QC초안, 검사, 스트립, 리뷰어, 퀴즈, 수정 라운드Gate 4qc.md §7
8 최종자산 검사, 고화질 렌더링, 재검사final.mp4, POST.md, 보고서qc.md §8

모든 단계에서: 게이트는 state.mjs approve <n> --by agent를 통해 통과합니다 (순서대로; 게이트의 검사를 실행하고 오류와 함께 거부합니다; 게이트된 파일이 나중에 편집되면 재승인될 때까지 STALE입니다); BRIEF.md 규칙 형식 및 언어; 녹음되거나 복제된 음성은 화자의 허가가 있는 경우에만 사용합니다; 페이지는 Claude의 내장 브라우저에서만 열며, 사용자의 Chrome에서는 열지 않습니다; 모든 단계와 문제를 PRODUCTION.md에 기록합니다; 시리즈 피드백은 series.mjs note를 통해, 절대 메모리에 저장하지 않습니다.

자율 모드

사용자가 주제를 제공하고 떠난 경우, 사용자가 말한 내용을 사용하고, 그렇지 않으면: Express; YouTube 16:9, 60–90초 (짧거나 60초 이하인 경우 Shorts 9:16); 사용자의 언어; object-studio (Studio: isometric-world); "modern balanced"; 일반 시청자; VoiceStudio, 기본 음성, brief.md Step 0에 따라 (Step 4까지 준비되지 않으면 중지하고 그렇게 말함). 먼저 PRODUCTION.md에 "기본값 사용"을 쓰고, 각 결정을 기록하고, 영화를 완성합니다. 출하 규칙: references/qc.md "사용자 부재" (exit 2로 유지되는 audio_qc.mjs는 핸드오프에 이름이 지정되고, 통과로 간주되지 않음). 설치 제안을 건너뜁니다 (기록만 함). 설치된 스킬을 절대 편집하지 않습니다.

문제 발생 시

grep -n -i '<word>' <skill-dir>/references/lessons.md.

관련 스킬