live
MODEL IDgoogle:gemini@3.1-flash-tts

Gemini 3.1 Flash TTS

Google
by

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.0251~31s
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.

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: '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.0278~28s
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.

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: '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
}

multi-speaker-dialogue

Volcano Observatory Podcast Stinger$0.00792~7s
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.

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: '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
}

multi-speaker-dialogue

Repair Cooperative Podcast Vocal Stinger$0.00621~6s
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.

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: '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
}