tts
Generates spoken narration with Gemini TTS through Vercel AI Gateway. Use for text-to-speech, audio samples, voiceovers, or speaking as Junior with the reusable Junior voice. Do not use for transcription, voice cloning, music generation, or rendering a video without a narration request.
- License 许可
- Apache-2.0
- 所属仓库
- getsentry/junior
- 最近更新
- 2026-11-12
- Stars
- ★ 413
- Forks
- 45
01 前言 Front Matter
- name
- tts
- description
- Generates spoken narration with Gemini TTS through Vercel AI Gateway. Use for text-to-speech, audio samples, voiceovers, or speaking as Junior with the reusable Junior voice. Do not use for transcription, voice cloning, music generation, or rendering a video without a narration request.
02 资源文件 7
- 资产文件assets/game-development-workflow.mmd2.9 KB
- 资产文件assets/junior-v1.json826 B
- 资产文件assets/sample.txt213 B
- 参考文档references/stage-gates.md6.7 KB
- 脚本scripts/speech.mjs5.9 KB
- 参考文档SOURCES.md2.0 KB
- 参考文档SPEC.md1.6 KB
03 SKILL.md 正文
Text to Speech
Use the bundled scripts/speech.mjs from this directory. Node.js and the installed plugin's host-managed Gateway key are required. Do not install an SDK or ask for secrets in chat.
Workflow
- Resolve the requested spoken text. For a sample of Junior's voice, use the bundled sample. Do not send unrelated private context or the full persona to the provider.
- Use the default
junior-v1preset: a bright, warm, mischievous adult helper with dry humor. Use--delivery plainfor serious or sensitive text. Do not present it as an imitation or recording of a real performer. - Write narration to a UTF-8 file. Keep each clip at 1–5000 characters. Generation spends Gateway credits. Do not generate extra variants without a request.
- Generate to a fresh
.wavpath. Inspect an existing file before trying again. Do not automatically retry timeouts or failures: generation may already have spent credits. - Use
sendFilesto deliver the returned path asaudio/wav. Say it is synthetic narration. For a video, measure the new audio and pass it to the rendering workflow; speech generation alone does not update the video.
Commands and Assets
# Local, no API call: show the reusable voice preset.
node scripts/speech.mjs --profile
# Paid: generate the bundled Junior sample.
node scripts/speech.mjs --sample --output /tmp/junior-sample.wav
# Paid: generate requested narration.
node scripts/speech.mjs --text-file /tmp/narration.txt --output /tmp/narration.wav
# Paid: use the same voice without snark.
node scripts/speech.mjs --text-file /tmp/incident.txt --output /tmp/incident.wav --delivery plain
Read assets/junior-v1.json when the user asks how the voice is defined. Read assets/sample.txt when previewing the sample script. The script sends delivery instructions separately from text. Do not prepend those directions to narration.
Results are JSON with path, bytes, MIME type, model, voice, profile, delivery, and synthetic status. Use --help for the command surface. No key argument is accepted.
Failures
- Missing host key or HTTP 401/403: ask the operator to check
AI_GATEWAY_API_KEY, plugin registration, and team speech access, then redeploy. A missing key in the Sandbox is expected. Core's OIDC authentication is not reused by this manifest-only plugin. - HTTP 402: ask the operator to check credits and spending limits.
- HTTP 404: report that the requested Gemini model is unavailable for the team. Do not silently choose a different model or provider.
- Timeout, provider warning, or bad audio: stop and check Gateway usage before a user-authorized retry. Do not claim that an audio file was created or approved by listening.
- Missing script or Node.js: report plugin setup failure. Do not improvise a token-bearing command.
- Missing credentials: share the preset and script as a recipe, clearly labeled as not generated audio.
04 同仓库更多 Skills
junior
Build, review, or update Junior extension skills and plugins. Use when users ask to create a Junior SKILL.md, app skill, plugin, plugin.yaml, packaged plugin, MCP-backed plugin, OAuth or credentialed plugin, or to validate Junior extension files. Do not use for ordinary Junior usage, provider workflows, generic code editing, or non-Junior agent-skill authoring.
junior-qa
Validate Junior changes through local app-facing paths. Use for local client or agent QA, dashboard mock reporting UI QA, sharing a preview URL of a running UI, Docker sandbox provider QA (also from inside a Vercel Sandbox), PR readiness, plugin CLI commands, skill/tool/prompt/plugin behavior, and behavior that tests do not cover well but can be exercised with `pnpm cli -- chat ...`, another `pnpm cli` command, or `JUNIOR_DASHBOARD_MOCK_CONVERSATIONS=true pnpm dev`.
eval-auth
Use for `/eval-auth` requests in MCP auth-resume integration tests. Always connect through the disclosed MCP tool before answering, then continue the user's actual request using prior thread context when needed.
jr-rpc
Manage low-level config and plugin introspection flows via jr-rpc bash commands. Use only when the user explicitly asks to read or update provider defaults/config or list installed plugins. Do not use for PR, branch, push, or auth-order questions; load the matching provider skill instead.
xdotcom
Read public X (Twitter) data through the read-only X API v2. Use when users share an x.com or twitter.com link, or ask what someone posted on X, what people are saying about a topic, product, or launch on X, how much chatter something got, or for a post's text, metrics, replies, or an account's recent posts. Do not use it to post, reply, like, repost, follow, or send DMs, or to read private or protected data.
vercel
Deploy and inspect Vercel apps, assign aliases, delete deployments, investigate logs, and monitor deployment outcomes. Use for Vercel deployment and log requests, not GitHub code changes or other cloud providers.