Earshot의 CLI 실험을 Python 배치 작업으로 옮길 때는 seed 외에 참조 음원, 탐색 옵션, 이전 후보의 저장 상태도 맞춰야 합니다. 0.2.0에서는 두 진입점의 기본값이 다릅니다. 같은 소리 레시피와 seed를 넘겼다는 이유만으로 같은 조건을 비교했다고 볼 수 없습니다. 제품 데모나 작은 앱의 효과음을 반복해서 만드는 개발자를 위해, 어떤 입력이 달라지는지 소스로 확인합니다.
확인일: 2026년 10월 17일 UTC · 대상: Leonxlnx/earshot v0.2.0, 커밋 9721326 · 검증 범위: 공식 문서와 고정 소스 검토. AI의 조사·정리 도움을 사용했으며, Earshot 설치·모델 실행·음원 생성·청취 실험은 하지 않았습니다. 아래 비교는 소스에서 읽은 설정과 예상 처리 경로입니다.
1. Earshot이 맡는 일과 이번 변경
Earshot은 코딩 에이전트가 음원을 설명·검색·측정하고, 코드로 만든 효과음 후보를 평가하는 Python 도구입니다. CLI, Python API, MCP 서버를 제공합니다. 그중 forge는 소리를 만드는 레시피의 매개변수를 바꾸면서 모델 점수와 음향 측정값으로 후보를 고르는 기능입니다. UI 클릭음이나 짧은 전환 효과음을 여러 개 비교하려는 상황에 맞습니다.
공개 저장소는 2026년 10월 15일 만들어졌고, 0.2.0 릴리스는 10월 16일 22:38 UTC에 게시됐습니다. 이번 버전은 forge의 탐색·평가를 확장하고 음원을 코드 레시피로 옮기는 fit 등을 추가했습니다. GitHub 릴리스에 프리릴리스 표시는 없지만, 패키지의 개발 단계는 여전히 Alpha입니다.
조사 기록의 GitHub API 누적 별 수는 10월 16일 20:35 UTC의 294개에서 17일 04:33 UTC의 381개로 늘었습니다. 두 관측 사이의 증가분은 87개이며, 24시간 집계나 사용자 수가 아닙니다. 모델 로딩 동작을 검토한 외부 이슈처럼 구체적인 피드백도 있습니다. 이런 관심 신호가 음질이나 운영 안정성을 입증하지는 않습니다.
2. 레시피와 seed가 같아도 기본 설정이 다릅니다
가령 개발자가 CLI에서 클릭음 레시피와 seed 7로 시험한 뒤, Python에서도 같은 레시피와 seed만 지정했다고 가정하겠습니다. 다음은 0.2.0의 CLI 처리와 Python forge() 정의에서 읽은 차이입니다. 실제 생성 결과를 측정한 표는 아닙니다.
| 입력·단계 | CLI 기본값 | Python 기본값 |
|---|---|---|
| 측정값으로 미리 후보를 거르는 prescreen | pop의 3배. pop=16이면 48 | 0, 사용하지 않음 |
| 이전 후보 저장소인 seed bank | 읽기·갱신 켜짐 | bank=False |
| 새 seed로 후보를 다시 평가하는 robust | 3 | 0 |
| 재평가 후보 폭인 shortlist | 2 | 1 |
| refs·refset을 생략했을 때 | 레시피에 연결된 로컬 참조 음원을 찾음 | 그 자동 선택을 하지 않음 |
두 경로 모두 기본 pop은 16, 최종 후보 수 keep은 4, 탐색 전략은 es입니다. CLI는 기본적으로 더 넓은 후보 묶음을 새 seed로 재평가해 최종 후보를 고릅니다. 또한 budget은 탐색에서 평가할 후보 수를 뜻합니다. 사전 선별용 렌더링과 재평가까지 포함한 전체 작업 횟수나 실행 시간의 상한으로 읽으면 안 됩니다.
변경 기록은 Python 기본값을 v1 재현용으로 설명합니다. 다만 현재 소스에서 자동 생성하는 Critic의 기본 버전은 양쪽 모두 2입니다. 표의 탐색 설정 차이를 근거로 Python이 옛 평가기를 쓰거나 0.1.0의 소리를 그대로 재현한다고 확대하면 안 됩니다.
3. 참조 음원과 seed bank가 숨은 입력이 됩니다
CLI의 참조 선택 순서는 명시한 refset, 명시한 refs, 사용 가능한 레시피의 REFSET, 실제로 존재하는 레시피의 REFS 순입니다. 따라서 개발자의 컴퓨터에는 참조 음원이 있고 배치 환경에는 없으면, 같은 명령 의도라도 평가에 들어가는 음원이 달라질 수 있습니다.
참조 음원은 저장소에 포함되지 않습니다. 사용자가 준비한 파일을 refs로 직접 넘기거나, refset을 사용하려면 로컬 등록 정보를 마련해야 합니다. Python 호출에서 레시피의 분류명이 평가기로 전달되더라도, 그 분류명이 실제 음원 파일을 대신하지는 않습니다. 참조가 없는 경우 자동 모드는 designed로 정해지며, 참조가 있는 경우에도 목표 설명에 따라 designed가 선택될 수 있습니다.
seed bank는 난수 seed와 별개입니다. 로더는 과거 매개변수 묶음을 최대 6개 가져옵니다. 목표와 참조 문맥이 같은 항목을 우선하지만, 다른 문맥의 항목도 순위에 따라 가져올 수 있습니다. CLI는 선택한 후보를 이 저장소에 다시 반영합니다. seed 7을 유지해도 저장소 내용이 바뀌었다면 탐색의 출발 입력까지 고정한 것은 아닙니다.
4. 배치 작업으로 옮길 때 선택할 두 경로
CLI의 탐색 방식을 이어가려는 경우
Python에서 prescreen=48, robust=3, shortlist=2를 명시하고 pop=16, keep=4 등 나머지 조건도 맞춥니다. 같은 참조 파일을 직접 넘기면 자동 선택 차이를 줄일 수 있습니다. seed bank까지 이어가려면 bank=True뿐 아니라 사용할 저장소의 내용도 관리해야 합니다. 결과마다 저장소가 갱신되는 동작을 배치의 일부로 받아들이는 선택입니다.
이전 실행의 영향을 줄인 비교부터 하려는 경우
같은 참조 파일을 명시한 뒤 CLI에서는 --no-bank, Python에서는 bank=False를 선택할 수 있습니다. 단순한 탐색부터 비교하려면 CLI의 prescreen과 robust를 0, shortlist를 1로 맞추고 Python에도 그 값을 명시합니다. 이후 사전 선별이나 재평가를 하나씩 추가하면 무엇을 바꿨는지 구별하기 쉽습니다. 음질 우열이나 파형 일치를 보장하는 설정은 아닙니다.
옵션을 옮길 때 한 가지 예외도 있습니다. CLI의 --tone 0은 Python의 weights={'tone': 0}에 대응합니다. Python에서 tone=0.0만 넘기면 v2 평가기의 기본 tone 가중치 1.0이 유지됩니다. CLI가 0을 별도 가중치 재정의로 변환하기 때문입니다. 이는 합산 점수에서 tone 항의 가중치를 0으로 바꾸는 설정이며, 음색 관련 합격 조건을 모두 끄는 뜻은 아닙니다. 기본값 숫자만 복사하지 말고 호출부가 어떻게 전달하는지 확인해야 합니다.
두 경로 모두 비교의 목적에 맞게 입력을 명시하는 방법입니다. 같은 커밋·의존성·모델·참조 파일을 유지했는지까지 확인하기 전에는 출력 차이를 Python 전환 하나의 영향으로 단정하지 않는 편이 좋습니다.
5. report.json으로 확인할 수 있는 범위
보고서에는 참조 경로, seed, budget, pop, prescreen, 평가기 버전·모드·가중치, 읽어 온 bank 항목 수인 n_bank, 선택 규칙과 후보 정보가 들어갑니다. CLI 결과와 배치 결과를 나란히 볼 때 먼저 확인할 근거입니다. 다만 n_bank가 둘 다 6이라는 사실은 같은 여섯 항목을 썼다는 뜻이 아닙니다. 참조 경로 역시 파일 내용의 동일성을 증명하지 않습니다.
forge의 --check는 보고서에 기록된 선택 후보를 다시 렌더링해 저장된 WAV와 비교합니다. 후보를 고르는 탐색 전체를 처음부터 다시 실행하는 검사는 아닙니다. 배포할 효과음은 완성된 파일과 보고서를 함께 보관하고, 탐색을 다시 비교해야 한다면 코드·모델·참조 파일·bank 상태를 별도로 고정해야 합니다.
6. 작은 팀에서 도입할 조건
여러 효과음 후보를 반복해서 탐색하고, 최종 결과를 사람이 들어 볼 수 있다면 시험할 가치가 있습니다. 한 번 쓸 버튼 소리 하나가 필요하다면 사용 권한이 확인된 기존 음원과 익숙한 편집·측정 도구를 쓰는 편이 더 간단할 수 있습니다. Earshot의 높은 점수만으로 취향, 음원의 출처나 사용 권한까지 판단하지는 마세요.
0.2.0 패키지는 Python 3.10 이상, PyTorch 등 음향·과학 계산 의존성을 사용합니다. README 설치 안내는 ffmpeg와 ffprobe가 필요하다고 밝히며, CPU 실행과 첫 모델 사용 시 약 1.4GB 다운로드를 설명합니다. CPU에서 처리한다는 설명이 모든 실행의 네트워크 차단을 뜻하지는 않습니다. 모델 로더에는 로컬 로딩 실패 시 다운로드를 시도하는 경로가 있고, 별도 EARSHOT_OFFLINE 설정을 확인해야 합니다. 선택 기능인 Gemini 기반 llm 비평은 API 키와 업로드 동의가 필요하며 외부 전송·공급자 이용 조건을 따로 검토해야 합니다.
설치 대상도 구분해야 합니다. 이 글의 프로젝트는 Leonxlnx/earshot입니다. PyPI의 earshot 1.2.2는 pykeio가 제공하는 다른 프로젝트이므로, 이름만 보고 설치하면 이 글의 도구를 얻지 못합니다. 공식 저장소의 설치 안내와 버전을 기준으로 확인하세요.
코드는 MIT 라이선스이며 복사·배포 시 저작권 및 허가 고지 유지 조건이 있습니다. 내려받는 CLAP 모델 카드는 Apache-2.0, AST 모델 카드는 BSD-3-Clause를 표시합니다. 모델과 참조 음원의 조건은 코드 라이선스와 별도로 확인해야 합니다.
이전할 것은 seed 하나가 아니라 탐색에 들어가는 입력 묶음입니다. CLI의 확장된 탐색을 유지할지, bank를 끈 단순한 비교부터 시작할지 먼저 정한 뒤 Python 설정을 명시하면 전환 과정에서 생긴 차이를 설명하기 쉬워집니다.
댓글
댓글 쓰기