# Stable Audio 3 Trainer API

> یک LoRA را روی Stable Audio 3 از فایل zip شامل کلیپ‌های صوتی و کپشن‌های متنی متناظر آموزش می‌دهد

یک چک‌پوینت پایه (medium-base، small-music-base یا small-sfx-base) را روی یک zip از `audio_data_url` تنظیم دقیق می‌کند؛ هر فایل صوتی کپشنی با نام یکسان و پسوند `.txt` دارد. می‌توانید `number_of_steps` (تا 20000)، `learning_rate`، `rank` (از 1 تا 256)، `adapter_type` و `batch_size` را تنظیم کنید یا از یک چک‌پوینت `.safetensors` ادامه دهید. وزن‌های LoRA و یک فایل پیکربندی برمی‌گرداند.

- Model id: `stable-audio-3-trainer`
- Made by: Stability AI
- Category: Training
- Output: file
- Price per run: from $0.003 / run (cheapest run $0.003 (3 API credits))
- Run: `POST https://api.doitong.com/v1/run/stable-audio-3-trainer`
- Quote: `POST https://api.doitong.com/v1/quote/stable-audio-3-trainer`
- Docs page: https://doitong.com/fa/developers/models/stable-audio-3-trainer

## Pricing

Price: **from $0.003 / run** (the lowest tier; the quote prices your exact input). Price per run: the input files are measured before the run (length, resolution, frame rate). The quote measures the same files and is exactly what the run charges.

The full example input below costs $3.00 = 3000 API credits (1 run × $3.00).

Prices are the upstream price in USD, paid from the API balance in API credits (1000 API credits = 1 USD). `POST https://api.doitong.com/v1/quote/stable-audio-3-trainer` with the same JSON body returns the exact price for that input; the quote is exactly what a run charges. Invalid input is never charged and failed or canceled requests are refunded automatically.

## Input parameters

| Parameter | Canonical name | Type | Required | Default | Allowed values / range | Description |
|---|---|---|---|---|---|---|
| `audio_data_url` |  | string | yes |  |  | نشانی اینترنتی zip مجموعه‌داده؛ هر جفت صوت/زیرنویس با نام پایهٔ یکسان کنار هم ذخیره می‌شود: برای نمونه، `clip.wav` با `clip.txt` جفت است. زیرنویس‌ها باید پسوند `.txt` داشته باشند. |
| `model` |  | enum (string) | no | `medium-base` | `medium-base`, `small-music-base`, `small-sfx-base` | نقطهٔ بررسی پایه برای ریزتنظیم Stable Audio 3. |
| `number_of_steps` |  | integer | no | `1000` | 1 – 20,000 | تعداد گام‌های آموزش LoRA. |
| `learning_rate` |  | number | no | `0.0001` | ≤ 0.01, > 0 | نرخ یادگیری که AdamW روی پارامترهای LoRA اعمال می‌کند. |
| `rank` |  | integer | no | `16` | 1 – 256 | رتبهٔ آداپتور LoRA. |
| `adapter_type` |  | enum (string) | no | `dora-rows` | `lora`, `dora`, `dora-rows`, `dora-cols`, `bora`, `lora-xs`, `dora-rows-xs`, `dora-cols-xs`, `bora-xs` | خانوادهٔ آداپتور مورد استفاده برای آموزش LoRA. |
| `duration` |  | number \| null | no |  | 1 – 380 | مدت برش/پرکردن، برحسب ثانیه، که در همهٔ حالت‌ها به طول آموزش بومی مدل انتخاب‌شده محدود است. طولی ارائه کنید یا آن را حذف کنید تا از طولانی‌ترین کلیپ شناسایی‌شده در مجموعه‌داده استفاده شود؛ البته با رعایت این سقف. |
| `batch_size` |  | integer | no | `1` | 1 – 8 | اندازهٔ دستهٔ مورد استفاده هنگام آموزش. |
| `seed` |  | integer | no | `42` | 0 – 2,147,483,647 | بذر تصادفی‌سازی. |
| `base_precision` |  | enum (string) | no | `bf16` | `bf16`, `bfloat16`, `fp16`, `float16` | دقت مورد استفاده برای وزن‌های پایهٔ ثابت؛ پارامترهای LoRA همچنان fp32 می‌مانند. |
| `include` |  | array of string \| null | no |  |  | زیررشته‌های نام ماژول که محل افزودن LoRA را محدود می‌کنند؛ فقط ماژول‌های منطبق آن را دریافت می‌کنند. |
| `exclude` |  | array of string \| null | no |  |  | زیررشته‌های نامی که برای حذف ماژول‌های منطبق استفاده می‌شوند. |
| `lora_checkpoint_url` |  | string \| null | no |  |  | نشانی اینترنتی اختیاری یک نقطهٔ بررسی LoRA با پسوند `.safetensors` برای ادامهٔ آموزش. |
| `pre_encode` |  | boolean | no | `false` |  | پیش‌رمزگذاری بایگانی صوتی به لاتنت‌های SAME پیش از آموزش LoRA. |

