Community코딩 & 개발github.com

atakoylan125-sketch/AI-영화제작-기술

ManimGX를 사용한 탑다운 연출: 모든 씬 요소를 배치하고 애니메이션 평면도 맵으로 렌더링합니다. 전문 쇼트 리스트나 한 문장의 간단한 의뢰로, 씬 블로킹, 카메라 위치 및 앵글, 조명 배치, 180도 법칙과 스크린 방향을 확인할 때 사용합니다.

AI-영화제작-기술란 무엇인가요?

이 스킬은 전문 연출가나 초보자 모두가 씬의 공간 구성을 시각화할 수 있도록 돕습니다. ManimGX를 기반으로 한 독립형 Python CLI 도구를 사용하여, 캐릭터의 위치와 동선, 조명 소스, 각 카메라의 시야각을 포함한 정밀한 탑다운 평면도 애니메이션(MP4)을 생성합니다. 사용자는 간단한 문장이나 완전한 쇼트 리스트로 작업을 시작할 수 있으며, 정보가 부족할 경우 스킬이 자동으로 필수 질문(장소, 위치, 쇼트 등)을 통해 부족한 부분을 채웁니다. 최종적으로는 렌더링 전에 평면도 미리보기와 각 쇼트에 대한 일반 언어 설명을 제공하여 사용자의 승인을 받도록 설계되어 있습니다. Claude Code, Cursor, Codex 등 다양한 AI 에이전트 플랫폼에서 사용할 수 있으며, 씬 제작의 공간적 일관성과 연속성을 유지하는 데 중점을 둡니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/atakoylan125-sketch/AI-Filmmaking-Skills/tree/HEAD/skills/staging-with-manimgx

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

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

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

문서

ManimGX로 연출하기 (Staging with ManimGX)

배치만 다룹니다. 이 스킬은 스토리, 대화 또는 연기를 작성하지 않으며, 특정 카메라 시스템, 비디오 생성기 또는 제작 도구에 종속되지 않습니다. 이 스킬은 한 가지 질문에 답합니다: 모든 것과 모든 사람이 어디에 있으며, 어떻게 움직이고, 빛은 어디서 오며, 각 카메라는 어디에 서서 어디를 바라보는가? 출력물은 감독의 평면도 스타일의 짧은 비디오입니다: 완성된 맵이 잠시 보여진 후, 맵이 조립되고, 이동 경로가 나타나며, 카메라가 시야각 원뿔과 함께 하나씩 등장하고, 마지막으로 180도 축과 시선이 표시됩니다.

의뢰인은 완전한 쇼트 리스트를 가진 전문가이거나 한 문장으로 설명하는 초보자일 수 있습니다. 두 경우 모두 동일한 품질의 맵으로 끝나야 합니다. 차이는 그 과정에 있습니다: 완전한 브리핑은 바로 제안된 배치로 이동하는 반면, 부족한 브리핑은 먼저 짧은 안내式 질문 단계를 거쳐 의뢰인이 스킬이 추측하는 대신 직접 배치를 결정하도록 합니다. 질문은 또한 초보자에게 연출 브리핑에 무엇이 필요한지 가르쳐줍니다. 어떤 경로든 의뢰인이 렌더링 전에 승인하거나 수정하는 계획으로 끝납니다.

연출 기술 — 샷 크기, 카메라 높이, 렌즈 느낌, 배치 규칙, 공간적 연속성 및 각 샷을 설명하는 방법 — 은 references/staging-craft.md에 있습니다. 카메라를 선택하거나, 계획을 작성하거나, 최종 점검을 실행하기 전에 먼저 읽으십시오.

앞에 있는 씬만을 기준으로 작업하십시오. 아래의 질문 템플릿, 크기 표 및 명세 예시는 형태와 구문을 보여줄 뿐, 내용을 보여주지 않습니다: 실제 씬에 그들의 위치, 소품, 이름, 위치 또는 색상을 절대 그대로 가져오지 마십시오.

