MODEL IDgoogle:gemini@3.1-flash-tts
live

Gemini 3.1 Flash TTS

Google
by Google

Gemini 3.1 Flash TTS is a text-to-speech model for expressive spoken audio generation from text. It supports granular control over delivery through audio tags, native multi-speaker dialogue, and speech generation across 70+ languages, making it suitable for narration, conversational voice apps, podcasts, audiobooks, and other production-oriented voice workflows.

Gemini 3.1 Flash TTS
text-to-audio

Oyster Farm Insurance Explainer

0:00

An oyster can survive a rough tide. A farm can, too—if help arrives in time. [short pause] TideSure is parametric insurance built for oyster growers. Instead of waiting for an adjuster to inspect every cage, TideSure monitors verified local data such as water temperature, salinity, and storm intensity. When conditions cross the threshold selected in your policy, your claim is triggered automatically. No damage photos. No stacks of paperwork. Just a fast payout you can use for replacement seed, gear repairs, or keeping your crew working. Coverage is tailored by growing site and season, so you protect the months that matter most. [short pause] You already know how quickly the water can change. TideSure helps make sure one bad week doesn’t decide your whole year.

import { createClient } from '@runware/sdk'

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

const [result] = await client.run({
  model: 'google:gemini@3.1-flash-tts',
  speech: {
    text: 'An oyster can survive a rough tide. A farm can, too—if help arrives in time. [short pause] TideSure is parametric insurance built for oyster growers. Instead of waiting for an adjuster to inspect every cage, TideSure monitors verified local data such as water temperature, salinity, and storm intensity. When conditions cross the threshold selected in your policy, your claim is triggered automatically. No damage photos. No stacks of paperwork. Just a fast payout you can use for replacement seed, gear repairs, or keeping your crew working. Coverage is tailored by growing site and season, so you protect the months that matter most. [short pause] You already know how quickly the water can change. TideSure helps make sure one bad week doesn’t decide your whole year.',
    voice: 'Sulafat',
    language: 'en-US'
  }
})
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": "google:gemini@3.1-flash-tts",
            "speech": {
                "text": "An oyster can survive a rough tide. A farm can, too—if help arrives in time. [short pause] TideSure is parametric insurance built for oyster growers. Instead of waiting for an adjuster to inspect every cage, TideSure monitors verified local data such as water temperature, salinity, and storm intensity. When conditions cross the threshold selected in your policy, your claim is triggered automatically. No damage photos. No stacks of paperwork. Just a fast payout you can use for replacement seed, gear repairs, or keeping your crew working. Coverage is tailored by growing site and season, so you protect the months that matter most. [short pause] You already know how quickly the water can change. TideSure helps make sure one bad week doesn’t decide your whole year.",
                "voice": "Sulafat",
                "language": "en-US"
            }
        })


asyncio.run(main())
curl https://api.runware.ai/v1 \
  -H "Authorization: Bearer $RUNWARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "taskType": "audioInference",
      "taskUUID": "9263b8b8-3fd7-47fa-b446-04c6f6da1c96",
      "model": "google:gemini@3.1-flash-tts",
      "speech": {
        "text": "An oyster can survive a rough tide. A farm can, too—if help arrives in time. [short pause] TideSure is parametric insurance built for oyster growers. Instead of waiting for an adjuster to inspect every cage, TideSure monitors verified local data such as water temperature, salinity, and storm intensity. When conditions cross the threshold selected in your policy, your claim is triggered automatically. No damage photos. No stacks of paperwork. Just a fast payout you can use for replacement seed, gear repairs, or keeping your crew working. Coverage is tailored by growing site and season, so you protect the months that matter most. [short pause] You already know how quickly the water can change. TideSure helps make sure one bad week doesn’t decide your whole year.",
        "voice": "Sulafat",
        "language": "en-US"
      }
    }
  ]'
runware run google:gemini@3.1-flash-tts \
  speech.text="An oyster can survive a rough tide. A farm can, too—if help arrives in time. [short pause] TideSure is parametric insurance built for oyster growers. Instead of waiting for an adjuster to inspect every cage, TideSure monitors verified local data such as water temperature, salinity, and storm intensity. When conditions cross the threshold selected in your policy, your claim is triggered automatically. No damage photos. No stacks of paperwork. Just a fast payout you can use for replacement seed, gear repairs, or keeping your crew working. Coverage is tailored by growing site and season, so you protect the months that matter most. [short pause] You already know how quickly the water can change. TideSure helps make sure one bad week doesn’t decide your whole year." \
  speech.voice=Sulafat \
  speech.language=en-US
{
  "taskType": "audioInference",
  "taskUUID": "9263b8b8-3fd7-47fa-b446-04c6f6da1c96",
  "model": "google:gemini@3.1-flash-tts",
  "speech": {
    "text": "An oyster can survive a rough tide. A farm can, too—if help arrives in time. [short pause] TideSure is parametric insurance built for oyster growers. Instead of waiting for an adjuster to inspect every cage, TideSure monitors verified local data such as water temperature, salinity, and storm intensity. When conditions cross the threshold selected in your policy, your claim is triggered automatically. No damage photos. No stacks of paperwork. Just a fast payout you can use for replacement seed, gear repairs, or keeping your crew working. Coverage is tailored by growing site and season, so you protect the months that matter most. [short pause] You already know how quickly the water can change. TideSure helps make sure one bad week doesn’t decide your whole year.",
    "voice": "Sulafat",
    "language": "en-US"
  }
}
Response
{
  "taskType": "audioInference",
  "taskUUID": "9263b8b8-3fd7-47fa-b446-04c6f6da1c96",
  "audioUUID": "cfbcc2b2-c947-44be-8194-5ab9e3ac4706",
  "audioURL": "https://am.runware.ai/audio/os/a06dlim3/ws/5/ai/cfbcc2b2-c947-44be-8194-5ab9e3ac4706.mp3",
  "seed": 1538555888,
  "cost": 0.025115
}
text-to-audio

Ice Rink Heat Recovery Explainer

0:00

[Warm, inviting] Keeping an ice rink frozen creates something unexpected: heat. A lot of it. [short pause] Beneath the ice, a refrigeration system carries warmth away so skaters can enjoy a smooth, reliable surface. In many buildings, that captured heat simply escapes outdoors. Here, it gets a second job. A heat-recovery system transfers it into the leisure centre’s hot-water loop, helping to warm the swimming pool, showers and changing rooms next door. [short pause] The rink stays cold. Swimmers stay comfortable. And the centre needs less energy from conventional heating. The system works quietly in the background, matching supply with demand throughout the day. [gently upbeat] It’s a practical example of circular energy: taking heat already produced on site and putting it to useful work. Because sometimes, the smartest source of warmth is hiding in the coldest room in the building.

import { createClient } from '@runware/sdk'

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

const [result] = await client.run({
  model: 'google:gemini@3.1-flash-tts',
  speech: {
    text: '[Warm, inviting] Keeping an ice rink frozen creates something unexpected: heat. A lot of it. [short pause] Beneath the ice, a refrigeration system carries warmth away so skaters can enjoy a smooth, reliable surface. In many buildings, that captured heat simply escapes outdoors. Here, it gets a second job. A heat-recovery system transfers it into the leisure centre’s hot-water loop, helping to warm the swimming pool, showers and changing rooms next door. [short pause] The rink stays cold. Swimmers stay comfortable. And the centre needs less energy from conventional heating. The system works quietly in the background, matching supply with demand throughout the day. [gently upbeat] It’s a practical example of circular energy: taking heat already produced on site and putting it to useful work. Because sometimes, the smartest source of warmth is hiding in the coldest room in the building.',
    voice: 'Sulafat',
    language: 'en-US'
  }
})
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": "google:gemini@3.1-flash-tts",
            "speech": {
                "text": "[Warm, inviting] Keeping an ice rink frozen creates something unexpected: heat. A lot of it. [short pause] Beneath the ice, a refrigeration system carries warmth away so skaters can enjoy a smooth, reliable surface. In many buildings, that captured heat simply escapes outdoors. Here, it gets a second job. A heat-recovery system transfers it into the leisure centre’s hot-water loop, helping to warm the swimming pool, showers and changing rooms next door. [short pause] The rink stays cold. Swimmers stay comfortable. And the centre needs less energy from conventional heating. The system works quietly in the background, matching supply with demand throughout the day. [gently upbeat] It’s a practical example of circular energy: taking heat already produced on site and putting it to useful work. Because sometimes, the smartest source of warmth is hiding in the coldest room in the building.",
                "voice": "Sulafat",
                "language": "en-US"
            }
        })


asyncio.run(main())
curl https://api.runware.ai/v1 \
  -H "Authorization: Bearer $RUNWARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "taskType": "audioInference",
      "taskUUID": "c3755f64-86f9-4472-9e5c-3529f84b520c",
      "model": "google:gemini@3.1-flash-tts",
      "speech": {
        "text": "[Warm, inviting] Keeping an ice rink frozen creates something unexpected: heat. A lot of it. [short pause] Beneath the ice, a refrigeration system carries warmth away so skaters can enjoy a smooth, reliable surface. In many buildings, that captured heat simply escapes outdoors. Here, it gets a second job. A heat-recovery system transfers it into the leisure centre’s hot-water loop, helping to warm the swimming pool, showers and changing rooms next door. [short pause] The rink stays cold. Swimmers stay comfortable. And the centre needs less energy from conventional heating. The system works quietly in the background, matching supply with demand throughout the day. [gently upbeat] It’s a practical example of circular energy: taking heat already produced on site and putting it to useful work. Because sometimes, the smartest source of warmth is hiding in the coldest room in the building.",
        "voice": "Sulafat",
        "language": "en-US"
      }
    }
  ]'
