9Router Speech-to-Text Skill
Transcribe audio through one OpenAI-compatible endpoint that routes to Whisper, Groq, Gemini, Deepgram and more via 9Router.
The skill is docs-only: it calls the local router's /v1/audio/transcriptions via NINEROUTER_URL/KEY environment variables, with no dangerous operations or excessive file access; data flow (audio forwarded to configured providers) is stated. Deducted for: audio being relayed to multiple cloud vendors (OpenAI/Groq/Deepgram etc.) with only a passing privacy note, no data-flow diagram, rollback or failure-recovery guidance, and unverified publisher identity.
Docs are self-consistent: endpoint, parameter table, curl and Node examples, response shapes and per-provider quirks all align, and the repo's ping code (silent-WAV STT probe) corroborates the path exists. Deducted for: static-only review with no execution, no test coverage, no documented error codes or failure feedback, dependence on NINEROUTER availability, and undefined behavior on abnormal input.
Trigger conditions are explicit (transcribe audio, speech-to-text, subtitles); supported formats, language and response_format (including srt/vtt) boundaries are clear. Deducted for: no declared non-fit limits (model capabilities, file size), setup delegated to another SKILL.md, and unassessed reachability of the 9Router service and overseas STT providers from mainland China.
MIT license is explicit; the repo has versioning (0.5.69), release workflows and multilingual READMEs indicating active maintenance. Deducted for: the SKILL.md itself has no version/changelog, install notes link out to a separate skill file, and there is no FAQ, known-limitations section, or skill-level ownership/update path.
If NINEROUTER is deployed, the documented flow should complete transcription with /srt/vtt output and copy-pasteable examples. Deducted for: correctness unverifiable in a static review, and the skill is a thin wrapper over an OpenAI-compatible endpoint — equivalent results are achievable by curling the API directly, so marginal value is limited.
The skill's endpoint is corroborated by the repo's own STT probe code in ping.js, and README includes third-party tutorial videos. Deducted for: no committed test suite covering this skill path, no independently reproducible execution evidence (static cap of 5), and evidence is mostly author-authored.
- Audio files are uploaded to the configured cloud provider (OpenAI/Groq/Deepgram/AssemblyAI etc.); review each provider's data policy before sending sensitive recordings.
- The skill requires a running 9Router instance with NINEROUTER_URL/NINEROUTER_KEY set; setup instructions live in a separate SKILL.md that must be read first.
- Core function depends on overseas STT services whose mainland-China reachability is unassessed; a self-hosted provider may be needed.
- This is a static source-only review with no endpoint calls executed; output correctness is not independently verified.
What does this skill do, and when should you use it?
This skill teaches an agent how to call 9Router's /v1/audio/transcriptions endpoint to turn audio files into text or subtitles. The endpoint is OpenAI Whisper-compatible and routes to seven STT providers: OpenAI, Groq, Gemini, Deepgram, AssemblyAI, NVIDIA, and HuggingFace. It requires a running 9Router instance pointed to by the NINEROUTER_URL environment variable (plus NINEROUTER_KEY if auth is enabled). The skill is instructions only — no scripts — with all calls made via curl or any HTTP client.
Guides the agent to discover available models via GET /v1/models/stt and inspect per-model parameters via /v1/models/info; then POST multipart/form-data to /v1/audio/transcriptions with an audio file (mp3, wav, m4a, webm, ogg, flac), a model ID, and optional language (ISO-639-1), prompt, temperature, and response_format; supports , text, verbose_ (timestamped segments), srt, and vtt outputs. SKILL.md includes full curl and Node.js examples plus a provider-quirk table covering model naming differences (e.g., Deepgram token auth and AssemblyAI's async upload/polling are handled server-side).
- A developer already running 9Router locally who wants free or cheap models to transcribe meeting recordings
- A content creator batch-generating SRT/VTT subtitle files from podcast or video audio
- Users with multilingual material (e.g., Vietnamese, English) who want to pin the transcription language via the language field
- An agent workflow that converts uploaded voice messages to text before further processing
- A team switching transcription engines between Whisper and Deepgram by changing a single model ID, with no code changes
What are this skill's strengths and limitations?
- One OpenAI-compatible endpoint reaches STT models from 7 providers; switching engines is just a model field change
- Provider quirks are absorbed server-side (Gemini generateContent conversion, AssemblyAI async upload/polling)
- Direct SRT/VTT subtitle output with no post-processing
- Standard parameters (language, prompt, temperature) plus per-model parameter discovery via /v1/models/info
- Hard dependency on a running 9Router instance — unusable standalone
- Transcription rate limits and costs depend on your configured upstream providers; the skill doc does not cover this
- No automated tests or error-handling examples included
- SKILL.md does not state whether /v1/models/stt works across all deployment modes (Docker, Cloudflare Workers, etc.)
How do you install this skill?
The skill comes from the decolua/9router repository (MIT licensed), which bundles 9 skills; this one lives at skills/9router-stt/SKILL.md. Installing the collection generally means placing the skill folder in your Agent Skills directory, though the repo does not document a skill-specific install path. Prerequisite: install and run 9Router itself (npm install -g 9router, then run 9router; default port 20128), and set NINEROUTER_URL; add NINEROUTER_KEY if you enable auth in the dashboard.
How do you use this skill?
Discover models: curl $NINEROUTER_URL/v1/models/stt | jq '.data[].id'. Then transcribe: curl -X POST "$NINEROUTER_URL/v1/audio/transcriptions" -H "Authorization: Bearer $NINEROUTER_KEY" -F "model=openai/whisper-1" -F "[email protected]" -F "language=vi". For subtitles set response_format to srt or vtt; for timestamped detail use verbose_. You can also trigger it via an agent prompt like: "Transcribe audio.mp3 to text" or "Generate an SRT subtitle file from this recording."
How does this skill compare with similar options?
Compared to calling the OpenAI Whisper API directly, this skill's advantage is switching among Groq (fastest), Deepgram, and other providers through one endpoint — at the cost of running and maintaining a 9Router instance. If you only use one provider, the official API is simpler.