nayem-48ai/tas

Converta texto em áudio falado E transcreva áudio/vídeo de volta para texto e legendas usando a API Speakee. Esta habilidade faz tanto texto-para-fala (TTS: falar, ler em voz alta, narração, áudio a partir de texto) quanto fala-para-texto (STT: transcrever áudio, gerar legendas SRT/WebVTT, transcrição a partir de uma gravação).

O que é tas?

Esta habilidade, TAS (Text & Speech), permite converter texto em áudio falado e transcrever áudio ou vídeo para texto e legendas, usando exclusivamente a API Speakee. Ela suporta mais de 40 idiomas, mais de 100 vozes, modo de conversa com múltiplas vozes, e geração de legendas SRT/WebVTT. A habilidade é fornecida como um script Python único (tas.py) que utiliza apenas a biblioteca padrão do Python, eliminando a necessidade de instalar qualquer dependência, como whisper, torch ou pip. O script lida com TTS (incluindo chunking automático para textos longos) e STT (com chunking automático para gravações longas), além de incluir verificação de qualidade de áudio. É suportada em plataformas como OpenCode, Claude Code e a CLI `skills`. As regras de uso são rigorosas: nunca instalar pacotes adicionais, sempre validar idioma e voz antes de qualquer requisição, e nunca entregar um resultado não verificado.

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

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

TAS — Texto e Fala, em Ambos os Sentidos (API Speakee)

Um único script faz ambos os sentidos:

  • Texto → Fala (TTS): Mais de 40 idiomas, mais de 100 vozes, UID de voz personalizado, chunking de texto longo, modo de conversa com múltiplas vozes, junção com ffmpeg, verificação de qualidade de áudio.
  • Áudio → Texto (STT): Transcreva qualquer arquivo de áudio/vídeo para texto, com timestamps de palavras e legendas SRT/WebVTT, e chunking automático para gravações longas.

Tudo é feito pelo script incluído — nunca o reimplemente inline e NUNCA instale nada (sem whisper, sem torch, sem faster-whisper, sem pip):

<diretório base da skill>/scripts/tas.py

Locais típicos de instalação: ~/.config/opencode/skills/tas/scripts/tas.py (opencode), ~/.claude/skills/tas/scripts/tas.py (Claude Code) e ~/.agents/skills/tas/scripts/tas.py (a CLI skills, npx skills add). A habilidade se chama tas — carregue-a com o nome tas, nunca tts.

Regras inegociáveis (aplicam-se a TODA requisição)

  1. Use o script incluído. Sem trechos curl/python ad-hoc para TTS ou STT.
  2. NUNCA instale nada. Não execute pip install faster-whisper, pip install whisper, pip install torch ou baixe qualquer modelo. O script faz STT inteiramente através da API Speakee com a biblioteca padrão do Python — sem modelo local, sem download local, sem pip.
  3. Verifique antes de entregar. tts e conversation executam verificação de qualidade de áudio automaticamente; um QA: FAIL deve ser corrigido, nunca enviado.
  4. Relate o resultado: caminho final, duração, tamanho e status QA (TTS); caminho final do SRT/VTT/texto e contagem de cues (STT).
  5. Sempre faça o pré-voo. Idioma, modelo e voz são validados antes de qualquer requisição; nunca envie uma voz adivinhada.
  6. Mantenha o cache ativado a menos que o usuário solicite o contrário. Isso torna as reexecuções rápidas e retoma conversas com falha.
  7. Nunca adivinhe um nome de voz. Resolva com voices / suggest, ou passe o UUID.
  8. Respeite a API gratuita: padrão --workers 4; reduza-o em caso de HTTP 429.
  9. Deixe o script normalizar o texto. Markdown, URLs, HTML e emojis são removidos por padrão; use --raw apenas quando o usuário quiser texto literal.
  10. Nunca pré-divida texto longo. O script divide nos limites de sentenças e mescla automaticamente.
  11. Sempre passe -l <código> para STT quando o idioma for conhecido. A detecção automática é não confiável (Whisper confunde bengali/gujarati); -l bn é obrigatório para bengali correto.
  12. Use --json quando outra ferramenta ou script consumir o resultado.

Comandos

