live
MODEL IDinworld:tts@2

Inworld Realtime TTS-2

Inworld AI
by

Inworld Realtime TTS-2 is a conversational text-to-speech model built for realtime voice interaction rather than static narration. It supports free-form voice direction, carries tone and pacing forward from prior audio in a session, preserves one voice identity across 100+ languages, and is designed for expressive, low-latency speech in assistants, characters, support agents, and interactive products.

Inworld Realtime TTS-2

text-to-audio

Immersive Greenhouse Warning Cue$0.00154~2s
0:00

午前2時17分、温室の北扉が開きます。合図が3回鳴るまで、ガラスには触れないでください。

Try in Playground
import { createClient } from '@runware/sdk'

const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()

const [result] = await client.run({
  model: 'inworld:tts@2',
  speech: {
    text: '午前2時17分、温室の北扉が開きます。合図が3回鳴るまで、ガラスには触れないでください。',
    voice: 'Asuka',
    language: 'ja'
  },
  settings: {
    textNormalization: true
  }
})
import asyncio
import os

from runware import Runware


async def main():
    async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
        results = await client.run({
            "model": "inworld:tts@2",
            "speech": {
                "text": "午前2時17分、温室の北扉が開きます。合図が3回鳴るまで、ガラスには触れないでください。",
                "voice": "Asuka",
                "language": "ja"
            },
            "settings": {
                "textNormalization": True
            }
        })


asyncio.run(main())
curl https://api.runware.ai/v1 \
  -H "Authorization: Bearer $RUNWARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "taskType": "audioInference",
      "taskUUID": "cd886dcc-0f8e-4c33-a720-ff922d31671d",
      "model": "inworld:tts@2",
      "speech": {
        "text": "午前2時17分、温室の北扉が開きます。合図が3回鳴るまで、ガラスには触れないでください。",
        "voice": "Asuka",
        "language": "ja"
      },
      "settings": {
        "textNormalization": true
      }
    }
  ]'
runware run inworld:tts@2 \
  speech.text=午前2時17分、温室の北扉が開きます。合図が3回鳴るまで、ガラスには触れないでください。 \
  speech.voice=Asuka \
  speech.language=ja \
  settings.textNormalization=true
{
  "taskType": "audioInference",
  "taskUUID": "cd886dcc-0f8e-4c33-a720-ff922d31671d",
  "model": "inworld:tts@2",
  "speech": {
    "text": "午前2時17分、温室の北扉が開きます。合図が3回鳴るまで、ガラスには触れないでください。",
    "voice": "Asuka",
    "language": "ja"
  },
  "settings": {
    "textNormalization": true
  }
}
Response
{
  "taskType": "audioInference",
  "taskUUID": "cd886dcc-0f8e-4c33-a720-ff922d31671d",
  "audioUUID": "50379b8f-945a-4b8e-9efe-e40bfc333c0f",
  "audioURL": "https://am.runware.ai/audio/os/a09dlim3/ws/5/ai/50379b8f-945a-4b8e-9efe-e40bfc333c0f.mp3",
  "cost": 0.00154
}

text-to-audio

Italian Heritage Podcast Intro$0.00577~4s
0:00

Benvenuti a Tracce di Restauro, il podcast che entra nei laboratori dove rinascono gli strumenti scientifici. Oggi, un astrolabio del 1683 torna a misurare il cielo.

Try in Playground
import { createClient } from '@runware/sdk'

const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()

const [result] = await client.run({
  model: 'inworld:tts@2',
  speech: {
    text: 'Benvenuti a Tracce di Restauro, il podcast che entra nei laboratori dove rinascono gli strumenti scientifici. Oggi, un astrolabio del 1683 torna a misurare il cielo.',
    voice: 'Orietta',
    language: 'it'
  },
  settings: {
    textNormalization: true
  }
})
import asyncio
import os

from runware import Runware


