Communitygithub.com

Moh4696/freecut

Manim Community Edition을 사용한 수학 및 기술 애니메이션 제작 파이프라인입니다. 3Blue1Brown 스타일의 설명 영상, 알고리즘 시각화, 수식 유도, 아키텍처 다이어그램, 데이터 스토리를 제작합니다. 애니메이션 설명, 수학 애니메이션, 개념 시각화, 알고리즘 워크스루, 기술 설명 영상, 3Blue1Brown 스타일 비디오, 또는 기하학/수학 콘텐츠가 포함된 프로그래매틱 애니메이션 요청 시 사용하세요.

freecut란 무엇인가요?

이 스킬은 Manim Community Edition을 기반으로 하는 전문 교육용 애니메이션 제작 파이프라인입니다. 사용자는 주제, 수식, 알고리즘, 데이터 또는 시스템 설명을 입력하면 기하학적 직관과 시각적 명확성을 갖춘 고품질 애니메이션 비디오를 생성할 수 있습니다. 주요 모드로 개념 설명, 수식 유도, 알고리즘 시각화, 데이터 스토리, 아키텍처 다이어그램, 논문 설명, 3D 시각화를 지원합니다. 모든 프로젝트는 단일 Python 스크립트로 구성되며, 계획(plan.md)→코드(script.py)→렌더링(manim)→병합(ffmpeg)→오디오(선택사항)→검토의 6단계 파이프라인을 따릅니다. 특히 첫 렌더링부터 완성도 높은 결과를 목표로 하며, 일관된 색상 팔레트(클래식 3B1B, 웜 아카데믹, 네온 테크, 모노크롬), 애니메이션 속도 템플릿, 타이포그래피 스케일을 제공합니다. 각 장면마다 도미넌트 색상, 레이아웃, 애니메이션 진입 방식을 다르게 하여 시각적 단조로움을 방지합니다. 모든 텍스트는 모노스페이스 폰트를 사용하며, 최소 폰트 크기 18px을 유지합니다. 사용자 참조 문서로 16개의 상세 가이드를 제공하여 애니메이션, 모브젝트, 비주얼 디자인, 방정식, 그래프, 3D, 장면 계획, 렌더링, 문제 해결, 애니메이션 디자인 사고, 업데이터/트래커, 논문 설명, 장식, 프로덕션 품질 등을 다룹니다. 창의적/실험적 출력이 요청될 경우 SCAMPER 또는 가정 뒤집기 전략을 적용하여 독창적인 설명 방식을 구현합니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Moh4696/freecut/tree/main/skills/manim-video

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

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

문서

Manim 비디오 제작 파이프라인

크리에이티브 표준

이것은 교육적인 시네마입니다. 모든 프레임이 가르칩니다. 모든 애니메이션이 구조를 드러냅니다.

코드를 한 줄도 작성하기 전에, 내러티브 아크를 명확히 하세요. 이 영상이 어떤 오해를 교정합니까? '아하 순간'은 무엇입니까? 어떤 시각적 스토리가 시청자를 혼란에서 이해로 이끌니까? 사용자의 프롬프트는 시작점일 뿐입니다 — 교육적 야망으로 해석하세요.

대수보다 기하를 먼저. 먼저 형태를 보여주고, 다음에 방정식을 보여주세요. 시각적 기억은 기호적 기억보다 빠르게 인코딩됩니다. 시청자가 공식 전에 기하학적 패턴을 보면, 방정식이 자연스럽게 느껴집니다.

첫 렌더링의 완성도는 타협할 수 없습니다. 출력물은 수정 라운드 없이 시각적으로 명확하고 미학적으로 일관되어야 합니다. 만약 무언가 지저분해 보이거나, 타이밍이 나쁘거나, 'AI 생성 슬라이드'처럼 보이면, 그것은 잘못된 것입니다.

불투명도 레이어링으로 주의를 유도하세요. 모든 것을 최대 밝기로 보여주지 마세요. 주요 요소는 1.0, 문맥 요소는 0.4, 구조 요소(축, 그리드)는 0.15. 뇌는 시각적 돌출성을 계층적으로 처리합니다.

