Costs
Lithos itself is free and runs on your own hardware. What costs money is the translation provider — OpenAI or Google — and it bills your API key, by the minute, for every language stream that is open. This page is about what "open" means, what a Sunday actually comes to, and the handful of settings that keep a forgotten laptop from paying for an empty room all week.
Updated for v0.6.0-beta.6, with screenshots captured from that release. Room names and settings shown are examples.
How you're charged
One stream per language, for every minute it is open. That is what drives the bill. Not per listener — fifty phones on Spanish cost the same as one. A stream is a live connection to the provider, and while it is open the meter runs, whether or not anyone is speaking. How the provider turns those minutes into dollars differs:
- OpenAI charges a flat rate, about $0.034 a minute per stream, and nothing else. A silent minute costs exactly what a spoken one does, and what the meter shows is what you are billed.
- Google Gemini charges per token — $3.50 per million in, $21.00 per million out — and the app converts that to a per-minute figure of roughly $0.037 per stream. The microphone audio is metered at a steady rate the whole time the stream is open, so a silent minute still costs (a little less), and the synthesised voice is most of the rest, so a wordy minute costs a little more. The $0.037 is a working average for continuous speech, not a tariff.
- The self-hosted stack costs nothing per minute. It needs a GPU box — see below.
Two consequences worth holding onto. Only opening and closing streams moves the bill in any real way — muting a microphone, hiding a page, or having nobody listen does not (on Gemini a muted stream is cheaper, but not free; on OpenAI it is identical). And the bill scales with languages, not people: the cheapest thing you can do is turn on only the languages somebody in the room needs.
Where the money goes: to OpenAI or Google, on the account whose key you pasted in. Lithos never sees it. Both providers let you set a monthly spending limit on the key's account — do that too; it is the one guard that works even if the laptop is stolen.
What opens and closes a stream
There are three places streams live, and they behave differently.
The main service
▶ Start translating (or the hall’s named Start button) opens one stream for every enabled language on the hall’s menu — at once, whether or not anyone is listening yet. ■ Stop closes them all. Switching a language off while running closes its stream immediately; switching one on opens it. Nothing else touches them.
Why not open on demand? Because the first Spanish listener would otherwise wait several seconds for a connection while the speaker is already talking, and the sentence they came for would be lost. A service is the case where you know the languages in advance; the groups below are the case where you don't.
Classes and groups you set up
A class bills the same way whoever starts it — the operator pressing Start on the group's row, or the teacher tapping Go live on the presenter page. Either way it opens streams only for the languages phones or assigned room speakers in the class need: a class offered in four languages with phones on two of them is two streams, and when the last listener leaves and no room speaker needs the language, its stream closes after a fifteen-second grace — long enough for a language switch or a WiFi blip not to close and reopen a billed connection. A class with no phones or speaker demand costs nothing while it waits. An assigned room speaker opens its language even with no phones listening.
And it stops the same way: the teacher's Stop on the presenter page and the operator's Stop on the group's row both end the class, whoever started it. The guards below catch the day nobody presses either. The groups guide spells this out.
Private groups
The same on-demand rule, plus their own caps: how many groups can exist, how many streams they may share in total, how long one may sit empty, and how long one may live at all. Those caps are the entire cost story for attendee-created groups — the private groups guide works them through in dollars.
And one that bills from boot
Server installs have an LT_AUTOSTART=1 option
that opens the main service's streams the moment the box boots. It exists for
a box that only ever runs during a service and is powered off after. Leave it
unset on anything that stays on.
What a Sunday costs
Set the hall’s Auto-stop after above 75 minutes first. Take a 75-minute service and the rates above. Multiply languages by minutes by the rate:
- One language, 75 minutes — 75 stream-minutes. About $2.55 on OpenAI, $2.80 on Gemini.
- Three languages, 75 minutes — 225 stream-minutes. About $7.65 on OpenAI, $8.35 on Gemini. Whether three people or three hundred are listening.
- Add a 50-minute class offered in three languages, where phones actually pick two — 100 stream-minutes. About $3.40 more, so the whole morning lands around $11–12. (The third language costs nothing until someone chooses it.)
- Add a private group — two people talking through one language for 20 minutes is 20 stream-minutes, under a dollar.
For a room that meets weekly, that is roughly $45–55 a month for a three-language service and a class. The same three languages for a forgotten engine running from Sunday to Tuesday would be about $300 — which is what the guards are for.
Every stream is billed, including duplicates: a language on in the main service and being listened to in a class is two streams. That is correct — they are translating two different rooms.
The cost meter
The operator page keeps a running estimate under the Start button: est. $ total, with the main service's share in brackets, and each class's own figure on its row further down. It adds up every five seconds, counting each live stream at its provider's rate, and it keeps counting from the moment the app was opened until you close it — so at the end of a morning it reads the whole morning, classes included.
Three things to know about what it says:
- It is an estimate, not the invoice. It counts a stream only while it is fully live — the seconds spent connecting or reconnecting are not counted — and it uses the rates you have set, not what the provider's billing page later says. For OpenAI's flat rate the two agree closely; for Gemini's per-token pricing expect the bill to differ a little either way.
- It uses the $/min rates in Service settings. Each provider's row has a rate box at the right; the defaults are the published figures above. If your account has a different rate (a discount, a different model), put yours in — the box feeds the meter and nothing else.
- A rate of 0 makes it blind. If a provider's rate is zero the meter says so — rate not set for gemini (meter undercounts) — rather than showing a reassuring $0.00 over a live service. Older installs that saved a zero for Gemini pick up the published estimate automatically on the next start.
When a guard stops something on its own, the same line says why — ⏹ the main service auto-stopped (idle 20 min) — for a quarter of an hour afterwards, so a stopped engine does not look like a crash.
The guards against a runaway bill
The expensive mistake is never the service. It is the engine somebody
forgot to stop. Three guards, all on by default, all in Service
settings on the operator page (or LT_IDLE_STOP_MIN /
LT_MAX_SESSION_MIN on a server):
- Idle auto-stop (default 20 minutes). If no sound has reached the engine for this long, it stops — the main service and each class separately. This catches the engine left running after everyone went home. It listens for sound, not for listeners, so a service that is all projector and no phones is never cut off. It also means it does not catch a presenter phone left live on a table in a noisy hall — that is what the next one is for.
- Per-room cap. New rooms, including a fresh hall, get 60 minutes under Rooms → Edit rooms → Edit → Auto-stop after. Raise it before a longer meeting: a 75-minute service needs more than the default hour. Existing saved caps are kept.
- Service-wide max (default 90 minutes) is the fallback when a room's cap is 0. Check the room itself first; changing this fallback does not extend a room with its own explicit 60-minute cap.
And for private groups, the four caps described in the private groups guide: the number of groups, the total streams they may share, idle minutes, and lifetime.
One more that costs nothing to set: a spending limit on the provider account. OpenAI and Google both offer a monthly cap on the key's project. It is the only guard that still works if the laptop walks off with the key on it.
The checklist
- Set a monthly limit on the provider account. Once, when you make the key.
- Turn on only the languages somebody needs. Each ticked language is a stream for the whole service. Turn one off the week nobody needs it; turn it back on in two taps.
- Leave the auto-stop guards on and set max to your longest normal meeting. Set each class's Auto-stop after to its length.
- Start when the speaker starts, not when you arrive. Forty minutes of prelude with three languages open is a dollar and a half of nothing.
- Stop when it's over. ■ Stop on the operator page for the main service; for a class, the teacher's Stop or the row's Stop — either ends it. The guards are for the day you forget; they are not the plan.
- Glance at the meter before you close the lid. If it reads what you expected for the morning, you're done. If it doesn't, something is still running — the sessions list under it says what.
- If attendees may create groups, keep the langs cap and ttl at numbers you'd be comfortable paying for in the worst case.
Paying nothing per minute
Lithos can also run its own open-weight translation stack instead of a provider — a language's provider is set to Local stack and Lithos talks to a box you run. Nothing is billed per minute. Honest trade-offs:
- It needs a GPU machine on the LAN (or a rented one for testing),
which is a real up-front cost and some setup — the recipe lives in the
project's
scripts/aws-stack. - It waits for a pause and then translates the utterance, so output lands a couple of seconds after the speaker stops rather than while they talk; the quality is good, not provider-grade.
- Languages can be mixed: Spanish on the local stack and Khmer on Gemini, say. Only the provider languages bill.
For a room that translates every week into several languages, the maths can favour the box within a year or two. For a room that needs one language on Sundays, the provider is cheaper by a mile and needs no one to run it.
When something's wrong
The meter says $0.00 but the service is live
My bill is higher than the meter said
The engine ran all night
It stopped by itself in the middle of the service
Does turning a language off mid-service save money?
Do listeners cost anything? What about the projector?
Does a class cost extra if the main service is already on?
Where do I set the rate my account actually pays?
Still unsure what something cost? Write to support@lithos.community with what the meter read and the provider's usage page for the same day, and we'll reconcile the two with you.