runware run google:gemini@3.1-flash-tts \
  speech.text="[Warm, inviting] Keeping an ice rink frozen creates something unexpected: heat. A lot of it. [short pause] Beneath the ice, a refrigeration system carries warmth away so skaters can enjoy a smooth, reliable surface. In many buildings, that captured heat simply escapes outdoors. Here, it gets a second job. A heat-recovery system transfers it into the leisure centre’s hot-water loop, helping to warm the swimming pool, showers and changing rooms next door. [short pause] The rink stays cold. Swimmers stay comfortable. And the centre needs less energy from conventional heating. The system works quietly in the background, matching supply with demand throughout the day. [gently upbeat] It’s a practical example of circular energy: taking heat already produced on site and putting it to useful work. Because sometimes, the smartest source of warmth is hiding in the coldest room in the building." \
  speech.voice=Sulafat \
  speech.language=en-US
{
  "taskType": "audioInference",
  "taskUUID": "c3755f64-86f9-4472-9e5c-3529f84b520c",
  "model": "google:gemini@3.1-flash-tts",
  "speech": {
    "text": "[Warm, inviting] Keeping an ice rink frozen creates something unexpected: heat. A lot of it. [short pause] Beneath the ice, a refrigeration system carries warmth away so skaters can enjoy a smooth, reliable surface. In many buildings, that captured heat simply escapes outdoors. Here, it gets a second job. A heat-recovery system transfers it into the leisure centre’s hot-water loop, helping to warm the swimming pool, showers and changing rooms next door. [short pause] The rink stays cold. Swimmers stay comfortable. And the centre needs less energy from conventional heating. The system works quietly in the background, matching supply with demand throughout the day. [gently upbeat] It’s a practical example of circular energy: taking heat already produced on site and putting it to useful work. Because sometimes, the smartest source of warmth is hiding in the coldest room in the building.",
    "voice": "Sulafat",
    "language": "en-US"
  }
}
Response
{
  "taskType": "audioInference",
  "taskUUID": "c3755f64-86f9-4472-9e5c-3529f84b520c",
  "audioUUID": "b6020d95-b92e-4480-8c35-bd185eaa446a",
  "audioURL": "https://am.runware.ai/audio/os/a03d21/ws/5/ai/b6020d95-b92e-4480-8c35-bd185eaa446a.mp3",
  "seed": 273547512,
  "cost": 0.027822
}
Text to Audio

Subway Violinist Interview

0:00

[Mara] [softly] We are standing beneath the eastbound platform, where every note seems to bounce off tile and steel. [short pause] Sir, your case is open, your bow is frayed, and yet people keep stopping. Why here? [Tomas] [warm chuckle] Because this tunnel listens. Concert halls judge you. Down here, the walls give the music back a little bruised, a little honest. [Mara] You began with something delicate, then turned suddenly fierce. Was that planned? [Tomas] Not exactly. [short pause] A child dropped a coin, someone missed a train, a couple started arguing near the stairs. I heard all of it. So the melody changed its mind. [Mara] [smiling] You make it sound like the station is your duet partner. [Tomas] On good nights, yes. On bad nights, it is a critic with bad manners. [both laugh] [Mara] One last question. If a tired commuter only gives you ten seconds of attention, what do you hope they carry upstairs with them? [Tomas] [gentler] Proof that the day did not flatten everything. Just that. A small lift in the ribs. A reason to walk slower when they reach the street.

import { createClient } from '@runware/sdk'

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

const [result] = await client.run({
  model: 'google:gemini@3.1-flash-tts',
  seed: 25439,
  speech: {
    text: '[Mara] [softly] We are standing beneath the eastbound platform, where every note seems to bounce off tile and steel. [short pause] Sir, your case is open, your bow is frayed, and yet people keep stopping. Why here? [Tomas] [warm chuckle] Because this tunnel listens. Concert halls judge you. Down here, the walls give the music back a little bruised, a little honest. [Mara] You began with something delicate, then turned suddenly fierce. Was that planned? [Tomas] Not exactly. [short pause] A child dropped a coin, someone missed a train, a couple started arguing near the stairs. I heard all of it. So the melody changed its mind. [Mara] [smiling] You make it sound like the station is your duet partner. [Tomas] On good nights, yes. On bad nights, it is a critic with bad manners. [both laugh] [Mara] One last question. If a tired commuter only gives you ten seconds of attention, what do you hope they carry upstairs with them? [Tomas] [gentler] Proof that the day did not flatten everything. Just that. A small lift in the ribs. A reason to walk slower when they reach the street.',
    language: 'en-US',
    voices: [
      {
        speaker: 'Mara',
        voice: 'Erinome'
      },
      {
        speaker: 'Tomas',
        voice: 'Umbriel'
      }
    ]
  },
  settings: {
    temperature: 0.87
  }
})
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": "google:gemini@3.1-flash-tts",
            "seed": 25439,
            "speech": {
                "text": "[Mara] [softly] We are standing beneath the eastbound platform, where every note seems to bounce off tile and steel. [short pause] Sir, your case is open, your bow is frayed, and yet people keep stopping. Why here? [Tomas] [warm chuckle] Because this tunnel listens. Concert halls judge you. Down here, the walls give the music back a little bruised, a little honest. [Mara] You began with something delicate, then turned suddenly fierce. Was that planned? [Tomas] Not exactly. [short pause] A child dropped a coin, someone missed a train, a couple started arguing near the stairs. I heard all of it. So the melody changed its mind. [Mara] [smiling] You make it sound like the station is your duet partner. [Tomas] On good nights, yes. On bad nights, it is a critic with bad manners. [both laugh] [Mara] One last question. If a tired commuter only gives you ten seconds of attention, what do you hope they carry upstairs with them? [Tomas] [gentler] Proof that the day did not flatten everything. Just that. A small lift in the ribs. A reason to walk slower when they reach the street.",
                "language": "en-US",
                "voices": [
                    {
                        "speaker": "Mara",
                        "voice": "Erinome"
                    },
                    {
                        "speaker": "Tomas",
                        "voice": "Umbriel"
                    }
                ]
            },
            "settings": {
                "temperature": 0.87
            }
        })


asyncio.run(main())
curl https://api.runware.ai/v1 \
  -H "Authorization: Bearer $RUNWARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "taskType": "audioInference",
      "taskUUID": "fa329722-8162-4bb6-854b-e8e43371d3af",
      "model": "google:gemini@3.1-flash-tts",
      "seed": 25439,
      "speech": {
        "text": "[Mara] [softly] We are standing beneath the eastbound platform, where every note seems to bounce off tile and steel. [short pause] Sir, your case is open, your bow is frayed, and yet people keep stopping. Why here? [Tomas] [warm chuckle] Because this tunnel listens. Concert halls judge you. Down here, the walls give the music back a little bruised, a little honest. [Mara] You began with something delicate, then turned suddenly fierce. Was that planned? [Tomas] Not exactly. [short pause] A child dropped a coin, someone missed a train, a couple started arguing near the stairs. I heard all of it. So the melody changed its mind. [Mara] [smiling] You make it sound like the station is your duet partner. [Tomas] On good nights, yes. On bad nights, it is a critic with bad manners. [both laugh] [Mara] One last question. If a tired commuter only gives you ten seconds of attention, what do you hope they carry upstairs with them? [Tomas] [gentler] Proof that the day did not flatten everything. Just that. A small lift in the ribs. A reason to walk slower when they reach the street.",
        "language": "en-US",
        "voices": [
          {
            "speaker": "Mara",
            "voice": "Erinome"
          },
          {
            "speaker": "Tomas",
            "voice": "Umbriel"
          }
        ]
      },
      "settings": {
        "temperature": 0.87
      }
    }
  ]'
runware run google:gemini@3.1-flash-tts \
  seed=25439 \
  speech.text="[Mara] [softly] We are standing beneath the eastbound platform, where every note seems to bounce off tile and steel. [short pause] Sir, your case is open, your bow is frayed, and yet people keep stopping. Why here? [Tomas] [warm chuckle] Because this tunnel listens. Concert halls judge you. Down here, the walls give the music back a little bruised, a little honest. [Mara] You began with something delicate, then turned suddenly fierce. Was that planned? [Tomas] Not exactly. [short pause] A child dropped a coin, someone missed a train, a couple started arguing near the stairs. I heard all of it. So the melody changed its mind. [Mara] [smiling] You make it sound like the station is your duet partner. [Tomas] On good nights, yes. On bad nights, it is a critic with bad manners. [both laugh] [Mara] One last question. If a tired commuter only gives you ten seconds of attention, what do you hope they carry upstairs with them? [Tomas] [gentler] Proof that the day did not flatten everything. Just that. A small lift in the ribs. A reason to walk slower when they reach the street." \
  speech.language=en-US \
  speech.voices.0.speaker=Mara \
  speech.voices.0.voice=Erinome \
  speech.voices.1.speaker=Tomas \
  speech.voices.1.voice=Umbriel \
  settings.temperature=0.87
{
  "taskType": "audioInference",
  "taskUUID": "fa329722-8162-4bb6-854b-e8e43371d3af",
  "model": "google:gemini@3.1-flash-tts",
  "seed": 25439,
  "speech": {
    "text": "[Mara] [softly] We are standing beneath the eastbound platform, where every note seems to bounce off tile and steel. [short pause] Sir, your case is open, your bow is frayed, and yet people keep stopping. Why here? [Tomas] [warm chuckle] Because this tunnel listens. Concert halls judge you. Down here, the walls give the music back a little bruised, a little honest. [Mara] You began with something delicate, then turned suddenly fierce. Was that planned? [Tomas] Not exactly. [short pause] A child dropped a coin, someone missed a train, a couple started arguing near the stairs. I heard all of it. So the melody changed its mind. [Mara] [smiling] You make it sound like the station is your duet partner. [Tomas] On good nights, yes. On bad nights, it is a critic with bad manners. [both laugh] [Mara] One last question. If a tired commuter only gives you ten seconds of attention, what do you hope they carry upstairs with them? [Tomas] [gentler] Proof that the day did not flatten everything. Just that. A small lift in the ribs. A reason to walk slower when they reach the street.",
    "language": "en-US",
    "voices": [
      {
        "speaker": "Mara",
        "voice": "Erinome"
      },
      {
        "speaker": "Tomas",
        "voice": "Umbriel"
      }
    ]
  },
  "settings": {
    "temperature": 0.87
  }
}
Response
{
  "taskType": "audioInference",
  "taskUUID": "fa329722-8162-4bb6-854b-e8e43371d3af",
  "audioUUID": "e83d4e58-b123-49c3-8923-f3a5d4c5a8e7",
  "audioURL": "https://am.runware.ai/audio/os/a07dlim3/ws/5/ai/e83d4e58-b123-49c3-8923-f3a5d4c5a8e7.mp3",
  "seed": 25439,
  "cost": 0.04299
}
Text to Audio

