Skip to main content
Updated Aug 18, 2026

Prepare Spoken Text

Use this action when you are about to speak text that was written to be read, and want it to sound like something a person would actually say. It returns text only — it produces no audio.

Best for

  • Preparing an agent or LLM reply before speaking it
  • Speaking a template or a rich-text field that contains formatting
  • Any step whose text is headed for Synthesize speech

This is not the same as removing the formatting. A table has no spoken form, so stripping the markup does not give you speakable text — it gives you word soup, reading the cells out in a row or dropping the answer altogether. This action asks a small, inexpensive model to say the same thing the way a person would, while your original text stays untouched for the transcript.

Use something else when

You wantUse
The audio itselfSynthesize speech — run this action first, then that one
New content, not a rewrite of text you already haveGenerate LLM response — it takes your own prompt and model

Main fields

FieldWhat it does
MarkdownThe written text to rewrite for speech, at most 8000 characters. Usually the reply from an earlier step, such as step(0).choices[0].message.content
PurposeOptional label for what this step is for, shown in the logs

What later steps can use

ValueWhat it is
step(N).textThe spoken form. Feed it straight into Synthesize speech's Text field
step(N).modelThe model that produced the rewrite

Limits

LimitValue
Input length8000 characters
Speech requests60 per minute, per company

The rewrite is deliberately short, so it always fits inside Synthesize speech's 4096-character limit — you never need to trim it in between.

The 60-per-minute ceiling is shared with voice mode in the app and with Synthesize speech, so a prepare-then-speak pair costs two of those requests per run.

Cost

This step counts toward your plan's AI token usage, not your audio usage. It runs on a small, inexpensive model chosen for you — you cannot pick the model, because the job is a mechanical rephrase rather than reasoning, and it should not cost reasoning prices.

When it fails

CodeWhat happened
spoken_text_too_longThe input is over 8000 characters. Shorten it or split it across steps

Voice mode in the app quietly falls back to plain text when this rewrite fails, but a workflow has no such fallback: a failure here fails the step. If you want the same graceful degradation, gate the synthesis step on step_ok(N) and pass the original text through on the other branch.