Kokoro-FastAPI is a Dockerized FastAPI service that turns text into speech using the Kokoro-82M model through an OpenAI-compatible API. It is used by developers and self-hosters who need multilingual, multi-speaker speech generation, captions, phonemes, or an optional web interface.
Borrowing it
Nothing to install: this file belongs to remsky/Kokoro-FastAPI. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/remsky/Kokoro-FastAPI/master/.claude/skills/adding-normalizer/SKILL.mdgit clone --depth 1 https://github.com/remsky/Kokoro-FastAPIWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/remsky/kokoro-fastapi/adding-normalizer)<a href="https://agentmods.dev/skills/remsky/kokoro-fastapi/adding-normalizer"><img src="https://agentmods.dev/badge/skills/remsky/kokoro-fastapi/adding-normalizer/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/remsky/kokoro-fastapi/adding-normalizer"><img src="https://agentmods.dev/badge/skills/remsky/kokoro-fastapi/adding-normalizer.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00044 | $0.00531 |
| Opus 5.5 | $0.00018 | $0.00212 |
| Sonnet 5.5 | $0.00009 | $0.00106 |
| Haiku 4.5 | $0.00004 | $0.00053 |
Grade A, and why
adding-normalizer scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured today.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
What it actually says
Read AGENTS.md and CONTRIBUTING.md first, house rules live there.
Adding a language normalizer
Text normalization (numbers, money, time, URLs, etc. spelled out before phonemization) is per language. Only English is implemented; other languages skip normalization and rely on the phonemizer.
Where things live
api/src/services/text_processing/normalization/:
base.py:Normalizer, the contract.pass_order()is the pass order,normalize()runs it. The language-neutral passes (quotes, CJK punctuation, whitespace) are implemented; every other pass is a hook that returns its input unchanged until overridden. Overridepass_order()if a language needs a different order.english.py:EnglishNormalizer, the reference implementation.english_data.py: the English tables, TLDs, units, symbol readings, currencies.__init__.py:LANGUAGES, the registry. Lang codes come fromlang_codeson each class.
Adding one
- Create
normalization/<language>.pywith aNormalizersubclass. Setlang_codesto the Kokoro pipeline codes it serves (pfor Portuguese,efor Spanish, etc.). Override the hooks you need,numbersfirst (money is spelled out there too); espeak already reads bare digits, so the value is in currency, time, and units.num2wordsis in the lock and covers cardinals for most languages. - Add an instance to
LANGUAGESin__init__.py. - Add
api/tests/test_normalizer_<language>.pywith aCASEStable of(input, expected)rows, mirroringtest_normalizer.py.test_normalizer_contract.pyruns the never-raises and idempotence properties on every registered language automatically.
Testing
- Keep regexes linear.
test_normalizer_redos.pyshows the flood inputs that have bitten before. uv run pytest api/tests/test_normalizer*.py, thenuv run --only-group lint ruff format .anduv run --only-group lint ruff check . --fixbefore staging.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- today Changed e454dc9f42ee
- 1mo ago First seen · 31 lines · 44 tokens per session scan A 6beab396ed67
adding-normalizer is a skill published in the GitHub repository remsky/Kokoro-FastAPI (5,614 stars, last pushed today), licensed Apache-2.0. It adds 44 tokens to every session and 531 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-08.
Other skills, from other repositories
datamodel-code-generator
Use this skill when the user wants Python data models, Pydantic models, dataclasses, TypedDicts, msgspec structs, or type-safe Python classes generated from OpenAPI, AsyncAPI, JSON Schema, GraphQL, JSON/YAML/CSV sample data, MCP tool schemas, Protocol Buffers, XML Schema, Apache Avro, or existing Python model objects.…
fastapi-expert
Expert-level FastAPI development for high-performance Python APIs with async support. Use when the user mentions Python, API, async, REST, OpenAPI, or Pydantic, or when the task involves FastAPI Features.
mastering-python-skill
Modern Python coaching covering language foundations through advanced production patterns. Use when asked to "write Python code", "explain Python concepts", "set up a Python project", "configure Poetry or PDM", "write pytest tests", "create a FastAPI endpoint", "run uvicorn server", "configure alembic migrations"…
docker_packaging
A set of rules and templates for packaging a Python MCP service in Docker. Docker packages an application and its dependencies into a repeatable container that can run on another machine.
validate-python-stack
Validate the Python Template repository or a project generated from it. Use before committing, publishing, deploying, or reviewing a stack to check catalog compilation, rendering, dependencies, formatting, tests, security workflows, skills, and representative runtime behavior.
asyncio
Python asyncio - Modern concurrent programming with async/await, event loops, tasks, coroutines, primitives, aiohttp, and FastAPI async patterns.