Faro Costero de Emergencia

0:00

[Nora] Central del faro Punta Grana, aquí Nora. [short pause] Se ha ido la luz principal, pero la lente auxiliar sigue girando. [short pause] Necesito confirmación de la marea y del carguero en ruta. [Hugo] Recibido, Nora. [short pause] El carguero Belmonte está a dieciséis minutos de tu costa y reporta niebla espesa. [short pause] Mantén la baliza manual encendida. [Nora] Entendido. [short pause] [breathes] Escucho la sirena del buque, pero no veo su señal. [Hugo] Nora, quiero tu voz firme. [short pause] Vas a dar el aviso por canal abierto, despacio y claro. [Nora] De acuerdo. [short pause] Atención, Belmonte, atención. Les habla el faro Punta Grana. La luz principal está fuera de servicio. Repito: la luz principal está fuera de servicio. Sigan rumbo dos grados al este y reduzcan velocidad. [short pause] [Hugo] Muy bien. [short pause] El capitán responde... te ha oído. Corrigen rumbo ahora. [Nora] [softly] Gracias. [short pause] Pensé que llegarían demasiado cerca de las rocas. [Hugo] No esta noche. [short pause] Cuando amanezca, el puerto entero sabrá que los guiaste con una lámpara de reserva y mucho pulso.

import { createClient } from '@runware/sdk'

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

const [result] = await client.run({
  model: 'google:gemini@3.1-flash-tts',
  seed: 32004,
  speech: {
    language: 'es-ES',
    voices: [
      {
        speaker: 'Nora',
        voice: 'Kore'
      },
      {
        speaker: 'Hugo',
        voice: 'Iapetus'
      }
    ],
    text: '[Nora] Central del faro Punta Grana, aquí Nora. [short pause] Se ha ido la luz principal, pero la lente auxiliar sigue girando. [short pause] Necesito confirmación de la marea y del carguero en ruta. [Hugo] Recibido, Nora. [short pause] El carguero Belmonte está a dieciséis minutos de tu costa y reporta niebla espesa. [short pause] Mantén la baliza manual encendida. [Nora] Entendido. [short pause] [breathes] Escucho la sirena del buque, pero no veo su señal. [Hugo] Nora, quiero tu voz firme. [short pause] Vas a dar el aviso por canal abierto, despacio y claro. [Nora] De acuerdo. [short pause] Atención, Belmonte, atención. Les habla el faro Punta Grana. La luz principal está fuera de servicio. Repito: la luz principal está fuera de servicio. Sigan rumbo dos grados al este y reduzcan velocidad. [short pause] [Hugo] Muy bien. [short pause] El capitán responde... te ha oído. Corrigen rumbo ahora. [Nora] [softly] Gracias. [short pause] Pensé que llegarían demasiado cerca de las rocas. [Hugo] No esta noche. [short pause] Cuando amanezca, el puerto entero sabrá que los guiaste con una lámpara de reserva y mucho pulso.'
  },
  settings: {
    temperature: 0.82
  }
})
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": "google:gemini@3.1-flash-tts",
            "seed": 32004,
            "speech": {
                "language": "es-ES",
                "voices": [
                    {
                        "speaker": "Nora",
                        "voice": "Kore"
                    },
                    {
                        "speaker": "Hugo",
                        "voice": "Iapetus"
                    }
                ],
                "text": "[Nora] Central del faro Punta Grana, aquí Nora. [short pause] Se ha ido la luz principal, pero la lente auxiliar sigue girando. [short pause] Necesito confirmación de la marea y del carguero en ruta. [Hugo] Recibido, Nora. [short pause] El carguero Belmonte está a dieciséis minutos de tu costa y reporta niebla espesa. [short pause] Mantén la baliza manual encendida. [Nora] Entendido. [short pause] [breathes] Escucho la sirena del buque, pero no veo su señal. [Hugo] Nora, quiero tu voz firme. [short pause] Vas a dar el aviso por canal abierto, despacio y claro. [Nora] De acuerdo. [short pause] Atención, Belmonte, atención. Les habla el faro Punta Grana. La luz principal está fuera de servicio. Repito: la luz principal está fuera de servicio. Sigan rumbo dos grados al este y reduzcan velocidad. [short pause] [Hugo] Muy bien. [short pause] El capitán responde... te ha oído. Corrigen rumbo ahora. [Nora] [softly] Gracias. [short pause] Pensé que llegarían demasiado cerca de las rocas. [Hugo] No esta noche. [short pause] Cuando amanezca, el puerto entero sabrá que los guiaste con una lámpara de reserva y mucho pulso."
            },
            "settings": {
                "temperature": 0.82
            }
        })


asyncio.run(main())
curl https://api.runware.ai/v1 \
  -H "Authorization: Bearer $RUNWARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "taskType": "audioInference",
      "taskUUID": "7373192d-ef7f-4b14-a447-355aaf113930",
      "model": "google:gemini@3.1-flash-tts",
      "seed": 32004,
      "speech": {
        "language": "es-ES",
        "voices": [
          {
            "speaker": "Nora",
            "voice": "Kore"
          },
          {
            "speaker": "Hugo",
            "voice": "Iapetus"
          }
        ],
        "text": "[Nora] Central del faro Punta Grana, aquí Nora. [short pause] Se ha ido la luz principal, pero la lente auxiliar sigue girando. [short pause] Necesito confirmación de la marea y del carguero en ruta. [Hugo] Recibido, Nora. [short pause] El carguero Belmonte está a dieciséis minutos de tu costa y reporta niebla espesa. [short pause] Mantén la baliza manual encendida. [Nora] Entendido. [short pause] [breathes] Escucho la sirena del buque, pero no veo su señal. [Hugo] Nora, quiero tu voz firme. [short pause] Vas a dar el aviso por canal abierto, despacio y claro. [Nora] De acuerdo. [short pause] Atención, Belmonte, atención. Les habla el faro Punta Grana. La luz principal está fuera de servicio. Repito: la luz principal está fuera de servicio. Sigan rumbo dos grados al este y reduzcan velocidad. [short pause] [Hugo] Muy bien. [short pause] El capitán responde... te ha oído. Corrigen rumbo ahora. [Nora] [softly] Gracias. [short pause] Pensé que llegarían demasiado cerca de las rocas. [Hugo] No esta noche. [short pause] Cuando amanezca, el puerto entero sabrá que los guiaste con una lámpara de reserva y mucho pulso."
      },
      "settings": {
        "temperature": 0.82
      }
    }
  ]'
