Monthly AI media budget calculator in Python, from live Sume prices

Build a monthly budget for images and voiceovers by reading list prices from the Sume image and TTS router catalogs, then applying list x 1.25 and the 5.5% fee.

6 min readSume
All posts

A monthly budget calculator for AI media is a few lines of code if you read the prices instead of copying them into a spreadsheet. Sume publishes a catalog per router: GET /v1/image-router/models, GET /v1/tts-router/models and GET /v1/video-router/models. Each row carries a pricing object with the vendor list price in USD micros, and the catalog multiplies that by 1.25.

Sume prices every job at the vendor list price × 1.25, then adds a 5.5% fee on that result, so $1.00 of list becomes $1.31875 (how the formula works). The tables below show both the catalog price (list × 1.25) and the all-in figure with the fee.

Where each price lives

The three catalogs name the unit differently, so a calculator needs one lookup per unit.

Field names from the Sume router catalogs; docs read 2026-10-06
RouterPricing fieldUnit
image-routerlist_usd_micros_per_imageone image
tts-routerlist_usd_micros_per_characterone character
video-routerlist_usd_micros_per_second or list_usd_micros_per_second_by_resolutionone second of output (Seedance models use list_usd_micros_per_1000_video_tokens)

The calculator

This script prices one month: 300 Ideogram 4.5 images (the catalog row is the medium quality, $0.06 list) and 40 voiceovers of 600 characters on Sonic 3.6. It needs SUME_API_KEY in the environment.

The result has to be multiplied by the margin only once, at the end, because both lists are in micros of dollars.

import os
import requests

MARGIN = 1.25 * 1.055  # list x 1.25, then the 5.5% fee
HEADERS = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}

def models(router):
    url = f"https://api.sume.com/v1/{router}/models"
    r = requests.get(url, headers=HEADERS, timeout=30)
    r.raise_for_status()
    return {m["id"]: m["pricing"] for m in r.json()["data"]["models"]}

def main():
    image = models("image-router")["ideogram-v4.5"]
    voice = models("tts-router")["sonic-3.6"]
    images = 300 * image["list_usd_micros_per_image"]
    voice_chars = 40 * 600 * voice["list_usd_micros_per_character"]
    total = (images + voice_chars) * MARGIN / 1_000_000
    print(f"300 images + 40 voiceovers: ${total:,.2f}")

main()

What it prints

With these inputs the list total is $18.91 (images $18.00, voice $0.91). With list × 1.25 it is $23.64, and with the 5.5% fee it is $24.94. Change the two multipliers in the script to budget other volumes, or swap ideogram-v4.5 for any id the image catalog returns.

Keep a margin for retries

A budget built from list prices assumes every job succeeds once. Add the number of takes you expect to discard: if you regenerate one image in three, multiply the image line by 1.5 before you apply the margin.

Sources

Related posts

More in Pricing

All Pricing posts

Written by Sume