Communitygithub.com

create-template-video-zh

Gera vídeos verticais 9:16 em chinês a partir de URLs de notícias ou arquivos .txt, usando templates HyperFrames profissionais (estilo poster/editorial). O fluxo inclui TTS em chinês, alinhamento de dublagem, mixagem de som, renderização e composição, entregando video.mp4 + voice.mp3 + script.txt.

O que é create-template-video-zh?

Esta skill automatiza a criação de vídeos curtos verticais (9:16) em chinês, ideais para notícias, narrações e conteúdo de redes sociais. O usuário fornece uma URL de notícia ou um arquivo de texto (.txt), e a skill gera automaticamente um script.json com um hook, 6 a 10 cenas de corpo e um outro, preenchendo apenas os campos de texto do template. Em seguida, executa uma pipeline integrada que realiza TTS em chinês (OmniVoice local), alinhamento da dublagem com os clipes, mixagem de efeitos sonoros e renderização final. O resultado são três arquivos: video.mp4 (vídeo completo), voice.mp3 (áudio da narração) e script.txt (roteiro de cena), prontos para edição em ferramentas como CapCut ou剪映. A skill suporta 11 templates HyperFrames com estilos variados (vignelli, pentagram, bold poster, glitch, comparison, list, etc.) e impõe regras específicas para a formatação de texto chinês na tela e para a conversão de números e símbolos na dublagem, garantindo naturalidade e evitar erros de pronúncia. O fluxo é executado em um ambiente local (DSH) com dependências como ffmpeg, Chrome e Node.js, e a pipeline de renderização é idempotente, permitindo re-renderizações rápidas após ajustes no texto.

Funciona com✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/ming-xwolf/create-template-video-zh/tree/HEAD/.agents/skills/create-template-video-zh

Perguntar na sua IA favorita

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

Documentação

Criar Vídeo por Template (chinês)

Transforma conteúdo chinês em um vídeo curto vertical 9:16. O design e as animações são gerenciados pelos templates HyperFrames em templates/; você só precisa preencher os campos de texto e o script.json.

Informações de instalação (ambiente DSH, leia primeiro)

  • PROJECT_DIR = /Users/ming/.agents/skills/create-template-video-zh (skill + pipeline + templates; node_modules link simbólico para a versão vietnamita, dependências compartilhadas)

  • Estrutura de diretórios: SKILL.md, templates/ (11 templates + CATALOG.md), src/ (CLI/pipeline), package.json, .env (endpoint TTS chinês).

  • Mapeamento de ferramentas: o original usa nomes de ferramentas Claude Code, aqui correspondem a DSH: WebFetch → web_fetch, Read → read, Write → write, Bash → bash.

  • Dependências de ambiente: ffmpeg/ffprobe ✓, Chrome ✓, Node ✓.

  • TTS chinês implantado localmente: OmniVoice (MPS) + timbre clonado mandarim voice-zh.pt, rodando na porta 8124 (a versão vietnamita usa fixo 8123, as duas não interferem):

    bash "$HOME/.agents/skills/create-template-video-zh/scripts/start-tts-zh.sh"
    

    O script verifica /health, inicia o serviço em segundo plano e aguarda até ficar pronto (cerca de 4 s), o log fica em /tmp/omnivoice-zh.log. Após iniciar, confirme com uma sonda em chinês:

    curl -s -X POST http://127.0.0.1:8124/tts -H 'Content-Type: application/json' \
      -d '{"text":"大家好,这是中文配音测试。"}' -o /tmp/zh-probe.mp3 && ls -l /tmp/zh-probe.mp3
    

    000/não conecta = não iniciou; se não iniciar, pare e avise o usuário, não forje áudio. Diretório do serviço e notas de implantação: /Users/ming/Documents/dsh_workspace/omnivoice (SETUP.md).

  • A primeira renderização baixará o HyperFrames via npx -y [email protected] (requer internet, cada cena leva cerca de 15–20s; 8–10 cenas totalizam 3–5 minutos).

  • Idioma: todo o vídeo em chinês. O texto na tela pode misturar chinês e inglês (AI, GPT, Apple mantêm o original), mas voiceText deve ser em chinês, com números escritos em caracteres chineses conforme as regras abaixo.

Entrada