숨 쉴 공간. 모든 애니메이션 후에는 self.wait()가 필요합니다. 시청자는 방금 나타난 것을 흡수할 시간이 필요합니다. 애니메이션 사이를 서두르지 마세요. 핵심 공개 후 2초의 일시 중지는 결코 낭비가 아닙니다.

일관된 시각적 언어. 모든 장면은 색상 팔레트, 일관된 타이포그래피 크기, 일치하는 애니메이션 속도를 공유합니다. 기술적으로 올바른 비디오라도 모든 장면에 무작위로 다른 색상을 사용하면 미학적 실패입니다.

전제 조건

scripts/setup.sh를 실행하여 모든 종속성을 확인하세요. 필요 사항: Python 3.10+, Manim Community Edition v0.20+(pip install manim), LaTeX(Linux의 경우 texlive-full, macOS의 경우 mactex), ffmpeg. 참조 문서는 Manim CE v0.20.1을 기준으로 테스트되었습니다.

모드

모드입력출력참조
개념 설명주제/개념기하학적 직관을 갖춘 애니메이션 설명references/scene-planning.md
수식 유도수학 표현단계별 애니메이션 증명references/equations.md
알고리즘 시각화알고리즘 설명데이터 구조를 사용한 단계별 실행references/graphs-and-data.md
데이터 스토리데이터/메트릭애니메이션 차트, 비교, 카운터references/graphs-and-data.md
아키텍처 다이어그램시스템 설명연결과 함께 구성 요소 구축references/mobjects.md
논문 설명연구 논문애니메이션으로 표현된 주요 발견 및 방법references/scene-planning.md
3D 시각화3D 개념회전 표면, 매개변수 곡선, 공간 기하학references/camera-and-3d.md

스택

프로젝트당 단일 Python 스크립트. 브라우저, Node.js, GPU 불필요.

레이어도구목적
코어Manim Community Edition장면 렌더링, 애니메이션 엔진
수학LaTeX (texlive/MiKTeX)MathTex를 통한 방정식 렌더링
비디오 I/Offmpeg장면 병합, 형식 변환, 오디오 먹싱
TTSElevenLabs / Qwen3-TTS (선택사항)내레이션 음성

파이프라인

계획 --> 코드 --> 렌더 --> 병합 --> 오디오 (선택사항) --> 검토
  1. 계획 — plan.md에 내러티브 아크, 장면 목록, 시각적 요소, 색상 팔레트, 음성 대본 작성
  2. 코드 — script.py에 장면당 하나의 클래스, 각각 독립적으로 렌더링 가능하게 작성
  3. 렌더 — 초안: manim -ql script.py Scene1 Scene2 ..., 프로덕션: -qh
  4. 병합 — ffmpeg concat으로 장면 클립을 final.mp4로 병합
  5. 오디오 (선택사항) — ffmpeg를 통해 음성 및/또는 배경 음악 추가. references/rendering.md 참조
  6. 검토 — 렌더 미리보기 스틸샷 생성, 계획과 대조, 조정

프로젝트 구조

project-name/
  plan.md                # 내러티브 아크, 장면 분할
  script.py              # 모든 장면을 하나의 파일로
  concat.txt             # ffmpeg 장면 목록
  final.mp4              # 병합된 출력
  media/                 # Manim 자동 생성
    videos/script/480p15/

크리에이티브 방향

색상 팔레트

팔레트배경주 색상보조 색상강조 색상사용 사례
클래식 3B1B#1C1C1C#58C4DD (파랑)#83C167 (초록)#FFFF00 (노랑)일반 수학/CS
웜 아카데믹#2D2B55#FF6B6B#FFD93D#6BCB77접근성 좋은
네온 테크#0A0A0A#00F5FF#FF00FF#39FF14시스템, 아키텍처
모노크롬#1A1A2E#EAEAEA#888888#FFFFFF미니멀리스트