완전한 브리핑 — 7개 항목

브리핑이 다음 7가지에 답할 때 완전합니다. 다른 작업을 하기 전에 들어오는 모든 브리핑을 이 기준으로 확인하십시오.

#항목설명맵에 필요한 이유
1장소장소의 유형, 크기 및 특성 (작거나 크고, 좁거나 넓으며, 스타일이나 시대) 및 고정된 지오메트리: 벽, 문, 창문, 블로킹에 중요한 물체전체 맵의 축척과 어떤 소품이 존재하는지 설정
2위치누가 어디에 있는지, 자세 (서 있음, 앉음, 누움, 무릎 꿇음…), 누가 누구를 마주보는지, 얼마나 떨어져 있는지점, 자세 태그 및 방향 화살표; 180도 축이 여기서 그려짐
3방향캐릭터의 핵심 특징이 어느 쪽에 있는지 (창문, 문, 벽, 길), 캐릭터 기준으로 명시: "그녀의 오른쪽에 창문"이것 없으면 맵이 반전되어 나올 수 있고 모든 배경이 잘못됨
4조명중요한 각 광원, 물리적 위치, 오는 방향, 하드 또는 소프트각 얼굴의 어느 쪽이 조명을 받는지와 어떤 샷이 역광을 바라보는지 결정
5주변액션의 다른 쪽에 무엇이 있는지모든 리버스 샷의 배경이 됨
6샷몇 개, 어떤 순서, 각 샷의 크기, 렌즈 및 앵글 (A의 클로즈업, 중앙 투샷, A의 어깨 너머 B…)이것들이 카메라임
7비트누가 움직이는지, 어디서 어디로 언제 (일어서기, 건너기, 들어오기, 떠나기, 돌기), 각 샷에서 무슨 일이 일어나는지움직임은 위치, 방향 및 때로는 씬 중간에 축을 변경함; 이동은 경로로 그려짐

항목은 브리핑이 명시하거나 모호함이 없을 때(예: "그들이 부스 건너에 앉는다"는 위치 항목 충족) 채워진 것으로 간주합니다. 항목 7은 누군가 움직일 때만 중요합니다: 모든 비트가 대사 한 줄이고 아무도 움직이지 않으면 질문이 필요 없습니다.

안내式 질문 단계 — 브리핑이 부족할 때

  1. 브리핑 점수 매기기 7개 항목에 대해, 조용히 수행합니다. 절대 체크리스트 자체를 의뢰인에게 보여주지 마십시오.
  2. 모든 항목이 채워짐 → 안내 단계 건너뛰기 작업 흐름으로 이동합니다. 의뢰인이 질문을 원하지 않는다고 말할 때도 건너뜁니다 ("sorma", "direkt yap", "그냥 해"): 빈 부분은 기본값으로 채웁니다; 기본값은 계획에 나열됩니다 (작업 흐름 4단계).
  3. 누락된 것이 있음 → 질문하기, 의뢰인의 언어로:
    • 메시지당 최대 3개의 질문, 최대 2개의 메시지. 순서: 장소 → 위치 → 샷 먼저, 맵의 구조를 결정하기 때문입니다; 그 다음 방향 → 조명 → 주변; 비트는 마지막.
    • 장소와 위치가 모두 누락된 경우, 첫 번째 메시지에서 이 두 가지만 물어보십시오: 다른 모든 질문의 옵션은 그들의 답변에 따라 달라집니다.
    • 모든 질문은 객관식입니다: 이 씬을 위해 작성된 2–4개의 옵션, 브리핑이 이미 말한 내용을 바탕으로 구축하며, 마지막에 의뢰인의 언어로 된 "당신이 결정" 옵션 (예: "Sen öner")을 추가합니다. 의뢰인은 대신 자신의 답변을 입력할 수 있습니다.
    • 당신이 선택할 옵션을 (권장) 으로 표시하고 몇 마디 이유를 적어 초보자가 간단히 선택할 수 있도록 합니다.
    • 모든 질문에는 맵에 중요한 이유에 대한 한 줄 설명이 포함됩니다.
    • 환경에 구조화된 객관식 질문 도구가 있다면 사용하고, 그렇지 않으면 일반 텍스트로 번호가 매겨진 질문과 알파벳 옵션을 작성하십시오.
    • 브리핑이 이미 답한 내용은 절대 묻지 마십시오. 스토리, 대화 또는 연기에 대해 절대 묻지 마십시오: 이것은 이 스킬의 역할이 아닙니다.
    • 의뢰인이 전문가처럼 작성할 때 (렌즈, 샷 크기, "A의 어깨 너머", 축), 명시된 모든 선택을 그대로 받아들이십시오. 실제로 누락된 항목에 대해서만 질문하고, 그들이 내린 결정을 다시 열지 마십시오.
  4. 답변 후, 여전히 열려 있거나 "당신이 결정"으로 답변된 항목은 합리적인 기본값을 얻습니다. 그런 다음 작업 흐름으로 이동합니다; 4단계의 계획은 의뢰인이 이러한 기본값을 확인하거나 수정하는 곳입니다.