runware run google:gemini@3.1-flash-tts \
  seed=32004 \
  speech.language=es-ES \
  speech.voices.0.speaker=Nora \
  speech.voices.0.voice=Kore \
  speech.voices.1.speaker=Hugo \
  speech.voices.1.voice=Iapetus \
  speech.text="[Nora] Central del faro Punta Grana, aquí Nora. [short pause] Se ha ido la luz principal, pero la lente auxiliar sigue girando. [short pause] Necesito confirmación de la marea y del carguero en ruta. [Hugo] Recibido, Nora. [short pause] El carguero Belmonte está a dieciséis minutos de tu costa y reporta niebla espesa. [short pause] Mantén la baliza manual encendida. [Nora] Entendido. [short pause] [breathes] Escucho la sirena del buque, pero no veo su señal. [Hugo] Nora, quiero tu voz firme. [short pause] Vas a dar el aviso por canal abierto, despacio y claro. [Nora] De acuerdo. [short pause] Atención, Belmonte, atención. Les habla el faro Punta Grana. La luz principal está fuera de servicio. Repito: la luz principal está fuera de servicio. Sigan rumbo dos grados al este y reduzcan velocidad. [short pause] [Hugo] Muy bien. [short pause] El capitán responde... te ha oído. Corrigen rumbo ahora. [Nora] [softly] Gracias. [short pause] Pensé que llegarían demasiado cerca de las rocas. [Hugo] No esta noche. [short pause] Cuando amanezca, el puerto entero sabrá que los guiaste con una lámpara de reserva y mucho pulso." \
  settings.temperature=0.82
{
  "taskType": "audioInference",
  "taskUUID": "7373192d-ef7f-4b14-a447-355aaf113930",
  "model": "google:gemini@3.1-flash-tts",
  "seed": 32004,
  "speech": {
    "language": "es-ES",
    "voices": [
      {
        "speaker": "Nora",
        "voice": "Kore"
      },
      {
        "speaker": "Hugo",
        "voice": "Iapetus"
      }
    ],
    "text": "[Nora] Central del faro Punta Grana, aquí Nora. [short pause] Se ha ido la luz principal, pero la lente auxiliar sigue girando. [short pause] Necesito confirmación de la marea y del carguero en ruta. [Hugo] Recibido, Nora. [short pause] El carguero Belmonte está a dieciséis minutos de tu costa y reporta niebla espesa. [short pause] Mantén la baliza manual encendida. [Nora] Entendido. [short pause] [breathes] Escucho la sirena del buque, pero no veo su señal. [Hugo] Nora, quiero tu voz firme. [short pause] Vas a dar el aviso por canal abierto, despacio y claro. [Nora] De acuerdo. [short pause] Atención, Belmonte, atención. Les habla el faro Punta Grana. La luz principal está fuera de servicio. Repito: la luz principal está fuera de servicio. Sigan rumbo dos grados al este y reduzcan velocidad. [short pause] [Hugo] Muy bien. [short pause] El capitán responde... te ha oído. Corrigen rumbo ahora. [Nora] [softly] Gracias. [short pause] Pensé que llegarían demasiado cerca de las rocas. [Hugo] No esta noche. [short pause] Cuando amanezca, el puerto entero sabrá que los guiaste con una lámpara de reserva y mucho pulso."
  },
  "settings": {
    "temperature": 0.82
  }
}
Response
{
  "taskType": "audioInference",
  "taskUUID": "7373192d-ef7f-4b14-a447-355aaf113930",
  "audioUUID": "db128e30-124e-4133-a098-bc2b57e8edac",
  "audioURL": "https://am.runware.ai/audio/os/a05d22/ws/5/ai/db128e30-124e-4133-a098-bc2b57e8edac.mp3",
  "seed": 32004,
  "cost": 0.03673
}
multi-speaker-dialogue

Volcano Observatory Podcast Stinger

0:00

[Lea] Is that tremor normal? [Owen] Normal is a setting on the washing machine. [Lea] [laughs] Fair. [short pause] Let's read the mountain. [Owen] You're listening to Underfoot—field notes from the volcano observatory.

import { createClient } from '@runware/sdk'

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

const [result] = await client.run({
  model: 'google:gemini@3.1-flash-tts',
  speech: {
    text: '[Lea] Is that tremor normal?\n[Owen] Normal is a setting on the washing machine.\n[Lea] [laughs] Fair. [short pause] Let\'s read the mountain.\n[Owen] You\'re listening to Underfoot—field notes from the volcano observatory.',
    voices: [
      {
        speaker: 'Lea',
        voice: 'Erinome'
      },
      {
        speaker: 'Owen',
        voice: 'Umbriel'
      }
    ],
    language: 'en-US'
  }
})
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": "google:gemini@3.1-flash-tts",
            "speech": {
                "text": "[Lea] Is that tremor normal?\n[Owen] Normal is a setting on the washing machine.\n[Lea] [laughs] Fair. [short pause] Let's read the mountain.\n[Owen] You're listening to Underfoot—field notes from the volcano observatory.",
                "voices": [
                    {
                        "speaker": "Lea",
                        "voice": "Erinome"
                    },
                    {
                        "speaker": "Owen",
                        "voice": "Umbriel"
                    }
                ],
                "language": "en-US"
            }
        })


asyncio.run(main())
curl https://api.runware.ai/v1 \
  -H "Authorization: Bearer $RUNWARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "taskType": "audioInference",
      "taskUUID": "3c6af9e0-7911-4ffe-b69a-6ef856b1d8c3",
      "model": "google:gemini@3.1-flash-tts",
      "speech": {
        "text": "[Lea] Is that tremor normal?\n[Owen] Normal is a setting on the washing machine.\n[Lea] [laughs] Fair. [short pause] Let's read the mountain.\n[Owen] You're listening to Underfoot—field notes from the volcano observatory.",
        "voices": [
          {
            "speaker": "Lea",
            "voice": "Erinome"
          },
          {
            "speaker": "Owen",
            "voice": "Umbriel"
          }
        ],
        "language": "en-US"
      }
    }
  ]'
runware run google:gemini@3.1-flash-tts \
  speech.text="[Lea] Is that tremor normal?
[Owen] Normal is a setting on the washing machine.
[Lea] [laughs] Fair. [short pause] Let's read the mountain.
[Owen] You're listening to Underfoot—field notes from the volcano observatory." \
  speech.voices.0.speaker=Lea \
  speech.voices.0.voice=Erinome \
  speech.voices.1.speaker=Owen \
  speech.voices.1.voice=Umbriel \
  speech.language=en-US
{
  "taskType": "audioInference",
  "taskUUID": "3c6af9e0-7911-4ffe-b69a-6ef856b1d8c3",
  "model": "google:gemini@3.1-flash-tts",
  "speech": {
    "text": "[Lea] Is that tremor normal?\n[Owen] Normal is a setting on the washing machine.\n[Lea] [laughs] Fair. [short pause] Let's read the mountain.\n[Owen] You're listening to Underfoot—field notes from the volcano observatory.",
    "voices": [
      {
        "speaker": "Lea",
        "voice": "Erinome"
      },
      {
        "speaker": "Owen",
        "voice": "Umbriel"
      }
    ],
    "language": "en-US"
  }
}
Response
{
  "taskType": "audioInference",
  "taskUUID": "3c6af9e0-7911-4ffe-b69a-6ef856b1d8c3",
  "audioUUID": "f936e101-4813-407d-aa85-269871c2c55a",
  "audioURL": "https://am.runware.ai/audio/os/a10dlim3/ws/5/ai/f936e101-4813-407d-aa85-269871c2c55a.mp3",
  "seed": 1857859185,
  "cost": 0.00792
}
Text to Audio

Midnight Museum Security Banter

0:00

[Mara] [quietly] Eleven minutes to closing rounds, and the bronze owl is staring at me again. [short pause] Tell me you moved it as a joke. [Leo] I did not. [dry chuckle] Last time I touched that thing, the curator gave me a fifteen-minute lecture about patina. [Mara] [whispering] Then why is it facing the east hallway now? It was pointed at the staircase an hour ago. [Leo] Maybe it appreciates architecture. [short pause] Or maybe you need stronger coffee. [Mara] I switched to mint gum at nine. [soft exhale] Listen. [short pause] Did you hear that little tap? [Leo] Yeah. From the gallery with the ship maps. [lower voice] Okay, that one I don't love. [Mara] We do this properly. Slow walk, flashlights low, no dramatic hero speeches. [Leo] Agreed. If anything lunges, I'm donating my bravery to science. [Mara] [amused] Noted. [footing steady tone] East hallway clear. Marble busts still judgmental. [Leo] Ship-map room ahead. Door's cracked open by... maybe two inches. [short pause] That was definitely closed. [Mara] On three. One... two... [both inhale] [Leo] Wait. [short pause] There it is again. Tiny metal tapping, like... claws? [Mara] [relieved laugh] Leo. Look down. [Leo] Oh, you've got to be kidding me. [warmly] It's the curator's wind-up beetle. [Mara] Missing since Tuesday. Marching straight into the wall with full confidence. [Leo] [laughs] So the haunted tapping menace is eight centimeters long and losing a fight with baseboard trim. [Mara] Case closed. Retrieve the beetle, secure the door, and never speak of the owl incident again. [Leo] Deal. [playful whisper] But if the owl moves before sunrise, I'm requesting a transfer.

import { createClient } from '@runware/sdk'

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

