Przejdź do głównej treści

Documentation Index

Fetch the complete documentation index at: https://docs.xhuoapi.ai/llms.txt

Use this file to discover all available pages before exploring further.

Niniejszy dokument przedstawia instrukcję integracji Fish Model API, które jest w pełni kompatybilne z oficjalnym OpenAPI Fish Audio i obejmuje:
  • POST /fish/model: tworzenie nowego klonowanego głosu (Voice Model) na podstawie próbki audio.
  • GET /fish/model: paginowane pobieranie listy dostępnych głosów widocznych dla bieżącego konta lub na całej platformie.

Proces aplikacji

Aby korzystać z API, należy najpierw złożyć wniosek o odpowiednią usługę na stronie Fish Model API. Po wejściu na stronę kliknij przycisk „Acquire”. Jeśli nie jesteś zalogowany lub zarejestrowany, zostaniesz automatycznie przekierowany na stronę logowania, gdzie możesz się zarejestrować i zalogować. Po zalogowaniu zostaniesz automatycznie przekierowany z powrotem na tę stronę. Przy pierwszym zgłoszeniu otrzymasz darmowy limit na korzystanie z API.

Różnice względem oficjalnego API

  • Metoda uwierzytelniania: używa się nagłówka Authorization: Bearer {token}, gdzie {token} to klucz uzyskany na tej platformie.
  • Przesyłanie próbek przy tworzeniu modelu: obecnie interfejs obsługuje wyłącznie przesyłanie danych w formacie JSON, gdzie próbki audio przekazywane są jako URL-e w polu voices. Oficjalne API Fish wspiera multipart/msgpack do bezpośredniego przesyłania binarnego, co nie jest jeszcze zaimplementowane na tej platformie. Forma URL pokrywa około 80% typowych scenariuszy.
  • Struktura odpowiedzi: zarówno POST /fish/model, jak i GET /fish/model zwracają bezpośrednio odpowiedź z Fish, bez dodatkowego opakowania platformy. W przypadku błędu stosowana jest standardowa struktura platformy {success:false, error:{code,message}, trace_id}.

Tworzenie głosu (POST /fish/model)

Minimalne żądanie tworzenia wymaga pól title oraz voices. voices to lista URL-i próbek audio, zaleca się, aby każdy plik miał ponad 30 sekund długości i próbkowanie co najmniej 16 kHz.
curl -X POST 'https://api.xhuoapi.ai/v1/fish/model' \
  -H 'accept: application/json' \
  -H 'authorization: Bearer {token}' \
  -H 'content-type: application/json' \
  -d '{
    "title": "我的克隆音色",
    "description": "用一段播客录音克隆的音色",
    "voices": [
      "https://example.com/sample-voice.mp3"
    ],
    "cover_image": "https://example.com/cover.png",
    "visibility": "private"
  }'
W przypadku powodzenia odpowiedź zawiera bezpośrednio obiekt ModelEntity z platformy Fish:
{
  "_id": "d7900c21663f485ab63ebdb7e5905036",
  "type": "tts",
  "title": "我的克隆音色",
  "description": "用一段播客录音克隆的音色",
  "cover_image": "https://example.com/cover.png",
  "train_mode": "fast",
  "state": "trained",
  "tags": [],
  "samples": [],
  "created_at": "2025-05-09T12:34:56.789Z",
  "updated_at": "2025-05-09T12:34:56.789Z",
  "languages": ["zh", "en"],
  "visibility": "private",
  "lock_visibility": false,
  "like_count": 0,
  "mark_count": 0,
  "shared_count": 0,
  "task_count": 0,
  "author": {
    "_id": "user_id",
    "nickname": "user_nickname",
    "avatar": "user_avatar"
  }
}
Zwrócone _id może być użyte jako wartość pola reference_id w dalszych wywołaniach POST /fish/tts do syntezy mowy z użyciem tego klonowanego głosu.

Pobieranie listy głosów (GET /fish/model)

curl -G 'https://api.xhuoapi.ai/v1/fish/model' \
  -H 'accept: application/json' \
  -H 'authorization: Bearer {token}' \
  --data-urlencode 'page_size=10' \
  --data-urlencode 'page_number=1' \
  --data-urlencode 'self=true'
Dostępne parametry zapytania (zgodne z oficjalnym API Fish):
  • page_size: liczba elementów na stronę, domyślnie 10.
  • page_number: numer strony, zaczynając od 1.
  • title: wyszukiwanie po tytule (fuzzy).
  • tag: filtrowanie po tagu.
  • self: jeśli true, zwraca tylko głosy utworzone przez bieżące konto.
  • author_id: filtrowanie po autorze.
  • language: filtrowanie po języku głosu.
  • title_language: filtrowanie po języku tytułu.
W przypadku powodzenia odpowiedź zawiera bezpośrednio paginowaną strukturę z platformy Fish:
{
  "items": [
    {
      "_id": "d7900c21663f485ab63ebdb7e5905036",
      "title": "我的克隆音色",
      "description": "用一段播客录音克隆的音色",
      "cover_image": "https://example.com/cover.png",
      "type": "tts",
      "state": "trained",
      "tags": [],
      "languages": ["zh", "en"],
      "visibility": "private",
      "created_at": "2025-05-09T12:34:56.789Z",
      "updated_at": "2025-05-09T12:34:56.789Z"
    }
  ],
  "total": 1
}

Informacje o rozliczeniach

Opłaty są naliczane tylko podczas „tworzenia głosu” (POST /fish/model z polem voices w ciele żądania). „Pobieranie listy głosów” (GET /fish/model) jest bezpłatne.

Obsługa błędów

  • 400 token_mismatched: Niepoprawne żądanie, możliwe brak lub błędne parametry.
  • 400 api_not_implemented: Niepoprawne żądanie, możliwe brak lub błędne parametry.
  • 401 invalid_token: Brak autoryzacji, nieprawidłowy lub brakujący token.
  • 429 too_many_requests: Zbyt wiele żądań, przekroczono limit szybkości.
  • 500 api_error: Błąd wewnętrzny serwera.

Przykład odpowiedzi błędu

{
  "success": false,
  "error": {
    "code": "api_error",
    "message": "fetch failed"
  },
  "trace_id": "2cf86e86-22a4-46e1-ac2f-032c0f2a4e89"
}

Podsumowanie

Fish Model API jest w pełni kompatybilne z interfejsem ModelEntity oficjalnego OpenAPI Fish Audio, co pozwala na migrację istniejącego kodu zarządzającego klonowanymi głosami bez konieczności zmian w kodzie. Utworzony _id głosu można bezpośrednio przekazać do pola reference_id w Fish TTS API w celu syntezy mowy.