질문 템플릿

다음은 각 질문의 형태를 보여줍니다. 앞에 있는 씬에 맞게 표현과 옵션을 다시 작성하고, 그대로 붙여넣지 마십시오.

  • 장소 — "이 일은 어디에서 발생하며, 장소는 어떤가요?" → 브리핑에서 구성된 옵션, 예: 작고 좁은 실내 · 크고 개방된 실내 · 야외 · 당신이 결정. 이유: 축척과 어떤 소품이 존재하는지 설정합니다.
  • 위치 — "그들은 어떻게 배치되어 있나요?" → 장소와 브리핑의 인물에 맞는 옵션, 위치와 자세 결합 (둘 다 앉아 서로 마주봄 · 나란히 · 한 명 앉고 한 명 섬 · 당신이 결정). 이유: 180도 축은 두 주요 캐릭터 사이에 그려집니다.
  • 방향 — "의 어느 쪽에 <창문/문/벽>이 있나요?" → 의 왼쪽 · 의 오른쪽 · 뒤 · 뒤. 이유: 이것 없으면 맵이 반전되어 나올 수 있고 모든 배경이 바뀝니다.
  • 조명 — "주요 광원은 어디에서 오나요?" → 이 장소에 존재하는 광원 (<창문/문> 쪽에서 · 천장 조명에서 · 씬 내 실제 조명에서 · 그들 중 한 명 뒤에서 (역광) · 당신이 결정). 광원을 명명한 경우에만 하드 또는 소프트를 물어보십시오. 이유: 각 얼굴의 어느 쪽이 조명을 받는지 결정합니다.
  • 주변 — "그들 반대편에는 무엇이 있나요?" → 장소에 맞는 옵션. 이유: 모든 리버스 샷의 배경입니다.
  • 샷 — "어떻게 커버하고 싶나요?" → 제가 목록을 드리겠습니다 (개수, 순서, 크기) · 클래식 커버리지: 와이드, 두 개의 오버-더-숄더, 두 개의 클로즈업 · 하나의 연속 샷 · 당신이 결정. 이유: 이것들이 카메라입니다.
  • 비트 (움직임이 가능할 때만) — "씬 중에 누군가 움직이나요?" → 아니요, 모두 제자리에 있습니다 · <이 씬이 암시하는, 이를 위해 작성된 움직임> · 예 (누가, 어디서 어디로, 언제인지 알려주세요) · 당신이 결정. 이유: 움직임은 경로로 그려지며 축을 이동시킬 수 있습니다.