async def main():
    async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
        results = await client.run({
            "model": "inworld:tts@2",
            "speech": {
                "text": "Benvenuti a Tracce di Restauro, il podcast che entra nei laboratori dove rinascono gli strumenti scientifici. Oggi, un astrolabio del 1683 torna a misurare il cielo.",
                "voice": "Orietta",
                "language": "it"
            },
            "settings": {
                "textNormalization": True
            }
        })


asyncio.run(main())
curl https://api.runware.ai/v1 \
  -H "Authorization: Bearer $RUNWARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "taskType": "audioInference",
      "taskUUID": "36fc3509-2caf-4de0-b0fd-0af342ee1fd6",
      "model": "inworld:tts@2",
      "speech": {
        "text": "Benvenuti a Tracce di Restauro, il podcast che entra nei laboratori dove rinascono gli strumenti scientifici. Oggi, un astrolabio del 1683 torna a misurare il cielo.",
        "voice": "Orietta",
        "language": "it"
      },
      "settings": {
        "textNormalization": true
      }
    }
  ]'
runware run inworld:tts@2 \
  speech.text="Benvenuti a Tracce di Restauro, il podcast che entra nei laboratori dove rinascono gli strumenti scientifici. Oggi, un astrolabio del 1683 torna a misurare il cielo." \
  speech.voice=Orietta \
  speech.language=it \
  settings.textNormalization=true
{
  "taskType": "audioInference",
  "taskUUID": "36fc3509-2caf-4de0-b0fd-0af342ee1fd6",
  "model": "inworld:tts@2",
  "speech": {
    "text": "Benvenuti a Tracce di Restauro, il podcast che entra nei laboratori dove rinascono gli strumenti scientifici. Oggi, un astrolabio del 1683 torna a misurare il cielo.",
    "voice": "Orietta",
    "language": "it"
  },
  "settings": {
    "textNormalization": true
  }
}
Response
{
  "taskType": "audioInference",
  "taskUUID": "36fc3509-2caf-4de0-b0fd-0af342ee1fd6",
  "audioUUID": "b347e704-e706-41ba-93c3-84e3676d1cbe",
  "audioURL": "https://am.runware.ai/audio/os/a01d21/ws/5/ai/b347e704-e706-41ba-93c3-84e3676d1cbe.mp3",
  "cost": 0.005775
}

text-to-audio

Roller Derby Livestream Vocal Stinger$0.00263~2s
0:00

¡Esto es Pista Brava, en vivo desde Monterrey! La final arranca a las 8:30.

Try in Playground
import { createClient } from '@runware/sdk'

const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()

const [result] = await client.run({
  model: 'inworld:tts@2',
  speech: {
    text: '¡Esto es Pista Brava, en vivo desde Monterrey! La final arranca a las 8:30.',
    voice: 'Lupita',
    language: 'es'
  },
  settings: {
    textNormalization: true
  }
})
import asyncio
import os

from runware import Runware


async def main():
    async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
        results = await client.run({
            "model": "inworld:tts@2",
            "speech": {
                "text": "¡Esto es Pista Brava, en vivo desde Monterrey! La final arranca a las 8:30.",
                "voice": "Lupita",
                "language": "es"
            },
            "settings": {
                "textNormalization": True
            }
        })


asyncio.run(main())
curl https://api.runware.ai/v1 \
  -H "Authorization: Bearer $RUNWARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "taskType": "audioInference",
      "taskUUID": "81c07469-6a90-4e5d-abf3-1f85cab87aee",
      "model": "inworld:tts@2",
      "speech": {
        "text": "¡Esto es Pista Brava, en vivo desde Monterrey! La final arranca a las 8:30.",
        "voice": "Lupita",
        "language": "es"
      },
      "settings": {
        "textNormalization": true
      }
    }
  ]'
