Source: https://ailoot.ai/models/en/fish-audio-s1/
Canonical: https://ailoot.ai/models/en/fish-audio-s1/
Language: en

# Fish Audio: S1

[Markdown](https://ailoot.ai/models/en/fish-audio-s1/index.md) · [JSON](https://ailoot.ai/models/en/fish-audio-s1/facts.json)

## [Fish Audio: S1](https://ailoot.ai/models/en/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.

- [**Ailoot Ultra · Text to speech** `POST /v1/audio/speech` `fish-audio/s1`](https://ailoot.ai/models/en/fish-audio-s1/#method-0)

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`](https://ailoot.ai/models/en/#m=fish-audio%2Fs1&route=Ultra&caller=fish-audio%2Fs1&fmt=speech)

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

| Field | Type | Requirement | Values & limits | Default |
| --- | --- | --- | --- | --- |
| Field`model` | Type`string` | RequirementRequired | Values & limits fish-audio/s1 | Default— |
| Field`input` | Type`string` | RequirementRequired | Values & limits Minimum length: 1 | Default— |
| Field`voice` | Type`string` | RequirementRequired | Values & limits Examples: b347db033a6549378b48d00acb0d06cd | Default— |
| Field`response_format` | Type`string` | 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 |
| --- | --- |
| Parameter`content_type` | Contractapplication/json |
| Parameter`required` | Contractmodel, input, voice |
| Parameter`material_types` | Contracttext |
| Parameter`voice_ids` | Contractb347db033a6549378b48d00acb0d06cd |
| Parameter`voice_list_exhaustive` | Contractfalse |
| Parameter`response_format` | Contractmp3, pcm |
| Parameter`default_response_format` | Contractpcm |
| Parameter`quantity` | ContractUTF-8 bytes of decoded single input string; no trimming/normalization |
| Parameter`native_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 →](https://ailoot.ai/docs/en/billing/reserve/)

#### 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

curl · exact native body and complete result

```bash
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

| Field | Type |
| --- | --- |
| Field`binary audio` | Typebytes |
| Field`response headers` | Typeheaders |

### Aliases

#### Model aliases

**Ailoot Ultra** [`fish-audio/s1`](https://ailoot.ai/models/en/#m=fish-audio%2Fs1&route=Ultra&caller=fish-audio%2Fs1&fmt=speech)

#### Method path aliases

Use the method paths shown above.

#### Related caller IDs

[`fish-audio/s1`](https://ailoot.ai/models/en/#m=fish-audio%2Fs1&route=Ultra&caller=fish-audio%2Fs1&fmt=speech)

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`

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](https://ailoot.ai/docs/en/billing/subscriptions/) · [View model prices](https://ailoot.ai/models/en/)

## 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](mailto:support@ailoot.ai) · [Service offer and licence agreement](https://ailoot.ai/legal/offer?lang=en)

## Ailoot · The company and its project portfolio





Ailoot combines established operating experience, a large client base, stable service and ongoing KPI control.





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





Ailoot brings that operating experience to API access for AI features in customer products, agents, applications and automations.