const [result] = await client.run({
  model: 'google:gemini@3.1-flash-tts',
  seed: 75937,
  speech: {
    language: 'en-US',
    voices: [
      {
        speaker: 'Mara',
        voice: 'Gacrux'
      },
      {
        speaker: 'Leo',
        voice: 'Zubenelgenubi'
      }
    ],
    text: '[Mara] [quietly] Eleven minutes to closing rounds, and the bronze owl is staring at me again. [short pause] Tell me you moved it as a joke. [Leo] I did not. [dry chuckle] Last time I touched that thing, the curator gave me a fifteen-minute lecture about patina. [Mara] [whispering] Then why is it facing the east hallway now? It was pointed at the staircase an hour ago. [Leo] Maybe it appreciates architecture. [short pause] Or maybe you need stronger coffee. [Mara] I switched to mint gum at nine. [soft exhale] Listen. [short pause] Did you hear that little tap? [Leo] Yeah. From the gallery with the ship maps. [lower voice] Okay, that one I don\'t love. [Mara] We do this properly. Slow walk, flashlights low, no dramatic hero speeches. [Leo] Agreed. If anything lunges, I\'m donating my bravery to science. [Mara] [amused] Noted. [footing steady tone] East hallway clear. Marble busts still judgmental. [Leo] Ship-map room ahead. Door\'s cracked open by... maybe two inches. [short pause] That was definitely closed. [Mara] On three. One... two... [both inhale] [Leo] Wait. [short pause] There it is again. Tiny metal tapping, like... claws? [Mara] [relieved laugh] Leo. Look down. [Leo] Oh, you\'ve got to be kidding me. [warmly] It\'s the curator\'s wind-up beetle. [Mara] Missing since Tuesday. Marching straight into the wall with full confidence. [Leo] [laughs] So the haunted tapping menace is eight centimeters long and losing a fight with baseboard trim. [Mara] Case closed. Retrieve the beetle, secure the door, and never speak of the owl incident again. [Leo] Deal. [playful whisper] But if the owl moves before sunrise, I\'m requesting a transfer.'
  },
  settings: {
    temperature: 0.82
  }
})
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": "google:gemini@3.1-flash-tts",
            "seed": 75937,
            "speech": {
                "language": "en-US",
                "voices": [
                    {
                        "speaker": "Mara",
                        "voice": "Gacrux"
                    },
                    {
                        "speaker": "Leo",
                        "voice": "Zubenelgenubi"
                    }
                ],
                "text": "[Mara] [quietly] Eleven minutes to closing rounds, and the bronze owl is staring at me again. [short pause] Tell me you moved it as a joke. [Leo] I did not. [dry chuckle] Last time I touched that thing, the curator gave me a fifteen-minute lecture about patina. [Mara] [whispering] Then why is it facing the east hallway now? It was pointed at the staircase an hour ago. [Leo] Maybe it appreciates architecture. [short pause] Or maybe you need stronger coffee. [Mara] I switched to mint gum at nine. [soft exhale] Listen. [short pause] Did you hear that little tap? [Leo] Yeah. From the gallery with the ship maps. [lower voice] Okay, that one I don't love. [Mara] We do this properly. Slow walk, flashlights low, no dramatic hero speeches. [Leo] Agreed. If anything lunges, I'm donating my bravery to science. [Mara] [amused] Noted. [footing steady tone] East hallway clear. Marble busts still judgmental. [Leo] Ship-map room ahead. Door's cracked open by... maybe two inches. [short pause] That was definitely closed. [Mara] On three. One... two... [both inhale] [Leo] Wait. [short pause] There it is again. Tiny metal tapping, like... claws? [Mara] [relieved laugh] Leo. Look down. [Leo] Oh, you've got to be kidding me. [warmly] It's the curator's wind-up beetle. [Mara] Missing since Tuesday. Marching straight into the wall with full confidence. [Leo] [laughs] So the haunted tapping menace is eight centimeters long and losing a fight with baseboard trim. [Mara] Case closed. Retrieve the beetle, secure the door, and never speak of the owl incident again. [Leo] Deal. [playful whisper] But if the owl moves before sunrise, I'm requesting a transfer."
            },
            "settings": {
                "temperature": 0.82
            }
        })


asyncio.run(main())
curl https://api.runware.ai/v1 \
  -H "Authorization: Bearer $RUNWARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "taskType": "audioInference",
      "taskUUID": "522826a1-17aa-4c4c-8c92-b7babb2a00a3",
      "model": "google:gemini@3.1-flash-tts",
      "seed": 75937,
      "speech": {
        "language": "en-US",
        "voices": [
          {
            "speaker": "Mara",
            "voice": "Gacrux"
          },
          {
            "speaker": "Leo",
            "voice": "Zubenelgenubi"
          }
        ],
        "text": "[Mara] [quietly] Eleven minutes to closing rounds, and the bronze owl is staring at me again. [short pause] Tell me you moved it as a joke. [Leo] I did not. [dry chuckle] Last time I touched that thing, the curator gave me a fifteen-minute lecture about patina. [Mara] [whispering] Then why is it facing the east hallway now? It was pointed at the staircase an hour ago. [Leo] Maybe it appreciates architecture. [short pause] Or maybe you need stronger coffee. [Mara] I switched to mint gum at nine. [soft exhale] Listen. [short pause] Did you hear that little tap? [Leo] Yeah. From the gallery with the ship maps. [lower voice] Okay, that one I don't love. [Mara] We do this properly. Slow walk, flashlights low, no dramatic hero speeches. [Leo] Agreed. If anything lunges, I'm donating my bravery to science. [Mara] [amused] Noted. [footing steady tone] East hallway clear. Marble busts still judgmental. [Leo] Ship-map room ahead. Door's cracked open by... maybe two inches. [short pause] That was definitely closed. [Mara] On three. One... two... [both inhale] [Leo] Wait. [short pause] There it is again. Tiny metal tapping, like... claws? [Mara] [relieved laugh] Leo. Look down. [Leo] Oh, you've got to be kidding me. [warmly] It's the curator's wind-up beetle. [Mara] Missing since Tuesday. Marching straight into the wall with full confidence. [Leo] [laughs] So the haunted tapping menace is eight centimeters long and losing a fight with baseboard trim. [Mara] Case closed. Retrieve the beetle, secure the door, and never speak of the owl incident again. [Leo] Deal. [playful whisper] But if the owl moves before sunrise, I'm requesting a transfer."
      },
      "settings": {
        "temperature": 0.82
      }
    }
  ]'
runware run google:gemini@3.1-flash-tts \
  seed=75937 \
  speech.language=en-US \
  speech.voices.0.speaker=Mara \
  speech.voices.0.voice=Gacrux \
  speech.voices.1.speaker=Leo \
  speech.voices.1.voice=Zubenelgenubi \
  speech.text="[Mara] [quietly] Eleven minutes to closing rounds, and the bronze owl is staring at me again. [short pause] Tell me you moved it as a joke. [Leo] I did not. [dry chuckle] Last time I touched that thing, the curator gave me a fifteen-minute lecture about patina. [Mara] [whispering] Then why is it facing the east hallway now? It was pointed at the staircase an hour ago. [Leo] Maybe it appreciates architecture. [short pause] Or maybe you need stronger coffee. [Mara] I switched to mint gum at nine. [soft exhale] Listen. [short pause] Did you hear that little tap? [Leo] Yeah. From the gallery with the ship maps. [lower voice] Okay, that one I don't love. [Mara] We do this properly. Slow walk, flashlights low, no dramatic hero speeches. [Leo] Agreed. If anything lunges, I'm donating my bravery to science. [Mara] [amused] Noted. [footing steady tone] East hallway clear. Marble busts still judgmental. [Leo] Ship-map room ahead. Door's cracked open by... maybe two inches. [short pause] That was definitely closed. [Mara] On three. One... two... [both inhale] [Leo] Wait. [short pause] There it is again. Tiny metal tapping, like... claws? [Mara] [relieved laugh] Leo. Look down. [Leo] Oh, you've got to be kidding me. [warmly] It's the curator's wind-up beetle. [Mara] Missing since Tuesday. Marching straight into the wall with full confidence. [Leo] [laughs] So the haunted tapping menace is eight centimeters long and losing a fight with baseboard trim. [Mara] Case closed. Retrieve the beetle, secure the door, and never speak of the owl incident again. [Leo] Deal. [playful whisper] But if the owl moves before sunrise, I'm requesting a transfer." \
  settings.temperature=0.82
{
  "taskType": "audioInference",
  "taskUUID": "522826a1-17aa-4c4c-8c92-b7babb2a00a3",
  "model": "google:gemini@3.1-flash-tts",
  "seed": 75937,
  "speech": {
    "language": "en-US",
    "voices": [
      {
        "speaker": "Mara",
        "voice": "Gacrux"
      },
      {
        "speaker": "Leo",
        "voice": "Zubenelgenubi"
      }
    ],
    "text": "[Mara] [quietly] Eleven minutes to closing rounds, and the bronze owl is staring at me again. [short pause] Tell me you moved it as a joke. [Leo] I did not. [dry chuckle] Last time I touched that thing, the curator gave me a fifteen-minute lecture about patina. [Mara] [whispering] Then why is it facing the east hallway now? It was pointed at the staircase an hour ago. [Leo] Maybe it appreciates architecture. [short pause] Or maybe you need stronger coffee. [Mara] I switched to mint gum at nine. [soft exhale] Listen. [short pause] Did you hear that little tap? [Leo] Yeah. From the gallery with the ship maps. [lower voice] Okay, that one I don't love. [Mara] We do this properly. Slow walk, flashlights low, no dramatic hero speeches. [Leo] Agreed. If anything lunges, I'm donating my bravery to science. [Mara] [amused] Noted. [footing steady tone] East hallway clear. Marble busts still judgmental. [Leo] Ship-map room ahead. Door's cracked open by... maybe two inches. [short pause] That was definitely closed. [Mara] On three. One... two... [both inhale] [Leo] Wait. [short pause] There it is again. Tiny metal tapping, like... claws? [Mara] [relieved laugh] Leo. Look down. [Leo] Oh, you've got to be kidding me. [warmly] It's the curator's wind-up beetle. [Mara] Missing since Tuesday. Marching straight into the wall with full confidence. [Leo] [laughs] So the haunted tapping menace is eight centimeters long and losing a fight with baseboard trim. [Mara] Case closed. Retrieve the beetle, secure the door, and never speak of the owl incident again. [Leo] Deal. [playful whisper] But if the owl moves before sunrise, I'm requesting a transfer."
  },
  "settings": {
    "temperature": 0.82
  }
}
Response
{
  "taskType": "audioInference",
  "taskUUID": "522826a1-17aa-4c4c-8c92-b7babb2a00a3",
  "audioUUID": "4882b7c4-3f4a-43e1-82eb-3d65b6d7eb89",
  "audioURL": "https://am.runware.ai/audio/os/a06dlim3/ws/5/ai/4882b7c4-3f4a-43e1-82eb-3d65b6d7eb89.mp3",
  "seed": 75937,
  "cost": 0.05442
}
Text to Audio

High-Altitude Balloon Logbook Dialogue

0:00