runware run inworld:tts@2 \
  speech.text="¡Esto es Pista Brava, en vivo desde Monterrey! La final arranca a las 8:30." \
  speech.voice=Lupita \
  speech.language=es \
  settings.textNormalization=true
{
  "taskType": "audioInference",
  "taskUUID": "81c07469-6a90-4e5d-abf3-1f85cab87aee",
  "model": "inworld:tts@2",
  "speech": {
    "text": "¡Esto es Pista Brava, en vivo desde Monterrey! La final arranca a las 8:30.",
    "voice": "Lupita",
    "language": "es"
  },
  "settings": {
    "textNormalization": true
  }
}
Response
{
  "taskType": "audioInference",
  "taskUUID": "81c07469-6a90-4e5d-abf3-1f85cab87aee",
  "audioUUID": "9f835dee-cf31-4827-8a5d-06ac4432a105",
  "audioURL": "https://am.runware.ai/audio/os/a10dlim3/ws/5/ai/9f835dee-cf31-4827-8a5d-06ac4432a105.mp3",
  "cost": 0.002625
}

text-to-audio

Polish Numbers Station Voice Loop$0.00507~4s
0:00

Stacja Wisła, próba nocna. O 02:17 otwórz kopertę 6B i odczytaj trzeci wiersz. Jeśli częstotliwość spadnie poniżej 104,2 MHz, zakończ transmisję.

Try in Playground
import { createClient } from '@runware/sdk'

const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()

const [result] = await client.run({
  model: 'inworld:tts@2',
  speech: {
    text: 'Stacja Wisła, próba nocna. O 02:17 otwórz kopertę 6B i odczytaj trzeci wiersz. Jeśli częstotliwość spadnie poniżej 104,2 MHz, zakończ transmisję.',
    voice: 'Szymon',
    language: 'pl'
  },
  settings: {
    textNormalization: true
  }
})
import asyncio
import os

from runware import Runware


async def main():
    async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
        results = await client.run({
            "model": "inworld:tts@2",
            "speech": {
                "text": "Stacja Wisła, próba nocna. O 02:17 otwórz kopertę 6B i odczytaj trzeci wiersz. Jeśli częstotliwość spadnie poniżej 104,2 MHz, zakończ transmisję.",
                "voice": "Szymon",
                "language": "pl"
            },
            "settings": {
                "textNormalization": True
            }
        })


asyncio.run(main())
curl https://api.runware.ai/v1 \
  -H "Authorization: Bearer $RUNWARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "taskType": "audioInference",
      "taskUUID": "68c87fbc-7003-4931-8c57-4708910a9cb8",
      "model": "inworld:tts@2",
      "speech": {
        "text": "Stacja Wisła, próba nocna. O 02:17 otwórz kopertę 6B i odczytaj trzeci wiersz. Jeśli częstotliwość spadnie poniżej 104,2 MHz, zakończ transmisję.",
        "voice": "Szymon",
        "language": "pl"
      },
      "settings": {
        "textNormalization": true
      }
    }
  ]'
runware run inworld:tts@2 \
  speech.text="Stacja Wisła, próba nocna. O 02:17 otwórz kopertę 6B i odczytaj trzeci wiersz. Jeśli częstotliwość spadnie poniżej 104,2 MHz, zakończ transmisję." \
  speech.voice=Szymon \
  speech.language=pl \
  settings.textNormalization=true
{
  "taskType": "audioInference",
  "taskUUID": "68c87fbc-7003-4931-8c57-4708910a9cb8",
  "model": "inworld:tts@2",
  "speech": {
    "text": "Stacja Wisła, próba nocna. O 02:17 otwórz kopertę 6B i odczytaj trzeci wiersz. Jeśli częstotliwość spadnie poniżej 104,2 MHz, zakończ transmisję.",
    "voice": "Szymon",
    "language": "pl"
  },
  "settings": {
    "textNormalization": true
  }
}
Response
{
  "taskType": "audioInference",
  "taskUUID": "68c87fbc-7003-4931-8c57-4708910a9cb8",
  "audioUUID": "74f1dc3d-a9ce-4379-a41a-258c6ee4bb3d",
  "audioURL": "https://am.runware.ai/audio/os/a02d21/ws/5/ai/74f1dc3d-a9ce-4379-a41a-258c6ee4bb3d.mp3",
  "cost": 0.005075
}