GitHub - LucasHJin/vit: Git for video editing.
Service

GitHub - LucasHJin/vit: Git for video editing.

LucasHJin
2026.03.29
·GitHub·by 이호민/AI
#AI#Collaboration#DaVinci Resolve#Git#Video Editing

핵심 포인트

  • 1Vit은 DaVinci Resolve 프로젝트의 타임라인 메타데이터를 Git과 유사하게 버전 관리하며, 이를 domain-split JSON 파일로 직렬화하여 영상 편집 협업을 지원하는 시스템입니다.
  • 2이 시스템은 cuts, color, audio 등 도메인별 JSON 파일을 통해 여러 협업자가 동시에 작업할 수 있게 하며, AI(Gemini API)를 활용하여 복잡한 cross-domain 충돌을 지능적으로 해결합니다.
  • 3사용자는 DaVinci Resolve 내 패널 또는 CLI를 통해 쉽게 버전을 저장하고 브랜치를 관리하며 변경 사항을 병합하여, 비디오 편집 팀이 코드처럼 효율적으로 협업할 수 있도록 돕습니다.

Vit은 Git 스타일의 버전 제어 시스템을 비디오 편집, 특히 DaVinci Resolve 환경에 도입한 도구입니다. 이 프로젝트의 핵심 목표는 비디오 편집자들이 코드 개발자들처럼 병렬로 작업하고 변경사항을 깔끔하게 병합할 수 있도록 돕는 것입니다.

핵심 방법론 (Core Methodology)

Vit은 원본 미디어 파일 대신, DaVinci Resolve의 타임라인 메타데이터(클립 배치, 컬러 그레이딩, 오디오 레벨, 이펙트, 마커 등)를 가벼운 JSON 파일로 직렬화(serialize)하여 추적합니다. 이 JSON 파일들은 특정 '도메인(domain)'으로 분리되어 저장됩니다:

  • cuts.json: 클립 배치, In/Out 포인트, 트랜스폼 등 편집 관련 정보.
  • color.json: 클립별 컬러 그레이딩 정보.
  • audio.json: 오디오 레벨, 패닝 정보.
  • effects.json: 이펙트, 트랜지션 정보.
  • markers.json: 마커, 노트 정보.
  • metadata.json: 프레임 레이트, 해상도, 트랙 수 등 프로젝트 메타데이터.

이러한 domain-split JSON 구조 덕분에, 각기 다른 역할을 가진 협업자(편집자, 컬러리스트, 사운드 디자이너)가 서로 다른 파일을 편집하게 되어 대부분의 경우 Git 충돌(conflict) 없이 병합이 가능합니다. Vit은 Git을 백엔드(backend)로 사용하여 이 JSON 파일들의 버전을 관리합니다.

AI 기반 Semantic Merge Resolution

Vit의 가장 독창적이고 기술적인 부분은 AI 기반의 'semantic merge resolution'입니다. Git이 파일 단위의 충돌을 해결하는 데는 뛰어나지만, Vit은 도메인 간의 논리적 충돌(cross-domain conflicts)을 해결하기 위해 Google의 Gemini API(gemini-2.5-flash)를 활용합니다. 예를 들어, 한 브랜치에서 클립이 삭제되었는데 다른 브랜치에서는 해당 클립에 컬러 그레이딩이 적용된 경우와 같은 시나리오에서 AI가 개입합니다.

AI는 BASE, OURS, THEIRS 상태의 모든 도메인 파일을 분석하여, 각 도메인에 대한 구조화된 결정(structured per-domain decisions)을 신뢰 수준(confidence levels)과 함께 제안합니다. 모호한 병합(ambiguous merges)의 경우, AI는 사용자에게 옵션을 제시하고 사용자의 선택에 따라 최종 JSON을 결정합니다.

기타 AI 기능:

  • Post-merge validation: 병합 후, AI는 규칙 기반의 유효성 검사(validator)를 통해 고아 참조(orphaned references), 클립 오버랩, 오디오/비디오 동기화 불일치, 속도/지속 시간 불일치 등 잠재적 문제를 감지하고, 이 문제들은 AI 프롬프트에 포함되어 더 스마트한 해결을 돕습니다.
  • Commit message suggestions: 타임라인 diff를 기반으로 비디오 편집 용어를 사용하여 설명적인 커밋 메시지를 자동으로 생성합니다.
  • Log summaries: vit log --summary 명령으로 최근 커밋에 대한 자연어 요약을 제공합니다.
  • Branch comparison analysis: Resolve 패널에서 두 브랜치를 비교하고 병합 전략을 추천합니다.
  • Commit classification: 커밋을 오디오, 비디오 또는 컬러 변경으로 자동 분류합니다.

모든 AI 기능은 GEMINI_API_KEY 설정 여부에 관계없이 작동하며, API 키가 없을 경우 스마트 병합 및 제안 기능만 비활성화됩니다(graceful degradation).

사용자 인터페이스 및 워크플로우

Vit은 주로 DaVinci Resolve 내의 GUI 패널(Workspace → Scripts → Vit Panel)을 통해 사용됩니다. 초기 프로젝트 설정(vit init, vit collab setup)은 터미널에서 한 번 수행하고, 이후의 일상적인 작업(Pull, Save Version, Push, Switch Branch, Merge)은 Resolve 패널에서 처리됩니다. 또한, 스크립팅이나 Resolve 외부에서의 사용을 위해 CLI(Command Line Interface)도 제공됩니다.

프로젝트 구조 (Project Structure)

Vit의 코어 라이브러리는 vit/ 디렉토리에 위치하며, cli.py (CLI 진입점), serializer.py (Resolve 타임라인 → JSON), deserializer.py (JSON → Resolve 타임라인), ai_merge.py (AI 기반 충돌 해결), differ.py (Diff 포맷팅) 등의 모듈로 구성됩니다. DaVinci Resolve 통합(resolve_plugin/)은 vit_panel_launcher.py (패널 백엔드) 및 vit_panel_tkinter.py/vit_panel_qt.py (UI)를 포함합니다. 문서(docs/)에는 협업 가이드, JSON 스키마, Resolve API 제한 사항, AI 병합 세부 정보 등이 포함되어 있습니다.