{
  "aboutHtml": "<p>S2 Pro는 표현력 있는 내레이션, 캐릭터 대화, 대화형 음성 출력을 위한 Fish Audio의 2세대 텍스트 음성 변환 모델입니다. 서면 대본을 오디오로 바꾸며 단어 또는 구절 수준의 자연어 지시를 지원합니다. 이전 S1 세대는 괄호 단서를 사용하지만, S2 Pro는 대괄호를 기본으로 사용하고 하나의 합성 요청 안에서 여러 화자를 지원합니다. 제조사는 별도 맞춤화 작업을 위해 S2 Pro 가중치와 미세 조정 코드를 공개합니다. 일반적인 음성 요청은 새 모델을 훈련하지 않고 선택한 모델을 사용합니다.</p><p>발화할 내용을 먼저 쓰고, 영향을 줄 단어나 구절 바로 앞에 전달 지시를 놓으세요. 지시로 속삭임, 반응, 쉼, 감정 변화, 자유로운 말하기 스타일을 묘사할 수 있습니다. 짧은 제품 설명에서는 사실 문장을 명확하게 유지하고 청자가 차이를 알아야 할 부분만 강조하세요. 캐릭터 대사에서는 전체 구절에 하나의 고정된 기분을 부여하기보다 감정이 바뀌는 순간에 그 변화를 묘사하세요.</p><p>대괄호 태그는 고정된 메뉴가 아니라 자유로운 묘사입니다. 예를 들어 [whispering], [sigh], [long pause], [speaking slowly, almost hesitant] 같은 구절을 사용할 수 있습니다. 태그는 문장 중간에 들어갈 수 있으며 뒤따르는 발화에 영향을 줍니다. 묘사형 태그 뒤에는 실제 텍스트가 필요합니다. 지시만 단독으로 두면 예측하기 어려운 출력이 나올 수 있습니다. 서로 경쟁하는 태그가 의도한 연기를 흐릴 수 있으므로 여러 층을 추가하기 전에 유용한 지시 한두 개로 시작하세요. 음성 참조에 따라 같은 지시에 반응하는 강도도 달라질 수 있습니다.</p><p>S2 릴리스는 약 80개 언어를 설명하며, 대본과 같은 언어로 전달 지시를 쓰는 예를 제시합니다. 실제로 발화할 언어로 문구를 준비하고 특정 방식으로 읽어야 할 이름, 단위, 약어를 보존하세요. 다국어 내레이션은 대본 언어를 바꾸면서 의도한 음성을 유지할 수 있지만, 최종 결과물의 발음과 연속성은 직접 들어 확인해야 합니다. 합성은 제공된 내용을 음성으로 만드는 것이며, 애플리케이션이 어떤 정보를 말해야 할지 결정하는 것은 아닙니다.</p><p>화자가 한 명이면 저장된 음성 식별자를 선택하거나 참조 오디오와 그에 일치하는 전사문을 제공하세요. 제조사는 즉석 조건화에 깨끗한 10~30초 샘플을 권장합니다. 대화에는 &lt;|speaker:0|&gt;, &lt;|speaker:1|&gt; 같은 화자 표식과 순서가 있는 음성 식별자 목록 또는 화자별 참조 그룹을 사용하세요. 숫자 표식은 대응하는 음성 항목을 선택합니다. 대화가 진행되어도 순서를 고정하세요. 자연어 연기 지시와 화자 선택은 대본에서 역할이 다릅니다.</p><p>오디오 출력은 MP3, WAV, 원시 PCM, Opus가 가능합니다. MP3의 기본값은 128 kbps이며 64 또는 192 kbps도 제공합니다. Opus 출력은 48 kHz를 사용하고, WAV와 PCM은 문서에 명시된 샘플 레이트 옵션을 16비트 모노로 지원합니다. 내레이션용 보관 파일이나 재생용 오디오 청크 등 실제 용도에 맞춰 형식을 선택하세요. 제조사 음성 작업 흐름에는 대본이 점진적으로 도착할 때의 실시간 텍스트 스트리밍도 설명되어 있습니다. 생성 결과는 전체 대본 및 선택한 음성과 계속 연결되어 있어야 합니다.</p><p>속도는 0.5~2.0 사이에서 조정할 수 있고 음량 및 출력 음량 정규화 제어도 있습니다. 텍스트 정규화는 영어와 중국어 숫자 읽기를 개선합니다. 처리는 100~300 범위의 청크와 청크별 오디오 토큰 예산을 사용하므로, 이를 전체 내레이션의 고정 최대 길이로 해석해서는 안 됩니다. 이전 청크 조건화는 다음 구간에 음성 맥락을 이어 줄 수 있습니다. temperature와 top-p 같은 샘플링 제어는 변동성에 영향을 줍니다. 의도적으로 연기를 지시한 대사에도 원하는 소리를 담을 충분한 텍스트와 맥락이 필요합니다.</p><p>유용한 제작 요청은 내레이션, 대화, 전달 지시를 구분하고 결과물의 음성과 형식을 명시합니다. 누락된 단어, 반복된 오디오, 숫자 발음, 화자 전환, 반응의 타이밍을 들어 보세요. 태그를 더 넣으면 모든 구절이 개선된다고 가정하지 말고 불일치를 일으킨 대사나 음성 참조를 수정하세요. S2 Pro는 이전 S2 세대의 독립된 모델이며, S2.1 Pro는 자체적인 개선점과 모델별 설정 동작을 갖춘 후속 에디션입니다.</p>",
  "aboutText": "S2 Pro는 표현력 있는 내레이션, 캐릭터 대화, 대화형 음성 출력을 위한 Fish Audio의 2세대 텍스트 음성 변환 모델입니다. 서면 대본을 오디오로 바꾸며 단어 또는 구절 수준의 자연어 지시를 지원합니다. 이전 S1 세대는 괄호 단서를 사용하지만, S2 Pro는 대괄호를 기본으로 사용하고 하나의 합성 요청 안에서 여러 화자를 지원합니다. 제조사는 별도 맞춤화 작업을 위해 S2 Pro 가중치와 미세 조정 코드를 공개합니다. 일반적인 음성 요청은 새 모델을 훈련하지 않고 선택한 모델을 사용합니다.\n\n발화할 내용을 먼저 쓰고, 영향을 줄 단어나 구절 바로 앞에 전달 지시를 놓으세요. 지시로 속삭임, 반응, 쉼, 감정 변화, 자유로운 말하기 스타일을 묘사할 수 있습니다. 짧은 제품 설명에서는 사실 문장을 명확하게 유지하고 청자가 차이를 알아야 할 부분만 강조하세요. 캐릭터 대사에서는 전체 구절에 하나의 고정된 기분을 부여하기보다 감정이 바뀌는 순간에 그 변화를 묘사하세요.\n\n대괄호 태그는 고정된 메뉴가 아니라 자유로운 묘사입니다. 예를 들어 [whispering], [sigh], [long pause], [speaking slowly, almost hesitant] 같은 구절을 사용할 수 있습니다. 태그는 문장 중간에 들어갈 수 있으며 뒤따르는 발화에 영향을 줍니다. 묘사형 태그 뒤에는 실제 텍스트가 필요합니다. 지시만 단독으로 두면 예측하기 어려운 출력이 나올 수 있습니다. 서로 경쟁하는 태그가 의도한 연기를 흐릴 수 있으므로 여러 층을 추가하기 전에 유용한 지시 한두 개로 시작하세요. 음성 참조에 따라 같은 지시에 반응하는 강도도 달라질 수 있습니다.\n\nS2 릴리스는 약 80개 언어를 설명하며, 대본과 같은 언어로 전달 지시를 쓰는 예를 제시합니다. 실제로 발화할 언어로 문구를 준비하고 특정 방식으로 읽어야 할 이름, 단위, 약어를 보존하세요. 다국어 내레이션은 대본 언어를 바꾸면서 의도한 음성을 유지할 수 있지만, 최종 결과물의 발음과 연속성은 직접 들어 확인해야 합니다. 합성은 제공된 내용을 음성으로 만드는 것이며, 애플리케이션이 어떤 정보를 말해야 할지 결정하는 것은 아닙니다.\n\n화자가 한 명이면 저장된 음성 식별자를 선택하거나 참조 오디오와 그에 일치하는 전사문을 제공하세요. 제조사는 즉석 조건화에 깨끗한 10~30초 샘플을 권장합니다. 대화에는 <|speaker:0|>, <|speaker:1|> 같은 화자 표식과 순서가 있는 음성 식별자 목록 또는 화자별 참조 그룹을 사용하세요. 숫자 표식은 대응하는 음성 항목을 선택합니다. 대화가 진행되어도 순서를 고정하세요. 자연어 연기 지시와 화자 선택은 대본에서 역할이 다릅니다.\n\n오디오 출력은 MP3, WAV, 원시 PCM, Opus가 가능합니다. MP3의 기본값은 128 kbps이며 64 또는 192 kbps도 제공합니다. Opus 출력은 48 kHz를 사용하고, WAV와 PCM은 문서에 명시된 샘플 레이트 옵션을 16비트 모노로 지원합니다. 내레이션용 보관 파일이나 재생용 오디오 청크 등 실제 용도에 맞춰 형식을 선택하세요. 제조사 음성 작업 흐름에는 대본이 점진적으로 도착할 때의 실시간 텍스트 스트리밍도 설명되어 있습니다. 생성 결과는 전체 대본 및 선택한 음성과 계속 연결되어 있어야 합니다.\n\n속도는 0.5~2.0 사이에서 조정할 수 있고 음량 및 출력 음량 정규화 제어도 있습니다. 텍스트 정규화는 영어와 중국어 숫자 읽기를 개선합니다. 처리는 100~300 범위의 청크와 청크별 오디오 토큰 예산을 사용하므로, 이를 전체 내레이션의 고정 최대 길이로 해석해서는 안 됩니다. 이전 청크 조건화는 다음 구간에 음성 맥락을 이어 줄 수 있습니다. temperature와 top-p 같은 샘플링 제어는 변동성에 영향을 줍니다. 의도적으로 연기를 지시한 대사에도 원하는 소리를 담을 충분한 텍스트와 맥락이 필요합니다.\n\n유용한 제작 요청은 내레이션, 대화, 전달 지시를 구분하고 결과물의 음성과 형식을 명시합니다. 누락된 단어, 반복된 오디오, 숫자 발음, 화자 전환, 반응의 타이밍을 들어 보세요. 태그를 더 넣으면 모든 구절이 개선된다고 가정하지 말고 불일치를 일으킨 대사나 음성 참조를 수정하세요. S2 Pro는 이전 S2 세대의 독립된 모델이며, S2.1 Pro는 자체적인 개선점과 모델별 설정 동작을 갖춘 후속 에디션입니다.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "72fea2911765577cbb1fdc23588063395583145bd114f8a33da45aaef2630c94",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "ko",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">Fish Audio: S2 Pro</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"닫기\">×</button></div><div class=\"idline\"><span>Fish Audio /</span><code>fish-audio/s2-pro</code><button type=\"button\" id=\"copy-id\">ID 복사</button></div><nav class=\"card-jump-nav\" aria-label=\"모델 카드 섹션\"><button type=\"button\" data-card-jump=\"overview\">시작하기</button><button type=\"button\" data-card-jump=\"methods\">입력 및 메서드</button><button type=\"button\" data-card-jump=\"pricing\">요금</button><button type=\"button\" data-card-jump=\"examples\">예제</button><button type=\"button\" data-card-jump=\"results\">결과</button><button type=\"button\" data-card-jump=\"aliases\">별칭</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"API 메서드\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Ultra|speech|/v1/audio/speech|fish-audio%2Fs2-pro\">음성 합성</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">시작하기</h3><p class=\"mdesc-full\">Fish Audio S2 Pro는 단어 단위 지시와 기본 다중 화자 대화를 통해 표현력 있는 다국어 음성을 생성합니다. 대괄호 지시는 대본 안에서 전달 방식을 제어하고, 음성 참조는 화자를 정하며, 출력 설정은 오디오 결과물의 형식을 결정합니다.</p><dl class=\"card-io\" data-card-io><div><dt>허용 입력</dt><dd>텍스트</dd></div><div><dt>결과</dt><dd>오디오</dd></div></dl><details class=\"card-about\"><summary>모델 소개</summary><p class=\"note-s\" data-model-method-boundary>이 설명은 모델의 기능을 다룹니다. Ailoot에서 사용할 수 있는 입력, 출력 및 옵션은 아래에 선택한 메서드별로 표시됩니다.</p><div class=\"mabout\" id=\"m-about\"><p>S2 Pro는 표현력 있는 내레이션, 캐릭터 대화, 대화형 음성 출력을 위한 Fish Audio의 2세대 텍스트 음성 변환 모델입니다. 서면 대본을 오디오로 바꾸며 단어 또는 구절 수준의 자연어 지시를 지원합니다. 이전 S1 세대는 괄호 단서를 사용하지만, S2 Pro는 대괄호를 기본으로 사용하고 하나의 합성 요청 안에서 여러 화자를 지원합니다. 제조사는 별도 맞춤화 작업을 위해 S2 Pro 가중치와 미세 조정 코드를 공개합니다. 일반적인 음성 요청은 새 모델을 훈련하지 않고 선택한 모델을 사용합니다.</p><p>발화할 내용을 먼저 쓰고, 영향을 줄 단어나 구절 바로 앞에 전달 지시를 놓으세요. 지시로 속삭임, 반응, 쉼, 감정 변화, 자유로운 말하기 스타일을 묘사할 수 있습니다. 짧은 제품 설명에서는 사실 문장을 명확하게 유지하고 청자가 차이를 알아야 할 부분만 강조하세요. 캐릭터 대사에서는 전체 구절에 하나의 고정된 기분을 부여하기보다 감정이 바뀌는 순간에 그 변화를 묘사하세요.</p><p>대괄호 태그는 고정된 메뉴가 아니라 자유로운 묘사입니다. 예를 들어 [whispering], [sigh], [long pause], [speaking slowly, almost hesitant] 같은 구절을 사용할 수 있습니다. 태그는 문장 중간에 들어갈 수 있으며 뒤따르는 발화에 영향을 줍니다. 묘사형 태그 뒤에는 실제 텍스트가 필요합니다. 지시만 단독으로 두면 예측하기 어려운 출력이 나올 수 있습니다. 서로 경쟁하는 태그가 의도한 연기를 흐릴 수 있으므로 여러 층을 추가하기 전에 유용한 지시 한두 개로 시작하세요. 음성 참조에 따라 같은 지시에 반응하는 강도도 달라질 수 있습니다.</p><p>S2 릴리스는 약 80개 언어를 설명하며, 대본과 같은 언어로 전달 지시를 쓰는 예를 제시합니다. 실제로 발화할 언어로 문구를 준비하고 특정 방식으로 읽어야 할 이름, 단위, 약어를 보존하세요. 다국어 내레이션은 대본 언어를 바꾸면서 의도한 음성을 유지할 수 있지만, 최종 결과물의 발음과 연속성은 직접 들어 확인해야 합니다. 합성은 제공된 내용을 음성으로 만드는 것이며, 애플리케이션이 어떤 정보를 말해야 할지 결정하는 것은 아닙니다.</p><p>화자가 한 명이면 저장된 음성 식별자를 선택하거나 참조 오디오와 그에 일치하는 전사문을 제공하세요. 제조사는 즉석 조건화에 깨끗한 10~30초 샘플을 권장합니다. 대화에는 &lt;|speaker:0|&gt;, &lt;|speaker:1|&gt; 같은 화자 표식과 순서가 있는 음성 식별자 목록 또는 화자별 참조 그룹을 사용하세요. 숫자 표식은 대응하는 음성 항목을 선택합니다. 대화가 진행되어도 순서를 고정하세요. 자연어 연기 지시와 화자 선택은 대본에서 역할이 다릅니다.</p><p>오디오 출력은 MP3, WAV, 원시 PCM, Opus가 가능합니다. MP3의 기본값은 128 kbps이며 64 또는 192 kbps도 제공합니다. Opus 출력은 48 kHz를 사용하고, WAV와 PCM은 문서에 명시된 샘플 레이트 옵션을 16비트 모노로 지원합니다. 내레이션용 보관 파일이나 재생용 오디오 청크 등 실제 용도에 맞춰 형식을 선택하세요. 제조사 음성 작업 흐름에는 대본이 점진적으로 도착할 때의 실시간 텍스트 스트리밍도 설명되어 있습니다. 생성 결과는 전체 대본 및 선택한 음성과 계속 연결되어 있어야 합니다.</p><p>속도는 0.5~2.0 사이에서 조정할 수 있고 음량 및 출력 음량 정규화 제어도 있습니다. 텍스트 정규화는 영어와 중국어 숫자 읽기를 개선합니다. 처리는 100~300 범위의 청크와 청크별 오디오 토큰 예산을 사용하므로, 이를 전체 내레이션의 고정 최대 길이로 해석해서는 안 됩니다. 이전 청크 조건화는 다음 구간에 음성 맥락을 이어 줄 수 있습니다. temperature와 top-p 같은 샘플링 제어는 변동성에 영향을 줍니다. 의도적으로 연기를 지시한 대사에도 원하는 소리를 담을 충분한 텍스트와 맥락이 필요합니다.</p><p>유용한 제작 요청은 내레이션, 대화, 전달 지시를 구분하고 결과물의 음성과 형식을 명시합니다. 누락된 단어, 반복된 오디오, 숫자 발음, 화자 전환, 반응의 타이밍을 들어 보세요. 태그를 더 넣으면 모든 구절이 개선된다고 가정하지 말고 불일치를 일으킨 대사나 음성 참조를 수정하세요. S2 Pro는 이전 S2 세대의 독립된 모델이며, S2.1 Pro는 자체적인 개선점과 모델별 설정 동작을 갖춘 후속 에디션입니다.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Ailoot에서 사용 가능 · 입력 및 메서드</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · 음성</b> <code>POST /v1/audio/speech</code></summary><dl class=\"method-capabilities\"><div><dt>입력</dt><dd><code>text</code></dd></div><div><dt>출력</dt><dd><code>audio</code></dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>필드</th><th>유형</th><th>요건</th><th>값과 한도</th><th>기본값</th></tr></thead><tbody><tr><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span><code>string</code></td><td data-cell-label=\"요건\"><span class=\"card-cell-label\">요건</span>필수</td><td data-cell-label=\"값과 한도\"><span class=\"card-cell-label\">값과 한도</span><div>fish-audio/s2-pro</div></td><td data-cell-label=\"기본값\" data-default=\"unspecified\"><span class=\"card-cell-label\">기본값</span>—</td></tr><tr><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">input</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span><code>string</code></td><td data-cell-label=\"요건\"><span class=\"card-cell-label\">요건</span>필수</td><td data-cell-label=\"값과 한도\"><span class=\"card-cell-label\">값과 한도</span><div>최소 길이: 1</div></td><td data-cell-label=\"기본값\" data-default=\"unspecified\"><span class=\"card-cell-label\">기본값</span>—</td></tr><tr><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">voice</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span><code>string</code></td><td data-cell-label=\"요건\"><span class=\"card-cell-label\">요건</span>필수</td><td data-cell-label=\"값과 한도\"><span class=\"card-cell-label\">값과 한도</span><div>b347db033a6549378b48d00acb0d06cd</div><div>최소 길이: 1</div></td><td data-cell-label=\"기본값\" data-default=\"unspecified\"><span class=\"card-cell-label\">기본값</span>—</td></tr><tr><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">response_format</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span><code>string</code></td><td data-cell-label=\"요건\"><span class=\"card-cell-label\">요건</span>선택 사항</td><td data-cell-label=\"값과 한도\"><span class=\"card-cell-label\">값과 한도</span><div>mp3, pcm</div></td><td data-cell-label=\"기본값\" data-default=\"known\"><span class=\"card-cell-label\">기본값</span>pcm</td></tr><tr><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">provider</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span><code>object</code></td><td data-cell-label=\"요건\"><span class=\"card-cell-label\">요건</span>선택 사항</td><td data-cell-label=\"값과 한도\"><span class=\"card-cell-label\">값과 한도</span></td><td data-cell-label=\"기본값\" data-default=\"unspecified\"><span class=\"card-cell-label\">기본값</span>—</td></tr></tbody></table></div><details class=\"note-s\" data-method-contract><summary>메서드 매개변수와 수명 주기</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>매개변수</th><th>명세</th></tr></thead><tbody><tr><th data-cell-label=\"매개변수\" scope=\"row\"><span class=\"card-cell-label\">매개변수</span><code>content_type</code></th><td data-cell-label=\"명세\"><span class=\"card-cell-label\">명세</span>application/json</td></tr><tr><th data-cell-label=\"매개변수\" scope=\"row\"><span class=\"card-cell-label\">매개변수</span><code>required</code></th><td data-cell-label=\"명세\"><span class=\"card-cell-label\">명세</span>model, input, voice</td></tr><tr><th data-cell-label=\"매개변수\" scope=\"row\"><span class=\"card-cell-label\">매개변수</span><code>material_types</code></th><td data-cell-label=\"명세\"><span class=\"card-cell-label\">명세</span>text</td></tr></tbody></table></div><p>수명 주기: <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · 실제로 반환된 task_id 또는 미디어 라이브러리 기록</p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}/content</code></p><p class=\"note-s\"><code>GET /v1/media/assets</code></p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}</code></p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">요금</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>요금 정보는 요청 옵션을 추가하지 않습니다. 지원되는 매개변수는 선택한 메서드에 표시됩니다.</p><dl data-price-conditions><dt>빠른 모드</dt><dd>미지정 <span class=\"note-s\">빠른 모드를 선택한 경우</span></dd><dt>Flex 모드</dt><dd>미지정 <span class=\"note-s\">flex 모드를 선택한 경우</span></dd><dt>최대 추론 수준</dt><dd>미지정 <span class=\"note-s\">최대 추론 수준에 default 조정값을 적용하는 경우</span></dd></dl></div><div data-declared-tariff-pricing><h4>Ailoot 요금</h4><h4>설정별 가격</h4><p class=\"note-s\">각 요금을 표시된 조건과 대조하세요. 서로 대체되는 설정 묶음마다 하나의 요금만 적용하세요.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>설정</th><th>요금표</th><th>과금 단위</th><th>요금</th></tr></thead><tbody><tr><th data-cell-label=\"설정\" scope=\"row\"><span class=\"card-cell-label\">설정</span>기본 토큰 요금</th><td data-cell-label=\"요금표\"><span class=\"card-cell-label\">요금표</span>기본 요금</td><td data-cell-label=\"과금 단위\"><span class=\"card-cell-label\">과금 단위</span>—</td><td data-cell-label=\"요금\"><span class=\"card-cell-label\">요금</span><div><span>입력 · 입력 토큰</span> <b>—</b> <span class=\"price-unit\">/ 1K 토큰</span></div><div><span>출력 · 출력 토큰</span> <b>—</b> <span class=\"price-unit\">/ 1K 토큰</span></div><div><span>입력 · 캐시 읽기</span> <b>—</b> <span class=\"price-unit\">/ 1K 토큰</span></div><div><span>입력 · 캐시 쓰기</span> <b>—</b> <span class=\"price-unit\">/ 1K 토큰</span></div><div><span>입력 · 캐시 쓰기, 1시간</span> <b>—</b> <span class=\"price-unit\">/ 1K 토큰</span></div></td></tr><tr><th data-cell-label=\"설정\" scope=\"row\"><span class=\"card-cell-label\">설정</span>입력 UTF-8 바이트</th><td data-cell-label=\"요금표\"><span class=\"card-cell-label\">요금표</span>—</td><td data-cell-label=\"과금 단위\"><span class=\"card-cell-label\">과금 단위</span>입력 UTF-8 바이트당</td><td data-cell-label=\"요금\"><span class=\"card-cell-label\">요금</span><div><span>입력 · 입력 UTF-8 바이트</span> <b>$0.00003</b> <span class=\"price-unit\">입력 UTF-8 바이트당</span></div></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot는 요청 전에 예상 금액을 미리 확보합니다. 결과를 받은 뒤 측정된 사용량을 기준으로 최종 요금을 정산합니다. 스트리밍 정산에는 최종 사용량 기록을 사용합니다. <a href=\"/docs/ko/billing/reserve/\">금액 확보와 정산 방식 →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">요청 예제</h3><h4>Ailoot Ultra · 음성</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"코드 예제 형식\"><button class=\"cg-tab\" id=\"model-code-1355-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1355-panel-0\" aria-selected=\"true\" tabindex=\"0\">실제 입력을 사용하고 결과 전체를 보관하세요</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"코드 복사\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-1355-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1355-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_INPUT_TEXT:?Set the actual documented input value}&quot;\nexport AILOOT_INPUT_TEXT\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\nrequest={&#39;model&#39;: &#39;fish-audio/s2-pro&#39;, &#39;input&#39;: &#39;${ACTUAL_INPUT_TEXT}&#39;, &#39;voice&#39;: &#39;b347db033a6549378b48d00acb0d06cd&#39;, &#39;response_format&#39;: &#39;mp3&#39;}\nrequest[&#39;input&#39;]=os.environ[&#39;AILOOT_INPUT_TEXT&#39;]\nPath(&#39;request.json&#39;).write_text(json.dumps(request,ensure_ascii=False),encoding=&#39;utf-8&#39;)\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o response.bin\n# Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">결과 수신 및 저장</h3><h4>Ailoot Ultra · 음성</h4><p class=\"note-s\">바이너리 오디오 전체 또는 원래 audio_url 응답, 헤더 및 모든 소유 자산입니다.</p><ul class=\"card-result-paths\"><li><code>GET /v1/media/tasks/{task_id}</code></li><li><code>GET /v1/media/assets/{asset_id}/content</code></li><li><code>GET /v1/media/assets</code></li><li><code>GET /v1/media/assets/{asset_id}</code></li></ul><details class=\"card-about\"><summary>기타 콘텐츠 조회</summary><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"코드 예제 형식\"><button class=\"cg-tab\" id=\"model-code-1356-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1356-panel-0\" aria-selected=\"true\" tabindex=\"0\">내 소유의 기존 자산 조회</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"코드 복사\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-1356-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1356-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -o owned-assets.json\n# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.\n</code></pre></div></div></div></details><div class=\"card-result-process\" data-all-results><h5>완료된 결과 모두 보관</h5><p class=\"note-s\">반환된 완전한 응답, 파일, 콘텐츠 부분을 모두 보관하세요.</p><p class=\"note-s\">전체 응답과 헤더, 실제로 생성된 모든 출력, 최초로 반환된 식별자와 모든 사용량 필드를 보관하세요. 생성 요청을 다시 제출하지 말고 최초 작업을 복구하세요.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>원래 응답을 확인해야 할 경우</h5><p class=\"note-s\">정산 대조를 위해 반환된 X-Client-Request-ID를 보관하세요. 실제로 반환된 task_id/asset_id 값이나 소유한 미디어 라이브러리만 조회하세요. 작업 ID로 태스크 URL을 만들거나 생성 요청을 다시 제출하지 마세요.</p></div></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">별칭</h3><h4>모델 별칭</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=fish-audio%2Fs2-pro&amp;route=Ultra&amp;caller=fish-audio%2Fs2-pro&amp;fmt=speech\"><code>fish-audio/s2-pro</code></a></span></p><h4>메서드 경로 별칭</h4><p class=\"note-s\">위에 표시된 메서드 경로를 사용하세요.</p><h4>관련 호출용 ID</h4><p class=\"note-s\"><a href=\"#m=fish-audio%2Fs2-pro&amp;route=Ultra&amp;caller=fish-audio%2Fs2-pro&amp;fmt=speech\"><code>fish-audio/s2-pro</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "fish-audio/s2-pro",
        "fmt": "speech",
        "http": "POST",
        "path": "/v1/audio/speech",
        "request_model_id": "fish-audio/s2-pro",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|speech|/v1/audio/speech|fish-audio%2Fs2-pro",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "lifecycle": {
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "정산 대조를 위해 반환된 X-Client-Request-ID를 보관하세요. 실제로 반환된 task_id/asset_id 값이나 소유한 미디어 라이브러리만 조회하세요. 작업 ID로 태스크 URL을 만들거나 생성 요청을 다시 제출하지 마세요."
            },
            "outputs": {
              "all_results": "전체 응답과 헤더, 실제로 생성된 모든 출력, 최초로 반환된 식별자와 모든 사용량 필드를 보관하세요. 생성 요청을 다시 제출하지 말고 최초 작업을 복구하세요.",
              "family": "audio",
              "formats": [
                "mp3",
                "pcm"
              ],
              "result": "바이너리 오디오 전체 또는 원래 audio_url 응답, 헤더 및 모든 소유 자산입니다."
            },
            "parameters": [
              {
                "enum": [
                  "fish-audio/s2-pro"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string"
              },
              {
                "enum": [
                  "b347db033a6549378b48d00acb0d06cd"
                ],
                "enum_known": true,
                "min_length": 1,
                "name": "voice",
                "required": true,
                "type": "string"
              },
              {
                "default": "pcm",
                "default_known": true,
                "enum": [
                  "mp3",
                  "pcm"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              },
              {
                "name": "provider",
                "required": false,
                "type": "object"
              }
            ],
            "request_schema": {
              "properties": {
                "input": {
                  "minLength": 1,
                  "type": "string"
                },
                "model": {
                  "enum": [
                    "fish-audio/s2-pro"
                  ],
                  "type": "string"
                },
                "provider": {
                  "description": "Documented speech data policy and provider-specific options.",
                  "properties": {
                    "data_collection": {
                      "enum": [
                        "allow",
                        "deny",
                        null
                      ],
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "options": {
                      "type": "object"
                    },
                    "zdr": {
                      "type": [
                        "boolean",
                        "null"
                      ]
                    }
                  },
                  "type": "object"
                },
                "response_format": {
                  "default": "pcm",
                  "enum": [
                    "mp3",
                    "pcm"
                  ],
                  "type": "string"
                },
                "voice": {
                  "enum": [
                    "b347db033a6549378b48d00acb0d06cd"
                  ],
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input",
                "voice"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "input": "${ACTUAL_INPUT_TEXT}",
                "model": "fish-audio/s2-pro",
                "response_format": "mp3",
                "voice": "b347db033a6549378b48d00acb0d06cd"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "required": [
              "model",
              "input",
              "voice"
            ]
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "실제로 반환된 task_id 또는 미디어 라이브러리 기록",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Keep the returned X-Client-Request-ID for reconciliation. Read only actual returned task_id/asset_id values or the owned media library; never build a task URL from the operation ID and never resubmit creation."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "output": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "family": "audio",
            "formats": [
              "mp3",
              "pcm"
            ],
            "result": "Complete binary audio or original audio_url response, headers and every owned asset."
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per input UTF-8 byte"
            },
            "label": "input UTF-8 byte",
            "units": [
              {
                "amount": "0.00003",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_utf8_byte",
                "label": "input UTF-8 byte",
                "native_amount_usd_per_unit": "0.00003",
                "native_quantity": 1,
                "public_unit_label": "per input UTF-8 byte",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_utf8_byte"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_INPUT_TEXT:?Set the actual documented input value}\"\nexport AILOOT_INPUT_TEXT\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nrequest={'model': 'fish-audio/s2-pro', 'input': '${ACTUAL_INPUT_TEXT}', 'voice': 'b347db033a6549378b48d00acb0d06cd', 'response_format': 'mp3'}\nrequest['input']=os.environ['AILOOT_INPUT_TEXT']\nPath('request.json').write_text(json.dumps(request,ensure_ascii=False),encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o response.bin\n# Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.\n",
            "label": "Use actual input and retain the complete result",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o owned-assets.json\n# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.\n",
            "label": "Read existing owned assets",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "hints": [
          "Use the exact caller model ID and documented input representation.",
          "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "음성",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "native_endpoint": "audio_speech",
        "out": null,
        "output": [
          "audio"
        ],
        "path": "/v1/audio/speech",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "per_request",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null,
          "unit_prices": {
            "audio_input_utf8_byte": 3e-05
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per input UTF-8 byte"
            },
            "label": "input UTF-8 byte",
            "units": [
              {
                "amount": "0.00003",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_utf8_byte",
                "label": "input UTF-8 byte",
                "native_amount_usd_per_unit": "0.00003",
                "native_quantity": 1,
                "public_unit_label": "per input UTF-8 byte",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_utf8_byte"
              }
            ]
          }
        ],
        "request_model_id": "fish-audio/s2-pro",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.00003",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_utf8_byte",
            "label": "input UTF-8 byte",
            "native_amount_usd_per_unit": "0.00003",
            "native_quantity": 1,
            "public_unit_label": "per input UTF-8 byte",
            "quantity": 1,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_utf8_byte"
          }
        ]
      }
    }
  ],
  "model_id": "fish-audio/s2-pro",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "6e9a49165241bb51807fd1679bd6c4b0691747211c8caf5328dddf464820b5af",
    "input_html_sha256": "c772f48bc72dbe77c714eb7903a87a38ef077c365bea3111d531776375280946",
    "private_audit_sha256": "f93cab1bee9ac19cc8652a32d484d1e681955b78c39b6c95f622483e4c3707b9",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/ko/fish-audio-s2-pro/",
    "description": "Fish Audio S2 Pro는 단어 단위 지시와 기본 다중 화자 대화를 통해 표현력 있는 다국어 음성을 생성합니다. 대괄호 지시는 대본 안에서 전달 방식을 제어하고, 음성 참조는 화자를 정하며, 출력 설정은 오디오 결과물의 형식을 결정합니다.",
    "locale": "ko",
    "md_url": "https://ailoot.ai/models/ko/fish-audio-s2-pro/index.md",
    "title": "Fish Audio: S2 Pro — Ailoot",
    "url": "https://ailoot.ai/models/ko/fish-audio-s2-pro/"
  },
  "rawModel": {
    "about": "S2 Pro는 표현력 있는 내레이션, 캐릭터 대화, 대화형 음성 출력을 위한 Fish Audio의 2세대 텍스트 음성 변환 모델입니다. 서면 대본을 오디오로 바꾸며 단어 또는 구절 수준의 자연어 지시를 지원합니다. 이전 S1 세대는 괄호 단서를 사용하지만, S2 Pro는 대괄호를 기본으로 사용하고 하나의 합성 요청 안에서 여러 화자를 지원합니다. 제조사는 별도 맞춤화 작업을 위해 S2 Pro 가중치와 미세 조정 코드를 공개합니다. 일반적인 음성 요청은 새 모델을 훈련하지 않고 선택한 모델을 사용합니다.\n\n발화할 내용을 먼저 쓰고, 영향을 줄 단어나 구절 바로 앞에 전달 지시를 놓으세요. 지시로 속삭임, 반응, 쉼, 감정 변화, 자유로운 말하기 스타일을 묘사할 수 있습니다. 짧은 제품 설명에서는 사실 문장을 명확하게 유지하고 청자가 차이를 알아야 할 부분만 강조하세요. 캐릭터 대사에서는 전체 구절에 하나의 고정된 기분을 부여하기보다 감정이 바뀌는 순간에 그 변화를 묘사하세요.\n\n대괄호 태그는 고정된 메뉴가 아니라 자유로운 묘사입니다. 예를 들어 [whispering], [sigh], [long pause], [speaking slowly, almost hesitant] 같은 구절을 사용할 수 있습니다. 태그는 문장 중간에 들어갈 수 있으며 뒤따르는 발화에 영향을 줍니다. 묘사형 태그 뒤에는 실제 텍스트가 필요합니다. 지시만 단독으로 두면 예측하기 어려운 출력이 나올 수 있습니다. 서로 경쟁하는 태그가 의도한 연기를 흐릴 수 있으므로 여러 층을 추가하기 전에 유용한 지시 한두 개로 시작하세요. 음성 참조에 따라 같은 지시에 반응하는 강도도 달라질 수 있습니다.\n\nS2 릴리스는 약 80개 언어를 설명하며, 대본과 같은 언어로 전달 지시를 쓰는 예를 제시합니다. 실제로 발화할 언어로 문구를 준비하고 특정 방식으로 읽어야 할 이름, 단위, 약어를 보존하세요. 다국어 내레이션은 대본 언어를 바꾸면서 의도한 음성을 유지할 수 있지만, 최종 결과물의 발음과 연속성은 직접 들어 확인해야 합니다. 합성은 제공된 내용을 음성으로 만드는 것이며, 애플리케이션이 어떤 정보를 말해야 할지 결정하는 것은 아닙니다.\n\n화자가 한 명이면 저장된 음성 식별자를 선택하거나 참조 오디오와 그에 일치하는 전사문을 제공하세요. 제조사는 즉석 조건화에 깨끗한 10~30초 샘플을 권장합니다. 대화에는 <|speaker:0|>, <|speaker:1|> 같은 화자 표식과 순서가 있는 음성 식별자 목록 또는 화자별 참조 그룹을 사용하세요. 숫자 표식은 대응하는 음성 항목을 선택합니다. 대화가 진행되어도 순서를 고정하세요. 자연어 연기 지시와 화자 선택은 대본에서 역할이 다릅니다.\n\n오디오 출력은 MP3, WAV, 원시 PCM, Opus가 가능합니다. MP3의 기본값은 128 kbps이며 64 또는 192 kbps도 제공합니다. Opus 출력은 48 kHz를 사용하고, WAV와 PCM은 문서에 명시된 샘플 레이트 옵션을 16비트 모노로 지원합니다. 내레이션용 보관 파일이나 재생용 오디오 청크 등 실제 용도에 맞춰 형식을 선택하세요. 제조사 음성 작업 흐름에는 대본이 점진적으로 도착할 때의 실시간 텍스트 스트리밍도 설명되어 있습니다. 생성 결과는 전체 대본 및 선택한 음성과 계속 연결되어 있어야 합니다.\n\n속도는 0.5~2.0 사이에서 조정할 수 있고 음량 및 출력 음량 정규화 제어도 있습니다. 텍스트 정규화는 영어와 중국어 숫자 읽기를 개선합니다. 처리는 100~300 범위의 청크와 청크별 오디오 토큰 예산을 사용하므로, 이를 전체 내레이션의 고정 최대 길이로 해석해서는 안 됩니다. 이전 청크 조건화는 다음 구간에 음성 맥락을 이어 줄 수 있습니다. temperature와 top-p 같은 샘플링 제어는 변동성에 영향을 줍니다. 의도적으로 연기를 지시한 대사에도 원하는 소리를 담을 충분한 텍스트와 맥락이 필요합니다.\n\n유용한 제작 요청은 내레이션, 대화, 전달 지시를 구분하고 결과물의 음성과 형식을 명시합니다. 누락된 단어, 반복된 오디오, 숫자 발음, 화자 전환, 반응의 타이밍을 들어 보세요. 태그를 더 넣으면 모든 구절이 개선된다고 가정하지 말고 불일치를 일으킨 대사나 음성 참조를 수정하세요. S2 Pro는 이전 S2 세대의 독립된 모델이며, S2.1 Pro는 자체적인 개선점과 모델별 설정 동작을 갖춘 후속 에디션입니다.",
    "alias_of": null,
    "aliases": [],
    "author": "Fish Audio",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text"
      ],
      "manufacturer_output": [
        "speech"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.00003",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_utf8_byte",
            "label": "input UTF-8 byte",
            "native_amount_usd_per_unit": "0.00003",
            "native_quantity": 1,
            "public_unit_label": "per input UTF-8 byte",
            "quantity": 1,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_utf8_byte"
          }
        ],
        "summary": "구성의 전체 요금 정보는 상세 정보에서 확인할 수 있습니다."
      }
    ],
    "ctx": null,
    "formats": [
      "speech"
    ],
    "id": "fish-audio/s2-pro",
    "input": [
      "text"
    ],
    "kind": "audio",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "lifecycle": {
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "정산 대조를 위해 반환된 X-Client-Request-ID를 보관하세요. 실제로 반환된 task_id/asset_id 값이나 소유한 미디어 라이브러리만 조회하세요. 작업 ID로 태스크 URL을 만들거나 생성 요청을 다시 제출하지 마세요."
            },
            "outputs": {
              "all_results": "전체 응답과 헤더, 실제로 생성된 모든 출력, 최초로 반환된 식별자와 모든 사용량 필드를 보관하세요. 생성 요청을 다시 제출하지 말고 최초 작업을 복구하세요.",
              "family": "audio",
              "formats": [
                "mp3",
                "pcm"
              ],
              "result": "바이너리 오디오 전체 또는 원래 audio_url 응답, 헤더 및 모든 소유 자산입니다."
            },
            "parameters": [
              {
                "enum": [
                  "fish-audio/s2-pro"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string"
              },
              {
                "enum": [
                  "b347db033a6549378b48d00acb0d06cd"
                ],
                "enum_known": true,
                "min_length": 1,
                "name": "voice",
                "required": true,
                "type": "string"
              },
              {
                "default": "pcm",
                "default_known": true,
                "enum": [
                  "mp3",
                  "pcm"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              },
              {
                "name": "provider",
                "required": false,
                "type": "object"
              }
            ],
            "request_schema": {
              "properties": {
                "input": {
                  "minLength": 1,
                  "type": "string"
                },
                "model": {
                  "enum": [
                    "fish-audio/s2-pro"
                  ],
                  "type": "string"
                },
                "provider": {
                  "description": "Documented speech data policy and provider-specific options.",
                  "properties": {
                    "data_collection": {
                      "enum": [
                        "allow",
                        "deny",
                        null
                      ],
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "options": {
                      "type": "object"
                    },
                    "zdr": {
                      "type": [
                        "boolean",
                        "null"
                      ]
                    }
                  },
                  "type": "object"
                },
                "response_format": {
                  "default": "pcm",
                  "enum": [
                    "mp3",
                    "pcm"
                  ],
                  "type": "string"
                },
                "voice": {
                  "enum": [
                    "b347db033a6549378b48d00acb0d06cd"
                  ],
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input",
                "voice"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "input": "${ACTUAL_INPUT_TEXT}",
                "model": "fish-audio/s2-pro",
                "response_format": "mp3",
                "voice": "b347db033a6549378b48d00acb0d06cd"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "required": [
              "model",
              "input",
              "voice"
            ]
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "실제로 반환된 task_id 또는 미디어 라이브러리 기록",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Keep the returned X-Client-Request-ID for reconciliation. Read only actual returned task_id/asset_id values or the owned media library; never build a task URL from the operation ID and never resubmit creation."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "output": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "family": "audio",
            "formats": [
              "mp3",
              "pcm"
            ],
            "result": "Complete binary audio or original audio_url response, headers and every owned asset."
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per input UTF-8 byte"
            },
            "label": "input UTF-8 byte",
            "units": [
              {
                "amount": "0.00003",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_utf8_byte",
                "label": "input UTF-8 byte",
                "native_amount_usd_per_unit": "0.00003",
                "native_quantity": 1,
                "public_unit_label": "per input UTF-8 byte",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_utf8_byte"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_INPUT_TEXT:?Set the actual documented input value}\"\nexport AILOOT_INPUT_TEXT\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nrequest={'model': 'fish-audio/s2-pro', 'input': '${ACTUAL_INPUT_TEXT}', 'voice': 'b347db033a6549378b48d00acb0d06cd', 'response_format': 'mp3'}\nrequest['input']=os.environ['AILOOT_INPUT_TEXT']\nPath('request.json').write_text(json.dumps(request,ensure_ascii=False),encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o response.bin\n# Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.\n",
            "label": "Use actual input and retain the complete result",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o owned-assets.json\n# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.\n",
            "label": "Read existing owned assets",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "hints": [
          "Use the exact caller model ID and documented input representation.",
          "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "음성",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "native_endpoint": "audio_speech",
        "out": null,
        "output": [
          "audio"
        ],
        "path": "/v1/audio/speech",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "per_request",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null,
          "unit_prices": {
            "audio_input_utf8_byte": 3e-05
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per input UTF-8 byte"
            },
            "label": "input UTF-8 byte",
            "units": [
              {
                "amount": "0.00003",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_utf8_byte",
                "label": "input UTF-8 byte",
                "native_amount_usd_per_unit": "0.00003",
                "native_quantity": 1,
                "public_unit_label": "per input UTF-8 byte",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_utf8_byte"
              }
            ]
          }
        ],
        "request_model_id": "fish-audio/s2-pro",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.00003",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_utf8_byte",
            "label": "input UTF-8 byte",
            "native_amount_usd_per_unit": "0.00003",
            "native_quantity": 1,
            "public_unit_label": "per input UTF-8 byte",
            "quantity": 1,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_utf8_byte"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "fish-audio/s2-pro",
        "request_model_id": "fish-audio/s2-pro",
        "route_label": "Ultra"
      }
    ],
    "name": "Fish Audio: S2 Pro",
    "price": {
      "in": null,
      "in_label": null,
      "out": null,
      "out_label": null,
      "sort_in": null,
      "sort_out": null,
      "varies": true
    },
    "short": "Fish Audio S2 Pro는 단어 단위 지시와 기본 다중 화자 대화를 통해 표현력 있는 다국어 음성을 생성합니다. 대괄호 지시는 대본 안에서 전달 방식을 제어하고, 음성 참조는 화자를 정하며, 출력 설정은 오디오 결과물의 형식을 결정합니다."
  },
  "renderer_schema": {
    "method_order": "Original DTO methods order; every exact route/format/path/caller survives.",
    "prices": "Original public DTO fields and original native display HTML; no flattened or normalized offers."
  },
  "representation": "exact-public-dto-and-native-renderer-html",
  "representationNotes": {
    "current_reference": {
      "about_json_pointer": "/aboutHtml",
      "methods": [
        {
          "contract_json_pointer": "/methods/0/rawMethod/contract",
          "html_json_pointer": "/methods/0/html",
          "method_ordinal": 0
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "Fish Audio S2 Pro는 단어 단위 지시와 기본 다중 화자 대화를 통해 표현력 있는 다국어 음성을 생성합니다. 대괄호 지시는 대본 안에서 전달 방식을 제어하고, 음성 참조는 화자를 정하며, 출력 설정은 오디오 결과물의 형식을 결정합니다.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "91ced798df2faf2b85edfcdd2cd44d8438b2290f6f4f2901b3e8842c9f9c45e0",
    "renderer_sha256": "6825a317438b70ab0939441dcebefece462384e77f7e96cce899605c4b208caa"
  },
  "sourceRevision": "4c92b9e7df5d28eaf5e60e10959383aec6275d58a9ca81e7406d0496038ce7f6"
}
