models

Fish Audio: S2 Pro

Markdown · JSON

Fish Audio: S2 Pro

Fish Audio S2 Pro creates expressive multilingual speech with word-level directions and native multi-speaker dialogue. Square-bracket instructions control delivery inside the script, while voice references identify the speakers and output settings shape the audio artifact.

About the model

This description covers the model’s capabilities. Available in Ailoot inputs, outputs and options are listed for the selected method below.

S2 Pro is Fish Audio’s second-generation text-to-speech model for expressive narration, character dialogue and conversational voice output. It turns a written script into audio and supports natural-language direction at the word or phrase level. The previous S1 generation uses parenthesis cues, while S2 Pro natively uses square brackets and supports multiple speakers within one synthesis request. The maker releases S2 Pro weights and fine-tuning code for separate customization work; an ordinary speech request uses the selected model rather than training a new one.

Write the spoken content first, then place a delivery instruction immediately before the word or phrase it should affect. Directions can describe a whisper, a reaction, a pause, an emotional shift or an open-ended speaking style. For a short product explanation, keep the factual sentence clear and put emphasis only where the listener should notice a distinction. For a character line, describe the emotional change at the moment it occurs instead of making the whole passage share one fixed mood.

Square-bracket tags are open-domain descriptions rather than a closed menu. Examples include [whispering], [sigh], [long pause] and a phrase such as [speaking slowly, almost hesitant]. Tags can appear mid-sentence and affect the following speech. A descriptive tag needs actual text after it; an isolated instruction can give unpredictable output. Start with one or two useful directions before adding layers, since competing tags can obscure the performance you intended. Different voice references can respond to the same direction with different intensity.

S2’s release describes approximately 80 languages and gives examples of writing delivery instructions in the same language as the script. Prepare the wording in the language that should be spoken and preserve names, units and abbreviations that need a particular reading. A multilingual narration can keep its intended voice while changing script language, but the final artifact still needs listening for pronunciation and continuity. Synthesis produces the supplied content as speech rather than deciding what information the application should say.

For a single speaker, choose a saved voice identifier or supply reference audio and its matching transcript. The producer recommends a clean 10–30-second sample for instant conditioning. For dialogue, use speaker markers such as <|speaker:0|> and <|speaker:1|>, with an ordered list of voice identifiers or separate reference groups for the speakers. The numeric marker selects the corresponding voice entry; keep the ordering fixed as a conversation develops. Natural-language performance directions and speaker selection have different roles in the script.

The audio output can be MP3, WAV, raw PCM or Opus. MP3 defaults to 128 kbps and offers 64 or 192 kbps; Opus output uses 48 kHz, while WAV and PCM support their documented sample-rate choices as 16-bit mono. Choose the format for its actual destination: a retained file for narration, or suitable audio chunks for playback. The producer speech workflow also describes live text streaming when the script arrives progressively. The generated result should remain associated with the complete script and selected voices.

Speed can be adjusted between 0.5 and 2.0, with volume and output loudness-normalisation controls. Text normalisation improves reading of English and Chinese numbers. Processing uses chunks in a 100–300 range and a per-chunk audio-token budget, so these settings should not be read as a fixed maximum length for an entire narration. Previous-chunk conditioning can carry voice context into the next segment. Sampling controls such as temperature and top-p influence variation; a deliberately directed line still needs enough text and context to carry the intended sound.

A useful production brief separates narration, dialogue and delivery directions, then states the voice and format of the resulting artifact. Listen for missing words, repeated audio, number pronunciation, speaker changes and the timing of a reaction. Revise the line or voice reference responsible for the mismatch rather than assuming more tags will improve every passage. S2 Pro remains a distinct previous-generation S2 model; S2.1 Pro is the later edition with its own improvements and model-specific setting behavior.

Ailoot Ultra · Speech POST /v1/audio/speech fish-audio/s2-pro

fish-audio/s2-pro

Fish Audio /fish-audio/s2-pro

Overview

Fish Audio S2 Pro creates expressive multilingual speech with word-level directions and native multi-speaker dialogue. Square-bracket instructions control delivery inside the script, while voice references identify the speakers and output settings shape the audio artifact.

Accepted inputs
Text
Results
Audio

Available in Ailoot · inputs & methods