[Mara] Flight log, ascent hour three. Altitude steady. External temperature is far below forgiving, and the sunrise is spreading copper along the curve of the Earth. [short pause] Jules, status on the particle sampler? [Jules] [excitedly] Sampler is live! And Mara, you have to look right now. The cloud deck below us looks like crumpled silk. I know I am supposed to sound professional, but this is unbelievable. [Mara] [warmly] You may sound amazed in the official record. Amazement is appropriate at twenty-eight kilometers. [short pause] Just keep your glove away from the latch this time. [Jules] That happened once. [laughs] Fine, twice. But this time I am graceful. [short pause] Wait— reading spike on channel four. A clean one. Do you want me to mark it? [Mara] Mark it, timestamp it, and say exactly what you see. Nice and slow. [Jules] Channel four spike at zero six fourteen local. Sharp rise, short tail, no matching noise on the control band. [lower voice] That is either a lovely little data gift or the universe showing off. [Mara] In science, those are sometimes the same thing. [short pause] Rotate the array five degrees east. [Jules] Rotating now. [softly] You know, when I was ten, I used to climb onto the shed roof with binoculars and imagine this exact view. [Mara] And now? [Jules] Now I am above weather, holding a pencil with numb fingers, trying not to cry on a very expensive instrument package. [Mara] [gentle chuckle] For the logbook: morale remains exceptionally high. [short pause] Jules, confirm rotation complete. [Jules] Rotation complete. Signal stabilizing. Oh— there it is again, broader this time. Mara, I think we caught something real. [Mara] Then let the record show this clearly. [measured] At sunrise over the upper atmosphere, the team observed a repeat event on channel four. [softly] And for one quiet minute, the whole sky seemed to lean in and listen.

import { createClient } from '@runware/sdk'

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

const [result] = await client.run({
  model: 'google:gemini@3.1-flash-tts',
  seed: 97799,
  speech: {
    language: 'en-US',
    voices: [
      {
        speaker: 'Mara',
        voice: 'Gacrux'
      },
      {
        speaker: 'Jules',
        voice: 'Fenrir'
      }
    ],
    text: '[Mara] Flight log, ascent hour three. Altitude steady. External temperature is far below forgiving, and the sunrise is spreading copper along the curve of the Earth. [short pause] Jules, status on the particle sampler? [Jules] [excitedly] Sampler is live! And Mara, you have to look right now. The cloud deck below us looks like crumpled silk. I know I am supposed to sound professional, but this is unbelievable. [Mara] [warmly] You may sound amazed in the official record. Amazement is appropriate at twenty-eight kilometers. [short pause] Just keep your glove away from the latch this time. [Jules] That happened once. [laughs] Fine, twice. But this time I am graceful. [short pause] Wait— reading spike on channel four. A clean one. Do you want me to mark it? [Mara] Mark it, timestamp it, and say exactly what you see. Nice and slow. [Jules] Channel four spike at zero six fourteen local. Sharp rise, short tail, no matching noise on the control band. [lower voice] That is either a lovely little data gift or the universe showing off. [Mara] In science, those are sometimes the same thing. [short pause] Rotate the array five degrees east. [Jules] Rotating now. [softly] You know, when I was ten, I used to climb onto the shed roof with binoculars and imagine this exact view. [Mara] And now? [Jules] Now I am above weather, holding a pencil with numb fingers, trying not to cry on a very expensive instrument package. [Mara] [gentle chuckle] For the logbook: morale remains exceptionally high. [short pause] Jules, confirm rotation complete. [Jules] Rotation complete. Signal stabilizing. Oh— there it is again, broader this time. Mara, I think we caught something real. [Mara] Then let the record show this clearly. [measured] At sunrise over the upper atmosphere, the team observed a repeat event on channel four. [softly] And for one quiet minute, the whole sky seemed to lean in and listen.'
  },
  settings: {
    temperature: 0.78
  }
})
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": "google:gemini@3.1-flash-tts",
            "seed": 97799,
            "speech": {
                "language": "en-US",
                "voices": [
                    {
                        "speaker": "Mara",
                        "voice": "Gacrux"
                    },
                    {
                        "speaker": "Jules",
                        "voice": "Fenrir"
                    }
                ],
                "text": "[Mara] Flight log, ascent hour three. Altitude steady. External temperature is far below forgiving, and the sunrise is spreading copper along the curve of the Earth. [short pause] Jules, status on the particle sampler? [Jules] [excitedly] Sampler is live! And Mara, you have to look right now. The cloud deck below us looks like crumpled silk. I know I am supposed to sound professional, but this is unbelievable. [Mara] [warmly] You may sound amazed in the official record. Amazement is appropriate at twenty-eight kilometers. [short pause] Just keep your glove away from the latch this time. [Jules] That happened once. [laughs] Fine, twice. But this time I am graceful. [short pause] Wait— reading spike on channel four. A clean one. Do you want me to mark it? [Mara] Mark it, timestamp it, and say exactly what you see. Nice and slow. [Jules] Channel four spike at zero six fourteen local. Sharp rise, short tail, no matching noise on the control band. [lower voice] That is either a lovely little data gift or the universe showing off. [Mara] In science, those are sometimes the same thing. [short pause] Rotate the array five degrees east. [Jules] Rotating now. [softly] You know, when I was ten, I used to climb onto the shed roof with binoculars and imagine this exact view. [Mara] And now? [Jules] Now I am above weather, holding a pencil with numb fingers, trying not to cry on a very expensive instrument package. [Mara] [gentle chuckle] For the logbook: morale remains exceptionally high. [short pause] Jules, confirm rotation complete. [Jules] Rotation complete. Signal stabilizing. Oh— there it is again, broader this time. Mara, I think we caught something real. [Mara] Then let the record show this clearly. [measured] At sunrise over the upper atmosphere, the team observed a repeat event on channel four. [softly] And for one quiet minute, the whole sky seemed to lean in and listen."
            },
            "settings": {
                "temperature": 0.78
            }
        })


asyncio.run(main())
curl https://api.runware.ai/v1 \
  -H "Authorization: Bearer $RUNWARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "taskType": "audioInference",
      "taskUUID": "40e17de5-ae3d-4a66-8dbd-fc15544a3171",
      "model": "google:gemini@3.1-flash-tts",
      "seed": 97799,
      "speech": {
        "language": "en-US",
        "voices": [
          {
            "speaker": "Mara",
            "voice": "Gacrux"
          },
          {
            "speaker": "Jules",
            "voice": "Fenrir"
          }
        ],
        "text": "[Mara] Flight log, ascent hour three. Altitude steady. External temperature is far below forgiving, and the sunrise is spreading copper along the curve of the Earth. [short pause] Jules, status on the particle sampler? [Jules] [excitedly] Sampler is live! And Mara, you have to look right now. The cloud deck below us looks like crumpled silk. I know I am supposed to sound professional, but this is unbelievable. [Mara] [warmly] You may sound amazed in the official record. Amazement is appropriate at twenty-eight kilometers. [short pause] Just keep your glove away from the latch this time. [Jules] That happened once. [laughs] Fine, twice. But this time I am graceful. [short pause] Wait— reading spike on channel four. A clean one. Do you want me to mark it? [Mara] Mark it, timestamp it, and say exactly what you see. Nice and slow. [Jules] Channel four spike at zero six fourteen local. Sharp rise, short tail, no matching noise on the control band. [lower voice] That is either a lovely little data gift or the universe showing off. [Mara] In science, those are sometimes the same thing. [short pause] Rotate the array five degrees east. [Jules] Rotating now. [softly] You know, when I was ten, I used to climb onto the shed roof with binoculars and imagine this exact view. [Mara] And now? [Jules] Now I am above weather, holding a pencil with numb fingers, trying not to cry on a very expensive instrument package. [Mara] [gentle chuckle] For the logbook: morale remains exceptionally high. [short pause] Jules, confirm rotation complete. [Jules] Rotation complete. Signal stabilizing. Oh— there it is again, broader this time. Mara, I think we caught something real. [Mara] Then let the record show this clearly. [measured] At sunrise over the upper atmosphere, the team observed a repeat event on channel four. [softly] And for one quiet minute, the whole sky seemed to lean in and listen."
      },
      "settings": {
        "temperature": 0.78
      }
    }
  ]'
