Mixxx Playlist Import & Export Tool
  • Python 98.6%
  • PowerShell 1.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-08-26 15:48:45 +09:00
mixxxtransfer v0.0.2 2026-08-26 15:48:45 +09:00
packaging add icon 2026-08-25 14:04:56 +09:00
tests v0.0.2 2026-08-26 15:48:45 +09:00
.gitignore export/import 실제 로직 구현 (sample.mixxxdb.sqlite로 검증) 2026-08-25 11:03:09 +09:00
LICENSE v0.0.1: 프로젝트 골격 구성 2026-08-25 10:52:28 +09:00
pyproject.toml v0.0.2 2026-08-26 15:48:45 +09:00
README.md 테스트 커버리지 대폭 확대: 75% -> 100% (mixxxtransfer 패키지 라인 기준) 2026-08-25 12:13:33 +09:00
todo.md 테스트 커버리지 대폭 확대: 75% -> 100% (mixxxtransfer 패키지 라인 기준) 2026-08-25 12:13:33 +09:00

mixxxtransfer

Mixxx 플레이리스트를 tar로 내보내고 가져오는 도구. mixxxdb.sqlite를 직접 읽고 써서 플레이리스트 · 트랙 메타데이터 · BPM/비트그리드 · CUE/핫큐/루프 · 웨이브 파형 · 크레이트 · Auto DJ 큐 · 재생 히스토리를 다른 PC의 Mixxx 라이브러리로 옮긴다.

CLI(mixxxtransfer)와 GUI(mixxxtransfer-gui) 두 가지 방식으로 쓸 수 있으며, 둘 다 같은 핵심 로직(mixxxtransfer.core)을 공유한다.

내보내고 가져올 수 있는 항목

  • 플레이리스트 & 소속 트랙
    • 아티스트/제목/앨범/키/재생시간 등 메타데이터 전체
    • BPM (고정 여부 포함)
    • CUE / 핫큐 / 루프 포인트
    • 웨이브 파형 & 비트그리드 (스키마 버전이 호환될 때)
    • 오디오 파일 원본 (선택, 기본 포함)
  • 크레이트 (--include-crates, 일반 크레이트만 — 스마트 크레이트 조건은 대상 없음)
  • Auto DJ 큐 (--include-autodj, 트랙 순서만 — 재생 진행 상태는 제외)
  • 재생 히스토리 (--include-history, 세션 단위 전체)

타 DJ 소프트웨어(iTunes/Rekordbox 등) 연동은 지원 범위 밖이다.

설치

Python 3.12 이상이 필요하다.

pip install -e .

GUI까지 쓰려면:

pip install -e ".[gui]"

사용법 (CLI)

DB 경로를 지정하지 않으면 플랫폼 기본 위치(Linux: ~/.mixxx/mixxxdb.sqlite, Windows: %LOCALAPPDATA%\Mixxx\mixxxdb.sqlite)를 자동으로 찾는다. 모든 명령에 --db-path로 직접 지정할 수 있다.

# 플레이리스트를 아카이브로 내보내기 (오디오 포함이 기본값)
mixxxtransfer export "내 플레이리스트" playlist.tar

# 오디오는 빼고 메타데이터만, 크레이트/AutoDJ/히스토리도 함께
mixxxtransfer export "내 플레이리스트" playlist.tar --no-audio \
  --include-crates --include-autodj --include-history

# 실제로 쓰지 않고 무엇이 내보내질지 미리 보기
mixxxtransfer export "내 플레이리스트" playlist.tar --dry-run

# 다른 PC에서 가져오기 (실행 전 자동으로 mixxxdb.sqlite를 백업한다)
mixxxtransfer import playlist.tar

# 이름/크기가 같은 기존 트랙을 만났을 때 확인 없이 항상 추가
mixxxtransfer import playlist.tar --yes-to-all

# 수동 백업만
mixxxtransfer backup

mixxxtransfer <명령> --help로 각 명령의 전체 옵션을 볼 수 있다.

사용법 (GUI)

mixxxtransfer-gui