## Example input

Required parameters only:

```json
{
  "audio_data_url": "https://content.doitong.com/audio/showcase/v3/tools/dub_es.mp3"
}
```

A fuller example:

```json
{
  "audio_data_url": "https://content.doitong.com/audio/showcase/v3/tools/dub_es.mp3"
}
```

## Run it

Set `DOITONG_API_KEY` to a key from https://doitong.com/developers/dashboard#keys. `?wait=20` returns the finished request in the same call when it is ready within 20 seconds; otherwise poll `GET /requests/{id}` (it also accepts `?wait=`), or pass `webhook_url`.

### curl

```bash
# Run the model; wait up to 20 s for the finished result in the same call
curl -X POST "https://api.doitong.com/v1/run/stable-audio-3-trainer?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "audio_data_url": "https://content.doitong.com/audio/showcase/v3/tools/dub_es.mp3"
  }'

# Still "queued" or "running"? Poll with the id from the response:
curl "https://api.doitong.com/v1/requests/REQUEST_ID?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY"
```

### JavaScript

```javascript
const API = "https://api.doitong.com/v1";
const headers = {
  "Authorization": "Bearer " + process.env.DOITONG_API_KEY,
  "Content-Type": "application/json",
};

// Run the model; wait up to 20 s for the finished result in the same call
let res = await fetch(API + "/run/stable-audio-3-trainer?wait=20", {
  method: "POST",
  headers,
  body: JSON.stringify({
    "audio_data_url": "https://content.doitong.com/audio/showcase/v3/tools/dub_es.mp3"
  }),
});
let request = await res.json();
if (!res.ok) throw new Error(request.error.code + ": " + request.error.message);

// Not finished yet: long-poll until it is
while (request.status === "queued" || request.status === "running") {
  res = await fetch(API + "/requests/" + request.id + "?wait=20", { headers });
  request = await res.json();
}
if (request.status !== "succeeded") throw new Error(JSON.stringify(request.error));
console.log(request.outputs.map((o) => o.url), request.cost.credits + " API credits ($" + request.cost.usd + ")");
```

### Python

```python
import os
import requests

API = "https://api.doitong.com/v1"
headers = {"Authorization": "Bearer " + os.environ["DOITONG_API_KEY"]}

payload = {
    "audio_data_url": "https://content.doitong.com/audio/showcase/v3/tools/dub_es.mp3",
}

# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/stable-audio-3-trainer", params={"wait": 20}, json=payload, headers=headers)
request = r.json()
if not r.ok:
    raise RuntimeError(request["error"]["code"] + ": " + request["error"]["message"])

# Not finished yet: long-poll until it is
while request["status"] in ("queued", "running"):
    request = requests.get(API + "/requests/" + request["id"], params={"wait": 20}, headers=headers).json()
if request["status"] != "succeeded":
    raise RuntimeError(request["error"])
print([o["url"] for o in request["outputs"]], request["cost"]["credits"], "API credits", "$" + request["cost"]["usd"])
```

### MCP