애니메이션 속도

컨텍스트run_timeself.wait() 후
제목/소개 등장1.5초1.0초
핵심 방정식 공개2.0초2.0초
변환/변형1.5초1.5초
보조 레이블0.8초0.5초
FadeOut 정리0.5초0.3초
'아하 순간' 공개2.5초3.0초

타이포그래피 스케일

역할폰트 크기용도
제목48장면 제목, 시작 텍스트
헤딩36장면 내 섹션 헤더
본문30설명 텍스트
레이블24주석, 축 레이블
캡션20자막, 세부 정보

폰트

모든 텍스트에 모노스페이스 폰트를 사용하세요. Manim의 Pango 렌더러는 비례 폰트에서 모든 크기에 대해 커닝이 깨집니다. 전체 권장 사항은 references/visual-design.md를 참조하세요.

MONO = "Menlo"  # 파일 상단에 한 번 정의

Text("Fourier Series", font_size=48, font=MONO, weight=BOLD)  # 제목
Text("n=1: sin(x)", font_size=20, font=MONO)                  # 레이블
MathTex(r"\nabla L")                                            # 수학 (LaTeX 사용)

가독성을 위한 최소 font_size=18.

장면별 변화

모든 장면에 동일한 구성을 절대 사용하지 마세요. 각 장면마다:

  • 팔레트에서 다른 도미넌트 색상
  • 다른 레이아웃 — 항상 모든 것을 중앙에 배치하지 마세요
  • 다른 애니메이션 진입 — Write, FadeIn, GrowFromCenter, Create 중에서 다양하게
  • 다른 시각적 무게 — 일부 장면은 밀집, 다른 장면은 여백

워크플로우

1단계: 계획 (plan.md)

코드 작성 전에 plan.md를 작성하세요. 포괄적인 템플릿은 references/scene-planning.md를 참조하세요.

2단계: 코드 (script.py)

장면당 하나의 클래스. 모든 장면은 독립적으로 렌더링 가능합니다.

from manim import *

BG = "#1C1C1C"
PRIMARY = "#58C4DD"
SECONDARY = "#83C167"
ACCENT = "#FFFF00"
MONO = "Menlo"

class Scene1_Introduction(Scene):
    def construct(self):
        self.camera.background_color = BG
        title = Text("Why Does This Work?", font_size=48, color=PRIMARY, weight=BOLD, font=MONO)
        self.add_subcaption("Why does this work?", duration=2)
        self.play(Write(title), run_time=1.5)
        self.wait(1.0)
        self.play(FadeOut(title), run_time=0.5)

주요 패턴:

  • 모든 애니메이션에 자막: self.add_subcaption("text", duration=N) 또는 self.play()에 subcaption="text"
  • 장면 간 일관성을 위해 파일 상단에 공유 색상 상수
  • 모든 장면에 self.camera.background_color 설정
  • 깔끔한 종료 — 장면 끝에서 모든 mobject를 FadeOut: self.play(FadeOut(Group(*self.mobjects)))

3단계: 렌더

manim -ql script.py Scene1_Introduction Scene2_CoreConcept  # 초안
manim -qh script.py Scene1_Introduction Scene2_CoreConcept  # 프로덕션

4단계: 병합

cat > concat.txt << 'EOF'
file 'media/videos/script/480p15/Scene1_Introduction.mp4'
file 'media/videos/script/480p15/Scene2_CoreConcept.mp4'
EOF
ffmpeg -y -f concat -safe 0 -i concat.txt -c copy final.mp4

5단계: 검토

manim -ql --format=png -s script.py Scene2_CoreConcept  # 미리보기 스틸

중요 구현 참고 사항

LaTeX용 Raw 문자열

# 잘못됨: MathTex("\frac{1}{2}")
# 올바름:
MathTex(r"\frac{1}{2}")

가장자리 텍스트 buff >= 0.5

label.to_edge(DOWN, buff=0.5)  # 절대 < 0.5

텍스트 교체 전 FadeOut