작업 흐름

  1. 씬 읽기 — 브리핑 및 안내 답변. 추출:

    • 장소, 고정 지오메트리 및 블로킹에 중요한 소품 (벽, 문, 창문, 가구, 차량, 경로);
    • 모든 캐릭터: 위치, 자세, 바라보는 방향;
    • 모든 이동: 누가, 어디서부터, 어디를 통해, 어디로, 최종 방향과 자세;
    • 중요한 각 광원 (태양, 창문, 램프, 실제 조명): 물리적 위치, 오는 방향, 누구를 비추는지;
    • 주요 관계 — 가장 많이 대화하거나 서로 바라보는 쌍. 그 쌍이 180도 축을 정의합니다. 이동이 지오메트리를 변경하는 경우, 그 후의 샷에 대한 축을 결정합니다;
    • 샷. 의뢰인이 당신에게 맡기거나 클래식 커버리지를 선택한 경우, 직접 구성하십시오 (커버리지 참조).

    그런 다음 배치하기 전에 스스로에게 세 가지 질문에 답하십시오: 씬 중에 물리적으로 무엇이 변하는가 (누가 움직이는지, 무엇을 집는지, 무엇이 열리는지); 관객이 동시에 무엇을 보아야 하는가 (한 프레임에 두 사람, 얼굴과 그 뒤의 문); 샷 간에 무엇이 고정되어야 하는가 (조명이 켜진 창문, 테이블, 씬의 중심이 되는 물체). 답변은 어떤 소품에 이름을 붙일지, 어떤 샷이 투샷이어야 하는지, 축이 어디에서 유지되어야 하는지를 결정합니다.

  2. 미터 단위로 배치하기 실제 세계 크기 사용 (아래 표). 맵 규칙: +y는 메인/오프닝 카메라에서 본 "씬 안쪽" 방향, +x는 오른쪽입니다. 메인 카메라는 액션 남쪽에 북쪽을 바라보며 배치합니다.

  3. 씬 명세 작성 (JSON, 아래 스키마; 전체 JSON Schema는 references/scene.schema.json에 있음) 작업 디렉토리에 저장한 후 렌더링 없이 검증: uv run <skill-dir>/scripts/staging_render.py scene.json --check (<skill-dir>는 이 SKILL.md가 포함된 폴더). 해결된 보고서(카메라 위치, 경고) 또는 단일 spec error: … 줄을 출력합니다; 통과할 때까지 수정하고 재확인하십시오.

  4. 미리보기 및 승인 받기 — 렌더링 전. 실행 uv run <skill-dir>/scripts/staging_render.py scene.json -o <name>.mp4 --preview (몇 초 소요). <name>.preview.png, 완성된 맵, 그리고 <name>.report.json을 작성합니다. 먼저 미리보기를 직접 보고 명백한 문제를 수정하십시오 (이미지를 볼 수 없으면 보고서를 대신 확인하고 의뢰인에게 이미지를 검사할 수 없었다고 알리십시오). 그런 다음 의뢰인에게 미리보기 이미지와 그들의 언어로 된 간결한 계획을 보여주십시오:

    • 환경 — 공간의 크기, 주요 물체 및 그 위치 (상대적 단어 및 미터);
    • 캐릭터 — 위치, 자세, 방향; 그 다음 각 이동을 순서대로;
    • 조명 — 각 광원, 위치, 누구의 어느 쪽을 비추는지;
    • 카메라 — 표: 번호, 크기, 렌즈, 위치 (예: "A의 앞-오른쪽 2.9m, 눈높이"), 보는 대상, 그리고 이 카메라에 대한 한 줄 설명 (커버리지에서의 역할);
    • 샷 설명 — 모든 카메라에 대해, 명세와 보고서의 frame 데이터를 references/staging-craft.md의 템플릿으로 구성한 짧은 일반 언어 프레임 설명: 프레임 안에 누가 무엇이 어느 쪽에 있는지, 그 뒤에 무엇이 있는지, 빛이 어느 쪽에서 오는지, 시선 방향 및 축 측면. 중립적이고 사실적으로: 스타일이나 분위기 단어 없음, 특정 이미지 또는 비디오 도구에 대한 표현 없음;
    • 180도 축 — 어떤 쌍, 카메라가 어느 쪽에 머무는지, 미러링되거나 교차하는 샷;
    • 가정 — 의뢰인이 아닌 당신이 선택한 모든 값, 그렇게 표시;
    • 대안 — 의뢰인이 언급하지 않은 두세 가지 카메라 옵션, 각각 한 줄의 장단점 포함 ("대안 제시" 참조 references/staging-craft.md). 의뢰인이 선택하는 경우에만 하나를 적용하십시오. 승인 또는 수정을 요청하십시오 ("문을 다른 벽에 놓으세요", "샷 3을 클로즈업으로", "그녀는 앉아 있습니다"). 수정 사항을 명세에 적용하고, 다시 미리보기하고 변경된 계획을 보여주십시오; 승인할 때까지 반복하십시오. 의뢰인이 명시적으로 검토 없이 렌더링을 요청한 경우에만 이 단계를 건너뛰고, 전달 시 가정을 나열하십시오.
  5. 렌더링 번들 엔진 scripts/staging_render.py 사용 (이 스킬 폴더의 상대 경로, 다시 작성하거나 복사하지 마십시오): uv run <skill-dir>/scripts/staging_render.py scene.json -o <name>.mp4 --quality h. 빠른 드래프트는 --quality l을 사용하십시오. 비디오는 완성된 맵에서 1초 동안 열리고 (--poster 1.0, 기본값), 그런 다음 단계별 빌드로 크로스페이드됩니다. 그 첫 번째 프레임은 소셜 플랫폼의 썸네일이기도 하므로 전체 결과를 보여주어야 합니다; 의뢰인이 일반 빌드업을 요청하는 경우에만 --poster 0을 사용하십시오. 각 캐릭터, 조명 및 카메라(위치, 거리, 수평 시야각, 프레임의 어느 쪽에 누가 무엇이 보이는지, 어느 프레임 쪽에서 각 빛이 오는지를 나열하는 frame 블록) 및 warnings가 포함된 JSON 보고서를 출력하고 (또한 <name>.report.json으로 저장), 완성된 맵 <name>.last.png를 저장합니다.

  6. 전달 전 결과 확인. <name>.last.png를 열고 확인하십시오 (이미지를 볼 수 없으면 보고서에 의존하고 그렇게 말하십시오): 모든 레이블 읽을 수 있음, 사람 위에 카메라 아이콘 없음, 원뿔이 올바른 대상을 가리킴, 이동 경로 읽을 수 있음, 범례 잘림 없음. 그런 다음 references/staging-craft.md의 최종 공간 점검을 실행하십시오: 샷 간 좌/우 및 시선 일관성, 모든 등장 및 퇴장 가능, 고정 물체와 주요 조명이 모든 샷에서 동일한 물리적 위치, 표시되지 않은 축 교차 없음. warnings를 읽으십시오 — 자동 미러링된 샷 또는 축을 교차하는 카메라는 의뢰인에게 언급되어야 합니다. 명세를 수정하고 다시 렌더링하십시오 (최대 두 번).

  7. 전달 비디오와 명세 JSON (숫자를 변경하여 레이아웃을 편집할 수 있도록) 및 승인된 샷 설명 (최종 명세로 업데이트). 의뢰인의 언어로, 어떤 기본값이 남아 있는지 (안내에서 열려 있거나 의뢰인이 넘겨준 것만), 그리고 축 경고가 있는 경우 두세 줄로 말하십시오. 맵 레이블은 의뢰인이 달리 요청하지 않는 한 영어입니다.

