Vídeo de Podcast
Cria um vídeo 1920x1080 de dois apresentadores discutindo um tópico. Cada tópico recebe sua própria foto de fundo, cartão de título, ícone e etiqueta do apresentador com barras de voz animadas. As mudanças de tópico têm uma transição de tela cheia e um "whoosh", os ícones aparecem com um "pop", e a última cena contém um botão de inscrição e créditos. Pode abrir com o usuário falando com sua própria voz clonada.
Leia /hyperframes antes de alterar qualquer composição. Os scripts abaixo estão na pasta scripts/ deste skill. Execute-os a partir da pasta do projeto de vídeo.
0. Entreviste primeiro
Não pesquise, escreva ou gere nada até que isso esteja concluído. Um vídeo renderizado é lento para refazer, portanto, resolva as decisões com antecedência. O método vem do skill de entrevista de Matt Pocock.
As decisões formam uma árvore: algumas só podem ser perguntadas depois que outras são resolvidas. Trabalhe em rodadas:
- Faça todas as perguntas para as quais você já pode responder aos pré-requisitos agora, e nada que dependa de uma resposta que você ainda não ouviu. Essa pergunta espera por uma rodada posterior.
- Numere cada pergunta e dê sua resposta recomendada, redigida de forma que "sim" a aceite.
- Aguarde as respostas, então descubra o que elas desbloquearam e faça a próxima rodada. Uma resposta também pode tornar uma pergunta planejada desnecessária: descarte-a.
Formate cada pergunta assim:
❓ **P1** - **<título>**: <a pergunta>
➡️ <sua resposta recomendada>
Fatos são seu trabalho, decisões são deles. Nunca pergunte o que você pode descobrir: se o VoiceStudio está rodando, quais perfis de voz existem (GET /profiles), o que está na pasta, o que a pesquisa diz. Nunca responda uma decisão por eles. Pergunte em texto simples, para que eles possam responder com suas próprias palavras.
As decisões a cobrir, aproximadamente nesta ordem:
| Rodada | Decisões |
|---|---|
| 1 | O tópico e o ângulo específico. Quem está assistindo e o que eles já sabem. O que os espectadores devem fazer depois. Duração alvo. |
| 2 | Os dois apresentadores: quem são e como se relacionam, como especialista e cliente. Tom. Nome do programa. Se abre com a voz do usuário. |
| 3 | Se abrir com a voz deles: qual perfil e as palavras exatas. Sotaques e características de voz para os apresentadores projetados. |
| 4 | Após a pesquisa: quais descobertas usar e qualquer alegação que eles queiram deixar de fora. A lista de tópicos, em ordem. |
| 5 | Aparência e som: o tipo de fotos, o ícone para cada tópico, quaisquer alterações nas transições, whoosh e pop. Onde o vídeo será publicado. |
Pule tudo que já foi respondido na solicitação. Se eles disserem "apenas vá" ou "você decide", pare de perguntar, aceite suas respostas recomendadas e liste-as. Não há limite de perguntas, mas não pergunte por perguntar: cada pergunta deve mudar o vídeo.
Termine reproduzindo o plano em poucas linhas: tópico, público, duração, apresentadores, abertura, lista de tópicos e a chamada para ação. Aguarde a confirmação deles antes de iniciar a etapa 1. Se algo mais tarde reabrir uma decisão, como uma pesquisa que contradiz o ângulo, pare e pergunte.
1. Verifique a configuração
curl -s "$VOICESTUDIO_URL/profiles"deve responder. URL padrão:http://localhost:3000. Se o servidor tiver uma chave de API,VOICESTUDIO_API_KEYdeve estar definida. Nunca escreva a chave em um arquivo do projeto.ffmpegenodeestão no PATH, e os skills HyperFrames estão instalados.
Se algo estiver faltando, pare e aponte o usuário para o LEIAME deste skill.
2. Crie o projeto
npx hyperframes init <dir>, em seguida copie templates/script.example.json para <dir>/script.json.
3. Pesquise e escreva script.json
Pesquise o tópico primeiro. Toda estatística precisa de uma fonte real: coloque-a no campo source dessa cena e não invente números. Escreva um discurso natural, aproximadamente 150 palavras por minuto.
| Campo | Significado |
|---|---|
show | Nome do programa, exibido em todas as cenas |
chips | Rótulos de crédito na última cena |
voices | Uma entrada por falante. name, role, color, mais profile_id ou instruct e seed |
scenes | Ordenadas por aparição. kicker, title, icon, sub e source opcionais. A última é a conclusão |
lines | Turnos de fala em ordem: who, scene, text. As linhas de uma cena devem ser contíguas |
icon é um nome de ícone do Lucide que se adequa ao tópico, como phone-call.
Para abrir com a voz clonada do próprio usuário, adicione uma voz com o profile_id do VoiceStudio dele (de GET /profiles), dê a ela uma primeira cena própria e termine a linha com uma passagem como "Vamos começar!" Apenas clone uma voz com a permissão de seu dono.
Mostre o script ao usuário antes de gerar as vozes.
4. Gere as vozes
python3 <skill>/scripts/make_voice.py
Isso escreve assets/audio/ e assets/lines.json. O áudio é armazenado em cache, então após editar o script, ele gera apenas o que mudou. Se o usuário reclonar uma voz, exclua seu áudio de assets/audio/ para que seja regenerado e primeiro confirme que o ref_audio_path do perfil mudou: um clone que não foi salvo deixa a voz antiga no lugar. Peça ao usuário para ouvir o áudio antes de renderizar.
5. Adicione imagens, ícones e sons
Imagens: cada cena precisa de assets/img/<id-da-cena>.jpg, paisagem, com pelo menos 1920 de largura, e uma foto diferente da cena anterior, para que cada mudança de tópico seja visível. Use apenas imagens que o usuário possa publicar, como fotos licenciadas sob CC da Wikimedia Commons. Registre cada uma em assets/img/credits.json como
{"<id-da-cena>": {"artist": "...", "license": "...", "page": "..."}}. A última cena exibe os nomes dos artistas.
Ícones:
npm pack [email protected] --silent && tar xzf lucide-static-0.460.0.tgz
mkdir -p assets/icons && cp package/LICENSE assets/icons/LICENSE
cp package/icons/<nome-do-icone>.svg assets/icons/ # uma vez por ícone de cena
rm -rf package lucide-static-0.460.0.tgz
Sons: execute estes comandos e copie o arquivo que cada um imprime:
npx hyperframes media-use resolve --type sfx --intent "transição whoosh curta" --project .
npx hyperframes media-use resolve --type sfx --intent "pop rápido de selo" --project .
mkdir -p assets/sfx
cp <caminho do whoosh> assets/sfx/whoosh.mp3
cp <caminho do pop> assets/sfx/pop.mp3
Credite qualquer som CC BY na última cena através de chips.
6. Construa e verifique
python3 <skill>/scripts/build.py, depois npx hyperframes check. Corrija todos os erros. Em seguida, execute npx hyperframes snapshot --at <segundos> e observe os quadros nas mudanças de cena antes de renderizar. As transições são de tela cheia nos horários de início da cena que build.py imprime.
7. Renderize
npx hyperframes render. O MP4 fica em renders/. Espere vários minutos por minuto de vídeo.
Verifique o arquivo e informe ao usuário o que você mediu: npx hyperframes audio <vídeo> --json mostra se o som está presente e se o volume está dentro da faixa. Você pode medir o som, mas não ouvi-lo, então peça para eles ouvirem.