CommunityProgramación y desarrollogithub.com

tas

Convierte texto en audio y transcribe audio/video a texto y subtítulos usando la API de Speakee. Esta habilidad realiza tanto síntesis de voz (TTS: hablar, leer en voz alta, narración, audio a partir de texto) como reconocimiento de voz (STT: transcribir audio, generar subtítulos SRT/WebVTT, transcripción a partir de una grabación).

¿Qué es tas?

Esta habilidad, llamada 'tas', proporciona capacidades completas de síntesis de voz (TTS) y reconocimiento de voz (STT) utilizando un único script de Python. A diferencia de otras soluciones que requieren instalar modelos locales como Whisper o PyTorch, tas opera exclusivamente a través de la API de Speakee, lo que elimina la necesidad de descargas pesadas o dependencias complejas. Para TTS, ofrece más de 40 idiomas y 100 voces, soporte para voces personalizadas, modo de conversación multi-voz y verificación automática de calidad de audio. Para STT, puede transcribir archivos de audio y video a texto, generar subtítulos en formato SRT y WebVTT, y maneja grabaciones largas mediante fragmentación automática. La habilidad está diseñada para ser utilizada en plataformas como Claude Code, OpenCode y mediante la CLI skills, y su script integrado garantiza que nunca se necesite instalar paquetes adicionales como faster-whisper o torch. Incluye reglas estrictas para evitar configuraciones incorrectas, como la verificación previa de idiomas y voces, y proporciona códigos de salida detallados para facilitar la depuración.

Compatible con✓Claude Code~Codex CLI~Cursor✓OpenCode
npx skills add https://github.com/nayem-48ai/TAS/tree/HEAD/skills/tas

Installed? Explore more Programación y desarrollo skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

TAS — Texto y Voz, en Ambos Sentidos (API Speakee)

Un solo script hace ambas direcciones:

  • Texto → Voz (TTS): 40+ idiomas, 100+ voces, UID de voz personalizada, fragmentación de texto largo, modo de conversación multi-voz, unión con ffmpeg y verificación de calidad de audio.
  • Audio → Texto (STT): transcribe cualquier archivo de audio/video a texto, marcas de tiempo de palabras y subtítulos SRT/WebVTT, con fragmentación automática para grabaciones largas.

Todo lo realiza el script incluido — nunca lo reimplementes en línea y NUNCA instales nada (ni whisper, ni torch, ni faster-whisper, ni pip):

<directorio base de la skill>/scripts/tas.py

Ubicaciones típicas de instalación: ~/.config/opencode/skills/tas/scripts/tas.py (opencode), ~/.claude/skills/tas/scripts/tas.py (Claude Code), y ~/.agents/skills/tas/scripts/tas.py (la CLI skills, npx skills add). La habilidad se llama tas — cárgala con el nombre tas, nunca tts.

Reglas no negociables (aplican a CADA solicitud)

  1. Usa el script incluido. Sin fragmentos ad-hoc de curl/python para TTS o STT.
  2. NUNCA instales nada. No ejecutes pip install faster-whisper, pip install whisper, pip install torch, ni descargues ningún modelo. El script realiza STT completamente a través de la API Speakee con la biblioteca estándar de Python — sin modelo local, sin descarga local, sin pip.
  3. Verifica antes de entregar. tts y conversation ejecutan la verificación de audio automáticamente; un QA: FALLÓ debe corregirse, nunca enviarse.
  4. Informa el resultado: ruta final, duración, tamaño y estado de QA (TTS); ruta final del SRT/VTT/texto y número de subtítulos (STT).
  5. Siempre haz la verificación previa. El idioma, el modelo y la voz se validan antes de cualquier solicitud; nunca envíes una voz adivinada.
  6. Mantén la caché activada a menos que el usuario indique lo contrario. Hace que las re-ejecuciones sean rápidas y reanuda conversaciones fallidas.
  7. Nunca adivines un nombre de voz. Resuélvelo con voices / suggest, o pasa el UUID.
  8. Respeta la API gratuita: por defecto --workers 4; redúcelo si recibes HTTP 429.
  9. Deja que el script normalice el texto. Markdown, URLs, HTML y emojis se eliminan por defecto; usa --raw solo cuando el usuario quiera texto literal.
  10. Nunca dividas texto largo de antemano. El script fragmenta por límites de oraciones y fusiona automáticamente.
  11. Siempre pasa -l <código> para STT cuando el idioma sea conocido. La detección automática no es confiable (Whisper confunde bengalí/guyaratí); -l bn es obligatorio para un bengalí correcto.
  12. Usa --json cuando otra herramienta o script consuma el resultado.