The MCP server at `https://api.doitong.com/v1/mcp` exposes the tools `search_models`, `get_model`, `quote`, `run`, `get_request`, `cancel_request`, `list_requests`, `create_upload` and `get_account`. A `run` call for this model:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "run",
    "arguments": {
      "model_id": "stable-audio-3-trainer",
      "input": {
        "audio_data_url": "https://content.doitong.com/audio/showcase/v3/tools/dub_es.mp3"
      },
      "wait_seconds": 20
    }
  }
}
```

## Response

Every call returns a request object. `status` is one of `queued`, `running`, `succeeded`, `failed`, `canceled`. `outputs` lists the generated files with URLs on our storage (kept forever, or 7 days with `?storage=temporary`; `storage` says which); `output` is the model's own result object with the same URLs.

```json
{
  "id": "req_8k2m4q7x1z9c3v5b6n0p2r4t",
  "object": "request",
  "model": "stable-audio-3-trainer",
  "status": "succeeded",
  "created_at": "2026-10-20T12:00:00Z",
  "started_at": "2026-10-20T12:00:02Z",
  "completed_at": "2026-10-20T12:00:09Z",
  "queue_position": null,
  "cost": {
    "credits": 3000,
    "usd": "3.00",
    "charged": 3000,
    "refunded": 0
  },
  "input": {
    "audio_data_url": "https://content.doitong.com/audio/showcase/v3/tools/dub_es.mp3"
  },
  "output": {
    "lora_file": {
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
      "content_type": "image/jpeg",
      "file_name": "0-output.jpeg",
      "file_size": 1843200
    },
    "config_file": {
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
      "content_type": "image/jpeg",
      "file_name": "0-output.jpeg",
      "file_size": 1843200
    }
  },
  "outputs": [
    {
      "type": "file",
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
      "content_type": "image/jpeg",
      "file_size": 1843200,
      "stored": true
    }
  ],
  "error": null,
  "metrics": {
    "inference_seconds": 6.8
  },
  "urls": {
    "self": "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t",
    "cancel": "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel"
  }
}
```

### Output fields (`output`)

| Field | Type | Description |
|---|---|---|
| `lora_file` | object {url, content_type, file_name, file_size} | وزن‌های LoRA آموزش‌دیده برای Stable Audio 3. |
| `config_file` | object {url, content_type, file_name, file_size} | فرادادهٔ JSON که اجرای آموزش و مدل سازگار برای استنتاج را توصیف می‌کند. |

## Related models

- [ERNIE-Image Trainer](https://doitong.com/developers/models/ernie-image-trainer.md) (`ernie-image-trainer`): $0.0012 / step
- [FLUX 2 \[klein\] 9b Base Trainer](https://doitong.com/developers/models/flux-2-klein-9b-base-trainer.md) (`flux-2-klein-9b-base-trainer`): $0.0043 / step
- [Flux 2 Klein 9B Base Trainer](https://doitong.com/developers/models/flux-2-klein-9b-base-trainer/edit.md) (`flux-2-klein-9b-base-trainer/edit`): $0.0139 / step
- [FLUX 2 Trainer](https://doitong.com/developers/models/flux-2-trainer.md) (`flux-2-trainer`): $0.0064 / step
- [FLUX 2 Trainer Edit](https://doitong.com/developers/models/flux-2-trainer/edit.md) (`flux-2-trainer/edit`): $0.0389 / step
- [FLUX 2 Trainer V2](https://doitong.com/developers/models/flux-2-trainer-v2.md) (`flux-2-trainer-v2`): $0.0064 / step
- [FLUX 2 Trainer V2 Edit](https://doitong.com/developers/models/flux-2-trainer-v2/edit.md) (`flux-2-trainer-v2/edit`): $0.0389 / step
- [Flux Kontext Trainer](https://doitong.com/developers/models/flux-kontext-trainer.md) (`flux-kontext-trainer`): from $1.25 / run

## Links

- HTML page: https://doitong.com/developers/models/stable-audio-3-trainer
- All models and guides for AI agents: https://doitong.com/developers/llms.txt
- OpenAPI 3.1 with this model's typed request body: https://doitong.com/developers/openapi.json?model=stable-audio-3-trainer
- Errors: https://doitong.com/developers/docs/errors
- Model details as JSON: https://api.doitong.com/v1/models/stable-audio-3-trainer
