Fish Audio: S1
Fish Audio S1 turns multilingual scripts into expressive single-speaker audio using voice references and emotion cues in parentheses. Use it for narration, short spoken instructions or character lines, with format and prosody controls for the finished audio.
About the model
This description covers the model’s capabilities. Available in Ailoot inputs, outputs and options are listed for the selected method below.
S1 is Fish Audio’s previous-generation text-to-speech model for expressive narration and single-speaker voice output. It reads a supplied script and returns audio, using a selected or reference-conditioned voice. The full S1 model is distinct from S1-mini, the smaller distilled model; the producer introduces them as 4-billion- and 0.5-billion-parameter variants respectively. This profile covers the named S1 model.
For narration, prepare the words that should actually be spoken and mark the places where the delivery should change. A useful explainer script states its main point first, develops one idea at a time and uses punctuation to separate phrases that need a natural pause. For a short instruction, keep the wording clear when heard without a screen. Preserve the intended reading of names, abbreviations and units, and check numbers in the spoken output rather than assuming a visually readable string has only one pronunciation.
S1 uses emotion and delivery cues in parentheses, such as (angry), (sad), (in a hurry) or (chuckling). Place a cue before the sentence or phrase it should influence, with actual speech after it. The delivery belongs to the text that follows, so a mood change should appear where the performance needs to change. This is a different syntax from S2’s square-bracket directions; keep the script written for the selected generation instead of assuming the two markup forms are interchangeable.
A voice can be selected through a saved voice identifier or conditioned from a reference recording together with its transcript. For an instant reference workflow, the general speech guide recommends a clean 10–30-second sample. Choose a sample whose speaking style and recording quality fit the intended result, and make the transcript match the words in that sample. For a recurring narrator, reuse the same voice reference across passages so a change of subject does not unintentionally become a change of character.
The S1 release names English, Chinese, Japanese, German, French, Spanish, Korean, Arabic, Russian, Dutch, Italian, Polish and Portuguese among its supported languages and describes mixing languages within a script. Supply the target-language wording rather than treating speech synthesis as a translation step. For a passage with a borrowed name or a language switch, keep the spelling and surrounding sentence context clear and review how the selected voice handles that transition.
S1’s producer interface supports one speaker per synthesis request. A dialogue can be prepared as separate segments with their own voice references, then assembled by the application; S2-family native multi-speaker synthesis is a separate capability. Keep the role, voice and text associated with each segment when preparing character lines. The synthesis result is an audio performance of the script, while timing an exchange or combining it with music and video is a later editing step.
Output options include MP3, WAV, raw PCM and Opus, with MP3 as the default. The documented output is mono; WAV and PCM use 16-bit samples, and format-specific sample-rate choices differ. MP3 supports 64, 128 and 192 kbps, while Opus uses 48 kHz. Speed can be adjusted from 0.5 to 2.0 with volume controls. Choose an encoded file for a voiceover artifact or an appropriate stream for playback, and retain the selected voice and script with the result.
The producer processes long text in chunks, with a documented chunk-length range of 100–300 and an audio-token budget per chunk rather than a guaranteed overall recording duration. Text normalisation can expand English and Chinese numbers into natural reading, and S1’s repetition penalty can reduce repeated audio patterns. Output loudness normalisation is a different setting and has no effect on S1. Inspect pronunciation, phrase boundaries, repeated sounds and the intended emotional shift before assembling the finished passage, then revise the specific line or reference that needs attention.
Ailoot Ultra · Text to speech POST /v1/audio/speech fish-audio/s1
fish-audio/s1Overview
Fish Audio S1 turns multilingual scripts into expressive single-speaker audio using voice references and emotion cues in parentheses. Use it for narration, short spoken instructions or character lines, with format and prosody controls for the finished audio.
- Accepted inputs
- Text
- Results
- Audio
Available in Ailoot · inputs & methods
Ailoot Ultra · Text to speech POST /v1/audio/speech
- Input types
text- Output types
audio- Output format
- actual declared binary audio
| Field | Type | Requirement | Values & limits | Default |
|---|---|---|---|---|
Fieldmodel | Typestring | RequirementRequired | Values & limits fish-audio/s1 | Default— |
Fieldinput | Typestring | RequirementRequired | Values & limits Minimum length: 1 | Default— |
Fieldvoice | Typestring | RequirementRequired | Values & limits Examples: b347db033a6549378b48d00acb0d06cd | Default— |
Fieldresponse_format | Typestring | RequirementOptional | Values & limits mp3, pcm | Defaultpcm |
Input material combinations
text_to_speech · Required: actual UTF-8 script, exact supported voice
Method parameters and lifecycle
| Parameter | Contract |
|---|---|
Parametercontent_type | Contractapplication/json |
Parameterrequired | Contractmodel, input, voice |
Parametermaterial_types | Contracttext |
Parametervoice_ids | Contractb347db033a6549378b48d00acb0d06cd |
Parametervoice_list_exhaustive | Contractfalse |
Parameterresponse_format | Contractmp3, pcm |
Parameterdefault_response_format | Contractpcm |
Parameterquantity | ContractUTF-8 bytes of decoded single input string; no trimming/normalization |
Parameternative_byte_quote_controls | ContractNonempty instructions and multi-speaker turn input are rejected by this exact byte-quote path until added billed text is declared. |
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}
Use the exact model and documented input fields.
Keep the complete response, every actual output and original returned IDs.
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.
| Configuration | Rate schedule | Billing unit | Charge |
|---|---|---|---|
| ConfigurationBase token rates | Rate scheduleBase rate | Billing 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 |
| ConfigurationUltra | Rate schedule— | Billing unitper audio input utf8 byte | Charge Input · audio input utf8 byte $0.00003 per audio input utf8 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 →
Reference tariff details
Model-level reference schedules do not change method selection, quotes or charges. Active charges use the selected Ailoot method rates.
Fish Audio: S1
Prices by configuration
| Configuration | Billing conditions | Charge |
|---|---|---|
| ConfigurationFish Audio: S1 · Default configuration | Billing conditionsDefault configuration | Charge Input · Input UTF-8 bytes $0.00003 per input UTF-8 byte |
Example requests
Ailoot Ultra · Text to speech
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
request={'model': 'fish-audio/s1', 'input': 'Hello world', 'voice': 'b347db033a6549378b48d00acb0d06cd', 'response_format': 'mp3'}
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
# Keep the complete original response and headers. Read every returned segment, word and usage field.
# Preserve actual operation/task/asset IDs; continue reads of the original result without resubmitting.
Receive and save results
Ailoot Ultra · Text to speech
actual declared binary audio
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
Keep all completed results
Keep every complete returned response, file and content part.
Save all complete binary bytes and all original headers; keep full JSON if returned. Actual operation/asset IDs are preserved.
If the original response needs checking
Retain original operation_id/X-Client-Request-ID and original response. Read actual owned task/asset records without resubmitting; no dedicated audio poll URL is constructed.
Response fields
| Field | Type |
|---|---|
Fieldbinary audio | Typebytes |
Fieldresponse headers | Typeheaders |
Aliases
Model aliases
Ailoot Ultra fish-audio/s1
Method path aliases
Use the method paths shown above.
Related caller IDs
FAQ · Fish Audio: S1
- What inputs and results are available?
POST /v1/audio/speech·fish-audio/s1:text→audio- Which fields does the request use?
POST /v1/audio/speech·fish-audio/s1:model,input,voice,response_format