Comandos

ComandoPropósito
ttssintetizar un bloque de texto (TTS)
uidsintetizar con un UID de voz personalizado (language=uid)
conversationdiálogo multi-hablante → un MP3 unido y verificado
stttranscribir un archivo de audio/video → texto (+ SRT/VTT opcional)
transcribealias para stt
subtitletranscribir y escribir un SRT
verifyejecutar verificación de calidad de audio en cualquier archivo
voices -l <código>listar voces para un idioma
suggest -l <código>listar voces con recomendaciones marcadas
presetslistar preajustes de voz integrados
languageslistar idiomas compatibles
modelslistar modelos (sonic-3.5 por defecto)
cache-cleareliminar la caché de síntesis

Flujo de trabajo A — Texto a Voz (TTS)

Paso 1 — Alcance

Identifica: idioma (o deja que la detección automática funcione), tono (noticias / historia / asistente / audiolibro), un solo hablante o diálogo, ruta de salida deseada, y si se necesitan subtítulos (--srt) o metadatos (--title/--artist).

Paso 2 — Elige idioma y voz

python3 "$S" languages                 # 43 códigos
python3 "$S" suggest -l bn             # voces recomendadas primero
python3 "$S" presets                   # conjuntos de voces seleccionadas

Si el usuario tiene un UID de voz personalizado, usa el modo uid. De lo contrario, prefiere un preajuste o una voz recomendada sobre la predeterminada.

Paso 3 — Sintetiza

Un solo hablante:

python3 "$S" tts "Tu texto aquí" -l es -o salida.mp3
python3 "$S" tts --text-file articulo.md -l en --preset news -o articulo.mp3

Diálogo:

python3 "$S" conversation dialogo.txt -l es \
  --map "Humano=Nayem,AI=Pooja - Asistente Cotidiano" \
  --loudnorm --srt dialogo.srt -o dialogo.mp3

Usa --dry-run primero para ejecuciones largas o costosas.

Paso 4 — Verifica

La verificación de calidad se ejecuta automáticamente. Para volver a verificar cualquier archivo:

python3 "$S" verify salida.mp3

Comprueba: decodificado, duración, sonoridad integrada (ebur128), pico verdadero/saturación y silencio inicial/final/interno. El código de salida 5 significa FALLO.

Paso 5 — Entrega

Informa:

salida.mp3 — 2.8s, 0.04 MB, QA PASÓ (-18.9 LUFS, pico -4.2 dBFS)

No pegues el JSON sin procesar a menos que te lo pidan.

Paso 6 — Reutilización

Las re-ejecuciones usan la caché (~/.cache/speakee-tas). Usa --force para regenerar, cache-clear para borrar.


Flujo de trabajo B — Voz a Texto (STT)

Usa esto cuando el usuario tenga un archivo de audio o video y quiera una transcripción, subtítulos, o un SRT. No instales Whisper — el script incluido llama al endpoint /api/stt de Speakee directamente.

Paso 1 — Confirma el archivo

python3 "$S" verify /ruta/al/audio.mp3   # opcional: confirma que se decodifica
ls -la /ruta/al/audio.mp3

Paso 2 — Elige el idioma

# Detección automática (no confiable — Whisper confunde bengalí/guyaratí):
python3 "$S" stt audio.mp3

# SIEMPRE prefiere el idioma explícito cuando se conozca:
python3 "$S" stt audio.mp3 -l bn

Importante: pasa -l <código> para el script correcto. Para bengalí usa -l bn; la detección automática devuelve guyaratí para audio bengalí. Las advertencias de baja confianza (< 0.5) significan que el idioma detectado probablemente es incorrecto.

Paso 3 — Transcribe + crea subtítulos

# Escribe SRT + VTT junto a la entrada, y guarda la transcripción:
python3 "$S" stt audio.mp3 -l bn \
  --srt --srt-path audio.srt --vtt --vtt-path audio.vtt \
  -o audio.txt

# Abreviatura: solo el SRT (comando subtitle):
python3 "$S" subtitle audio.mp3 -l bn -o audio.srt

# JSON legible por máquina (para otras herramientas):
python3 "$S" stt audio.mp3 -l bn --json -o resultado.json

# Grabaciones largas: fragmentación automática ~120s; fuerza fragmentos más pequeños o una sola subida:
python3 "$S" stt audio.mp3 -l bn --chunk-seconds 60
python3 "$S" stt audio.mp3 -l bn --no-chunk     # solo si es < ~3.5 MB

