REST API · OpenAPI 3.1 · Serwer MCP
API dla programistów
Zamieniaj pliki, linki i teksty na akordy i słowa piosenek, a potem czytaj i uzupełniaj swój śpiewnik ze skryptu lub asystenta.
- Darmowy plan
- Ten sam silnik co aplikacja
- Oficjalny serwer MCP
Co umożliwia API
Każdą funkcję odblokowuje zakres, który zaznaczasz przy tworzeniu klucza.
Konwersja
Audio, PDF, obrazy, tekst lub link do songbooka, PDF, MIDI, MusicXML i nie tylko.
Prywatny śpiewnik
Wyświetlanie, odczyt, tworzenie, edycja i porządkowanie piosenek i playlist.
Profile publiczne
Tylko odczyt: profile, opublikowane piosenki, obserwujący. Bez ścieżki dźwiękowej.
Separacja ścieżek
Konwersja (output=stems) oddziela wokal od akompaniamentu; narzędzie /stem-tool dzieli na dwie lub cztery ścieżki. Z kluczem API oba wymagają konta Premium.
Kolejka audio
Analiza akordów i słów w tej samej kolejce co aplikacja.
Wykrywanie muzyki AI
Wskazówka, czy muzykę wygenerowało AI, dla pliku, linku Spotify, bezpośredniego linku audio lub kodu ISRC.
Ograniczenia, limity i prywatność
Muzyka generowana przez AI jest coraz częstsza. Jam Jam pomaga znaleźć jej oznaki: wklej link lub prześlij plik, aby uzyskać orientacyjny wynik.
Maks. 100 MB · Maks. 10 min · Spotify, bezpośredni link audio lub ISRC. YouTube nie jest obsługiwany. Linki Spotify mogą być analizowane tylko na podstawie fragmentu.
Jeden plik oczekujący lub przetwarzany na konto. Konta Premium mają pierwszeństwo w kolejce.
Gość: 2 analizy/dzień i 5/miesiąc. Konto bezpłatne: 5/dzień i 50/miesiąc. Premium: 30/dzień i 300/miesiąc. Wspólne limity witryny, aplikacji i API; błędy nie zużywają limitu. Reset o północy UTC i pierwszego dnia miesiąca UTC.
Audio jest wysyłane do dostawcy SH Labs do analizy. Deklaruje on, że nie przechowuje audio ani nie używa go do trenowania modeli. W razie awarii plik może być analizowany lokalnie, jeśli dostępna jest usługa zapasowa. Pliki tymczasowe są usuwane po przetworzeniu, błędzie lub anulowaniu. Konto przechowuje nazwę lub link, datę, stan i wynik przez 90 dni; wyniki gości przez 24 godziny. Limity gości wykorzystują token i pseudonimizowany identyfikator sieci, bez zapisywania adresu IP w jawnej postaci.
Ten wskaźnik nie jest prawdopodobieństwem ani dowodem. Niski wskaźnik nie gwarantuje ludzkiego pochodzenia.
Poznaj narzędzieObsługiwane formaty
Pełna, aktualna lista, z dokładnymi limitami i tym, co ten serwer faktycznie obsługuje, zawsze znajduje się pod GET /formats. W skrócie:
Formaty wejściowe
- Pliki audio i wideo
- PDF: akordy, słowa, nuty, tabulatura, zeskanowany śpiewnik
- Obrazy: akordy, słowa, nuty, tabulatura
- Zwykły tekst, ChordPro, OnSong
- Linki i wyszukiwanie w sieci (page-link, web-search)
- MusicXML, MIDI
- JamSong, mieszany .zip, songbook (pivot)
Formaty wyjściowe
- Songbook (pivot JSON, zawsze dostępny)
- PDF: akordy, słowa, nuty, tabulatura, siatka
- PNG, HTML, zwykły tekst, ChordPro
- chords-lab, chords-csv, tonacja i BPM
- MusicXML, MIDI (Premium)
- Zsynchronizowane słowa: .lrc, .srt
- Wideo karaoke (.mp4), podkład audio, JamSong
Zacznij w czterech krokach
Konwersja jest asynchroniczna: wysyłasz, śledzisz, odbierasz.
-
Utwórz klucz
Ustawienia › Klucze API. Prefiks
Zarządzaj moimi kluczami APIjj_live_, wyświetlany tylko raz, 5 kluczy na konto, można je unieważnić. -
Wyślij
Plik, URL lub tekst, z wybranym formatem wyjściowym.
POST /jobs -
Śledź
Odpytuj z poszanowaniem
Retry-Afteralbo otwórz strumień Server-Sent Events.GET /jobs/{id}GET /jobs/{id}/events -
Odbierz
Wynik jest dostępny przez 24 godziny, potem 410 Gone.
GET /jobs/{id}/result
Przykłady
Kompletne wywołania, gotowe do skopiowania bez zmian.
Wylistuj formaty obsługiwane przez ten serwercurl
curl https://jam-jam.org/api/v1/formatsKonwertuj plik do PDFcurl
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-songbookKonwertuj URL na śpiewnikcurl
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"}'Śledź postęp (SSE lub odpytywanie)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_123Pobierz wynikcurl
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"))Analiza utworu za pomocą wykrywania muzyki AIcurl
# 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_IDPrzykłady kodu
Gotowe do uruchomienia przykłady w curl, JavaScript i Python, open source na licencji MIT:
Asystenci i MCP
Asystent czyta kontrakt i sam buduje wywołania. Oficjalny serwer MCP daje mu 42 gotowe narzędzia.
Dla agentów AI
Przeczytaj najpierw GET /openapi.json: dokumentuje on zalecaną sekwencję wywołań (odkrywanie formatów, wysyłanie, śledzenie, pobieranie), uwierzytelnianie i limity w bloku x-agent-guide przeznaczonym do odczytu przez model. Plik llms.txt na tej stronie wymienia każdą możliwość konwersji jako osobny wpis.
Serwer MCP
Klucz odczytywany z JAM_JAM_API_KEY: widać tylko narzędzia, na które pozwalają jego zakresy. Nikogo nie obserwuje, niczego nie polubia i niczego nie publikuje sam z siebie.
Szczegóły
Oficjalny serwer Model Context Protocol udostępnia asystentowi API jako 42 narzędzia z przedrostkiem jj_: konwersję plików i tekstu, odczyt i porządkowanie Twojego prywatnego śpiewnika, odczyt profili publicznych, rozdzielanie stemów, analizę audio i kolejkę, wykrywanie muzyki AI oraz mastering. Czyta klucz API ze zmiennej środowiskowej JAM_JAM_API_KEY i pokazuje tylko te narzędzia, na które pozwalają zakresy tego klucza. Zajmuje się za Ciebie odpytywaniem, błędami limitów i pobieraniem plików wynikowych, dzięki czemu asystent taki jak Claude Desktop, Claude Code czy Cursor może przekonwertować plik albo uporządkować Twój śpiewnik bez pisania przez Ciebie jakiegokolwiek kodu HTTP. Nikogo nie obserwuje, niczego nie lajkuje i nie publikuje utworów na własną rękę.
npx -y @jam-jam/convert-mcpStrona pakietu w npm: npmjs.com/package/@jam-jam/convert-mcp
{
"mcpServers": {
"jam-jam": {
"command": "npx",
"args": ["-y", "@jam-jam/convert-mcp"],
"env": {
"JAM_JAM_API_KEY": "jj_live_xxxxxxxxxxxxxxxx"
}
}
}
}Narzędzia i wymagane zakresy 42
formaty, pliki, tekst i stan zadań.
jj_list_formatsbez zakresujj_convert_fileconvert:writejj_convert_textconvert:writejj_get_jobconvert:read
co może klucz i ile mu zostało.
jj_check_usage
utwory i playlisty.
jj_list_songsjj_get_songjj_list_playlistsjj_get_playlist
tworzenie, zmiana i usuwanie utworów i playlist.
jj_create_songjj_update_songjj_delete_songjj_create_playlistjj_update_playlistjj_delete_playlist
karty profili, opublikowane utwory i playlisty, obserwujący i obserwowani.
jj_get_profilejj_list_profile_songsjj_list_profile_playlistsjj_list_followersjj_list_following
możliwości, zadania i pliki.
jj_stems_capabilitiesconvert:readjj_stems_separatestems:writejj_stems_get_jobconvert:readjj_stems_list_jobsconvert:readjj_stems_get_fileconvert:readjj_stems_cancel_jobstems:write
analiza pliku, potem lista, odczyt i anulowanie zadań.
jj_audio_analyzeaudio:writejj_queue_listqueue:readjj_queue_get_jobqueue:readjj_queue_cancel_jobaudio:write
dostępność, analiza, historia i zadania.
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
możliwości, presety, renderowanie, stan i anulowanie zadań.
jj_mastering_capabilitiesbez zakresujj_list_mastering_presetsmastering:readjj_create_mastering_presetmastering:writejj_master_audiomastering:writejj_mastering_get_jobmastering:readjj_mastering_cancel_jobmastering:write
Dokumentacja endpointów
Wszystkie obsługiwane trasy, według rodzin, z zakresem i limitem. Wiążący jest pełny kontrakt.
- Konwersja (zadania) 6
- Formaty 1
- Wykorzystanie i limity 1
- Śpiewnik, odczyt 4
- Śpiewnik, zapis 8
- Społeczność, tylko odczyt 5
- Kolejka audio i stems 4
- Separacja ścieżek 6
- Mastering 8
- Wykrywanie muzyki AI 7
- Stan i specyfikacja 2
Konwersja (zadania) 6
| Metoda | Ścieżka | Zakres | Limit |
|---|---|---|---|
| POST | /jobsWyślij konwersję: plik (multipart/form-data), URL lub czysty tekst/ChordPro (application/json). Przy output=stems wymagane są też zakres stems:write i klucz API Premium, z osobnym limitem (200/dobę UTC). | convert:write | limit: konwersja |
| GET | /jobs/{id}Status zadania (faza, procent, kroki). Odpytuj, przestrzegając nagłówka Retry-After. | convert:read | limit: brak |
| DELETE | /jobs/{id}Anuluje zadanie i usuwa jego pliki; zwraca limit tylko wtedy, gdy zadanie było jeszcze w kolejce. | convert:write | limit: brak |
| GET | /jobs/{id}/eventsAlternatywa dla odpytywania w postaci Server-Sent Events: zdarzenia state, done, error oraz ping keep-alive. | convert:read | limit: brak |
| GET | /jobs/{id}/resultPobiera główny artefakt (lub konkretny za pomocą ?artifact=). Dostępny przez 24 godziny od utworzenia zadania. | convert:read | limit: brak |
| GET | /jobs/{id}/result/songbookKanoniczny pivot JSON śpiewnika (akordy, tekst, struktura), zawsze dostępny po zakończeniu zadania. | convert:read | limit: brak |
Formaty 1
| Metoda | Ścieżka | Zakres | Limit |
|---|---|---|---|
| GET | /formatsRejestr par wejście/wyjście faktycznie obsługiwanych przez ten serwer, z limitami (maxBytes, maxPages, maxDurationS). | publiczny (bez klucza) | limit: brak |
Wykorzystanie i limity 1
| Metoda | Ścieżka | Zakres | Limit |
|---|---|---|---|
| GET | /me/usageStan Twoich limitów (konwersja, odczyt, zapis, stems) oraz zakresy, z których Twoja tożsamość faktycznie może korzystać, w jednym wywołaniu. | convert:read | limit: brak |
Śpiewnik, odczyt 4
| Metoda | Ścieżka | Zakres | Limit |
|---|---|---|---|
| GET | /me/songsListuje utwory z Twojego prywatnego śpiewnika, stronicowane za pomocą nieprzezroczystego kursora; użyj updatedSince do eksportu przyrostowego. | carnet:read | limit: odczyt |
| GET | /me/songs/{songId}Jeden pełny utwór z Twojego śpiewnika, wraz z akordami, tekstem i strukturą. | carnet:read | limit: odczyt |
| GET | /me/playlistsListuje playlisty w Twoim śpiewniku, płaskie i z wieloma przynależnościami, ze stronicowaniem takim samym jak dla utworów. | carnet:read | limit: odczyt |
| GET | /me/playlists/{playlistId}Jedna playlista i jej utwory, w kolejności, w skróconej formie. | carnet:read | limit: odczyt |
Śpiewnik, zapis 8
| Metoda | Ścieżka | Zakres | Limit |
|---|---|---|---|
| POST | /me/songsDodaje utwór do Twojego śpiewnika, ten sam pivotowy payload, który zwraca konwersja. Ustaw Idempotency-Key, aby uniknąć duplikatów. | carnet:write | limit: zapis |
| PUT | /me/songs/{songId}Zastępuje utwór w całości (deklaratywnie); tworzy go pod tym id, jeśli jeszcze nie istnieje. | carnet:write | limit: zapis |
| PATCH | /me/songs/{songId}Aktualizuje tylko wysłane pola (tonacja, kapodaster, bpm, playlistIds...); publikuje też lub cofa publikację utworu na Twoim profilu. | carnet:write | limit: zapis |
| DELETE | /me/songs/{songId}Usuwa utwór z Twojego śpiewnika; usunięcie miękkie, idempotentne, opuszcza też wszystkie playlisty. | carnet:write | limit: zapis |
| POST | /me/playlistsTworzy playlistę; songIds to uporządkowana lista zawartych w niej utworów, zachowywana dokładnie tak, jak została wysłana. | carnet:write | limit: zapis |
| PUT | /me/playlists/{playlistId}Zastępuje playlistę w całości (deklaratywnie); songIds jest wymagane. | carnet:write | limit: zapis |
| PATCH | /me/playlists/{playlistId}Zmienia nazwę, emoji okładki lub całkowicie zmienia kolejność utworów w playliście. | carnet:write | limit: zapis |
| DELETE | /me/playlists/{playlistId}Usuwa samą playlistę; jej utwory pozostają w Twoim śpiewniku i w swoich innych playlistach. | carnet:write | limit: zapis |
Społeczność, tylko odczyt 5
| Metoda | Ścieżka | Zakres | Limit |
|---|---|---|---|
| GET | /users/{handle}Nagłówek publicznego profilu konta na podstawie nazwy użytkownika; konto prywatne, którego nie obserwujesz, zwraca zamkniętą kartę (bez bio i liczników). | social:read | limit: odczyt |
| GET | /users/{handle}/songsUtwory opublikowane przez konto na jego profilu; audioPlayable jest prawdziwe tylko wtedy, gdy obserwujecie się nawzajem. | social:read | limit: odczyt |
| GET | /users/{handle}/playlistsPlaylisty opublikowane przez konto; songCount liczy tylko to, co faktycznie możesz zobaczyć. | social:read | limit: odczyt |
| GET | /me/followersKonta, które Cię obserwują; status=accepted (domyślnie) lub requested. | social:read | limit: odczyt |
| GET | /me/followingKonta, które obserwujesz; status=requested wymienia wciąż oczekujące prośby do kont prywatnych. | social:read | limit: odczyt |
Kolejka audio i stems 4
| Metoda | Ścieżka | Zakres | Limit |
|---|---|---|---|
| POST | /audioUmieszcza w kolejce automatyczną analizę akordów i tekstu, a następnie synchronizację, dla utworu już znajdującego się w Twoim śpiewniku. Ta sama kolejka co w aplikacji; songId musi należeć do Ciebie. | audio:write | limit: brak |
| GET | /queueKolejka przetwarzania audio Twojego konta: aktywne, oczekujące (z rank) oraz ukończone z ostatnich 7 dni. | queue:read | limit: brak |
| GET | /queue/{id}Jedno zadanie z kolejki audio, tylko Twoje; ten sam nierozróżnialny 404 dla nieznanego zadania lub cudzego. | queue:read | limit: brak |
| DELETE | /queue/{id}Anuluje jedno z Twoich zadań w kolejce audio; zwraca limit tylko wtedy, gdy analiza jeszcze się nie zakończyła. | audio:write | limit: brak |
Separacja ścieżek 6
| Metoda | Ścieżka | Zakres | Limit |
|---|---|---|---|
| GET | /stem-tool/capabilitiesSprawdź dostępność, limity, modele i limit separacji ścieżek dla wywołującego. | convert:read | limit: brak |
| GET | /stem-tool/jobsWyświetl prywatne zadania separacji ścieżek wywołującego z opcjonalnym kursorem stronicowania. | convert:read | limit: brak |
| POST | /stem-tool/jobsPrześlij plik audio i podziel go na dwie lub cztery ścieżki. Klucze API wymagają Premium. | stems:write | limit: stems |
| GET | /stem-tool/jobs/{id}Odczytaj stan, postęp i dostępne pliki własnego zadania. | convert:read | limit: brak |
| DELETE | /stem-tool/jobs/{id}Anuluj własne zadanie separacji ścieżek. | stems:write | limit: brak |
| GET | /stem-tool/jobs/{id}/files/{name}Uzyskaj krótkotrwały podpisany adres do pobrania ścieżki MP3 lub archiwum ZIP. | convert:read | limit: brak |
Z kluczem API wszystkie te trasy wymagają konta Premium; w przeciwnym razie odpowiedzią jest 403 (api-premium-required). Limity wywołującego zwraca GET /stem-tool/capabilities.
Mastering 8
| Metoda | Ścieżka | Zakres | Limit |
|---|---|---|---|
| GET | /mastering/capabilitiesLimity, zakresy ustawień, cele głośności, wbudowane presety i prawo do renderowania. | publiczny (bez klucza) | limit: brak |
| GET | /mastering/presetsWyświetl swoje presety masteringu. | mastering:read | limit: brak |
| POST | /mastering/presetsUtwórz preset masteringu (wymagany Idempotency-Key). | mastering:write | limit: brak |
| DELETE | /mastering/presets/{id}Usuń jeden ze swoich presetów masteringu. | mastering:write | limit: brak |
| POST | /mastering/jobsPrześlij audio i uruchom mastering z presetem lub ustawieniami. | mastering:write | limit: mastering (3/tydzień za darmo, bez limitu w Premium) |
| GET | /mastering/jobs/{id}Pobierz stan zadania masteringu. | mastering:read | limit: brak |
| DELETE | /mastering/jobs/{id}Anuluj zadanie masteringu. | mastering:write | limit: brak |
| GET | /mastering/jobs/{id}/resultPobierz zmasterowany plik WAV. | mastering:read | limit: brak |
Wykrywanie muzyki AI 7 + 1 wewnętrzna
| Metoda | Ścieżka | Zakres | Limit |
|---|---|---|---|
| GET | /ai-music/availabilityDostępność narzędzia, akceptowane formaty i pozostałe limity konta lub odwiedzającego. | publiczny (bez klucza) | limit: brak |
| POST | /ai-music/jobsWysyła plik audio, link Spotify, bezpośredni link audio lub kod ISRC. Jedno niezakończone zadanie na konto; YouTube nie jest obsługiwany. | audio:write | limit: wykrywanie AI |
| GET | /ai-music/jobsOdnajduje trwającą lub najnowszą analizę. | queue:read | limit: brak |
| GET | /ai-music/jobs/{id}Śledzi analizę i odczytuje jej raport. | queue:read | limit: brak |
| DELETE | /ai-music/jobs/{id}Anuluje analizę i usuwa jej pliki tymczasowe. | audio:write | limit: brak |
| GET | /ai-music/historyPrywatna historia z ostatnich 90 dni, po 30 pozycji na stronę; wymaga konta, żadne audio nie jest przechowywane. | queue:read | limit: brak |
| DELETE | /ai-music/history/{id}Usuwa skan z historii; limit zużyty przez udaną analizę nie jest zwracany. | audio:write | limit: brak |
| GET | /ai-music/source/{token}/{filename}Tymczasowy adres zarezerwowany dla dostawcy wykrywania, ważny najwyżej 180 sekund: żaden klient go nie wywołuje. | wewnętrzna | limit: brak |
Stan i specyfikacja 2
| Metoda | Ścieżka | Zakres | Limit |
|---|---|---|---|
| GET | /healthStan usługi i gotowość poszczególnych silników (OMR, audio, wideo...); bez wymaganego uwierzytelniania. | publiczny (bez klucza) | limit: brak |
| GET | /openapi.jsonTa umowa w postaci czytelnego dla maszyn pliku JSON. | publiczny (bez klucza) | limit: brak |
Pełna, czytelna dla maszyn umowa, zawsze zsynchronizowana z tą tabelą:
https://jam-jam.org/api/v1/openapi.json Kontrakt OpenAPI Limity i ograniczenia
Dokładne saldo podają GET /me/usage oraz nagłówki X-Quota-* każdej odpowiedzi.
Konwersja
- Darmowe konto
- 6 / tydzień
- Premium
- 500 / miesiąc
- Bez klucza i sesji
- 3 / 24 h
Ten sam licznik co eksport śpiewnika w aplikacji.
Odczyty i zapisy
| na dobę UTC | Darmowe konto | Premium |
|---|---|---|
| Odczyty (śpiewnik, profile) | 2000 | 20 000 |
| Zapisy (śpiewnik) | 200 | 5000 |
X-Read-Quota-* · X-Write-Quota-*
Ścieżki przez konwersję
POST /jobs · output=stems Wymagany klucz API Premium: bez Premium odpowiedzią jest 403 (premium-required).
- Premium
- 200 na dobę UTC
Wywołując te trasy, potwierdzasz, że masz prawa do wysyłanego audio.
Szczegóły
POST /jobszoutput=stemszwraca plik.zip:vocals,accompanimentimanifest.json.- Wymagane zakresy:
stems:writeiconvert:write. - Osobny licznik, niezależny od konwersji, liczony na dzień UTC (nie w kroczącym oknie 24 godzin).
- Nie myl tego z narzędziem Separacja ścieżek (
/stem-tool/*): tam klucz API wymaga konta Premium, z własnymi limitami (GET /stem-tool/capabilities).
Uzyskiwanie klucza API
Załóż darmowe konto Jam Jam, otwórz Ustawienia, Klucze API w aplikacji (mobilnej lub webowej) i utwórz klucz. Zaczyna się od jj_live_ i jest pokazywany tylko raz: skopiuj go od razu. Maksymalnie 5 kluczy na konto, odwoływalnych w każdej chwili.
Błędy
Każdy błąd, na każdej trasie, to obiekt application/problem+json (RFC 9457) ze stabilnym polem code, na którym klient może oprzeć swoją logikę: quota-exhausted, rate-limited, unsupported-pair, not-found... Pełny katalog znajduje się w schemacie OpenAPI (components.schemas.Problem).
Przechowywanie
Przesłane pliki i wygenerowane wyniki są usuwane 24 godziny po utworzeniu zadania. Nic nie jest przechowywane dłużej, w tym zadania zakończone niepowodzeniem. Pobranie wyniku po tym czasie zwraca 410 Gone.
Podziękowania open source
Ta API opiera się na prawdziwych silnikach open source. Używanych uczciwie, wymienionych z nazwy:
- MuseScore 4
GPL-3.0Import i renderowanie notacji, nuty w PDF - Audiveris
AGPL-3.0Optyczne rozpoznawanie zeskanowanych nut - Tesseract OCR
Apache-2.0Rozpoznawanie tekstu na skanach i zdjęciach - faster-whisper
MITTranskrypcja słów piosenek z audio - Basic Pitch
Apache-2.0Wykrywanie nut i melodii z audio - FluidSynth
LGPL-2.1Renderowanie podkładu z MIDI (SoundFont) - FFmpeg
LGPL-2.1 / GPL-2.0Kodowanie audio i wideo, konwersja formatów - Chromium
BSD-3-ClauseRenderowanie nut i siatek akordów do PDF
Modele i dane
Wykrywanie mówców (Studio): model odcisku głosu WeSpeaker ResNet34-LM, projekt WeNet (github.com/wenet-e2e/wespeaker), wytrenowany na VoxCeleb (VGG, Uniwersytet Oksfordzki), licencja CC BY 4.0 (creativecommons.org/licenses/by/4.0/). Zmodyfikowany przez Jam Jam: wagi przekonwertowane do połowicznej precyzji.