runware run google:gemini@3.1-flash-tts \
  seed=97799 \
  speech.language=en-US \
  speech.voices.0.speaker=Mara \
  speech.voices.0.voice=Gacrux \
  speech.voices.1.speaker=Jules \
  speech.voices.1.voice=Fenrir \
  speech.text="[Mara] Flight log, ascent hour three. Altitude steady. External temperature is far below forgiving, and the sunrise is spreading copper along the curve of the Earth. [short pause] Jules, status on the particle sampler? [Jules] [excitedly] Sampler is live! And Mara, you have to look right now. The cloud deck below us looks like crumpled silk. I know I am supposed to sound professional, but this is unbelievable. [Mara] [warmly] You may sound amazed in the official record. Amazement is appropriate at twenty-eight kilometers. [short pause] Just keep your glove away from the latch this time. [Jules] That happened once. [laughs] Fine, twice. But this time I am graceful. [short pause] Wait— reading spike on channel four. A clean one. Do you want me to mark it? [Mara] Mark it, timestamp it, and say exactly what you see. Nice and slow. [Jules] Channel four spike at zero six fourteen local. Sharp rise, short tail, no matching noise on the control band. [lower voice] That is either a lovely little data gift or the universe showing off. [Mara] In science, those are sometimes the same thing. [short pause] Rotate the array five degrees east. [Jules] Rotating now. [softly] You know, when I was ten, I used to climb onto the shed roof with binoculars and imagine this exact view. [Mara] And now? [Jules] Now I am above weather, holding a pencil with numb fingers, trying not to cry on a very expensive instrument package. [Mara] [gentle chuckle] For the logbook: morale remains exceptionally high. [short pause] Jules, confirm rotation complete. [Jules] Rotation complete. Signal stabilizing. Oh— there it is again, broader this time. Mara, I think we caught something real. [Mara] Then let the record show this clearly. [measured] At sunrise over the upper atmosphere, the team observed a repeat event on channel four. [softly] And for one quiet minute, the whole sky seemed to lean in and listen." \
  settings.temperature=0.78
{
  "taskType": "audioInference",
  "taskUUID": "40e17de5-ae3d-4a66-8dbd-fc15544a3171",
  "model": "google:gemini@3.1-flash-tts",
  "seed": 97799,
  "speech": {
    "language": "en-US",
    "voices": [
      {
        "speaker": "Mara",
        "voice": "Gacrux"
      },
      {
        "speaker": "Jules",
        "voice": "Fenrir"
      }
    ],
    "text": "[Mara] Flight log, ascent hour three. Altitude steady. External temperature is far below forgiving, and the sunrise is spreading copper along the curve of the Earth. [short pause] Jules, status on the particle sampler? [Jules] [excitedly] Sampler is live! And Mara, you have to look right now. The cloud deck below us looks like crumpled silk. I know I am supposed to sound professional, but this is unbelievable. [Mara] [warmly] You may sound amazed in the official record. Amazement is appropriate at twenty-eight kilometers. [short pause] Just keep your glove away from the latch this time. [Jules] That happened once. [laughs] Fine, twice. But this time I am graceful. [short pause] Wait— reading spike on channel four. A clean one. Do you want me to mark it? [Mara] Mark it, timestamp it, and say exactly what you see. Nice and slow. [Jules] Channel four spike at zero six fourteen local. Sharp rise, short tail, no matching noise on the control band. [lower voice] That is either a lovely little data gift or the universe showing off. [Mara] In science, those are sometimes the same thing. [short pause] Rotate the array five degrees east. [Jules] Rotating now. [softly] You know, when I was ten, I used to climb onto the shed roof with binoculars and imagine this exact view. [Mara] And now? [Jules] Now I am above weather, holding a pencil with numb fingers, trying not to cry on a very expensive instrument package. [Mara] [gentle chuckle] For the logbook: morale remains exceptionally high. [short pause] Jules, confirm rotation complete. [Jules] Rotation complete. Signal stabilizing. Oh— there it is again, broader this time. Mara, I think we caught something real. [Mara] Then let the record show this clearly. [measured] At sunrise over the upper atmosphere, the team observed a repeat event on channel four. [softly] And for one quiet minute, the whole sky seemed to lean in and listen."
  },
  "settings": {
    "temperature": 0.78
  }
}
Response
{
  "taskType": "audioInference",
  "taskUUID": "40e17de5-ae3d-4a66-8dbd-fc15544a3171",
  "audioUUID": "301d9440-8d3d-4dc3-bbef-33d963cb2fbf",
  "audioURL": "https://am.runware.ai/audio/os/a06dlim3/ws/5/ai/301d9440-8d3d-4dc3-bbef-33d963cb2fbf.mp3",
  "seed": 97799,
  "cost": 0.06569
}
Text to Audio

Riverside Bento Train Farewell

0:00

[Mika] [softly] お弁当、まだ温かいよ。急いで包んだから、見た目は少しだけ許してね。[short pause] でも、鮭は上手に焼けたと思う。[Ren] そんなこと言うと、開ける前から泣きそうになるよ。[laughs] 朝のホームで、これは反則だな。[Mika] 泣くのはまだ早いよ。列車が橋を渡るまでは、ちゃんと笑って見送るって決めたの。[short pause] だから……はい、受け取って。[Ren] ありがとう。重さがちょうどいいね。卵焼き、入ってる?[Mika] 入ってる。甘いやつ。あと、きんぴらと、しそごはん。[laughs] 子どもの遠足みたいって言わないでね。[Ren] 言わないよ。むしろ、その感じがうれしい。知らない町に着いても、最初の昼ごはんが君の味なら、少し平気でいられる。[short pause] [Mika] じゃあ、ひとつ約束。向こうで忙しくなっても、お昼はちゃんと食べること。景色の写真も送って。曇りの日も、何でも。[Ren] うん。毎週日曜日、必ず電話する。橋が見えたら、最初に君を思い出す。[short pause] [Mika] あ、ベル……もう行かなきゃ。[voice trembles slightly] ねえ、振り向かなくてもいいから、窓際に座って。[Ren] どうして?[Mika] 列車が出るとき、顔が見えたら、たぶん私、笑えなくなるから。[short pause] [Ren] ……わかった。でも、最後にひとつだけ。[softly] 行ってきます。[Mika] [warmly] いってらっしゃい。お弁当、冷める前に半分食べてね。[laughs softly]

import { createClient } from '@runware/sdk'

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

const [result] = await client.run({
  model: 'google:gemini@3.1-flash-tts',
  seed: 76964,
  speech: {
    language: 'ja-JP',
    text: '[Mika] [softly] お弁当、まだ温かいよ。急いで包んだから、見た目は少しだけ許してね。[short pause] でも、鮭は上手に焼けたと思う。[Ren] そんなこと言うと、開ける前から泣きそうになるよ。[laughs] 朝のホームで、これは反則だな。[Mika] 泣くのはまだ早いよ。列車が橋を渡るまでは、ちゃんと笑って見送るって決めたの。[short pause] だから……はい、受け取って。[Ren] ありがとう。重さがちょうどいいね。卵焼き、入ってる?[Mika] 入ってる。甘いやつ。あと、きんぴらと、しそごはん。[laughs] 子どもの遠足みたいって言わないでね。[Ren] 言わないよ。むしろ、その感じがうれしい。知らない町に着いても、最初の昼ごはんが君の味なら、少し平気でいられる。[short pause] [Mika] じゃあ、ひとつ約束。向こうで忙しくなっても、お昼はちゃんと食べること。景色の写真も送って。曇りの日も、何でも。[Ren] うん。毎週日曜日、必ず電話する。橋が見えたら、最初に君を思い出す。[short pause] [Mika] あ、ベル……もう行かなきゃ。[voice trembles slightly] ねえ、振り向かなくてもいいから、窓際に座って。[Ren] どうして?[Mika] 列車が出るとき、顔が見えたら、たぶん私、笑えなくなるから。[short pause] [Ren] ……わかった。でも、最後にひとつだけ。[softly] 行ってきます。[Mika] [warmly] いってらっしゃい。お弁当、冷める前に半分食べてね。[laughs softly]',
    voices: [
      {
        speaker: 'Mika',
        voice: 'Sulafat'
      },
      {
        speaker: 'Ren',
        voice: 'Achird'
      }
    ]
  },
  settings: {
    temperature: 0.82
  }
})
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": "google:gemini@3.1-flash-tts",
            "seed": 76964,
            "speech": {
                "language": "ja-JP",
                "text": "[Mika] [softly] お弁当、まだ温かいよ。急いで包んだから、見た目は少しだけ許してね。[short pause] でも、鮭は上手に焼けたと思う。[Ren] そんなこと言うと、開ける前から泣きそうになるよ。[laughs] 朝のホームで、これは反則だな。[Mika] 泣くのはまだ早いよ。列車が橋を渡るまでは、ちゃんと笑って見送るって決めたの。[short pause] だから……はい、受け取って。[Ren] ありがとう。重さがちょうどいいね。卵焼き、入ってる?[Mika] 入ってる。甘いやつ。あと、きんぴらと、しそごはん。[laughs] 子どもの遠足みたいって言わないでね。[Ren] 言わないよ。むしろ、その感じがうれしい。知らない町に着いても、最初の昼ごはんが君の味なら、少し平気でいられる。[short pause] [Mika] じゃあ、ひとつ約束。向こうで忙しくなっても、お昼はちゃんと食べること。景色の写真も送って。曇りの日も、何でも。[Ren] うん。毎週日曜日、必ず電話する。橋が見えたら、最初に君を思い出す。[short pause] [Mika] あ、ベル……もう行かなきゃ。[voice trembles slightly] ねえ、振り向かなくてもいいから、窓際に座って。[Ren] どうして?[Mika] 列車が出るとき、顔が見えたら、たぶん私、笑えなくなるから。[short pause] [Ren] ……わかった。でも、最後にひとつだけ。[softly] 行ってきます。[Mika] [warmly] いってらっしゃい。お弁当、冷める前に半分食べてね。[laughs softly]",
                "voices": [
                    {
                        "speaker": "Mika",
                        "voice": "Sulafat"
                    },
                    {
                        "speaker": "Ren",
                        "voice": "Achird"
                    }
                ]
            },
            "settings": {
                "temperature": 0.82
            }
        })