mixxxdb.sqlite 경로를 입력하면 내보내기 탭의 플레이리스트 드롭다운이 자동으로 채워진다. 내보내기 / 가져오기 / 백업 세 개의 탭으로 구성되어 있고, CLI와 동일한 핵심 로직을 그대로 사용한다.

안전장치

  • Mixxx 실행 중이면 차단. 프로세스 확인과 DB 파일 잠금 시도를 모두 거쳐, Mixxx가 DB를 쓰고 있을 가능성이 있으면 아무 작업도 진행하지 않는다.
  • 가져오기 전 자동 백업. 실행할 때마다 mixxxdb.sqlite를 별도 위치에 타임스탬프를 붙여 백업하고, 기본적으로 최근 5개만 보관한다. 가져오기가 실패하면 이 백업으로 자동 복원한다.
  • 트랙 매칭은 해시 우선. 파일명+크기로 후보를 찾은 뒤, 실제 파일을 해싱해 완전히 같을 때만 자동으로 같은 트랙으로 처리한다. 해시가 다르거나 확인할 수 없으면 사용자에게 물어본다(CLI: 프롬프트/--yes-to-all/--no-to-all, GUI: 다이얼로그/라디오 버튼).

언어

기본은 한국어. 영어로 쓰려면 MIXXXTRANSFER_LANG=en을 지정한다 (지정하지 않으면 시스템 로캘이 영어일 때 자동으로 영어를 쓴다).

MIXXXTRANSFER_LANG=en mixxxtransfer export "My Playlist" playlist.tar
MIXXXTRANSFER_LANG=en mixxxtransfer-gui

아카이브 형식

JSON 매니페스트 + 무압축 .tar. 오디오는 audio/<해시8자리>_<파일명>으로 평탄화해 저장하며, 같은 트랙이 여러 플레이리스트에 속해도 한 번만 저장한다.

기준 환경

  • Linux (Ubuntu 24.04) & Windows 11 25H2
  • Mixxx 2.5.6 (스키마 버전 39 기준. 그 이하 버전은 호환 범위 안에서 지원)

기술 스택

  • Python 3.12+
  • PySide6 (Qt 6) — GUI
  • pytest — 테스트

개발

pip install -e ".[dev]"
pytest
ruff check .

테스트는 117건, mixxxtransfer 패키지 라인 커버리지 100%(pytest --cov=mixxxtransfer --cov-report=term-missing로 확인 가능). 개인 데이터 없이도 전부 재현 가능하도록 tests/dbfactory.py/tests/fixtures/empty_mixxxdb.py로 실제 스키마와 동일한 빈 DB를 직접 구성해 사용하며, sample.mixxxdb.sqlite가 있으면 그것을 쓰는 통합 테스트도 몇 개 추가로 돈다(없으면 자동으로 skip). GUI 테스트는 QT_QPA_PLATFORM=offscreen으로 디스플레이 없이 실행된다.

Windows 단일 실행파일(.exe) 빌드

pip 설치 없이 쓸 수 있는 단일 실행파일을 PyInstaller로 만든다 (Windows 전용 스크립트).

python -m venv .venv
.venv\Scripts\pip install -e ".[dev,gui,build]"
.\packaging\build.ps1            # CLI+GUI 둘 다
.\packaging\build.ps1 -Target cli
.\packaging\build.ps1 -Target gui

결과물은 dist\mixxxtransfer.exe, dist\mixxxtransfer-gui.exe (둘 다 onefile, 추가 설치 없이 실행 가능. 실행 시 임시 폴더에 압축을 풀었다가 종료 시 정리한다). 스펙 파일은 packaging/*.spec, 실제 진입점 래퍼는 packaging/run_cli.py / packaging/run_gui.py에 있다 (PyInstaller가 패키지 내부 모듈을 최상위 스크립트로 착각해 상대 임포트가 깨지는 문제를 피하기 위함).

설계 결정 사항과 상세 근거는 todo.md에 정리되어 있다.

라이선스

GPL-2.0-only (Mixxx와 동일)