Dia2 2B
Dia2 2B is a 2 billion parameter streaming text-to-speech model from Nari Labs designed for real-time conversational AI. It begins generating audio immediately from partial text input, supports multi-speaker dialogue via speaker tags, voice cloning from a few seconds of reference audio, and non-verbal cues like laughter, sighs, and coughs. Released under Apache 2.0 for commercial use.

Complete technical specification for integration
Ready-to-use code snippets for common workflows
text-to-audio
Alpine Apiary Podcast Stinger$0.0048~14s[S1] Listen closely... that hum is a whole city waking up. Welcome to The Alpine Apiary—where beekeepers share hard-won wisdom, one buzzing frame at a time.
import { createClient } from '@runware/sdk'
const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()
const [result] = await client.run({
model: 'runware:dia2@2b',
speech: {
text: '[S1] Listen closely... that hum is a whole city waking up. Welcome to The Alpine Apiary—where beekeepers share hard-won wisdom, one buzzing frame at a time.'
}
})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": "runware:dia2@2b",
"speech": {
"text": "[S1] Listen closely... that hum is a whole city waking up. Welcome to The Alpine Apiary—where beekeepers share hard-won wisdom, one buzzing frame at a time."
}
})
asyncio.run(main())curl https://api.runware.ai/v1 \
-H "Authorization: Bearer $RUNWARE_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{
"taskType": "audioInference",
"taskUUID": "8ce8b4ba-0c15-42c1-b5cd-1739aac31650",
"model": "runware:dia2@2b",
"speech": {
"text": "[S1] Listen closely... that hum is a whole city waking up. Welcome to The Alpine Apiary—where beekeepers share hard-won wisdom, one buzzing frame at a time."
}
}
]'runware run runware:dia2@2b \
speech.text="[S1] Listen closely... that hum is a whole city waking up. Welcome to The Alpine Apiary—where beekeepers share hard-won wisdom, one buzzing frame at a time."{
"taskType": "audioInference",
"taskUUID": "8ce8b4ba-0c15-42c1-b5cd-1739aac31650",
"model": "runware:dia2@2b",
"speech": {
"text": "[S1] Listen closely... that hum is a whole city waking up. Welcome to The Alpine Apiary—where beekeepers share hard-won wisdom, one buzzing frame at a time."
}
}Response
{
"taskType": "audioInference",
"taskUUID": "8ce8b4ba-0c15-42c1-b5cd-1739aac31650",
"audioUUID": "9cb06c5a-e797-4bfa-a304-bbde45794e62",
"audioURL": "https://am.runware.ai/audio/os/a01d21/ws/5/ai/9cb06c5a-e797-4bfa-a304-bbde45794e62.mp3",
"cost": 0.0048
}text-to-audio
Rare Film Archive Podcast Opening$0.0163~26s[S1] The can arrived without a title—just a strip of yellow tape and three handwritten words: “Do not project.” Inside was a nitrate film from 1931, brittle as an autumn leaf... and possibly the only surviving record of a vanished coastal town. (soft sigh) But opening the can started a clock. Nitrate decays, and when it goes, it can take an entire archive with it. So the conservators had one night to identify the images, stabilize the reel, and decide what could still be saved. I’m Mara Venn, and this is The Last Copy—a podcast about fragile media, patient hands, and the race to preserve our memory before it disappears.
import { createClient } from '@runware/sdk'
const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()
const [result] = await client.run({
model: 'runware:dia2@2b',
speech: {
text: '[S1] The can arrived without a title—just a strip of yellow tape and three handwritten words: “Do not project.” Inside was a nitrate film from 1931, brittle as an autumn leaf... and possibly the only surviving record of a vanished coastal town. (soft sigh) But opening the can started a clock. Nitrate decays, and when it goes, it can take an entire archive with it. So the conservators had one night to identify the images, stabilize the reel, and decide what could still be saved. I’m Mara Venn, and this is The Last Copy—a podcast about fragile media, patient hands, and the race to preserve our memory before it disappears.'
}
})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": "runware:dia2@2b",
"speech": {
"text": "[S1] The can arrived without a title—just a strip of yellow tape and three handwritten words: “Do not project.” Inside was a nitrate film from 1931, brittle as an autumn leaf... and possibly the only surviving record of a vanished coastal town. (soft sigh) But opening the can started a clock. Nitrate decays, and when it goes, it can take an entire archive with it. So the conservators had one night to identify the images, stabilize the reel, and decide what could still be saved. I’m Mara Venn, and this is The Last Copy—a podcast about fragile media, patient hands, and the race to preserve our memory before it disappears."
}
})
asyncio.run(main())curl https://api.runware.ai/v1 \
-H "Authorization: Bearer $RUNWARE_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{
"taskType": "audioInference",
"taskUUID": "3154c851-4501-4760-9d79-cc164c141048",
"model": "runware:dia2@2b",
"speech": {
"text": "[S1] The can arrived without a title—just a strip of yellow tape and three handwritten words: “Do not project.” Inside was a nitrate film from 1931, brittle as an autumn leaf... and possibly the only surviving record of a vanished coastal town. (soft sigh) But opening the can started a clock. Nitrate decays, and when it goes, it can take an entire archive with it. So the conservators had one night to identify the images, stabilize the reel, and decide what could still be saved. I’m Mara Venn, and this is The Last Copy—a podcast about fragile media, patient hands, and the race to preserve our memory before it disappears."
}
}
]'runware run runware:dia2@2b \
speech.text="[S1] The can arrived without a title—just a strip of yellow tape and three handwritten words: “Do not project.” Inside was a nitrate film from 1931, brittle as an autumn leaf... and possibly the only surviving record of a vanished coastal town. (soft sigh) But opening the can started a clock. Nitrate decays, and when it goes, it can take an entire archive with it. So the conservators had one night to identify the images, stabilize the reel, and decide what could still be saved. I’m Mara Venn, and this is The Last Copy—a podcast about fragile media, patient hands, and the race to preserve our memory before it disappears."{
"taskType": "audioInference",
"taskUUID": "3154c851-4501-4760-9d79-cc164c141048",
"model": "runware:dia2@2b",
"speech": {
"text": "[S1] The can arrived without a title—just a strip of yellow tape and three handwritten words: “Do not project.” Inside was a nitrate film from 1931, brittle as an autumn leaf... and possibly the only surviving record of a vanished coastal town. (soft sigh) But opening the can started a clock. Nitrate decays, and when it goes, it can take an entire archive with it. So the conservators had one night to identify the images, stabilize the reel, and decide what could still be saved. I’m Mara Venn, and this is The Last Copy—a podcast about fragile media, patient hands, and the race to preserve our memory before it disappears."
}
}Response
{
"taskType": "audioInference",
"taskUUID": "3154c851-4501-4760-9d79-cc164c141048",
"audioUUID": "85d253e7-a7dd-4bf2-a248-73da73a60bd4",
"audioURL": "https://am.runware.ai/audio/os/a06dlim3/ws/5/ai/85d253e7-a7dd-4bf2-a248-73da73a60bd4.mp3",
"cost": 0.01635
}multi-speaker-dialogue
Electric Ferry Vocal Brand Stinger$0.0211~31s[S1] Hear that? [S2] Exactly. [S1] No engine roar. [S2] Just the harbor. [S1] Northline Electric Ferry. [S2] Move with the tide.
import { createClient } from '@runware/sdk'
const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()
const [result] = await client.run({
model: 'runware:dia2@2b',
speech: {
text: '[S1] Hear that?\n[S2] Exactly.\n[S1] No engine roar.\n[S2] Just the harbor.\n[S1] Northline Electric Ferry.\n[S2] Move with the tide.'
},
inputs: {
audios: [
'https://assets.runware.ai/assets/inputs/0c3cfc65-6316-49e3-af36-56c28dfaa310.mp3',
'https://assets.runware.ai/assets/inputs/f10a95ca-029f-43ab-a4d1-408e8bd7b098.mp3'
]
}
})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": "runware:dia2@2b",
"speech": {
"text": "[S1] Hear that?\n[S2] Exactly.\n[S1] No engine roar.\n[S2] Just the harbor.\n[S1] Northline Electric Ferry.\n[S2] Move with the tide."
},
"inputs": {
"audios": [
"https://assets.runware.ai/assets/inputs/0c3cfc65-6316-49e3-af36-56c28dfaa310.mp3",
"https://assets.runware.ai/assets/inputs/f10a95ca-029f-43ab-a4d1-408e8bd7b098.mp3"
]
}
})
asyncio.run(main())curl https://api.runware.ai/v1 \
-H "Authorization: Bearer $RUNWARE_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{
"taskType": "audioInference",
"taskUUID": "b9d31689-2e8c-470d-8c3e-712bdd748760",
"model": "runware:dia2@2b",
"speech": {
"text": "[S1] Hear that?\n[S2] Exactly.\n[S1] No engine roar.\n[S2] Just the harbor.\n[S1] Northline Electric Ferry.\n[S2] Move with the tide."
},
"inputs": {
"audios": [
"https://assets.runware.ai/assets/inputs/0c3cfc65-6316-49e3-af36-56c28dfaa310.mp3",
"https://assets.runware.ai/assets/inputs/f10a95ca-029f-43ab-a4d1-408e8bd7b098.mp3"
]
}
}
]'runware run runware:dia2@2b \
speech.text="[S1] Hear that?
[S2] Exactly.
[S1] No engine roar.
[S2] Just the harbor.
[S1] Northline Electric Ferry.
[S2] Move with the tide." \
inputs.audios.0=https://assets.runware.ai/assets/inputs/0c3cfc65-6316-49e3-af36-56c28dfaa310.mp3 \
inputs.audios.1=https://assets.runware.ai/assets/inputs/f10a95ca-029f-43ab-a4d1-408e8bd7b098.mp3{
"taskType": "audioInference",
"taskUUID": "b9d31689-2e8c-470d-8c3e-712bdd748760",
"model": "runware:dia2@2b",
"speech": {
"text": "[S1] Hear that?\n[S2] Exactly.\n[S1] No engine roar.\n[S2] Just the harbor.\n[S1] Northline Electric Ferry.\n[S2] Move with the tide."
},
"inputs": {
"audios": [
"https://assets.runware.ai/assets/inputs/0c3cfc65-6316-49e3-af36-56c28dfaa310.mp3",
"https://assets.runware.ai/assets/inputs/f10a95ca-029f-43ab-a4d1-408e8bd7b098.mp3"
]
}
}Response
{
"taskType": "audioInference",
"taskUUID": "b9d31689-2e8c-470d-8c3e-712bdd748760",
"audioUUID": "e8b97587-80bb-41ae-8231-d0d94d26c69a",
"audioURL": "https://am.runware.ai/audio/os/a01d21/ws/5/ai/e8b97587-80bb-41ae-8231-d0d94d26c69a.mp3",
"cost": 0.02115
}voice-cloning
Mushroom Farm Biosecurity Module Narration$0.0355~52s[S1] Before entering a growing room, stop at the hygiene station. Remove visible soil from your boots, step through the disinfectant tray, and sanitize both hands. Always move from younger, cleaner crops toward older crops—never in the opposite direction. If you notice green mold, unusual spotting, or a sour odor, do not touch the affected bed. Mark the location, leave the room, and report it to the crop supervisor. Tools, picking knives, and harvest crates must remain assigned to their designated room unless they have completed the full cleaning cycle. These small steps protect the crop, reduce cross-contamination, and help keep every growing room productive.
import { createClient } from '@runware/sdk'
const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()
const [result] = await client.run({
model: 'runware:dia2@2b',
speech: {
text: '[S1] Before entering a growing room, stop at the hygiene station. Remove visible soil from your boots, step through the disinfectant tray, and sanitize both hands. Always move from younger, cleaner crops toward older crops—never in the opposite direction. If you notice green mold, unusual spotting, or a sour odor, do not touch the affected bed. Mark the location, leave the room, and report it to the crop supervisor. Tools, picking knives, and harvest crates must remain assigned to their designated room unless they have completed the full cleaning cycle. These small steps protect the crop, reduce cross-contamination, and help keep every growing room productive.'
},
inputs: {
audios: [
'https://assets.runware.ai/assets/inputs/a7687dfd-efee-4118-a86d-bda55fd55100.mp3'
]
}
})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": "runware:dia2@2b",
"speech": {
"text": "[S1] Before entering a growing room, stop at the hygiene station. Remove visible soil from your boots, step through the disinfectant tray, and sanitize both hands. Always move from younger, cleaner crops toward older crops—never in the opposite direction. If you notice green mold, unusual spotting, or a sour odor, do not touch the affected bed. Mark the location, leave the room, and report it to the crop supervisor. Tools, picking knives, and harvest crates must remain assigned to their designated room unless they have completed the full cleaning cycle. These small steps protect the crop, reduce cross-contamination, and help keep every growing room productive."
},
"inputs": {
"audios": [
"https://assets.runware.ai/assets/inputs/a7687dfd-efee-4118-a86d-bda55fd55100.mp3"
]
}
})
asyncio.run(main())curl https://api.runware.ai/v1 \
-H "Authorization: Bearer $RUNWARE_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{
"taskType": "audioInference",
"taskUUID": "f0105629-fa57-435d-bdde-3970802745ae",
"model": "runware:dia2@2b",
"speech": {
"text": "[S1] Before entering a growing room, stop at the hygiene station. Remove visible soil from your boots, step through the disinfectant tray, and sanitize both hands. Always move from younger, cleaner crops toward older crops—never in the opposite direction. If you notice green mold, unusual spotting, or a sour odor, do not touch the affected bed. Mark the location, leave the room, and report it to the crop supervisor. Tools, picking knives, and harvest crates must remain assigned to their designated room unless they have completed the full cleaning cycle. These small steps protect the crop, reduce cross-contamination, and help keep every growing room productive."
},
"inputs": {
"audios": [
"https://assets.runware.ai/assets/inputs/a7687dfd-efee-4118-a86d-bda55fd55100.mp3"
]
}
}
]'runware run runware:dia2@2b \
speech.text="[S1] Before entering a growing room, stop at the hygiene station. Remove visible soil from your boots, step through the disinfectant tray, and sanitize both hands. Always move from younger, cleaner crops toward older crops—never in the opposite direction. If you notice green mold, unusual spotting, or a sour odor, do not touch the affected bed. Mark the location, leave the room, and report it to the crop supervisor. Tools, picking knives, and harvest crates must remain assigned to their designated room unless they have completed the full cleaning cycle. These small steps protect the crop, reduce cross-contamination, and help keep every growing room productive." \
inputs.audios.0=https://assets.runware.ai/assets/inputs/a7687dfd-efee-4118-a86d-bda55fd55100.mp3{
"taskType": "audioInference",
"taskUUID": "f0105629-fa57-435d-bdde-3970802745ae",
"model": "runware:dia2@2b",
"speech": {
"text": "[S1] Before entering a growing room, stop at the hygiene station. Remove visible soil from your boots, step through the disinfectant tray, and sanitize both hands. Always move from younger, cleaner crops toward older crops—never in the opposite direction. If you notice green mold, unusual spotting, or a sour odor, do not touch the affected bed. Mark the location, leave the room, and report it to the crop supervisor. Tools, picking knives, and harvest crates must remain assigned to their designated room unless they have completed the full cleaning cycle. These small steps protect the crop, reduce cross-contamination, and help keep every growing room productive."
},
"inputs": {
"audios": [
"https://assets.runware.ai/assets/inputs/a7687dfd-efee-4118-a86d-bda55fd55100.mp3"
]
}
}Response
{
"taskType": "audioInference",
"taskUUID": "f0105629-fa57-435d-bdde-3970802745ae",
"audioUUID": "d06845ab-7fad-47e8-a37f-281395ee33f5",
"audioURL": "https://am.runware.ai/audio/os/a10dlim3/ws/5/ai/d06845ab-7fad-47e8-a37f-281395ee33f5.mp3",
"cost": 0.03555
}