1 parâmetro: URL de notícia (http:///https://) ou caminho de arquivo .txt.

Fluxo de trabalho (estritamente nesta ordem)

Passo 1–3: Obter conteúdo + criar diretório de saída

  • URL → web_fetch busca o texto, extrai title, content (corpo 800–2000 caracteres), ogImage (og:image ou null), domain. Falha (paywall/JS puro/4xx) → peça ao usuário para salvar o texto em .txt e executar novamente, depois pare.
  • .txt → read lê; title = primeira linha (≤40 caracteres), content = resto do texto, ogImage = null, domain = "local".
  • slug: preferencialmente use palavras-chave em inglês ou pinyin (≤40 caracteres, [a-z0-9-]), por exemplo xiaomi-17-price, ai-coding-jobs. Se o título puramente chinês não puder ser convertido para ASCII, você escreve o pinyin; se realmente não houver, use zh-video (há também um fallback com o mesmo nome no código). timestamp = YYYYMMDD-HHmm; outputDir = <diretório de trabalho atual>/videos/<slug>-<timestamp>/ — dentro do espaço de trabalho: facilita a entrega e não polui o diretório da skill (a sandbox DSH geralmente só permite escrever no espaço de trabalho). mkdir -p. A localização da biblioteca de efeitos sonoros é apontada pelo SFX_DIR no .env para assets/sfx dentro da skill, desacoplada do diretório de saída; se a biblioteca de efeitos estiver vazia, essa camada é pulada automaticamente, sem afetar o fluxo principal.

Passo 4: Ler diretório de templates

Leia PROJECT_DIR/templates/CATALOG.md, confirme os templates e slots. Use apenas templateId do CATALOG. Existentes:

HOOK (apenas este): frame-liquid-bg-hero — aurora + título grande + CTA.

BODY (escolha conforme o conteúdo, veja Passo 5):

  • frame-vignelli — 1 número, fundo carvão escuro + vermelho.
  • frame-pentagram-stat — 1 número/benchmark, fundo escuro neon (grade suíça, número laranja brilhante + detalhe ciano + gráfico de barras).
  • frame-bold-poster — declaração forte multi-linha + número grande.
  • frame-build-minimal — frase curta impactante, fundo escuro + uma palavra grande em negrito (glow laranja, aparece letra por letra).
  • frame-creative-voltage — slogan criativo, divisão azul elétrico + letra manuscrita.
  • frame-glitch-title — glitch RGB cyberpunk (fundo com ruído), adequado para notícias urgentes/tecnologia.
  • frame-aicoding-list — lista de 2–5 itens (cada com ícone + etiqueta de nível), fundo gradiente escuro.
  • frame-aicoding-comparison — comparação A vs B (dois cartões gradientes + emblema WIN + dados).

OUTRO: frame-logo-outro (padrão: logo glow + marca + tagline + url); frame-statement-outro (alternativa: fundo papel + cartão vermelho).

Os valores de exemplo embutidos nos 11 templates (data-composition-variables) já foram todos substituídos por exemplos em chinês, você pode ver o resultado final diretamente na prévia ou copiá-los para script.json e modificar. Mas ao renderizar, passe explicitamente inputs: sem parâmetros, o runtime não obtém as variáveis e o texto ficará vazio.

Passo 5: Gerar script.json

{
    "version": "1.0",
    "renderer": "hyperframes",
    "aspect": "9:16",
    "metadata": {
        "title": "...",
        "source": { "url": "...", "domain": "...", "image": null },
        "channel": "Nome do canal chinês"
    },
    "voice": { "provider": "omnivoice", "speed": 1.0 },
    "scenes": [
        /* 8–12 cenas: 1 hook + 6–10 body + 1 outro */
    ]
}
  • provider fixo omnivoice (TTS local, não precisa de voiceId/API key).
  • Cada cena: { id, type, voiceText, templateId, inputs }; inputs deve cobrir os slots obrigatórios daquele template no CATALOG.
  • scenes[0].type = "hook"; scenes[-1].type = "outro" (frame-logo-outro).
  • 8–12 cenas; voiceText total cerca de 350–450 caracteres (≈90–120s, velocidade do chinês falado ~4.5 caracteres/s; a duração final será determinada pela dublagem; a pipeline alinha pela dublagem). Cada cena body 30–45 caracteres, aborda apenas um ponto; se um parágrafo tiver dois pontos, divida em duas cenas. Objetivo: cada cena dura 6–10s.

Mapeamento conteúdo → template:

  • hook → fixo frame-liquid-bg-hero (slots: kicker, headline, subheadline, cta, brand). headline padrão gradiente amarelo→roxo, use headline_from/headline_to (dois hex) para alterar o tom.
  • body → escolha por você o template mais adequado ao conteúdo, e varie o máximo possível, não use o mesmo para todos os body:
    • frame-vignelli: cena com 1 número a destacar (kicker, number, label, note, brand).
    • frame-pentagram-stat: com 1 número base/percentual + sensação de gráfico de barras (label, headline=número, subtitle, anchor, footer_left, footer_right).
    • frame-build-minimal: frase curta impactante/uma palavra-chave (eyebrow, hero=palavra única, desc, side_left, side_right).
    • frame-bold-poster: declaração forte multi-linha + número grande (kicker, date, figure, headline[], standfirst, footer_left, footer_right). A 2ª linha de headline automaticamente fica vermelha.
    • frame-creative-voltage: slogan criativo (meta, display_lines, accent_index, script, caption).
    • frame-glitch-title: sensação de urgência/tecnologia/suspense (title, subtitle).
    • frame-aicoding-list: lista/comparação de 2–5 itens (title, accent, accent_from, accent_to, subtitle, items[]). Cada item {icon, title, desc, tag, level}: icon você escolhe emoji (🚫 ⚠️ ✅ ❌ 📈 💡 🔒 🚀 …); level ∈ danger|warn|good|info determina a cor; tag use etiqueta curta em chinês (高危 / 注意 / 利好 / 稳健); accent_from/accent_to você escolhe dois hex.
    • frame-aicoding-comparison: comparação exata de dois itens (badge, pre, vs, post, left{}, right{}). Cada lado {label, from, to, icon?, bullets[], stat?, stat_label?, win?}; from/to são dois hex de gradiente (contraste frio/quente entre os lados é melhor); win: true marca o vencedor.
    • Sugestão de ritmo: quando houver muitas cenas numéricas, alterne frame-vignelli (preto carvão+vermelho/amarelo) com frame-pentagram-stat (neon laranja/ciano escuro); para cenas não numéricas, use frame-build-minimal.
  • outro → frame-logo-outro (brand_name, tagline, primary_url).

Regras de formatação de texto chinês na tela (inputs)

  • Chinês ocupa mais espaço que inglês/vietnamita: limite cada linha a 10–14 caracteres chineses; se ultrapassar, quebre a linha ou corte o texto; headline no máximo 3 linhas. Prefira tirar duas palavras a deixar duas linhas e meia apertadas.
  • A fonte do template é Inter Tight + system-ui; o chinês cai para PingFang SC como fallback, geralmente normal; se renderizar como quadrados/retângulos (tofu), insira "PingFang SC", "Noto Sans SC", no início de font-family no compositions/portrait.html daquele template e re-renderize.
  • Chinês não precisa de espaços entre palavras; não adicione manualmente valores negativos de letter-spacing; o -3px padrão do template pode grudar caracteres chineses; se o título ficar apertado, sobrescreva com letter-spacing: -1px nessa classe.
  • Emojis são permitidos no texto da tela, mas 0–1 por campo; não os coloque em campos com animação letra por letra (como hero do frame-build-minimal), senão a animação quebra.
  • Números na tela mantenha o formato bonito (4499 元, 82.7%, 17), converta para caracteres chineses apenas no voiceText.

Regras de TTS chinês (voiceText obrigatório)

OmniVoice lê caractere por caractere; números arábicos, pontos decimais e símbolos de moeda frequentemente são lidos errado ou em inglês. Portanto, no voiceText escreva todos os números em caracteres chineses; inputs (texto na tela) mantém os números.

FormaExemplo erradoEscrita correta
Decimal82.7%百分之八十二点七
Número de versãoiOS 18.2iOS 十八点二
Modelo de produto小米 17小米十七
Pixel200MP两百万像素
Bateria5000mAh五千毫安时
Grandeza1M tokens一百万 token
RMB¥4499四千四百九十九元
USD$5五美元
Multiplicador2x两倍
Percentual30%百分之三十
Duração60s六十秒
Razão3:1三比一
Ano2026 年二零二六年
Trilhões21 万亿二十一万亿
RankingTop 3前三名
  • Abreviaturas em inglês: teste com sonda antes de decidir: AI, GPT, API, 5G, GPU no TTS chinês às vezes são lidas letra por letra ("A-I"), às vezes como palavra em inglês. Antes de finalizar, use a sonda para ler duas frases de comparação: AI 很强大 vs 人工智能很强大, escolha a escrita que soa mais natural e mantenha consistência em todo o vídeo.
  • Nomes de marcas mantenha o original (Apple, OpenAI, 小米), marcas chinesas escreva em chinês.
  • voiceText absolutamente proibido: emoji/ícones, URL, e símbolos & % $ # + = / etc.; use 。 ou ? no final das frases para pausas naturais; vírgula use ,.
  • Consistência entre "两" e "二": para quantificadores coloquiais use "两" (两千, 两万, 两倍), para ordinais/anos use "二" (二零二六年, 第二季度).

Passo 6: Autoverificação

  • scenes[0] é hook, o último é outro; cada templateId está no CATALOG; cada inputs cobre os slots obrigatórios;
  • Largura da linha chinesa ≤14 caracteres, headline ≤3 linhas; voiceText sem números arábicos/símbolos/emoji; emoji apenas em inputs; vocabulário e pronúncia de abreviaturas consistentes em todo o vídeo;
  • voiceText total 350–450 caracteres. Correção silenciosa no máximo 2 rodadas.

Passo 7: Escrever script.json

Use a ferramenta write para escrever em <outputDir>/script.json (antes mkdir -p no diretório de saída).

Passo 8: Executar pipeline

Primeiro inicie o TTS chinês (veja início) e confirme que a sonda gerou áudio, depois execute em primeiro plano:

cd "$HOME/.agents/skills/create-template-video-zh" && npm run pipeline -- "<outputDir>/script.json"

O CLI usará renderer: "hyperframes" para seguir a pipeline de templates: TTS → renderizar template por template → alinhar pela duração da dublagem → concatenar + mixar. Em caso de falha, reporte o erro claramente e dê o caminho do outputDir (os já renderizados voice/scene-*.mp3, clips/scene-*.mp4 serão reutilizados; basta deletá-los para re-renderizar).

Ao reexecutar após alterar o texto chinês, primeiro delete os voice/scene-*.mp3 correspondentes, senão a dublagem antiga será reutilizada.

Passo 9: Entrega

Copie os três arquivos finais para o diretório de trabalho da sessão, facilitando o acesso do usuário:

mkdir -p "<cwd>/videos/<slug>" && cp "<outputDir>"/{video.mp4,voice.mp3,script.txt} "<cwd>/videos/<slug>/"

Em seguida, reporte (com links clicáveis):

✓ Vídeo: videos/<slug>/video.mp4
✓ Áudio: videos/<slug>/voice.mp3 — para剪映 (legendas automáticas/alinhamento labial)
✓ Roteiro: videos/<slug>/script.txt — texto quadro a quadro, fácil de editar manualmente
Duração total: XX.Xs

Observações

  • Cada cena leva cerca de 15–20s para renderizar (Chromium); 8–10 cenas totalizam 3–5 minutos.
  • TTS é idempotente (mantém voice/scene-*.mp3), os clipes também são idempotentes (mantém clips/scene-*.mp4).
  • TTS chinês no M2 Max tem RTF (taxa de tempo real) de aproximadamente 2.8: 1 minuto de vídeo final leva cerca de 3 minutos de TTS puro. Para acelerar, defina OMNIVOICE_STEPS como 16 no servidor (qualidade ligeiramente reduzida, tempo pela metade) e reinicie.
  • Se assets/sfx estiver vazio, a camada de som é 0, não afeta o fluxo principal; para efeitos sonoros, execute npm run sfx:download (requer internet) antes de gerar (o download padrão é para assets/sfx/ dentro da skill, ou seja, o local apontado por SFX_DIR no .env). Palavras-chave semânticas já incluem chinês (警告/失败/纪录/首次/倒计时/史诗/悬念…).
  • Diferenças da versão vietnamita create-template-video: porta TTS 8124 + timbre chinês, tabela de leitura de números chineses, restrições de formatação de texto chinês, palavras-chave SFX em chinês, fallback de slug zh-video. O código é uma cópia independente (apenas node_modules link simbólico para a versão vietnamita); alterar templates/pipeline afeta apenas este diretório. Se deletar a versão vietnamita, lembre-se de npm ci para reconstruir as dependências.
  • Novo template: siga as instruções no final de templates/CATALOG.md e adicione uma linha no CATALOG.

Habilidades Relacionadas