self.play(ReplacementTransform(note1, note2))  # Write(note2) 위에 겹치지 않음

추가되지 않은 Mobject를 애니메이션하지 않음

self.play(Create(circle))  # 먼저 추가해야 함
self.play(circle.animate.set_color(RED))  # 그 다음 애니메이션

성능 목표

품질해상도FPS속도
-ql (초안)854x480155-15초/장면
-qm (중간)1280x7203015-60초/장면
-qh (프로덕션)1920x10806030-120초/장면

항상 -ql로 반복 작업하세요. 최종 출력에만 -qh를 렌더링하세요.

참조

파일내용
references/animations.md코어 애니메이션, 속도 함수, 구성, .animate 구문, 타이밍 패턴
references/mobjects.md텍스트, 도형, VGroup/Group, 위치 지정, 스타일링, 사용자 정의 mobject
references/visual-design.md12가지 디자인 원칙, 불투명도 레이어링, 레이아웃 템플릿, 색상 팔레트
references/equations.mdManim의 LaTeX, TransformMatchingTex, 유도 패턴
references/graphs-and-data.md축, 플로팅, BarChart, 애니메이션 데이터, 알고리즘 시각화
references/camera-and-3d.mdMovingCameraScene, ThreeDScene, 3D 표면, 카메라 제어
references/scene-planning.md내러티브 아크, 레이아웃 템플릿, 장면 전환, 계획 템플릿
references/rendering.mdCLI 참조, 품질 사전 설정, ffmpeg, 음성 워크플로우, GIF 내보내기
references/troubleshooting.mdLaTeX 오류, 애니메이션 오류, 일반적인 실수, 디버깅
references/animation-design-thinking.md애니메이션과 정적 표시 비교, 분해, 페이싱, 내레이션 동기화
references/updaters-and-trackers.mdValueTracker, add_updater, always_redraw, 시간 기반 업데이터, 패턴
references/paper-explainer.md연구 논문을 애니메이션으로 변환 — 워크플로우, 템플릿, 도메인 패턴
references/decorations.mdSurroundingRectangle, Brace, 화살표, DashedLine, Angle, 주석 생명주기
references/production-quality.md코드 전, 렌더 전, 렌더 후 체크리스트, 공간 레이아웃, 색상, 템포

크리에이티브 다이버전스 (사용자가 실험적/창의적/독특한 출력을 요청할 때만 사용)

사용자가 창의적, 실험적 또는 독특한 설명 방식을 요청하면, 전략을 선택하고 애니메이션을 설계하기 전에 그 이유를 생각하세요.

  • SCAMPER — 사용자가 표준 설명에 대한 새로운 접근을 원할 때
  • 가정 뒤집기 — 사용자가 전형적인 교육 방식을 도전하고자 할 때

SCAMPER 변환

표준 수학/기술 시각화를 가져와서 변환하세요:

  • 대체(Substitute): 표준 시각적 은유를 대체 (수직선 → 구불구불한 길, 행렬 → 도시 그리드)
  • 결합(Combine): 두 가지 설명 접근 방식을 병합 (대수적 + 기하학적 동시에)
  • 역순(Reverse): 거꾸로 유도 — 결과에서 시작하여 공리로 분해
  • 변형(Modify): 매개변수를 과장하여 왜 중요한지 보여줌 (10배 학습률, 1000배 샘플 크기)
  • 제거(Eliminate): 모든 표기법 제거 — 순수하게 애니메이션과 공간 관계로 설명

가정 뒤집기

  1. 이 주제가 시각화되는 '표준' 방식을 나열 (왼쪽에서 오른쪽, 2D, 이산적 단계, 형식적 표기법)
  2. 가장 근본적인 가정을 선택
  3. 뒤집기 (오른쪽에서 왼쪽 유도, 2D 개념의 3D 임베딩, 단계 대신 연속적 변형, 표기법 제로)
  4. 뒤집기가 표준 접근 방식이 숨기는 것을 무엇을 드러내는지 탐구

관련 스킬