Ailoot Ultra · Speech POST /v1/audio/speech
Input types
text
Output types
audio
FieldTypeRequirementValues & limitsDefault
FieldmodelTypestringRequirementRequiredValues & limits
fish-audio/s2-pro
Default—
FieldinputTypestringRequirementRequiredValues & limits
Minimum length: 1
Default—
FieldvoiceTypestringRequirementRequiredValues & limits
b347db033a6549378b48d00acb0d06cd
Minimum length: 1
Default—
Fieldresponse_formatTypestringRequirementOptionalValues & limits
mp3, pcm
Defaultpcm
FieldproviderTypeobjectRequirementOptionalValues & limitsDefault—
Method parameters and lifecycle
ParameterContract
Parametercontent_typeContractapplication/json
ParameterrequiredContractmodel, input, voice
Parametermaterial_typesContracttext

Lifecycle: synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · actual returned task_id or media library record

GET /v1/media/assets/{asset_id}/content

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

Pricing

Tariff references do not add request options. Supported parameters are listed for the selected method.

Fast mode
Not specified When fast mode is selected
Flex mode
Not specified When flex mode is selected
Maximum reasoning effort
Not specified When maximum reasoning effort uses the default adjustment

Ailoot rates

Prices by configuration

Match each charge to the conditions shown. Use one rate for each set of alternative configurations.

ConfigurationRate scheduleBilling unitCharge
ConfigurationBase token ratesRate scheduleBase rateBilling unit—Charge
Input · Input tokens — / 1K tokens
Output · Output tokens — / 1K tokens
Input · Cache read — / 1K tokens
Input · Cache write — / 1K tokens
Input · Cache write, 1 hour — / 1K tokens
Configurationinput UTF-8 byteRate schedule—Billing unitper input UTF-8 byteCharge
Input · input UTF-8 byte $0.00003 per input UTF-8 byte

Ailoot reserves an estimated amount before a request. After the result, it settles the final charge from measured usage. Streaming settlement uses the final usage record. How reservation and settlement work →

Example requests

Ailoot Ultra · Speech

Use actual input and retain the complete result
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_INPUT_TEXT:?Set the actual documented input value}"
export AILOOT_INPUT_TEXT
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
request={'model': 'fish-audio/s2-pro', 'input': '${ACTUAL_INPUT_TEXT}', 'voice': 'b347db033a6549378b48d00acb0d06cd', 'response_format': 'mp3'}
request['input']=os.environ['AILOOT_INPUT_TEXT']
Path('request.json').write_text(json.dumps(request,ensure_ascii=False),encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o response.bin
# Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.

Receive and save results

Ailoot Ultra · Speech

Complete binary audio or original audio_url response, headers and every owned asset.

  • GET /v1/media/tasks/{task_id}
  • GET /v1/media/assets/{asset_id}/content
  • GET /v1/media/assets
  • GET /v1/media/assets/{asset_id}
Other content reads
Read existing owned assets
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \
  -H "Authorization: Bearer $AILOOT_API_KEY" -o owned-assets.json
# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.
Keep all completed results

Keep every complete returned response, file and content part.

Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.

If the original response needs checking

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.

Aliases

Model aliases

Ailoot Ultra fish-audio/s2-pro

Method path aliases

Use the method paths shown above.

Related caller IDs

fish-audio/s2-pro

FAQ · Fish Audio: S2 Pro
What inputs and results are available?

POST /v1/audio/speech · fish-audio/s2-pro: text → audio

Which fields does the request use?

POST /v1/audio/speech · fish-audio/s2-pro: model, input, voice, response_format, provider

More details

Connect Ailoot to Claude Code, OpenCode, Hermes or your own app.

The company and its project portfolio

The company and its project portfolio: millions of customers; monthly sales in the billions.

Buy tokens at a discount.

Subscription discounts for regular use. Promo codes offer up to 50% off token purchases.

Subscription
Choose a discounted plan for your regular requests.
Promo code: up to 50% off
Enter your code at checkout. The price updates to reflect the current promotion.
Spending in your history
The model, tokens and amount are recorded for each request.

Choose a subscription · View model prices

Connect the API to a product you sell.

Use Ailoot in SaaS, apps and bots under its official service offer and licence agreement. Request a reseller licence for resale.

Commercial application
Add text, image, video and audio generation to paid features in your service.
Reseller licence
Send a description of your project and how you provide access. Request written terms for use and resale.
Documents on the website
The service offer, licence agreement and data processing policy are available before you connect.

Request a reseller licence · Service offer and licence agreement