Vídeo de Cartão Sem Rosto para Xiaohongshu
Este é um roteiro independente de produção de vídeos curtos, projetado especificamente para lidar com rascunhos do Xiaohongshu no formato "cartão de screenshot de conteúdo real + fundo de paisagem dinâmica + BGM local". Ele não modifica nem substitui o skill $explainer existente; este último continua responsável por vídeos 16:9, narração e explicações completas.
O público-alvo principal são pessoas que desejam empreender individualmente, estão aprendendo IA e possuem compreensão básica de negócios e inteligência artificial. As capturas de tela são apenas portas de entrada para evidências; o verdadeiro valor do conteúdo é traduzir os insights das capturas em ações que esse público possa avaliar e executar.
Defina os Limites Primeiro
- Cada conteúdo entrega ao usuário apenas dois itens: um
.mp4reproduzível e um.mdde rascunho de postagem com o mesmo título; múltiplos conteúdos da mesma semana podem ser colocados diretamente em um mesmo diretório semanal. O manifesto interno de rastreabilidade não conta como entrega e não é colocado no diretório semanal. - Por padrão, os arquivos são salvos em
ExplicacaoXiaohongshuXX/SemanaN/. Os vídeos e rascunhos da mesma semana são colocados diretamente no diretório semanal, sem criar subdiretórios para cada conteúdo. - O rascunho de postagem sempre terá
publish_status: draft; antes da entrega final,title_statusdeve serlocked. Por padrão, não há login automático, upload, publicação, comentários, curtidas ou seguidores. Somente mediante solicitação explícita do editor, o vídeo e o rascunho especificados podem ser enviados para a central de criação do Xiaohongshu (já logada) e salvos como rascunho, nunca clicando em "publicar". Se o usuário confirmar explicitamente uma lista de contas candidatas, estas podem ser seguidas manualmente uma a uma no X já logado, sem scripts em lote ou ações de crescimento por interação. - O conteúdo do X deve vir de capturas de tela fornecidas pelo usuário ou de posts visíveis no aplicativo X logado pelo usuário. Não é permitido contornar CAPTCHAs, paywalls ou permissões, nem reorganizar texto de capturas, inventar contas, números ou datas.
- Por padrão, nenhuma linha de fonte do X é escrita, a menos que o usuário solicite o contrário; a fonte e a licença são armazenadas apenas nos metadados da biblioteca de material.
- Uma única captura de tela é o único cartão de informação. Não é permitido sobrepor legendas palavra por palavra, barras de título, adesivos, logotipos, aberturas, encerramentos, CTAs, um segundo cartão ou personagens.
- Quando o usuário não fornece evidências factuais, o título e o texto só podem fazer resumos claramente marcados como tal, não apresentando suposições como fatos.
- Cada vídeo finalizado deve ter um
run_manifest.jsoninterno colocado fora do diretório semanal, registrando captura, fundo, BGM, público-alvo, pontuação do tópico, candidatos a título, estrutura do texto, pacote de revisão, hashes e confirmações manuais. Este manifesto não é um arquivo de publicação e não pode ser colocado no diretório semanal.
Quando Usar
Use este skill quando o usuário disser "fazer um vídeo explicativo para o Xiaohongshu", "transformar esta captura do X em vídeo", "usar paisagem dinâmica como fundo", "colocar uma BGM" ou "me dê o vídeo e o rascunho de postagem". Quando for necessário operar o desktop/aplicativo X logado, primeiro leia o skill computer-use/controle de navegador disponível. Para detecção e renderização de mídia, use ffprobe, ffmpeg ou ferramentas de edição autorizadas localmente. Enquanto faltarem captura, fundo, BGM compatível ou evidência de título que altere o significado factual, pare em WAIT_DATA/WAIT_USER, não crie conteúdo substituto por conta própria.
Contrato de Entrada e Saída
As regras de geração e revisão de título, corpo de 50 caracteres e tags estão em content-generation-contract.md. Este arquivo de referência é o padrão de produção de conteúdo deste skill, não uma inspiração opcional.
Entrada Mínima
- Uma captura de tela do X, ou um post localizável no aplicativo X logado.
- Uma imagem de referência de layout fornecida pelo usuário, para fixar o
source_crop_rect_px; se o usuário confirmar explicitamente que a própria captura do X serve como referência de layout, o mesmo arquivo pode ser reutilizado. - Um vídeo de fundo dinâmico. Se o usuário não fornecer, pode ser obtido de páginas de download explícitas do Pexels/Unsplash, salvando o registro de licença/fonte; não use material apenas com base em páginas de resultados de pesquisa.
- Uma BGM local, ou permissão para selecionar da
BibliotecaBGMXiaohongshulocal. Áudio sem licença clara não pode entrar no vídeo final.
Opcional: tema, emoção alvo, número da semana, título especificado pelo usuário, se deve manter a área de imagem visível do post original; a duração do vídeo não é uma entrada, fixada permanentemente em 8 segundos.
Especificações Fixas do Vídeo
- Canvas fixado permanentemente em
1080×1440 px(3:4),30 fpspadrão, vídeo H.264, áudio AAC. - Duração do vídeo fixada permanentemente em
8 segundos; não pode ser ajustada para outra duração. - Fundo dinâmico ocupa todo o quadro, podendo ter leve redução de brilho/vinheta/desfoque para sustentar o cartão; o fundo não pode ser congelado em um quadro estático.
- Largura do cartão de screenshot fixada permanentemente em
880 px, margens laterais do canvas fixadas em100 px(100 + 880 + 100 = 1080). - O cartão de screenshot primeiro fixa a área de corte da captura de origem com base na imagem de referência do usuário e, em seguida, preenche toda a largura de
880 pxcom o modo "preencher + cortar" (cover); é estritamente proibido usar pad, letterbox ou qualquer preenchimento em branco. Não é permitido reescrever, reorganizar ou ocultar texto chave. - A altura do cartão de screenshot é determinada naturalmente pela proporção da captura após a fixação pela imagem de referência: se
logical_card_height <= 1440, entãofinal_card_height = logical_card_heightey = floor((1440 - final_card_height) / 2); se exceder 1440px, primeiro aplicasource_vertical_crop_px = floor((logical_card_height - 1440) / 2)para um corte vertical centralizado,final_card_height = 1440,y = 0. Em ambos os casos, não há margens superior/inferior fixas, nem redução da largura ou preenchimento em branco. - A camada visível final do screenshot usa uma máscara de cantos arredondados de
24 px(considerando os pixels de saída 1080×1440), com uma borda de2 pxna cor cinza claro#C9D1D8desenhada para dentro a partir da borda externa do cartão, e uma sombra suave: preta, opacidade16%, raio de desfoque12 px, deslocamento(0, 8 px), expansão36 px. A borda e a sombra fazem parte do cartão de screenshot, não alteram a dimensão externa de 880px do cartão nem adicionam uma segunda camada de informação. Se a imagem de referência não for fornecida, pare emWAIT_USER, não fixe o retângulo de corte. - O cartão de screenshot aparece por padrão a partir do segundo 0, como o único cartão de informação na parte mais à frente do vídeo, e permanece até o final; se o usuário solicitar explicitamente uma animação de entrada, esta só pode ser uma variação sutil e legível no próprio cartão.
- A tela contém apenas "fundo + um cartão de screenshot". É proibido adicionar legendas extras, adesivos, barras de fonte, aberturas, encerramentos ou uma segunda camada de informação.
- Por padrão, há apenas uma faixa de áudio BGM, sem narração; a música cobre todo o vídeo com fades curtos de entrada/saída para evitar cortes abruptos e distorção.
Especificações Fixas do Rascunho de Postagem
A base do nome Markdown deve ser exatamente igual à do vídeo: <titulo>.mp4 e <titulo>.md. O corpo do texto tem estritamente 50 caracteres chineses por padrão; a contagem considera apenas caracteres chineses no corpo, excluindo título, pontuação, números, inglês, tags e campos de status. Se o usuário optar explicitamente pelo modo flexível, pode usar 45–65 caracteres. O rascunho mantém apenas:
publish_status: draft
title_status: locked
copy_length: exact_50
platform: xiaohongshu
content_review_status: claude_approved
content_review_agent: claude
content_generation_agent: claude
editorial_review_status: codex_approved
editorial_review_agent: codex
# Título
Corpo do texto (exatamente 50 caracteres chineses, contendo um gancho atraente e um fechamento claro)
#Tag1 #Tag2 #Tag3
Não coloque a licença da BGM, links de download ou processo de produção no texto do leitor. Quando precisar de registro, escreva no index.json da biblioteca de material ou nos resultados internos da execução, sem adicionar arquivos de entrega semanais.
Fluxo de Trabalho
- Recepção e Verificação: Confirme a captura de tela, a imagem de referência de layout independente (ou a confirmação explícita do usuário de que a captura serve como referência), o fundo, o tema, o número da semana e o estado da biblioteca de material; liste as lacunas. Se o título contiver números, causalidade ou promessas de benefício, verifique primeiro se a captura realmente os suporta.
- Captura de Conteúdo: Ao autorizar a operação do aplicativo X, capture apenas o conteúdo visível no momento; copie a captura original como somente leitura para uma área de trabalho temporária. Após a aprovação do vídeo, limpe as cópias temporárias, sem excluir a captura, o vídeo ou a música originais do usuário.
- Triagem, Seleção de Tópico e Rascunho Inicial do Claude: A automação subsequente lê apenas posts públicos de contas do X já confirmadas, passando primeiro pelo filtro de qualidade de captura do
content-generation-contract.md; após a aprovação, crie umtopic_packete pontue-o. Em seguida, peça ao Claude para gerar 5 candidatos a título, 1 título recomendado, 2 títulos reserva, quatro parágrafos de corpo e 5 tags. Se o editor já especificou um título, trave esse título diretamente; Claude gera apenas o corpo e as tags. A saída do Claude é sempre um rascunho de material, não pode ser entregue diretamente. - Edição Profunda do Codex e Revisão Final: O Codex deve repensar o rascunho do Claude, focando na revisão do gancho, apelo visual, ponto de dor real, conflito, reivindicação de identidade, frase de memória, valor de ação e limites de evidência; se necessário, reescreva completamente, em vez de apenas ajustar o número de caracteres. Após a verificação mecânica dos exatos 50 caracteres chineses e 5 tags, envie o rascunho final para o Claude para verificação de conformidade. Somente quando o Claude não estiver disponível, mude para o Hermes e registre o
fallback_reason. Apenas comeditorial_review_status: codex_approvede status de conformidadeclaude_approvedouhermes_approvedlegítimo, pode-se entrar na entrega. - Seleção de Fundo: Priorize o uso do vídeo fornecido pelo usuário; material externo só deve ser baixado de páginas oficiais com autorização explícita, registrando a fonte. Corte/redimensione para 3:4 sem alterar a área de leitura do cartão de screenshot.
- Seleção de BGM: Primeiro execute
audit_bgm.py, depois filtre por humor, energia, duração e estado de vocalização nos registros locais comapproved,sync_allowed=trueecommercial_allowed=true. Das 3–5 faixas com maior pontuação, use uma seed fixa para selecionar uma. O statuspendingsó pode ser usado como sugestão candidata; para produção/entrega, use--confirmed-onlycomhuman_listen_status=confirmed. A IA não toma a decisão final pelo usuário. Faixas CC BY também precisam ter texto de atribuição colocável; caso contrário, são eliminadas. - Síntese: Reconstrua a linha do tempo completa a partir da captura de origem, fundo e BGM, usando ffmpeg/ferramenta de edição para gerar um MP4 1080×1440. Se um erro for encontrado, volte ao material de origem e reconstrua, sem aplicar patches de correção sobre o MP4 já renderizado.
- Aceitação: Use
ffprobepara verificar obrigatoriamente proporção, taxa de quadros, H.264/yuv420p, AAC, faixa única de áudio, áudio começando no segundo 0 e cobrindo o vídeo, duração de 8 segundos (tolerância de encapsulamento ±0,05s); extraia quadros para confirmar que o cartão está nítido, sem camadas de texto extras; verifique se o áudio não tem estouros, não começa em silêncio e não apresenta conflitos vocais óbvios; o texto deve primeiro passar pela edição profunda do Codex, depois pela verificação de conformidade do Claude, ou, em caso de falha de conexão do Claude com registro do motivo, pela verificação de backup do Hermes. - Arquivamento: Escreva exatamente um MP4 e um Markdown no diretório
ExplicacaoXiaohongshuXX/SemanaN/; coloque o manifesto interno fora do diretório semanal. Limpe apenas as cópias temporárias, quadros temporários, logs e versões de backup gerados nesta execução, sem limpar o material original do usuário; mantenha os registros de fonte, licença e hash no manifesto; mantenha os rascunhos locais, sem publicação externa. - Caixa de Rascunhos do Xiaohongshu (somente quando explicitamente solicitado pelo usuário): Priorize assumir o controle do navegador Google Chrome do computador do usuário logado na central de criação do Xiaohongshu. Não considere o estado de login do navegador embutido do Codex como uma sessão do navegador do computador. Após confirmar que a central de criação está logada, faça upload do
.mp4especificado, preencha o mesmo título e o corpo final/5 tags do Markdown, aguarde o processamento e clique em "Salvar Rascunho" ou botão equivalente. Após salvar, use os prompts da página, a lista de rascunhos ou a releitura do título para fazer uma verificação autoritativa e escrevadraft_upload_status, timestamp e identificador do rascunho no manifesto fora do diretório semanal. Ao encontrar páginas de login, CAPTCHA, controle de risco, declaração de direitos autorais ou qualquer outra página que exija julgamento do usuário, pare emWAIT_USER; não clique em "Publicar", agendamento, publicação síncrona ou qualquer ação de interação.
Restrições Rígidas de Aceitação do Hermes / Cartão Sem Rosto
Cada entrega deve registrar evidências factuais, não apenas "parece bom":
- Canvas:
ffprobedeve mostrar1080×1440. - Geometria Horizontal: Quadros extraídos ou logs de filtro devem provar
x=100, w=880, margem direita=100. - Preenchimento e Corte: O cartão não pode ter pad, letterbox, bordas brancas ou preenchimento transparente; o conteúdo extravasado deve vir do corte cover.
- Geometria Vertical: Quando não ultrapassar a altura:
y=floor((1440-final_card_height)/2); quando ultrapassar: registre primeirosource_vertical_crop_pxcentralizado, altura final do cartão 1440 comy=0. - Cantos Arredondados, Borda, Sombra e Camadas: Raio da máscara da camada visível final do screenshot é
24px, borda interna a partir da borda externa do cartão fixada em2px #C9D1D8, sombra fixada em preto16%, desfoque12px, deslocamento(0,8px), expansão36px; a tela só pode conter o fundo dinâmico e este único cartão de screenshot. - Reprodutível: O manifesto deve listar os valores geométricos acima, caminho/hash da imagem de referência do usuário,
source_crop_rect_px, timestamp de aceitação, caminho/hash do primeiro/meio/último quadro, caminho do log do filtro enext_state; falte imagem de referência ou evidência, pare emWAIT_USER.
Os cantos arredondados, borda e sombra devem ser aplicados antes de o cartão de screenshot entrar na síntese: primeiro desenhe a borda de 2px #C9D1D8 para dentro a partir da borda externa do cartão; em seguida, use scripts/make_rounded_mask.py --width 880 --height FINAL_CARD_H --radius 24 --output rounded-mask.pgm para gerar a máscara PGM no tamanho final e aplique alphamerge; a partir do alpha do mesmo cartão com cantos arredondados, gere a sombra com expansão, desfoque e deslocamento, e então componha a sombra e o cartão original sobre o fundo. Não é permitido adicionar camadas sobre o MP4 já renderizado. O manifesto deve registrar todos os parâmetros fixos da borda e sombra.
Pontos de Entrada de Intenção
Trate as seguintes frases como roteamento interno estável, sem exigir que o usuário conheça parâmetros de script:
/xhs-card-video make
/xhs-card-video make --source x-app --week auto --bgm random --confirmed-only --record
/xhs-card-video make --source <screenshot> --background <video> --bgm <bgm-id>
/xhs-card-video bgm init --count 100
/xhs-card-video bgm ingest <file-or-folder>
/xhs-card-video bgm confirm <bgm-id> --status confirmed
/xhs-card-video bgm audit
/xhs-card-video bgm pick --mood rainy --energy low-mid --seed <seed> --confirmed-only --record
/xhs-card-video audit <week-folder>
/xhs-card-video audit <week-folder> --title <titulo> --manifest <run-manifest.json>
/xhs-card-video audit <week-folder> --manifest <run-manifest.json>
Os scripts correspondentes estão em scripts/ deste skill. Scripts são ferramentas auxiliares reutilizáveis e não representam a execução de publicação externa.
Biblioteca Local de BGM
Caminho padrão:
{{CREATOR_ROOT}}/BibliotecaBGMXiaohongshu/
Priorize o uso da variável de ambiente PROOF_EXPLAINER_XHS_BGM_LIBRARY para sobrescrever; a variável antiga EXPLAINER_XHS_BGM_LIBRARY é mantida apenas para compatibilidade. A biblioteca inicial tem 100 faixas, divididas em 10 categorias: Foco e Cotidiano, Noite Chuvosa e Clima, Atmosfera e Sonhos, Noite e Neon, Calor e Ritmo Lento, Jazz e Livraria, Leve e Cotidiano, Oriente e Zen, Retrô e Ritmo, Mundo e Sensação Cinematográfica. As 100 faixas são apenas um pool de material chamável, não são o Top 100 de hits do Xiaohongshu nem constituem uma classificação de tendências.
Requisitos Mínimos de Metadados
Cada faixa deve ter no mínimo no index.json:
{
"id": "bgm-001",
"relative_path": "audio/01_Foco_e_Cotidiano/bgm-001__track.mp3",
"source_page_url": "https://…",
"download_url": "https://…",
"source_platform": "openlofi|user_local|manual_other",
"license_class": "cc0|cc_by|site_custom|user_owned|reference_only|blocked",
"sync_allowed": true,
"commercial_allowed": true,
"standalone_redistribution_allowed": false,
"license_checked_at": "YYYY-MM-DD",
"license_snapshot_path": "licenses/…",
"license_snapshot_sha256": "…",
"rights_notes": "…",
"trend_status": "verified|unverified|not_claimed",
"duration_s": 12.3,
"sha256": "…",
"review_status": "approved|review|rejected",
"human_listen_status": "pending|confirmed|rejected"
}
Apenas faixas com review_status=approved, sync_allowed=true, commercial_allowed=true e classe de licença clara podem entrar no vídeo. reference_only é apenas para registro de inspiração, blocked não pode ser chamado. O áudio de vídeos locais fornecidos pelo usuário é review por padrão; somente quando o usuário confirmar que possui os direitos ou obteve autorização, pode ser alterado para user_owned. A permissão para empacotar/revender áudio separadamente é diferente de "incorporar em vídeo" e não pode ser inferida por padrão.
A biblioteca inicial usa o pacote de lançamento fixo Open Lo-Fi v1.0.0. O diretório mantém o catálogo upstream, README, snapshot de licença e SHA-256. O README declara CC0 1.0, mas samples de terceiros/direitos regionais não são auditados independentemente por este skill; rights_notes deve reter esta ressalva. Se a fonte for Pixabay, Mixkit, OpenGameArt, DOVA, etc., a página de licença oficial deve ser lida item por item; não é permitido raspar em lote ou usar URLs de prévia como evidência de autorização/download oficial. Não baixe ou redistribua faixas de áudio restritas de XHS/TikTok/Instagram.
Regras de Seleção
random não é aleatório irrestrito:
Licença ou decodificação reprovada → Eliminado
Correspondência de humor +4
Correspondência de energia/ritmo +3
Duração, loop, instrumental +2
Usado recentemente -1
Conflito vocal com cartão -3
Primeiro mantenha as 3–5 faixas com maior pontuação, depois use uma seed fixa para selecionar 1; escreva bgm_id, seed e motivo da seleção em selection_history.jsonl, sem levar logs de execução para o diretório de entrega semanal.
Diretório Semanal, Nomes de Arquivo e Status
ExplicacaoXiaohongshuXX/
└── SemanaN/
├── <titulo>.mp4
└── <titulo>.md
SemanaNusa por padrão a semana ISO atual; quando o usuário especificar uma semana, use a especificada.- O nome do arquivo é o título confirmado. Substitua apenas caracteres proibidos pelo sistema, quebras de linha e
/; não altere silenciosamente para um número. - O diretório semanal só pode conter pares de arquivos MP4/Markdown, sem material temporário, logs ou subdiretórios; quando contiver múltiplos conteúdos, use
audit_delivery.py --title <titulo>para auditar um par específico. - O diretório pai do diretório semanal deve ser exatamente
ExplicacaoXiaohongshuXX, e o nome da semana deve corresponder aSemana1–Semana53; o manifesto interno fica em{{CREATOR_ROOT}}/.xhs-card-video-runs/(ou um caminho fora do diretório semanal especificado pelo usuário). - O estado interno pode ser escrito como:
state: INTAKE | WAIT_DATA | WAIT_USER | WAIT_REVIEW | BUILD | AUDIT | local_ready
source_status: captured | supplied | missing
bgm_status: approved_confirmed | approved_pending_listen | review | missing
title_status: locked | draft
publish_status: draft
draft_upload_status: not_requested | pending | saved | blocked
draft_upload_platform: xiaohongshu | none
draft_upload_at: <ISO-8601 or null>
draft_entry_identifier: <titulo/url/id or null>
copy_length: exact_50 | range_45_65
platform: xiaohongshu
content_review_status: pending | claude_approved | hermes_approved | rework_required
content_review_agent: claude | hermes | none
content_generation_agent: claude | hermes | none
editorial_review_status: pending | codex_approved | rework_required
editorial_review_agent: codex | none
run_manifest: <absolute path outside week folder>
delivery_path: <absolute week folder>
next_state: DONE | WAIT_DATA | WAIT_USER
Somente quando ambos os arquivos finais puderem ser abertos, audit_bgm.py e audit_delivery.py --manifest ... passarem em todos os testes, a inspeção visual/auditiva manual estiver confirmada e não houver ação de publicação externa, pode-se reportar local_ready.
Tratamento de Falhas
- Falta de captura/fundo/BGM disponível: Relate a lacuna específica, pare em
WAIT_DATA, não baixe substitutos não autorizados. - Título que altera os fatos do post original: Pare em
WAIT_USER, forneça os limites factuais que precisam de confirmação. - Áudio não decodificável, hash duplicado ou campos de licença ausentes: Elimine do pool de candidatos, execute
audit_bgm.py, não "use primeiro, depois veja". - BGM ainda com
human_listen_status=pending, manifesto ausente/dentro do diretório semanal, ou atribuição CC BY sem local para colocar: Pare emWAIT_USER/AUDIT, não reportelocal_ready. - Proporção de renderização, legibilidade do cartão ou faixa de áudio reprovadas: Exclua a saída temporária desta execução, reconstrua a partir do material de origem; não aplique camadas de remendo.
- Qualquer solicitação de publicação pública, agendamento ou interação: Mantenha como draft e deixe claro que o usuário precisa confirmar/executar pessoalmente; este skill só faz upload para a caixa de rascunhos do Xiaohongshu quando explicitamente solicitado pelo usuário e para no "Salvar Rascunho", sem publicar em nome do usuário.
Arquivos de Referência
references/xhs-video-contract.md: Restrições de canvas, cartão, áudio e renderização.references/bgm-library-contract.md: Diretório, licença, campos e algoritmo de seleção.references/delivery-checklist.md: Lista de verificação executável antes da entrega.references/run-manifest.md: Lista de fonte, licença, hash e confirmação manual fora do diretório semanal.references/content-generation-contract.md: Público-alvo, pontuação de tópico, rascunho inicial do Claude, edição profunda do Codex, mecanismo de título/corpo de 50 caracteres/5 tags e rota final de verificação de conformidade.scripts/install_openlofi.py: Inicializa o pool inicial de 100 faixas a partir de um release oficial fixo.scripts/select_bgm.py: Filtra e seleciona com seed fixa, sem modificar o áudio.scripts/ingest_bgm.py: Coloca áudio local do usuário na caixa de entrada de revisão pendente, sem conceder direitos por padrão.scripts/confirm_bgm.py: Registra aprovação/reprovação da audição manual apenas com base no ID explicitamente especificado pelo usuário, não decide pelo usuário.scripts/audit_bgm.py: Verifica índice, caminhos, decodificação, hash e campos de licença.scripts/audit_delivery.py: Verifica o contrato dos dois arquivos no diretório semanal, status de rascunho, status de revisão de conteúdo, evidências geométricas e informações básicas do fluxo do MP4.