콘텐츠로 건너뛰기

가져오기 pipeline

가져오기는 파일의 바이트를 수정하지 않고 파일 폴더를 카탈로그 항목으로 바꿉니다. 이 페이지는 사용 가이드에 설명된 흐름 뒤에 있는 파이프라인입니다.

감시 폴더는 플랫폼의 file-system event로 감시되고, debounce된 뒤 변경 시 다시 스캔됩니다. 스캔은 처음부터 다시 시작하는 대신 기존 후보 목록과 맞춰 봅니다. Scanner는 폴더를 하나의 릴리스(오디오가 바로 들어 있거나 CD1/CD2 같은 디스크 형태 하위 폴더)로 분류하거나, 모음으로 보고 내부로 내려갑니다. 파일은 확장자로 audio, artwork, document로 분류한 뒤 audio를 검사합니다. 중요한 codec은 파일 확장자가 아니라 FFmpeg가 바이트에서 찾은 것입니다. 부분 다운로드 marker가 있는 폴더는 다운로드가 끝날 때까지 제외됩니다.

CUE sheet는 하나의 audio image를 트랙 목록으로 바꿉니다. Parser는 pregap과 postgap, 트랙별 performer와 ISRC, single-file image와 one-file-per-track CUE layout을 처리합니다. 트랙 경계는 CUE frame(1/75초)에서 정확한 sample position으로 변환되고, 나중에 재생이 쓰는 byte 및 sample window가 됩니다.

메타데이터 초안

이 섹션으로 연결

각 후보는 편집 가능한 메타데이터 초안과 선택적 출처를 하나 저장합니다. 초안은 비어 있거나, 직접 채워진 것, 외부 릴리스에서 채워진 것, 또는 저장된 파일 태그 스냅샷에서 채워진 것일 수 있습니다. 출처는 현재 초안이 시작된 곳을 기록합니다. 나중에 편집하면 지워지지 않습니다. 직접 입력과 삭제된 초안에는 출처가 없습니다.

상단의 메타데이터 슬롯은 초안, 온라인에서 찾기 브라우저 또는 파일 태그 브라우저를 표시합니다. 브라우저를 열거나 닫으면 초안이 다시 쓰이지 않습니다. 적용 소스를 변경하면 파일 역할, CUE 바인딩, 디스크 할당 및 기타 매핑 결정을 유지하면서 하나의 데이터베이스 트랜잭션에서 초안, 출처 및 선택된 소스 커버를 변경합니다.

온라인에서 찾기

이 섹션으로 연결

온라인에서 찾기는 식별을 실행하는 유일한 경로입니다. 리프 로그 또는 CUE 시트에서 디스크 ID를 계산하고, OCR로 바코드 및 카탈로그 텍스트를 인식하고, MusicBrainz 및 Discogs을 쿼리하고, 결과를 일치시킵니다.

기본 메타데이터 소스에는 세 가지 값이 있습니다. 없음은 빈 초안을 만들고 메타데이터 작업을 시작하지 않습니다. 파일 태그는 태그 스냅샷을 읽어 적용합니다. 온라인에서 찾기는 온라인 작업 화면을 엽니다. 온라인에서 찾기 기본 모드는 증거 추출, 제공자 조회 및 일치를 대기열에 넣는 자동 또는 식별을 시작하지 않는 수동으로 검색을 선택합니다. 어떤 후보에서 온라인에서 찾기를 열어도 선택한 모드를 사용하며, 자동은 진행 중이거나 완료된 작업을 다시 시작하지 않습니다.

파일 태그는 새로 발견된 후보자에 대해 기본으로 구성되지 않는 한 임베디드 오디오 태그와 CUE 메타데이터를 게으르게 읽습니다. 미리보기는 후보자의 스캔 생성, 파일 편집 버전 및 관찰된 오디오 파일이 스탬프된 스냅샷을 저장합니다. 적용은 그 정확한 스냅샷에서 초안을 대체합니다. 가져오기는 동일한 스냅샷을 사용하고 스탬프 또는 관찰이 변경되면 라이브러리가 쓰기 전에 실패합니다. 다른 답변을 읽지 않습니다.

직접 입력은 메타데이터 I/O를 수행하지 않습니다. 빈 초안의 릴리스 및 트랙 필드는 즉시 편집할 수 있으며 필요한 필드 및 매핑이 검증되면 가져올 수 있습니다. 후보 목록은 누락된 출처를 오류 또는 주의 요청으로 취급하지 않습니다.

MusicBrainz는 익명으로, 초당 한 요청의 엄격한 속도로 조회됩니다. Discogs는 keyring에 있는 사용자의 personal token으로 인증하고, 제한 안에서 속도를 조절하며 재시도합니다. 거부된 token은 그대로 보고되어 UI가 조용히 검색에 실패하지 않고 표시할 수 있습니다. 응답은 session별로 cache되며, 이긴 source의 raw JSON은 나중에 다시 해석할 수 있도록 데이터베이스에 보관됩니다.

가져오기 확인은 순서대로 다음을 실행합니다.

  1. Decode verification: 모든 트랙을 처음부터 끝까지 디코딩합니다. 끝까지 디코딩할 수 없는 리핑본은 무엇도 쓰기 전에 가져오기에 실패합니다(config flag로 끌 수 있습니다).
  2. Loudness analysis: 같은 decode pass에서 트랙별 및 앨범별 integrated loudness와 true peak를 측정하고 replay-gain용으로 저장합니다.
  3. Cover selection: 선택한 아트(remote, folder image, embedded)를 표시용 thumbnail로 다시 렌더링합니다. 폴더에서 온 원본은 릴리스 파일 사이에 보관됩니다.
  4. Atomic write: release, tracks, credits, identities, formats, segments, files, cover가 하나의 transaction으로 커밋됩니다. 반쯤 가져온 상태는 없습니다.

릴리스는 사용자의 파일을 제자리에서 참조한 채 들어갑니다. 사용자가 cloud-managed를 골랐다면 업로드는 커밋 뒤 저장소 전환으로 일어나며, 파일의 원본 바이트는 내내 source of truth로 남습니다. 사용자가 bae에 준 것은 절대 삭제되거나 변경되지 않습니다.

리핑본 인식

이 섹션으로 연결

각 릴리스는 가져온 폴더 구조(상대 경로와 크기, 위치와 무관)에 대한 content hash를 기록합니다. 다시 스캔할 때 이를 써서 이미 라이브러리에 있는 폴더를 표시하고, 같은 리핑본을 다시 가져오면 중복 대신 이전 릴리스를 찾아 교체합니다.