asyncio.run(main())
curl https://api.runware.ai/v1 \
  -H "Authorization: Bearer $RUNWARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "taskType": "audioInference",
      "taskUUID": "45e1eaa6-28e2-467b-b223-c7df9cc645ad",
      "model": "google:gemini@3.1-flash-tts",
      "seed": 76964,
      "speech": {
        "language": "ja-JP",
        "text": "[Mika] [softly] お弁当、まだ温かいよ。急いで包んだから、見た目は少しだけ許してね。[short pause] でも、鮭は上手に焼けたと思う。[Ren] そんなこと言うと、開ける前から泣きそうになるよ。[laughs] 朝のホームで、これは反則だな。[Mika] 泣くのはまだ早いよ。列車が橋を渡るまでは、ちゃんと笑って見送るって決めたの。[short pause] だから……はい、受け取って。[Ren] ありがとう。重さがちょうどいいね。卵焼き、入ってる?[Mika] 入ってる。甘いやつ。あと、きんぴらと、しそごはん。[laughs] 子どもの遠足みたいって言わないでね。[Ren] 言わないよ。むしろ、その感じがうれしい。知らない町に着いても、最初の昼ごはんが君の味なら、少し平気でいられる。[short pause] [Mika] じゃあ、ひとつ約束。向こうで忙しくなっても、お昼はちゃんと食べること。景色の写真も送って。曇りの日も、何でも。[Ren] うん。毎週日曜日、必ず電話する。橋が見えたら、最初に君を思い出す。[short pause] [Mika] あ、ベル……もう行かなきゃ。[voice trembles slightly] ねえ、振り向かなくてもいいから、窓際に座って。[Ren] どうして?[Mika] 列車が出るとき、顔が見えたら、たぶん私、笑えなくなるから。[short pause] [Ren] ……わかった。でも、最後にひとつだけ。[softly] 行ってきます。[Mika] [warmly] いってらっしゃい。お弁当、冷める前に半分食べてね。[laughs softly]",
        "voices": [
          {
            "speaker": "Mika",
            "voice": "Sulafat"
          },
          {
            "speaker": "Ren",
            "voice": "Achird"
          }
        ]
      },
      "settings": {
        "temperature": 0.82
      }
    }
  ]'
runware run google:gemini@3.1-flash-tts \
  seed=76964 \
  speech.language=ja-JP \
  speech.text="[Mika] [softly] お弁当、まだ温かいよ。急いで包んだから、見た目は少しだけ許してね。[short pause] でも、鮭は上手に焼けたと思う。[Ren] そんなこと言うと、開ける前から泣きそうになるよ。[laughs] 朝のホームで、これは反則だな。[Mika] 泣くのはまだ早いよ。列車が橋を渡るまでは、ちゃんと笑って見送るって決めたの。[short pause] だから……はい、受け取って。[Ren] ありがとう。重さがちょうどいいね。卵焼き、入ってる?[Mika] 入ってる。甘いやつ。あと、きんぴらと、しそごはん。[laughs] 子どもの遠足みたいって言わないでね。[Ren] 言わないよ。むしろ、その感じがうれしい。知らない町に着いても、最初の昼ごはんが君の味なら、少し平気でいられる。[short pause] [Mika] じゃあ、ひとつ約束。向こうで忙しくなっても、お昼はちゃんと食べること。景色の写真も送って。曇りの日も、何でも。[Ren] うん。毎週日曜日、必ず電話する。橋が見えたら、最初に君を思い出す。[short pause] [Mika] あ、ベル……もう行かなきゃ。[voice trembles slightly] ねえ、振り向かなくてもいいから、窓際に座って。[Ren] どうして?[Mika] 列車が出るとき、顔が見えたら、たぶん私、笑えなくなるから。[short pause] [Ren] ……わかった。でも、最後にひとつだけ。[softly] 行ってきます。[Mika] [warmly] いってらっしゃい。お弁当、冷める前に半分食べてね。[laughs softly]" \
  speech.voices.0.speaker=Mika \
  speech.voices.0.voice=Sulafat \
  speech.voices.1.speaker=Ren \
  speech.voices.1.voice=Achird \
  settings.temperature=0.82
{
  "taskType": "audioInference",
  "taskUUID": "45e1eaa6-28e2-467b-b223-c7df9cc645ad",
  "model": "google:gemini@3.1-flash-tts",
  "seed": 76964,
  "speech": {
    "language": "ja-JP",
    "text": "[Mika] [softly] お弁当、まだ温かいよ。急いで包んだから、見た目は少しだけ許してね。[short pause] でも、鮭は上手に焼けたと思う。[Ren] そんなこと言うと、開ける前から泣きそうになるよ。[laughs] 朝のホームで、これは反則だな。[Mika] 泣くのはまだ早いよ。列車が橋を渡るまでは、ちゃんと笑って見送るって決めたの。[short pause] だから……はい、受け取って。[Ren] ありがとう。重さがちょうどいいね。卵焼き、入ってる?[Mika] 入ってる。甘いやつ。あと、きんぴらと、しそごはん。[laughs] 子どもの遠足みたいって言わないでね。[Ren] 言わないよ。むしろ、その感じがうれしい。知らない町に着いても、最初の昼ごはんが君の味なら、少し平気でいられる。[short pause] [Mika] じゃあ、ひとつ約束。向こうで忙しくなっても、お昼はちゃんと食べること。景色の写真も送って。曇りの日も、何でも。[Ren] うん。毎週日曜日、必ず電話する。橋が見えたら、最初に君を思い出す。[short pause] [Mika] あ、ベル……もう行かなきゃ。[voice trembles slightly] ねえ、振り向かなくてもいいから、窓際に座って。[Ren] どうして?[Mika] 列車が出るとき、顔が見えたら、たぶん私、笑えなくなるから。[short pause] [Ren] ……わかった。でも、最後にひとつだけ。[softly] 行ってきます。[Mika] [warmly] いってらっしゃい。お弁当、冷める前に半分食べてね。[laughs softly]",
    "voices": [
      {
        "speaker": "Mika",
        "voice": "Sulafat"
      },
      {
        "speaker": "Ren",
        "voice": "Achird"
      }
    ]
  },
  "settings": {
    "temperature": 0.82
  }
}
Response
{
  "taskType": "audioInference",
  "taskUUID": "45e1eaa6-28e2-467b-b223-c7df9cc645ad",
  "audioUUID": "4c6a588f-152f-4c39-be94-99638fce893d",
  "audioURL": "https://am.runware.ai/audio/os/a06dlim3/ws/5/ai/4c6a588f-152f-4c39-be94-99638fce893d.mp3",
  "seed": 76964,
  "cost": 0.05724
}
multi-speaker-dialogue

Repair Cooperative Podcast Vocal Stinger

0:00

[Mara] Got the toaster? [Theo] Got the tools. [Mara] Know how to fix it? [Theo] [laughs] Let’s find out. [Mara] Mend it, share it, keep it in use. [Theo] You’re listening to The Common Bench.

import { createClient } from '@runware/sdk'

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

const [result] = await client.run({
  model: 'google:gemini@3.1-flash-tts',
  speech: {
    text: '[Mara] Got the toaster?\n[Theo] Got the tools.\n[Mara] Know how to fix it?\n[Theo] [laughs] Let’s find out.\n[Mara] Mend it, share it, keep it in use.\n[Theo] You’re listening to The Common Bench.',
    voices: [
      {
        speaker: 'Mara',
        voice: 'Pulcherrima'
      },
      {
        speaker: 'Theo',
        voice: 'Umbriel'
      }
    ],
    language: 'en-US'
  }
})
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": "google:gemini@3.1-flash-tts",
            "speech": {
                "text": "[Mara] Got the toaster?\n[Theo] Got the tools.\n[Mara] Know how to fix it?\n[Theo] [laughs] Let’s find out.\n[Mara] Mend it, share it, keep it in use.\n[Theo] You’re listening to The Common Bench.",
                "voices": [
                    {
                        "speaker": "Mara",
                        "voice": "Pulcherrima"
                    },
                    {
                        "speaker": "Theo",
                        "voice": "Umbriel"
                    }
                ],
                "language": "en-US"
            }
        })


asyncio.run(main())
curl https://api.runware.ai/v1 \
  -H "Authorization: Bearer $RUNWARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "taskType": "audioInference",
      "taskUUID": "eeee6650-db6d-42ac-a263-5f24fb825ef8",
      "model": "google:gemini@3.1-flash-tts",
      "speech": {
        "text": "[Mara] Got the toaster?\n[Theo] Got the tools.\n[Mara] Know how to fix it?\n[Theo] [laughs] Let’s find out.\n[Mara] Mend it, share it, keep it in use.\n[Theo] You’re listening to The Common Bench.",
        "voices": [
          {
            "speaker": "Mara",
            "voice": "Pulcherrima"
          },
          {
            "speaker": "Theo",
            "voice": "Umbriel"
          }
        ],
        "language": "en-US"
      }
    }
  ]'
runware run google:gemini@3.1-flash-tts \
  speech.text="[Mara] Got the toaster?
[Theo] Got the tools.
[Mara] Know how to fix it?
[Theo] [laughs] Let’s find out.
[Mara] Mend it, share it, keep it in use.
[Theo] You’re listening to The Common Bench." \
  speech.voices.0.speaker=Mara \
  speech.voices.0.voice=Pulcherrima \
  speech.voices.1.speaker=Theo \
  speech.voices.1.voice=Umbriel \
  speech.language=en-US
{
  "taskType": "audioInference",
  "taskUUID": "eeee6650-db6d-42ac-a263-5f24fb825ef8",
  "model": "google:gemini@3.1-flash-tts",
  "speech": {
    "text": "[Mara] Got the toaster?\n[Theo] Got the tools.\n[Mara] Know how to fix it?\n[Theo] [laughs] Let’s find out.\n[Mara] Mend it, share it, keep it in use.\n[Theo] You’re listening to The Common Bench.",
    "voices": [
      {
        "speaker": "Mara",
        "voice": "Pulcherrima"
      },
      {
        "speaker": "Theo",
        "voice": "Umbriel"
      }
    ],
    "language": "en-US"
  }
}
Response
{
  "taskType": "audioInference",
  "taskUUID": "eeee6650-db6d-42ac-a263-5f24fb825ef8",
  "audioUUID": "fb97fb28-9f44-4e2e-94b0-f10ef9c4602b",
  "audioURL": "https://am.runware.ai/audio/os/a05d22/ws/5/ai/fb97fb28-9f44-4e2e-94b0-f10ef9c4602b.mp3",
  "seed": 1266061617,
  "cost": 0.006207
}