ComandoPropósito
ttsSintetizar um bloco de texto (TTS)
uidSintetizar com um UID de voz personalizado (language=uid)
conversationDiálogo com múltiplos falantes → um MP3 costurado e verificado
sttTranscrever um arquivo de áudio/vídeo → texto (+ SRT/VTT opcional)
transcribeAlias para stt
subtitleTranscrever e escrever um SRT
verifyExecutar verificação de qualidade de áudio em qualquer arquivo
voices -l <código>Listar vozes para um idioma
suggest -l <código>Listar vozes com recomendações marcadas
presetsListar predefinições de voz
languagesListar idiomas suportados
modelsListar modelos (sonic-3.5 padrão)
cache-clearExcluir o cache de síntese

Fluxo de Trabalho A — Texto para Fala (TTS)

Passo 1 — Escopo

Identifique: idioma (ou deixe a detecção automática funcionar), tom (notícias / história / assistente / audiobook), um ou múltiplos falantes, caminho de saída desejado e se legendas (--srt) ou metadados (--title/--artist) são necessários.

Passo 2 — Escolha idioma e voz

python3 "$S" languages                 # 43 códigos
python3 "$S" suggest -l bn             # vozes recomendadas primeiro
python3 "$S" presets                   # conjuntos de vozes curados

Se o usuário tiver um UID de voz personalizado, use o modo uid. Caso contrário, prefira uma predefinição ou uma voz recomendada em vez da padrão.

Passo 3 — Sintetize

Falante único:

python3 "$S" tts "Seu texto" -l bn -o out.mp3
python3 "$S" tts --text-file artigo.md -l en --preset news -o artigo.mp3

Diálogo:

python3 "$S" conversation dialogo.txt -l bn \
  --map "Pessoa=Nayem,AI=Pooja - Assistente Diário" \
  --loudnorm --srt dialogo.srt -o dialogo.mp3

Use --dry-run primeiro para execuções longas ou caras.

Passo 4 — Verifique

A verificação de qualidade é executada automaticamente. Para reverificar qualquer arquivo:

python3 "$S" verify out.mp3

Verificações: decodificação, duração, sonoridade integrada (ebur128), pico real/clipping, e silêncio inicial/final/interno. Código de saída 5 significa FALHA.

Passo 5 — Entregue

Relate:

out.mp3 — 2.8s, 0.04 MB, QA PASS (-18.9 LUFS, pico -4.2 dBFS)

Não cole JSON bruto a menos que solicitado.

Passo 6 — Reutilize

Reexecuções usam o cache (~/.cache/speakee-tas). Use --force para regenerar, cache-clear para limpar.


Fluxo de Trabalho B — Fala para Texto (STT)

Use isso quando o usuário tiver um arquivo de áudio ou vídeo e quiser uma transcrição, legendas, legendas ocultas ou um SRT. Não instale Whisper — o script incluído chama o endpoint /api/stt da Speakee diretamente.

Passo 1 — Confirme o arquivo

python3 "$S" verify /caminho/para/audio.mp3   # opcional: confirma que decodifica
ls -la /caminho/para/audio.mp3

Passo 2 — Escolha o idioma

# Detecção automática (não confiável — Whisper confunde bengali/gujarati):
python3 "$S" stt audio.mp3

# SEMPRE prefira idioma explícito quando conhecido:
python3 "$S" stt audio.mp3 -l bn

Importante: passe -l <código> para a escrita correta. Para bengali use -l bn; a detecção automática retorna gujarati para áudio bengali. Avisos de baixa confiança (< 0.5) significam que o idioma detectado provavelmente está errado.

Passo 3 — Transcreva + crie legendas

# Escreva SRT + VTT próximo à entrada e salve a transcrição:
python3 "$S" stt audio.mp3 -l bn \
  --srt --srt-path audio.srt --vtt --vtt-path audio.vtt \
  -o audio.txt

# Atalho: apenas o SRT (comando subtitle):
python3 "$S" subtitle audio.mp3 -l bn -o audio.srt

# JSON legível por máquina (para outras ferramentas):
python3 "$S" stt audio.mp3 -l bn --json -o resultado.json

# Gravações longas: chunking automático ~120s; force chunks menores ou um upload:
python3 "$S" stt audio.mp3 -l bn --chunk-seconds 60
python3 "$S" stt audio.mp3 -l bn --no-chunk     # apenas se < ~3.5 MB

Passo 4 — Entregue

Relate:

audio.srt — 111 cues (8.05 min, bengali)
audio.txt — transcrição salva

Flags do STT: --srt, --srt-path, --vtt, --vtt-path, --no-word-timestamps (mais rápido, temporização estimada), --chunk-seconds, --no-chunk, --workers, --max-chars, --max-line-seconds.


Modo de conversa (TTS)

Formato do script, uma fala por linha:

O show começa.                <- sem prefixo "Falante:" -> voz do narrador
Pessoa: Mano, quanto é 2+2?
AI: Sua pergunta foi recebida.
  • Rótulos de falante são tokens curtos antes de : (≤16 caracteres, sem espaços).
  • Linhas sem prefixo Falante: são do narrador/comentarista. O narrador é mapeado com a chave especial narrator, então uma 3ª voz distinta é --map "narrator=VozC,Pessoa=VozA,AI=VozB".
  • --map "falante=voz" aceita um nome de voz (difuso) ou UUID.
  • Sem --map, vozes distintas são atribuídas automaticamente.
  • As vozes devem ser distintas. Se dois falantes resolverem para a mesma voz, o script imprime um WARNING; mapeie cada falante para uma voz diferente. Sempre dê ao AI e ao humano vozes diferentes (e uma 3ª voz para o narrador quando uma linha de comentarista/narrador estiver presente).
  • --silence 0.35 pausa entre falas; --loudnorm normaliza para −16 LUFS.
  • --manifest ARQUIVO registra cada segmento; --srt ARQUIVO escreve legendas.
  • --no-stitch mantém arquivos de segmento individuais em vez de um MP3.
  • --workers controla requisições paralelas (padrão 4).

Opções (mais usadas)

FlagPadrãoSignificado
-l, --languageauto-detectCódigo ISO ou uid
-m, --modelsonic-3.5sonic-3.5 / sonic-3 / sonic-turbo / sonic-2
-v, --voice_idpredefinição/padrãoNome da voz ou UUID
-o, --outautoArquivo/diretório de saída (--no-stitch)
-s, --speed1.20.5–2.0
--preset—news, story, assistant, audiobook
--chunk-limit1200Caracteres por requisição
--retries4Tentativas com backoff exponencial
--workers4Requisições paralelas
--no-cache / --forcedesligadoIgnorar cache / regenerar
--no-verifydesligadoPular verificação automática de qualidade (não recomendado)
--dry-rundesligadoImprimir o plano, não fazer requisições
--jsondesligadoSaída legível por máquina

Opções STT

FlagPadrãoSignificado
-l, --languageautoCódigo ISO (use bn para bengali)
--chunk-seconds120Segundos de áudio por upload
--no-chunkdesligadoUma requisição (máx ~3.5 MB)
--workers2Uploads paralelos
--srt / --srt-pathdesligadoEscrever um SRT
--vtt / --vtt-pathdesligadoEscrever um WebVTT
--no-word-timestampsdesligadoMais rápido; temporização de legenda é estimada
--max-chars42Máximo de caracteres por cue
--max-line-seconds6.0Máximo de segundos por cue
--timeout / --retries300 / 3Timeout / tentativas por requisição

Cache e segurança

  • Segmentos são armazenados em cache por hash de conteúdo em ~/.cache/speakee-tas; reexecuções e tentativas são retomadas automaticamente.
  • Arquivos temporários de concatenação são sempre removidos; diretórios temporários --no-cache são limpos na saída.
  • Respostas são validadas (Content-Type: audio/* + cabeçalho MP3), então JSON de erro nunca é salvo como áudio.
  • HTTP 429 respeita Retry-After; 5xx/timeouts tentam novamente com backoff; 4xx permanentes falham imediatamente com a mensagem do servidor.
  • STT é executado inteiramente em processo com a biblioteca padrão do Python — sem instalação de rede, sem download de modelo, sem pip.
  • Códigos de saída: 0 ok, 1 erro, 2 uso, 3 validação, 4 rede/API, 5 verificação de qualidade de áudio falhou.

Arquivos de referência

  • references/api.md — endpoints, payload, validação, tentativas, cache.
  • references/voices.md — catálogo de idiomas/vozes, modo UID, predefinições.
  • references/troubleshooting.md — sintomas, correções, modos de falha comuns.
  • assets/presets.json — predefinições de voz curadas (edite para adicionar as suas).

Habilidades Relacionadas