커버리지 (샷이 당신에게 맡겨졌을 때)

씬을 커버하는 가장 작은 세트를 구축하고, 촬영 대본 순서로, 최대 8개:

  1. 설정 와이드 — 모든 캐릭터가 프레임 안에 (target: 모든 이름 목록, size: "wide", lens: 35, from: "S").
  2. 주요 쌍 A/B의 경우: 각각에 대한 오버-더-숄더 (over_shoulder: B, target: A 및 반대). 두 카메라가 축의 같은 쪽에 앉도록 어깨를 선택하십시오; 엔진은 그렇지 않은 것을 미러링하고 보고합니다.
  3. 싱글 주요 비트용: size: "cu" 또는 "mcu", lens: 85/50, from: "front-left"/"front-right" (캐릭터의 방향 기준), 축의 같은 쪽.
  4. 인서트 액션이 의존하는 소품용 (size: "insert", lens: 85, height: "high" 테이블 위 물건).
  5. 이동 후: 종료 위치 커버 (target: "A@1"), 이동 후 샷에 자체 축 부여 (axis: ["A@1", "B"]로 설정).

크기 표

다음 값은 실제 세계 참고용입니다. 명세 JSON은 미터를 사용합니다.

설명실제 크기ManimGX 단위 (미터)
사람 키1.7 m — 1.8 m1.75
앉은 사람 키1.2 m — 1.3 m1.25
문 너비0.8 m — 1.0 m0.9
창문 너비0.9 m — 1.5 m1.2
탁자 너비0.8 m — 1.2 m1.0
탁자 길이1.5 m — 2.4 m1.8
의자 너비0.4 m — 0.5 m0.45
소파 너비1.5 m — 2.0 m1.8
방 (작은)3 m × 4 m3 × 4
방 (큰)6 m × 8 m6 × 8
사무실4 m × 5 m4 × 5
좁은 복도1.2 m — 1.5 m 너비1.5

