orange9angel/dula-voice

Dê voz a cada linha de um curta animado usando a chave Seed-Audio do Volcano Engine da pessoa, mantendo a consistência da voz de cada personagem. Também gera ambiente e efeitos sonoros. Use para vozes de personagens, áudio de diálogo, dublagem, ambiente e efeitos sonoros.

O que é dula-voice?

Esta skill permite gerar áudio profissional para curtas animados, utilizando a chave pessoal Seed-Audio do Volcano Engine para garantir que cada personagem mantenha uma voz consistente ao longo de toda a produção. É ideal para dublagem, efeitos sonoros e criação de ambiente sonoro, suportando plataformas como Claude Code, Cursor e Codex. O fluxo de trabalho envolve a configuração única da chave pela pessoa, design das vozes no arquivo `config/film.json`, e geração dos áudios via script Python. A skill também oferece recursos para ajuste de entrega (delivery), verificação de resultados e solução de problemas comuns, como chaves rejeitadas ou cortes no final das falas.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/orange9angel/dula-craft/tree/HEAD/skills/dula-voice

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

Vozes

Os caminhos dos scripts são relativos a este SKILL.md, e speak.py é executado a partir da pasta do filme. Esta etapa é opcional: gravações ou áudio de qualquer outra ferramenta também funcionam. Coloque-os em audio/voice/<id da linha>.wav ou defina file na linha.

Fale com a pessoa no idioma dela.

Configurar a chave (uma vez)

Os custos são debitados da conta da própria pessoa. Peça para ela executar isso no terminal dela:

python <pasta dula-start>/scripts/configure.py

No Claude Code, ela pode digitar ! python <caminho>/configure.py.

Nunca peça a chave na conversa, e nunca leia ou imprima ~/.dula-craft/config.env. Para verificar se uma chave está definida, use configure.py --status. Se alguém colar uma chave na conversa, diga para revogá-la no console e criar uma nova.

Projetar as vozes

Adicione voices no nível superior de config/film.json:

"voices": {
  "mochi": {"desc": "Um menino de cerca de oito anos, alegre e vivo, ritmo rápido, respiração leve"},
  "gran": {"desc": "Uma mulher de setenta anos, voz quente e levemente rouca, lenta, dicção muito clara"}
}

As linhas podem ter uma delivery:

{"id": "l03", "who": "mochi", "text": "S-sério?", "delivery": "Surpreso e encantado, um tremor na primeira palavra, subindo no final"}

Campos opcionais de voz: lang define o idioma (por padrão, o idioma da linha); speaker define um ID de voz oficial da Volcano; reference aponta para áudio de referência para o qual a pessoa tem direitos de uso.

Escreva desc e delivery em inglês ou no idioma das linhas. Descreva a própria voz: idade, tensão, respiração, ritmo e peso. Apenas "Feliz" não vai mudar uma voz. Não escreva "parece com determinado ator ou personagem" e não escolha vozes que imitem personagens conhecidos ou pessoas reais. Vozes também trazem riscos de semelhança e direitos autorais.

Gerar

python <esta pasta>/scripts/speak.py --dry-run   # Veja os prompts sem gastar nada
python <esta pasta>/scripts/speak.py

A primeira linha de cada personagem se torna a referência de voz para as linhas seguintes, então ouça a primeira linha primeiro. Se não estiver correta, altere desc e refaça. Após alterar uma primeira linha, use --only para refazer as linhas seguintes daquele personagem para que sigam a nova voz.

Quando você alterar uma linha ou uma voz e executar novamente, apenas o que mudou é regenerado.

Ambiente e efeitos sonoros

python <esta pasta>/scripts/speak.py --sound "Um quarto velho e silencioso, um pássaro distante de vez em quando" --seconds 10 --out audio/sfx/quarto.wav

Sempre defina --seconds. A cobrança segue a duração, e sem ele um clipe pode durar 30 segundos ou mais. É aproximado, e solicitações muito curtas tendem a retornar mais longas. Clipes gerados costumam ser baixos, então dê aos sons da história um level_db em film.json (veja a referência de film.json).

Gere uma coisa de cada vez. Não peça um prompt para diálogo, efeitos e música juntos, ou você não conseguirá ajustar os níveis separadamente e os lábios ficarão errados.

Verifique o resultado

  • Ouça se possível. Se não puder, diga à pessoa "este áudio não foi verificado auditivamente".
  • Coisas que você pode fazer sozinho: verifique se as durações fazem sentido (5 segundos para uma linha curta é um problema). Se uma ferramenta de transcrição como Whisper estiver disponível, compare o texto dela com o roteiro. Palavras muito baixas podem estar faltando, o que é sinal para refazê-las.
  • delivery é um pedido, não um controle exato. Durações de pausa em particular não são confiáveis, então encurte a linha ou regenere se o ritmo estiver errado.
  • O mesmo prompt dá um resultado diferente a cada vez, então regenere em caso de erros.

Problemas comuns

SintomaCorreção
Chave rejeitada, ou Audio Generation 1.0 não está habilitadoVerifique se o serviço está ativado. A chave deve vir do console de fala, e chaves Ark não funcionam
Uma palavra é lida erradaRegenerar, ou reformular a linha
Linhas não soam como uma pessoa sóCertifique-se de que a primeira linha está correta, depois refaça as posteriores com --only, ou defina um speaker
O final de uma linha é cortadoPeça uma delivery mais lenta, ou regenere

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Habilidades Relacionadas