REST API · OpenAPI 3.1 · MCP 서버
개발자 API
파일, 링크, 텍스트를 코드와 가사로 변환하고, 스크립트나 어시스턴트로 악보장을 읽고 채워 보세요.
- 무료 요금제
- 앱과 같은 엔진
- 공식 MCP 서버
API로 할 수 있는 일
각 기능은 키를 만들 때 선택하는 스코프로 열립니다.
변환
오디오, PDF, 이미지, 텍스트, 링크를 송북, PDF, MIDI, MusicXML 등으로 변환합니다.
비공개 악보장
노래와 플레이리스트를 조회, 읽기, 생성, 수정, 정리합니다.
공개 프로필
읽기 전용: 프로필, 공개된 노래, 팔로워. 음원은 제공하지 않습니다.
스템 분리
변환(output=stems)은 보컬과 반주를 분리합니다. /stem-tool 도구는 2개 또는 4개 트랙으로 분리합니다. API 키로 사용할 때는 둘 다 Premium 계정이 필요합니다.
오디오 대기열
앱과 같은 대기열에서 코드와 가사를 분석합니다.
AI 음악 감지
파일, Spotify 링크, 오디오 직접 링크, ISRC에 대해 AI 생성 징후를 알려 줍니다.
제한, 쿼터, 개인정보
AI로 생성된 음악이 점점 늘어나고 있습니다. Jam Jam에서 생성 흔적을 살펴보세요. 링크를 붙여넣거나 파일을 올리면 참고용 결과를 확인할 수 있습니다.
최대 100 MB · 최대 10분 · Spotify, 오디오 직접 링크, ISRC 지원. YouTube는 지원하지 않습니다. Spotify 링크는 미리 듣기 구간만 분석될 수 있습니다.
계정당 대기 중이거나 처리 중인 파일은 하나만 허용됩니다. Premium 계정을 우선 처리합니다.
방문자: 하루 2회, 월 5회. 무료 계정: 하루 5회, 월 50회. Premium: 하루 30회, 월 300회. 사이트·앱·API가 한도를 공유하며 실패한 분석은 차감하지 않습니다. UTC 자정과 매월 1일에 초기화됩니다.
오디오는 감지 서비스 제공업체 SH Labs로 전송됩니다. 업체는 오디오를 보관하거나 모델 학습에 사용하지 않는다고 명시합니다. 서비스 장애 시 예비 처리가 가능하면 파일을 로컬에서 분석할 수 있습니다. 임시 파일은 완료, 실패, 취소 후 삭제됩니다. 계정에는 파일 이름 또는 링크, 날짜, 상태, 결과를 90일간 보관하고 방문자 결과는 24시간 제공합니다. 방문자 한도에는 토큰과 가명 처리된 네트워크 식별자를 사용하며 IP 주소를 평문으로 저장하지 않습니다.
이 지표는 확률이나 증거가 아닙니다. 낮은 지표도 사람이 만든 음악임을 보장하지 않습니다.
도구 알아보기지원 형식
정확한 한도와 이 서버가 실제로 제공하는 내용을 담은 최신 전체 목록은 항상 GET /formats에 있어요. 요약하면:
입력 형식
- 오디오 및 동영상 파일
- PDF: 코드, 가사, 악보, 타브 악보, 스캔한 송북
- 이미지: 코드, 가사, 악보, 타브 악보
- 일반 텍스트, ChordPro, OnSong
- 링크 및 웹 검색(page-link, web-search)
- MusicXML, MIDI
- JamSong, 혼합 .zip, 송북(피벗)
출력 형식
- 송북(JSON 피벗, 항상 제공)
- PDF: 코드, 가사, 악보, 타브 악보, 코드표
- PNG, HTML, 일반 텍스트, ChordPro
- chords-lab, chords-csv, 조성과 BPM
- MusicXML, MIDI(Premium)
- 싱크 가사: .lrc, .srt
- 노래방 동영상(.mp4), 반주 오디오, JamSong
네 단계로 시작하기
변환은 비동기로 진행됩니다: 제출하고, 추적하고, 받아 가세요.
-
키 만들기
설정 › API 키. 접두사
내 API 키 관리jj_live_, 한 번만 표시, 계정당 5개, 언제든 폐기 가능. -
제출
파일, URL 또는 텍스트를 원하는 출력 형식과 함께 보냅니다.
POST /jobs -
추적
Retry-After를 지켜 폴링하거나 Server-Sent Events 스트림을 엽니다.GET /jobs/{id}GET /jobs/{id}/events -
받기
결과는 24시간 동안 제공되며, 그 후에는 410 Gone입니다.
GET /jobs/{id}/result
예제
그대로 복사해 쓸 수 있는 완전한 호출 예제입니다.
이 서버가 지원하는 형식 목록 보기curl
curl https://jam-jam.org/api/v1/formats파일을 PDF로 변환curl
curl -X POST https://jam-jam.org/api/v1/jobs \
-H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
-F [email protected] \
-F inputFormat=pdf-songbook \
-F output=pdf-songbookURL을 악보장으로 변환curl
curl -X POST https://jam-jam.org/api/v1/jobs \
-H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/tabs/amazing-grace", "output": "songbook"}'진행 상황 확인(SSE 또는 폴링)curl
# Server-Sent Events
curl -N -H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
https://jam-jam.org/api/v1/jobs/jb_123/events
# Polling
curl -H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
https://jam-jam.org/api/v1/jobs/jb_123결과 다운로드curl
curl -H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
-OJ https://jam-jam.org/api/v1/jobs/jb_123/resultPython (requests)python
import time
import requests
API = "https://jam-jam.org/api/v1"
HEADERS = {"Authorization": "Bearer jj_live_xxxxxxxxxxxxxxxx"}
# 1. Discover formats
formats = requests.get(f"{API}/formats").json()
# 2. Submit a conversion
resp = requests.post(
f"{API}/jobs",
headers=HEADERS,
json={"url": "https://example.com/tabs/amazing-grace", "output": "songbook"},
)
resp.raise_for_status()
job = resp.json()
# 3. Poll until done (or use GET /jobs/{id}/events for SSE)
while job["phase"] not in ("done", "failed", "cancelled"):
time.sleep(job.get("etaS", 2))
job = requests.get(f"{API}/jobs/{job['id']}", headers=HEADERS).json()
# 4. Fetch the result
if job["phase"] == "done":
songbook = requests.get(f"{API}/jobs/{job['id']}/result/songbook", headers=HEADERS).json()
print(songbook["songs"][0]["title"])
else:
print("failed:", job.get("problem"))AI 음악 감지로 곡 분석하기curl
# Availability and remaining quota (no key needed)
curl https://jam-jam.org/api/v1/ai-music/availability
# Analyze a file
curl -X POST https://jam-jam.org/api/v1/ai-music/jobs \
-H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
-F "[email protected]"
# Analyze a Spotify link
curl -X POST https://jam-jam.org/api/v1/ai-music/jobs \
-H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"url":"https://open.spotify.com/track/2JUDGXTQYGQZrVVUgq40Ke"}'
# History, current analysis, one analysis
curl -H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
https://jam-jam.org/api/v1/ai-music/history
curl -H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
https://jam-jam.org/api/v1/ai-music/jobs
curl -H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
https://jam-jam.org/api/v1/ai-music/jobs/JOB_ID
# Cancel
curl -X DELETE -H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
https://jam-jam.org/api/v1/ai-music/jobs/JOB_ID코드 예제
curl, JavaScript, Python으로 바로 실행할 수 있는 예제입니다. MIT 라이선스 오픈 소스입니다.
어시스턴트와 MCP
어시스턴트는 명세를 읽고 스스로 호출을 구성합니다. 공식 MCP 서버는 바로 쓸 수 있는 도구 42개를 제공합니다.
AI 에이전트용
먼저 GET /openapi.json을 읽어보세요: 모델이 해석하도록 만들어진 x-agent-guide 블록에 권장 호출 순서(형식 확인, 제출, 추적, 가져오기), 인증, 쿼터가 문서화되어 있어요. 이 사이트의 llms.txt에는 각 변환 기능이 개별 항목으로 나열되어 있어요.
MCP 서버
키는 JAM_JAM_API_KEY에서 읽으며, 그 스코프가 허용하는 도구만 나타납니다. 아무도 팔로우하지 않고, 아무것도 좋아요하지 않으며, 스스로 아무것도 게시하지 않습니다.
자세히
공식 Model Context Protocol 서버는 API를 jj_로 시작하는 42개의 도구로 어시스턴트에 제공해요. 파일과 텍스트 변환, 비공개 악보장 읽기와 정리, 공개 프로필 읽기, 스템 분리, 오디오 분석과 대기열, AI 음악 감지, 마스터링을 지원해요. API 키는 환경 변수 JAM_JAM_API_KEY에서 읽고, 그 키의 스코프가 허용하는 도구만 보여 줘요. 폴링, 쿼터 오류, 파일 결과 가져오기를 대신 처리해 주기 때문에 Claude Desktop, Claude Code, Cursor 같은 어시스턴트가 HTTP 코드를 전혀 작성하지 않고도 파일을 변환하거나 악보장을 정리할 수 있어요. 스스로 팔로우하거나 좋아요를 누르거나 곡을 공개하는 일은 없어요.
{
"mcpServers": {
"jam-jam": {
"command": "npx",
"args": ["-y", "@jam-jam/convert-mcp"],
"env": {
"JAM_JAM_API_KEY": "jj_live_xxxxxxxxxxxxxxxx"
}
}
}
}도구와 필요한 스코프 42
형식, 파일, 텍스트, 작업 상태.
jj_list_formats스코프 없음jj_convert_fileconvert:writejj_convert_textconvert:writejj_get_jobconvert:read
키로 할 수 있는 일과 남은 양.
jj_check_usage
곡과 플레이리스트.
jj_list_songsjj_get_songjj_list_playlistsjj_get_playlist
곡과 플레이리스트 만들기, 수정, 삭제.
jj_create_songjj_update_songjj_delete_songjj_create_playlistjj_update_playlistjj_delete_playlist
프로필 카드, 공개된 곡과 플레이리스트, 팔로워와 팔로잉.
jj_get_profilejj_list_profile_songsjj_list_profile_playlistsjj_list_followersjj_list_following
지원 현황, 작업, 파일.
jj_stems_capabilitiesconvert:readjj_stems_separatestems:writejj_stems_get_jobconvert:readjj_stems_list_jobsconvert:readjj_stems_get_fileconvert:readjj_stems_cancel_jobstems:write
파일 분석, 작업 목록 조회, 읽기, 취소.
jj_audio_analyzeaudio:writejj_queue_listqueue:readjj_queue_get_jobqueue:readjj_queue_cancel_jobaudio:write
사용 가능 여부, 분석, 기록, 작업.
jj_ai_music_availabilityqueue:readjj_ai_music_analyzeaudio:writejj_ai_music_currentqueue:readjj_ai_music_get_jobqueue:readjj_ai_music_historyqueue:readjj_ai_music_cancel_jobaudio:write
지원 현황, 프리셋, 렌더링, 작업 상태와 취소.
jj_mastering_capabilities스코프 없음jj_list_mastering_presetsmastering:readjj_create_mastering_presetmastering:writejj_master_audiomastering:writejj_mastering_get_jobmastering:readjj_mastering_cancel_jobmastering:write
엔드포인트 레퍼런스
제공되는 모든 경로를 그룹별로 스코프와 쿼터와 함께 정리했습니다. 기준은 전체 명세입니다.
변환(작업) 6
| 메서드 | 경로 | 스코프 | 쿼터 |
|---|---|---|---|
| POST | /jobs변환을 제출해요: 파일(multipart/form-data), URL, 또는 원시 텍스트/ChordPro(application/json). output=stems를 지정하면 stems:write 스코프와 Premium API 키도 필요하며, 별도 쿼터가 있어요(UTC 기준 1일 200회). | convert:write | 쿼터: 변환 |
| GET | /jobs/{id}작업 상태(단계, 퍼센트, 단계별 진행). Retry-After 헤더를 지키면서 폴링하세요. | convert:read | 쿼터: 없음 |
| DELETE | /jobs/{id}작업을 취소하고 파일을 삭제해요. 아직 대기열에 있었을 때만 쿼터가 환급돼요. | convert:write | 쿼터: 없음 |
| GET | /jobs/{id}/events폴링 대신 사용할 수 있는 Server-Sent Events예요: state, done, error 이벤트와 연결 유지용 ping 이벤트가 있어요. | convert:read | 쿼터: 없음 |
| GET | /jobs/{id}/result주요 산출물(또는 ?artifact=로 지정한 특정 산출물)을 다운로드해요. 작업 생성 후 24시간 동안 이용할 수 있어요. | convert:read | 쿼터: 없음 |
| GET | /jobs/{id}/result/songbook코드, 가사, 구조를 담은 표준 JSON 피벗이에요. 작업이 끝나면 항상 이용할 수 있어요. | convert:read | 쿼터: 없음 |
형식 1
| 메서드 | 경로 | 스코프 | 쿼터 |
|---|---|---|---|
| GET | /formats이 서버가 실제로 제공하는 입력/출력 조합 목록과 한도(maxBytes, maxPages, maxDurationS)예요. | 공개(키 불필요) | 쿼터: 없음 |
사용량과 쿼터 1
| 메서드 | 경로 | 스코프 | 쿼터 |
|---|---|---|---|
| GET | /me/usage내 쿼터 잔여량(변환, 읽기, 쓰기, 스템)과 내 계정이 실제로 행사할 수 있는 스코프를 한 번의 호출로 확인해요. | convert:read | 쿼터: 없음 |
악보장, 읽기 4
| 메서드 | 경로 | 스코프 | 쿼터 |
|---|---|---|---|
| GET | /me/songs내 비공개 악보장의 곡 목록이에요. 불투명 커서로 페이지네이션되며, 증분 내보내기에는 updatedSince를 사용하세요. | carnet:read | 쿼터: 읽기 |
| GET | /me/songs/{songId}악보장에 있는 곡 하나 전체예요. 코드, 가사, 구조가 모두 포함돼요. | carnet:read | 쿼터: 읽기 |
| GET | /me/playlists악보장의 플레이리스트 목록이에요. 평면 구조이며 하나의 곡이 여러 플레이리스트에 속할 수 있고, 곡과 동일한 방식으로 페이지네이션돼요. | carnet:read | 쿼터: 읽기 |
| GET | /me/playlists/{playlistId}플레이리스트 하나와 그 안의 곡들을 순서대로 요약된 형태로 제공해요. | carnet:read | 쿼터: 읽기 |
악보장, 쓰기 8
| 메서드 | 경로 | 스코프 | 쿼터 |
|---|---|---|---|
| POST | /me/songs곡을 악보장에 추가해요. 변환이 반환하는 것과 같은 피벗 페이로드예요. 중복을 막으려면 Idempotency-Key를 설정하세요. | carnet:write | 쿼터: 쓰기 |
| PUT | /me/songs/{songId}곡을 완전히 교체해요(선언적 방식). 해당 id가 아직 없다면 새로 생성돼요. | carnet:write | 쿼터: 쓰기 |
| PATCH | /me/songs/{songId}보낸 필드(조, 카포, bpm, playlistIds 등)만 업데이트해요. 프로필에 곡을 공개하거나 비공개로 전환하는 것도 이 요청으로 처리해요. | carnet:write | 쿼터: 쓰기 |
| DELETE | /me/songs/{songId}곡을 악보장에서 제거해요. 소프트 삭제이며 멱등적으로 처리되고, 모든 플레이리스트에서도 함께 빠져요. | carnet:write | 쿼터: 쓰기 |
| POST | /me/playlists플레이리스트를 만들어요. songIds는 포함된 곡의 순서 있는 목록이며, 보낸 그대로 유지돼요. | carnet:write | 쿼터: 쓰기 |
| PUT | /me/playlists/{playlistId}플레이리스트를 완전히 교체해요(선언적 방식). songIds는 필수예요. | carnet:write | 쿼터: 쓰기 |
| PATCH | /me/playlists/{playlistId}플레이리스트 이름 변경, 커버 이모지 변경, 또는 곡 순서 전체 재정렬을 해요. | carnet:write | 쿼터: 쓰기 |
| DELETE | /me/playlists/{playlistId}플레이리스트 자체를 삭제해요. 곡은 악보장과 다른 플레이리스트에 그대로 남아요. | carnet:write | 쿼터: 쓰기 |
소셜, 읽기 전용 5
| 메서드 | 경로 | 스코프 | 쿼터 |
|---|---|---|---|
| GET | /users/{handle}핸들로 조회하는 계정의 공개 프로필 헤더예요. 팔로우하지 않은 비공개 계정은 닫힌 카드(자기소개나 카운트 없이)로 반환돼요. | social:read | 쿼터: 읽기 |
| GET | /users/{handle}/songs계정이 프로필에 공개한 곡들이에요. audioPlayable은 서로 맞팔로우할 때만 true예요. | social:read | 쿼터: 읽기 |
| GET | /users/{handle}/playlists계정이 공개한 플레이리스트들이에요. songCount는 내가 실제로 볼 수 있는 것만 세요. | social:read | 쿼터: 읽기 |
| GET | /me/followers나를 팔로우하는 계정들이에요. status=accepted(기본값) 또는 requested예요. | social:read | 쿼터: 읽기 |
| GET | /me/following내가 팔로우하는 계정들이에요. status=requested는 비공개 계정에 보낸, 아직 대기 중인 요청을 보여줘요. | social:read | 쿼터: 읽기 |
오디오 대기열과 스템 4
| 메서드 | 경로 | 스코프 | 쿼터 |
|---|---|---|---|
| POST | /audio이미 내 악보장에 있는 곡의 코드/가사 자동 분석과, 이어지는 정렬 작업을 대기열에 넣어요. 앱과 같은 대기열이며, songId는 내 소유여야 해요. | audio:write | 쿼터: 없음 |
| GET | /queue내 계정의 오디오 처리 대기열이에요: 진행 중, 대기 중(rank 포함), 최근 7일간 완료된 항목이에요. | queue:read | 쿼터: 없음 |
| GET | /queue/{id}오디오 대기열 작업 하나예요, 내 것만 조회할 수 있어요. 알 수 없는 작업이나 다른 사람의 작업에도 구분되지 않는 동일한 404가 반환돼요. | queue:read | 쿼터: 없음 |
| DELETE | /queue/{id}내 오디오 대기열 작업 중 하나를 취소해요. 분석이 아직 끝나지 않았을 때만 환급돼요. | audio:write | 쿼터: 없음 |
스템 분리 6
| 메서드 | 경로 | 스코프 | 쿼터 |
|---|---|---|---|
| GET | /stem-tool/capabilities호출자의 스템 분리 사용 가능 여부, 제한, 모델, 할당량을 확인해요. | convert:read | 쿼터: 없음 |
| GET | /stem-tool/jobs선택적 페이지 커서와 함께 호출자의 비공개 분리 작업을 나열해요. | convert:read | 쿼터: 없음 |
| POST | /stem-tool/jobs오디오 파일을 올려 두 개 또는 네 개의 트랙으로 분리해요. API 키는 Premium에서만 사용할 수 있어요. | stems:write | 쿼터: 스템 |
| GET | /stem-tool/jobs/{id}내 분리 작업의 상태, 진행률, 사용 가능한 파일을 확인해요. | convert:read | 쿼터: 없음 |
| DELETE | /stem-tool/jobs/{id}내 분리 작업을 취소해요. | stems:write | 쿼터: 없음 |
| GET | /stem-tool/jobs/{id}/files/{name}MP3 트랙이나 ZIP 파일을 다운로드할 수 있는 짧은 유효 기간의 서명 URL을 받아요. | convert:read | 쿼터: 없음 |
API 키로 호출할 때 이 경로들은 모두 Premium 계정이 필요합니다. 그렇지 않으면 403(api-premium-required)이 반환됩니다. 호출자의 한도는 GET /stem-tool/capabilities에서 확인할 수 있습니다.
마스터링 8
| 메서드 | 경로 | 스코프 | 쿼터 |
|---|---|---|---|
| GET | /mastering/capabilities한도, 설정 범위, 라우드니스 목표, 내장 프리셋과 렌더링 권한. | 공개(키 불필요) | 쿼터: 없음 |
| GET | /mastering/presets마스터링 프리셋 목록을 받아요. | mastering:read | 쿼터: 없음 |
| POST | /mastering/presets마스터링 프리셋을 만들어요 (Idempotency-Key 필수). | mastering:write | 쿼터: 없음 |
| DELETE | /mastering/presets/{id}마스터링 프리셋을 삭제해요. | mastering:write | 쿼터: 없음 |
| POST | /mastering/jobs오디오를 올리고 프리셋이나 설정으로 마스터링을 시작해요. | mastering:write | 쿼터: 마스터링(무료 주 3회, Premium 무제한) |
| GET | /mastering/jobs/{id}마스터링 작업 상태를 받아요. | mastering:read | 쿼터: 없음 |
| DELETE | /mastering/jobs/{id}마스터링 작업을 취소해요. | mastering:write | 쿼터: 없음 |
| GET | /mastering/jobs/{id}/result마스터링된 WAV를 다운로드해요. | mastering:read | 쿼터: 없음 |
AI 음악 감지 7 + 1 내부
| 메서드 | 경로 | 스코프 | 쿼터 |
|---|---|---|---|
| GET | /ai-music/availability도구 사용 가능 여부, 지원 형식, 계정 또는 방문자의 남은 쿼터. | 공개(키 불필요) | 쿼터: 없음 |
| POST | /ai-music/jobs오디오 파일, Spotify 링크, 오디오 직접 링크 또는 ISRC를 제출합니다. 완료되지 않은 작업은 계정당 1개이며, YouTube는 지원하지 않습니다. | audio:write | 쿼터: AI 감지 |
| GET | /ai-music/jobs진행 중이거나 가장 최근의 분석을 찾습니다. | queue:read | 쿼터: 없음 |
| GET | /ai-music/jobs/{id}분석을 추적하고 결과 보고서를 읽습니다. | queue:read | 쿼터: 없음 |
| DELETE | /ai-music/jobs/{id}분석을 취소하고 임시 파일을 삭제합니다. | audio:write | 쿼터: 없음 |
| GET | /ai-music/history최근 90일간의 비공개 기록(페이지당 30개). 계정이 필요하며 오디오는 보관하지 않습니다. | queue:read | 쿼터: 없음 |
| DELETE | /ai-music/history/{id}기록에서 스캔을 삭제합니다. 성공한 분석에 사용된 쿼터는 돌려받지 못합니다. | audio:write | 쿼터: 없음 |
| GET | /ai-music/source/{token}/{filename}감지 제공업체 전용 임시 주소로, 최대 180초 동안만 유효합니다. 클라이언트는 이 주소를 호출하지 않습니다. | 내부 | 쿼터: 없음 |
상태와 명세 2
| 메서드 | 경로 | 스코프 | 쿼터 |
|---|---|---|---|
| GET | /health엔진별(OMR, 오디오, 비디오 등) 서비스 상태와 준비 상태예요. 인증이 필요 없어요. | 공개(키 불필요) | 쿼터: 없음 |
| GET | /openapi.json이 계약서를 기계가 읽을 수 있는 JSON으로 제공해요. | 공개(키 불필요) | 쿼터: 없음 |
이 표와 항상 동기화되는, 기계가 읽을 수 있는 전체 계약서:
https://jam-jam.org/api/v1/openapi.json OpenAPI 명세 쿼터와 제한
정확한 잔여량은 GET /me/usage와 각 응답의 X-Quota-* 헤더에서 확인할 수 있습니다.
변환
- 무료 계정
- 6 / 주
- Premium
- 500 / 월
- 키와 세션 없음
- 3 / 24시간
앱의 악보장 내보내기와 같은 카운터를 씁니다.
읽기와 쓰기
| UTC 기준 하루 | 무료 계정 | Premium |
|---|---|---|
| 읽기(악보장, 프로필) | 2,000 | 20,000 |
| 쓰기(악보장) | 200 | 5,000 |
X-Read-Quota-* · X-Write-Quota-*
변환으로 하는 스템 분리
POST /jobs · output=stems Premium API 키가 필요해요. Premium이 아니면 403(premium-required)이 반환돼요.
- Premium
- 200 UTC 기준 하루
이 경로를 호출하면 보내는 오디오에 대한 권리를 보유하고 있음을 보증하는 것입니다.
자세히
output=stems를 지정한POST /jobs는vocals,accompaniment,manifest.json이 담긴.zip을 반환합니다.- 필요한 스코프:
stems:write,convert:write. - 변환과는 별개의 카운터로, UTC 기준 하루 단위로 집계됩니다(최근 24시간 이동 기준이 아님).
- 스템 분리 도구(
/stem-tool/*)와는 다릅니다. 이 도구를 API 키로 쓰려면 Premium 계정이 필요하며, 한도도 따로 있습니다(GET /stem-tool/capabilities).
API 키 발급받기
Jam Jam 무료 계정을 만든 다음, 앱(모바일 또는 웹)에서 설정 > API 키를 열고 키를 만들어요. jj_live_로 시작하며 한 번만 표시되니 바로 복사해 두세요. 계정당 최대 5개까지 만들 수 있고 언제든 취소할 수 있어요.
오류
모든 경로의 모든 오류는 application/problem+json 객체(RFC 9457)이며, 클라이언트가 분기 처리에 사용할 수 있는 안정적인 code 필드를 가져요: quota-exhausted, rate-limited, unsupported-pair, not-found 등. 전체 목록은 OpenAPI 스키마(components.schemas.Problem)에 있어요.
보관 기간
업로드한 파일과 생성된 결과는 작업 생성 후 24시간이 지나면 삭제돼요. 실패한 작업을 포함해 그보다 오래 보관되는 것은 없어요. 이 기간이 지난 뒤 결과를 요청하면 410 Gone이 반환돼요.
오픈소스 크레딧
이 API는 실제 오픈소스 엔진 위에서 동작해요. 정직하게 사용하고, 이름을 명시해 크레딧을 표기해요:
- MuseScore 4
GPL-3.0악보 가져오기와 렌더링, 악보 PDF - Audiveris
AGPL-3.0스캔한 악보의 광학 악보 인식 - Tesseract OCR
Apache-2.0스캔한 페이지와 사진의 텍스트 인식 - faster-whisper
MIT오디오에서 가사 받아쓰기 - Basic Pitch
Apache-2.0오디오에서 음표와 멜로디 감지 - FluidSynth
LGPL-2.1MIDI에서 반주 렌더링(SoundFont) - FFmpeg
LGPL-2.1 / GPL-2.0오디오 및 동영상 인코딩, 형식 변환 - Chromium
BSD-3-Clause악보와 코드표의 PDF 렌더링
모델 및 데이터
화자 감지(Studio): 음성 임베딩 모델 WeSpeaker ResNet34-LM, WeNet 프로젝트(github.com/wenet-e2e/wespeaker), VoxCeleb(VGG, 옥스퍼드 대학교)로 학습, 라이선스 CC BY 4.0(creativecommons.org/licenses/by/4.0/). Jam Jam에서 수정: 가중치를 반정밀도로 변환.