Restaurant menu audio: 60 dishes at 90 characters, MAI vs Sume cost
Reading a 60-dish menu aloud is 5,400 characters: about 8 cents on MAI-Voice-2.1-Flash, 12 cents on MAI-Voice-2.1 and 26 cents on Sume TTS 1.0.

A 60-dish menu read aloud at 90 characters a dish is 5,400 characters, about 8 cents on MAI-Voice-2.1-Flash, 12 cents on MAI-Voice-2.1 and 26 cents on Sume TTS 1.0, and four seasonal menus a year cost four times that. At list rates that is 21,600 characters: $0.475 on MAI-Voice-2.1 ($22 per 1M characters), $0.324 on MAI-Voice-2.1-Flash ($15 per 1M), and $1.03 on Sume TTS 1.0 ($47.50 per 1M, or $0.0475 per 1,000 characters).
The inputs are assumptions for this scenario: 60 dishes of 90 characters, a new menu each season, one voice. Microsoft's prices are from its announcement page and Sume's from the API reference and pricing page, all read 2026-10-05. The totals are rate times characters, before any per-job rounding.
What the bill looks like
The total column is four seasonal menus. At this volume the voice bill is rounding error next to the time spent checking pronunciations.
| Model | Rate per 1M characters | One run | Total over four seasonal menus a year |
|---|---|---|---|
| MAI-Voice-2.1 | $22.00 | $0.119 | $0.475 |
| MAI-Voice-2.1-Flash | $15.00 | $0.081 | $0.324 |
| Sume TTS 1.0 | $47.50 | $0.257 | $1.03 |
Dish names are the real problem
Menus are full of words a general voice gets wrong: foreign dish names, brand names and units. The price is trivial, so spend the effort on a pronunciation pass.
- Sume TTS accepts an optional
pronunciation_dict_idfor fixed spellings of names. - Write numbers and prices the way they should be spoken, for example 'twelve dollars' rather than '$12'.
- Set
languageto the language of the dish names' sentence, not the cuisine: a voice that does not match the language of the request returns atts_voice_language_mismatcherror before any charge. - Run a ten-dish test first; at 90 characters a dish it is about half a cent to hear each one.
Run it on Sume
This reads a menu file with one dish per line and prints each hosted URL. A line is one job, so a corrected dish is regenerated alone.
import os, time, requests
API = "https://api.sume.com"
H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
def speak(text, key, **extra):
body = {"transcript": text, "language": "en", **extra}
body.setdefault("avatar_handle", os.environ.get("SUME_AVATAR_HANDLE", ""))
r = requests.post(f"{API}/v1/tts-1.0/generate", timeout=60,
headers={**H, "Idempotency-Key": key}, json=body)
r.raise_for_status()
job = r.json()["data"]
while True:
s = requests.get(job["status_url"], headers=H, timeout=30).json()["data"]
if s["terminal"]:
break
time.sleep(s["next_poll_after_seconds"] or 2)
if s["sume_status"] != "completed":
raise RuntimeError(s["sume_status"])
res = requests.get(job["result_url"], headers=H, timeout=30).json()["data"]["result"]
return res
dishes = open("menu.txt", encoding="utf-8").read().splitlines()
for i, line in enumerate(dishes, 1):
res = speak(line, f"menu-autumn-{i:03d}")
print(i, res["artifacts"][0]["url"])
total = sum(len(d) for d in dishes) * 47.5 / 1e6
print(f"list-rate estimate: {total:.3f} USD")
When MAI is the better pick
Microsoft's model page lists 23 languages for MAI-Voice-2.1, which is the more attractive angle if the menu is read in several languages with one voice. For a single-language menu both services cost cents, so choose on the pronunciation controls and the file workflow you already have.
Sources
Related posts
More in Pricing
- Review a draft: Sume caption job $0.20, or transcript $0.01/min
A standalone caption job is $0.20 flat for clips up to 60 seconds. A video-inspect transcript adds $0.01 per audio minute. Which one to use on a draft.
- Revoice 20 of 120 training videos: pay for changed scripts only
Re-voicing only the 20 changed training scripts of 1,800 characters is 36,000 characters, $1.71 on Sume. A full 120-video redo is $10.26. MAI prices compared.
- Runway Aleph 2: 28 credits a second, 56 minimum, so 1 s costs $0.56
Runway bills Aleph 2 at 28 credits per second with a 56-credit minimum, so a 1 second edit costs $0.56. Sume's Omni edit reserves 8 s at 720p, $1.00.
- Gemini Omni Flash 1.1 on Runway: 3.4 credits at 480p vs Sume's 360p
Runway lists Omni Flash 1.1 at 3.4, 10, 15 and 30 credits per second, plus references. Sume bills $0.0375, $0.125, $0.1875 and $0.375 per second.
Written by Sume