models

Fish Audio: S1

Markdown · JSON

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/s1

Fish Audio /fish-audio/s1

Overview

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
FieldTypeRequirementValues & limitsDefault
FieldmodelTypestringRequirementRequiredValues & limits
fish-audio/s1
Default—
FieldinputTypestringRequirementRequiredValues & limits
Minimum length: 1
Default—
FieldvoiceTypestringRequirementRequiredValues & limits
Examples: b347db033a6549378b48d00acb0d06cd
Default—
Fieldresponse_formatTypestringRequirementOptionalValues & limits
mp3, pcm
Defaultpcm
Input material combinations

text_to_speech · Required: actual UTF-8 script, exact supported voice

Method parameters and lifecycle
ParameterContract
Parametercontent_typeContractapplication/json
ParameterrequiredContractmodel, input, voice
Parametermaterial_typesContracttext
Parametervoice_idsContractb347db033a6549378b48d00acb0d06cd
Parametervoice_list_exhaustiveContractfalse
Parameterresponse_formatContractmp3, pcm
Parameterdefault_response_formatContractpcm
ParameterquantityContractUTF-8 bytes of decoded single input string; no trimming/normalization
Parameternative_byte_quote_controlsContractNonempty 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.

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
ConfigurationUltraRate schedule—Billing unitper audio input utf8 byteCharge
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

ConfigurationBilling conditionsCharge
ConfigurationFish Audio: S1 · Default configurationBilling conditionsDefault configurationCharge
Input · Input UTF-8 bytes $0.00003 per input UTF-8 byte

Example requests

Ailoot Ultra · Text to speech

curl · exact native body and complete result
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}/content
  • GET /v1/media/assets
  • GET /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
FieldType
Fieldbinary audioTypebytes
Fieldresponse headersTypeheaders

Aliases

Model aliases

Ailoot Ultra fish-audio/s1

Method path aliases

Use the method paths shown above.

Related caller IDs

fish-audio/s1

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

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