All skills
openai avatar

/speech

@33a75a7 official
by openaiopenai/skills28k stars
1,891

Use when the user asks for text-to-speech narration or voiceover, accessibility reads, audio prompts, or batch speech generation via the OpenAI Audio API; run the bundled CLI (`scripts/text_to_speech.py`) with built-in voices and require `OPENAI_API_KEY` for live calls. Custom voice creation is out of scope.

Use this Skill: https://skilld.dev/gh/openai/skills/speech

This session only. Nothing lands on disk.

referencescli.md

≈819 tokens on demand. Your agent reads this file only when SKILL.md points to it.

CLI reference (scripts/text_to_speech.py)

This file contains the "command catalog" for the bundled speech generation CLI. Keep SKILL.md as overview-first; put verbose CLI details here.

What this CLI does

  • speak: generate a single audio file
  • speak-batch: run many jobs from a JSONL file (one job per line)
  • list-voices: list supported voices

Real API calls require network access + OPENAI_API_KEY. --dry-run does not.

Quick start (works from any repo)

Set a stable path to the skill CLI (default CODEX_HOME is ~/.codex):

export CODEX_HOME="${CODEX_HOME:-$HOME/.codex}"
export TTS_GEN="$CODEX_HOME/skills/speech/scripts/text_to_speech.py"

Dry-run (no API call; no network required; does not require the openai package):

python "$TTS_GEN" speak --input "Test" --dry-run

Generate (requires OPENAI_API_KEY + network):

uv run --with openai python "$TTS_GEN" speak \
  --input "Today is a wonderful day to build something people love!" \
  --voice cedar \
  --instructions "Voice Affect: Warm and composed. Tone: upbeat and encouraging." \
  --response-format mp3 \
  --out speech.mp3

No uv installed? Use your active Python env:

python "$TTS_GEN" speak --input "Hello" --voice cedar --out speech.mp3

Guardrails (important)

  • Use python "$TTS_GEN" ... (or equivalent full path) for all TTS work.
  • Do not create one-off runners (e.g., gen_audio.py) unless the user explicitly asks.
  • Never modify scripts/text_to_speech.py. If something is missing, ask the user before doing anything else.

Defaults (unless overridden by flags)

  • Model: gpt-4o-mini-tts-2025-12-15
  • Voice: cedar
  • Response format: mp3
  • Speed: 1.0
  • Batch rpm cap: 50

Input limits

  • Input text must be <= 4096 characters per request.
  • For longer text, split into smaller chunks (manual or via batch JSONL).

Instructions compatibility

  • instructions are supported for GPT-4o mini TTS models.
  • tts-1 and tts-1-hd ignore instructions (the CLI will warn and drop them).

Common recipes

List voices:

python "$TTS_GEN" list-voices

Generate with explicit pacing:

python "$TTS_GEN" speak \
  --input "Welcome to the demo. We'll show how it works." \
  --instructions "Tone: friendly and confident. Pacing: steady and moderate." \
  --out demo.mp3

Batch generation (JSONL):

mkdir -p tmp/speech
cat > tmp/speech/jobs.jsonl << 'JSONL'
{"input":"Thank you for calling. Please hold.","voice":"cedar","response_format":"mp3","out":"hold.mp3"}
{"input":"For sales, press 1. For support, press 2.","voice":"marin","instructions":"Tone: clear and neutral. Pacing: slow.","response_format":"wav"}
JSONL

python "$TTS_GEN" speak-batch --input tmp/speech/jobs.jsonl --out-dir out --rpm 50

# Cleanup (recommended)
rm -f tmp/speech/jobs.jsonl

Notes:

  • Use --rpm to control rate limiting (default 50, max 50).
  • Per-job overrides are supported in JSONL (model, voice, response_format, speed, instructions, out).
  • Treat the JSONL file as temporary: write it under tmp/ and delete it after the run (do not commit it).

See also

  • API parameter quick reference: references/audio-api.md
  • Instruction patterns and examples: references/voice-directions.md

Source: SKILL.md on GitHub

1 warning16d5 checks · Risk SAFE
  • Gen Agent Trust Hub16d

    This skill enables text-to-speech generation using the OpenAI Audio API through a bundled Python script. It supports both single and batch audio synthesis tasks, requiring an API key for execution. The skill is documented with clear usage instructions and security considerations regarding environment configuration.

  • Socket16d

    No alerts

  • Snyk16d

    Risk: LOW · No issues

  • Runlayer7mo

    9/14 files flagged

  • ZeroLeaks5mo

    Score: 93/100 · 2 sections analyzed

Signed by skilld at 33a75a7. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 2 months ago.

Activeupdated 8 months ago
  • API
  • text-to-speech
  • openai
  • audio
  • accessibility
  • voiceover
  • tts
  • batch-processing

README badge

README badge for openai/skills/speech

Generates spoken audio from text using the OpenAI Audio API, supporting single clips or batch jobs via a bundled Python CLI. Includes built-in voices (cedar, marin) and instruction templates for narration, demo voiceovers, IVR prompts, and accessibility reads; requires OPENAI_API_KEY and limits input to 4096 characters per request.

Generated from the current SKILL.md.

What models and voices does this skill support?
The skill defaults to gpt-4o-mini-tts-2025-12-15 and built-in OpenAI voices (cedar and marin are the defaults). Custom voice creation is out of scope. Other models can be used but instructions are only supported on GPT-4o mini TTS, not tts-1 or tts-1-hd.
Do I need an API key to use this skill?
Yes. You must set OPENAI_API_KEY as an environment variable before making any live API call. The skill will guide you through creating a key in the OpenAI platform UI if needed.
What are the input limits and rate limits?
Text input is capped at 4096 characters per request (longer text must be split into chunks). The skill enforces a 50 requests/minute rate limit.
Can I generate speech in batch?
Yes. For multiple lines or files, the skill supports batch mode by writing a temporary JSONL file, running it once, then cleaning up. Single clips use the single-clip workflow.
Where are output files saved?
Final outputs are written to output/speech/ by default. Intermediate batch files are created in tmp/speech/ and deleted after processing.

Generated from the current SKILL.md. These answers refresh after source changes.