Paso 4 — Entrega

Informa:

audio.srt — 111 subtítulos (8.05 min, Bengají)
audio.txt — transcripción guardada

Indicadores de STT: --srt, --srt-path, --vtt, --vtt-path, --no-word-timestamps (más rápido, sincronización estimada), --chunk-seconds, --no-chunk, --workers, --max-chars, --max-line-seconds.


Modo de conversación (TTS)

Formato del script, una línea por turno:

El espectáculo comienza.                <- sin prefijo "Narrador:" -> voz de narrador
Humano: Hermano, ¿cuánto es 2+2?
AI: Su pregunta ha sido recibida.
  • Las etiquetas de hablante son tokens cortos antes de : (≤16 caracteres, sin espacios).
  • Las líneas sin prefijo Hablante: son del narrador/comentarista. El narrador se asigna con la clave especial narrator, por lo que una tercera voz distinta es --map "narrator=VozC,Humano=VozA,AI=VozB".
  • --map "hablante=voz" acepta un nombre de voz (difuso) o UUID.
  • Sin --map, se asignan voces distintas automáticamente.
  • Las voces deben ser distintas. Si dos hablantes se resuelven a la misma voz, el script imprime una ADVERTENCIA; asigna cada hablante a una voz diferente. Siempre dale al AI y al humano voces diferentes (y una tercera voz para el narrador cuando haya una línea de comentarista/narrador).
  • --silence 0.35 pausa entre turnos; --loudnorm normaliza a −16 LUFS.
  • --manifest ARCHIVO registra cada segmento; --srt ARCHIVO escribe subtítulos.
  • --no-stitch mantiene archivos de segmento individuales en lugar de un solo MP3.
  • --workers controla las solicitudes paralelas (por defecto 4).

Opciones (más usadas)

IndicadorPor defectoSignificado
-l, --languageauto-detectcódigo ISO o uid
-m, --modelsonic-3.5sonic-3.5 / sonic-3 / sonic-turbo / sonic-2
-v, --voice_idpreajuste/pordefectonombre de voz o UUID
-o, --outautoarchivo / directorio de salida (--no-stitch)
-s, --speed1.20.5–2.0
--preset—news, story, assistant, audiobook
--chunk-limit1200caracteres por solicitud
--retries4reintentos con retroceso exponencial
--workers4solicitudes paralelas
--no-cache / --forcedesactivadoomitir caché / regenerar
--no-verifydesactivadosaltar verificación automática de QA (no recomendado)
--dry-rundesactivadoimprimir el plan, no hacer solicitudes
--jsondesactivadosalida legible por máquina

Opciones de STT

IndicadorPor defectoSignificado
-l, --languageautocódigo ISO (usa bn para bengalí)
--chunk-seconds120segundos de audio por subida
--no-chunkdesactivadouna solicitud (máx. ~3.5 MB)
--workers2subidas paralelas
--srt / --srt-pathdesactivadoescribir un SRT
--vtt / --vtt-pathdesactivadoescribir un WebVTT
--no-word-timestampsdesactivadomás rápido; la sincronización de subtítulos es estimada
--max-chars42caracteres máximos por subtítulo
--max-line-seconds6.0segundos máximos por subtítulo
--timeout / --retries300 / 3tiempo de espera / reintentos por solicitud

Caché y seguridad

  • Los segmentos se almacenan en caché por hash de contenido en ~/.cache/speakee-tas; las re-ejecuciones y reintentos se reanudan automáticamente.
  • Los archivos temporales de concatenación siempre se eliminan; los directorios temporales de --no-cache se limpian al salir.
  • Las respuestas se validan (Content-Type: audio/* + cabecera MP3), por lo que el JSON de error nunca se guarda como audio.
  • HTTP 429 respeta Retry-After; 5xx/timeouts reintentan con retroceso; 4xx permanentes fallan inmediatamente con el mensaje del servidor.
  • STT se ejecuta completamente dentro del proceso con la biblioteca estándar de Python — sin instalación de red, sin descarga de modelos, sin pip.
  • Códigos de salida: 0 ok, 1 error, 2 uso, 3 validación, 4 red/API, 5 verificación de audio fallida.

Archivos de referencia

  • references/api.md — endpoints, carga útil, validación, reintentos, caché.
  • references/voices.md — catálogo de idiomas/voces, modo UID, preajustes.
  • references/troubleshooting.md — síntomas, soluciones, modos de fallo comunes.
  • assets/presets.json — preajustes de voz seleccionados (edítalo para añadir los tuyos).

Skills relacionados