명세 JSON 예시

{
    "version": 1,
    "scene": {
        "dimensions": [8.0, 6.0],
        "grid": 0.5
    },
    "props": [
        {"id": "table", "shape": "rectangle", "position": [0.0, 0.0], "size": [1.0, 1.8], "label": "table"},
        {"id": "door", "shape": "door", "position": [4.0, 2.0], "facing": "S", "wall": "E", "label": "door"},
        {"id": "window", "shape": "window", "position": [-2.5, 3.0], "facing": "W", "wall": "W", "label": "window"}
    ],
    "characters": [
        {"id": "A", "label": "Alice", "position": [-1.0, 1.5], "posture": "standing", "facing": "N"},
        {"id": "B", "label": "Bob", "position": [1.0, -1.5], "posture": "seated", "facing": "S"}
    ],
    "lights": [
        {"id": "sun", "position": [0.0, 5.0], "kind": "sun", "label": "sun"}
    ],
    "cameras": [
        {"id": "cam1", "target": ["A", "B"], "size": "wide", "lens": 35, "from": "S", "height": 1.7},
        {"id": "cam2", "target": "A", "over_shoulder": "B", "lens": 50, "from": "front-right", "height": 1.7},
        {"id": "cam3", "target": "B", "over_shoulder": "A", "lens": 50, "from": "front-left", "height": 1.7},
        {"id": "cam4", "target": "A", "size": "cu", "lens": 85, "from": "front-left", "height": 1.7}
    ],
    "moves": [],
    "axis": {"pair": ["A", "B"], "side": "left"}
}

(이 예시는 형태만 보여줍니다. 실제 씬은 자체 위치, 크기 및 ID를 가집니다.)

환경 메모

  • Python: uv로 관리되는 프로젝트입니다. uv run 명령어는 스킬 디렉토리 내에서 실행되어야 합니다.
  • 의존성: manim 및 manimgl (번들 스크립트가 자동 처리).
  • scripts/staging_render.py 는 이 스킬의 일부이며, 수정하거나 복사하지 마십시오.
  • 생성된 MP4와 PNG는 작업 디렉토리에 저장됩니다.
  • 보고서 JSON (<name>.report.json)에는 공간 검증 데이터가 포함되어 있습니다.
  • 스킬은 의뢰인이 다른 언어를 지정하지 않는 한, 질문과 전달 시 의뢰인의 언어를 사용합니다.

관련 스킬