Mangá-Drama (Novelas / Web Novels / Mangá) · Pipeline de 5 Estações (novel-video-pipeline)
Visão Geral
Transforma uma história textual (web novels, mangás, roteiros originais, contos de fadas) em pacotes de prompts de storyboard + imagens de referência visual + dublagem e trilha CC0 prontos para alimentar modelos de vídeo-para-texto, mantendo o limite de "não copiar imagens protegidas por direitos autorais de terceiros". Por padrão, direcionado para a linha de produção de mangá-drama (16:9 widescreen / séries em vários episódios), mas pode ser alternado para subtipos como mangá-drama infantil, vídeos curtos, etc. O tom da linha de produção é definido pelo ritmo dos mangás-drama populares atuais ("ganchos fortes + puxada emocional + reviravolta + pontos de satisfação + suspense entre episódios"), mas apenas empresta seu esqueleto metodológico; os personagens, enredo e estilos artísticos são sempre originais.
O pipeline consiste em quatro estações de trabalho sequenciais, cada uma produzindo um JSON / diretório de recursos acordado, e a próxima estação consome a saída da anterior. Ordem de produção principal: primeiro construir a biblioteca de ativos (S2), depois escrever os prompts de storyboard (S3) — o storyboard apenas arranja os ativos de acordo com a linguagem cinematográfica, garantindo consistência de personagens e continuidade espacial das cenas.
S1 Roteiro Adaptado ──script.json──▶ S2 Biblioteca de Ativos ──character_manifest + scene_manifest (+ visual_manifest)──▶ S3 Prompt de Storyboard ──storyboard.json (referencia ativos+ref_images ancora)──▶ S4 Áudio ──audio_manifest──▶ S5 Composição ──Vídeo Final
- S1 Roteiro Adaptado: Comprime histórias longas/originais em um "esqueleto de valor narrativo ou pedagógico + tabela de batidas", gerando
script.json(título / logline / personagens / cenas / batidas). - S2 Biblioteca de Ativos (Primeira Construção): Lê o roteiro global, estabelece ativos de personagens com três vistas (
character_manifest.json: visual_lock + vistas frontal/lateral/traseira + pacote de âncoras + fixed_prompt) e ativos de cena com múltiplas vistas (frente/verso) (scene_manifest.json: axis_of_action + establishing/OTS A→B/reverse/insert), e busca correspondentes imagens de referência visuais de domínio público / CC0 (visual_manifest.json). Aplica palavras negativas do firewall de IP. A saída desta etapa é a "biblioteca de ativos", que será referenciada diretamente pelo S3. - S3 Prompt de Storyboard (Baseado na Biblioteca de Ativos): Expande cada batida em tomadas (shots), cada tomada referencia
character_ref(personagem + vista) escene_ref(cena + vista), bloqueia a descrição da biblioteca de ativos + banco de movimentos de câmera (camera-movements.json) + predefinições da plataforma para compor o prompt, injetanegative_prompt, gerandostoryboard.json. - S4 Áudio: Combina BGM / efeitos sonoros CC0 para as tomadas, gerando
audio_manifest.json. - S5 Composição (Fechamento para Vídeo Final): Fecha o ciclo combinando
storyboard.jsondo S3 (comref_imagesimagens âncora) +audio_manifest.jsondo S4 — gera imagem/imagem-para-vídeo tomada por tomada (usandoref_imagespara travar o rosto) → alinhamento de áudio → edição e corte (de acordo comduration_seaspect_ratio) → exportação para plataforma → verificação final de consistência. Veja detalhes emreferences/s5-composite.mdescripts/build_ffmpeg_concat.py.
Quando Usar (Gatilho)
- O usuário fornece uma história / novela / web novel / mangá / roteiro e deseja "transformá-lo em mangá-drama / vídeo curto / storyboard / animação".
- O usuário deseja "adaptar roteiro, escrever prompts de storyboard, gerar script de vídeo, combinar estilo artístico, combinar música".
- O usuário precisa da saída de qualquer estação individual (ex.: apenas prompts de storyboard, ou apenas imagens de referência de domínio público).
- O usuário tem requisitos rígidos de "direitos autorais limpos / uso comercial / risco zero de IP".
Fluxo de Trabalho (Workflow)
O fluxo completo se refere às ideias de orquestração de projetos open source populares, mas o código é próprio e os ativos são autocontidos:
- ViMax (MIT, ~392 commits de pipeline de orquestração S1→S4) → Empresta sua divisão de estágios "história→storyboard→vídeo" e contratos de produto.
- seedance-prompt-skill / ai-shortfilm-prompts (MIT) → Empresta a organização de modelos de prompt no formato SKILL, como base para S3.
- ArcReel (AGPL) → Apenas estuda a arquitetura, não copia código (AGPL é contagiosa, proibida de incorporar neste skill de estilo MIT). Veja detalhes em
references/architecture-licenses.md.
Etapa 0 · Recebimento da Demanda
Confirmar quatro pontos: ① Fonte da história (web novel / mangá / roteiro original / postagem ou caminho); ② Plataforma alvo (mangá-drama widescreen padrão para Bilibili / YouTube, veja assets/s3/platform-presets.json para bilibili; vertical para Douyin / WeChat Video, usar douyin); ③ Estilo artístico (manhua chinês / aquarela / realista / ukiyo-e / ilustração de livro infantil…); ④ Subtipo e público-alvo (padrão mangá-drama widescreen 16:9, com ritmo de sucessos populares mas original; se infantil, aplicar firewall de IP adicional + excluir conteúdo adulto).
Estação 1 · S1 Adaptação de Roteiro
- Carregar
assets/s1/story-structure.md(template de estrutura de três atos / batidas) +assets/s1/adaptation-method.md(metodologia de compressão: preservar esqueleto de valor, remover redundância, curva emocional). - Preencher
assets/s1/beat-sheet.mdconforme necessário (tabela de batidas preenchível). - Consultar os exemplos de adaptação
assets/s1/example-romeo-juliet.mdeexample-journey-to-west.md. - Gerar
script.json, campos conforme §Contrato S1 emreferences/workflow.md.
Estação 2 · S2 Biblioteca de Ativos (Primeiro Construir, Depois Escrever Storyboard)
- Ler todas as batidas / personagens / cenas do S1, criar ativos de personagens: carregar
assets/s2/character-design.md, para cada personagem principal gerarcharacter_manifest.json(visual_lock + fixed_prompt + três vistas frontal/lateral/traseira + pacote de âncoras ref_pack + regras de consistência). - Criar ativos de cena: carregar
assets/s2/scene-multiview.md, para cada cena principal gerarscene_manifest.json(geography + axis_of_action + views{establishing, ots_a, ots_b, reverse, insert}). - Buscar/gerar imagens de referência visuais de domínio público / CC0 (
visual_manifest.json) (múltiplos estilos: manhua chinês / aquarela / realista / ilustração de livro infantil / arte de domínio público do Met…), aplicar firewall de IP. - Aplicar firewall de IP:
assets/s2/negative-ip.json+assets/s2/negative-ip-firewall.md. - Portão de Licença: Aceitar apenas
Public Domain/CC0. Ativos de personagens/cena sempre originais, proibido copiar nomes e designs de sucessos populares (veja §6 do firewall de IP).
Estação 3 · S3 Prompt de Storyboard (Baseado na Biblioteca de Ativos)
-
Carregar
assets/s3/template-library.json(biblioteca de templates de storyboard: tipos de tomada / enquadramento / emoção) +assets/s3/camera-movements.json(banco de movimentos de câmera: 40+ movimentos + mapeamento batida→movimento + sintaxe de plataforma) +assets/s3/platform-presets.json(sintaxe de prompt, proporção de tela, limite de duração de cada plataforma) +assets/s3/tag-stats.json(estatísticas de frequência de tags) +assets/s3/negative-quality.md(palavras negativas de qualidade) +assets/s2/negative-ip.json(firewall de IP). -
Cada batida → pelo menos uma tomada; cada tomada deve conter
character_refescene_ref(referenciando a biblioteca de ativos S2), e extrair a descrição fixa do personagem dofixed_promptdo ativo; extrair 1 movimento de câmera principal docamera-movements.json(subject_aware_map recomenda de acordo com o tipo de batida); deve conternegative_prompt(firewall de IP + palavras negativas de qualidade concatenadas). -
Gerar
storyboard.json:shots[{shot_id, beat_ref, character_ref[], scene_ref, ref_images[] (opcional·âncoras diretas, veja abaixo "Ancoragem de Imagens de Referência"), camera_movement, shot_size, speed (opcional·modificador de velocidade slow_motion etc., veja speed_modifiers no camera-movements.json), prompt, prompt_readable, negative_prompt, platform, aspect_ratio, duration_s, attribution}]. Tomadas de mudança de poder usarcamera_movement: low_angle/high_angle+speed: "slow_motion"(escrita conformeassets/s2/scene-multiview.md§3 (suplemento) Eixo de Poder).Ancoragem de Imagens de Referência (ref_images, chave para consistência entre tomadas):
ref_imagesé uma lista de âncoras diretas de imagens para cada tomada, mais estável do que ofixed_prompttextual (alinhamento com @citação do Jimeng / trava-de-rosto com imagem única do Runway Gen-4). Cada item é uma string, com duas formas convencionadas: ① Token de referência de ativochar:<char_id>:<ref_pack_key_ou_three_view_key>/scene:<scene_id>:<view>(extraído automaticamente pelo script decharacter_manifest.ref_pack, e o gerador resolve para o caminho real da imagem); ② Caminho direto da imagem / URL (ex.:/assets/char_shen_zhao_face.png). Recomenda-se 2–3 imagens por personagem (close-up frontal / perfil / corpo inteiro), máximo 9 imagens para Jimeng, Runway trava com uma única.build_storyboard.pyextrai automaticamente oref_packdo personagem comoref_images; também pode ser alimentado diretamente no modelo de imagem-para-vídeo durante a composição S5 como referência para travar rosto/roupa. -
Dados CC BY 4.0 devem conter attribution (os ativos desta biblioteca são PD/CC0, isentos de atribuição por padrão; se dados CC BY externos forem introduzidos, a atribuição deve ser preenchida).
-
Aceleração com Scaffold (opcional): Primeiro construir
script.jsondo S1 +character_manifest.json/scene_manifest.jsondo S2, executarpython scripts/build_storyboard.py --project <DIR> --platform bilibilipara gerar automaticamente o rascunho destoryboard.json(preenche automaticamentecharacter_ref/scene_refpor batida, seleciona 1 movimento de câmera principal dosubject_aware_map, seleciona enquadramento por tipo de batida, concatenanegative_promptcom cobertura total de tokens de IP), e então ajustar manualmente ângulo de câmera / emoção / diálogo / ritmo. Este script é a implementação automática da ordem "asset-first", e sua saída pode ser validada diretamente pelovalidate_pipeline.py.
Estação 4 · S4 Áudio
- Carregar
assets/s4/audio-manifest.json(lista de áudio CC0 já buscada, contendo BGM / efeitos sonoros / categorias de emoção: ambient / cinematic / playful / tense / romantic / lullaby etc.). - Combinar por emoção da tomada: baixo suspense→seção de reviravolta, piano suave→seção de ternura, whoosh→transição, lullaby→seção de sono, cartoon bounce→seção animada.
- Gerar
audio_manifest.json:items[{file, license, source, duration_ms}], apenas CC0.
Estação 5 · S5 Composição (Fechamento para Vídeo Final)
- Carregar
references/s5-composite.md(SOP de composição S5: ciclo de cinco etapas + matriz de ferramentas + lista de verificação final de consistência). 1.5 Resolver imagens âncora: Executarpython scripts/resolve_ref_images.py --project <DIR>para expandir os tokensref_imagesde cada tomada (char:<id>:<key>/scene:<id>:<view>) para caminhos reais de imagem, gerandostoryboard.resolved.json(tokens não resolvidos mantidos como string original com alerta). - Gerar imagem / imagem-para-vídeo tomada por tomada: Usar
ref_imagesdostoryboard.resolved.json(imagens reais resolvidas) como referência para travar rosto/roupa, combinado comfixed_prompt+camera_movement+lens/stagesdocamera-movements.json, alimentar Jimeng @referência / Runway Gen-4 / Kling / Seedance para gerar cada clipe. - Alinhamento de áudio: Selecionar BGM do
audio_manifest.json(CC0) de acordo com a emoção da batida, cortar efeitos sonoros de acordo comduration_s. - Edição e corte: Executar
python scripts/build_ffmpeg_concat.py --project <DIR> --clips-dir <DIR>/clipspara gerar lista de concatenação e comando, exportar 1080p de acordo comaspect_ratio(widescreen 16:9). - Verificação final de consistência: Verificar lista §4 (personagem/cena/eixo/eixo de poder/duração/firewall de IP/áudio/proporção) antes de publicar.
Etapa 6 · Verificação de Portão (Obrigatório)
Executar scripts/validate_pipeline.py --project <DIR> --platform bilibili [--strict] [--content-rating {normal,child}], validar contratos das quatro estações + cinco portões de qualidade: o negative_prompt de cada tomada S3 deve cobrir todos os tokens de IP bloqueados em assets/s2/negative-ip.json (atender ao requisito rígido de não reproduzir imagens protegidas de terceiros; falta em modo strict é falha); a duração deve estar no conjunto legal da plataforma em platform-presets.json; a proporção deve corresponder (mangá-drama widescreen padrão 16:9); duração do áudio S4 deve estar entre 0,3 e 180s (preservar efeitos sonoros muito curtos reais). Em --strict, avisos também são considerados falhas. Só prosseguir para composição de vídeo após aprovação.
Classificação de Conteúdo (Importante · Padrão Sem Restrição de Tema): O portão padrão é --content-rating normal — nenhuma restrição de classificação de conteúdo, temas adultos como luta/violência/suspense/sombrio podem ser produzidos normalmente, apenas o firewall de IP e os contratos de ativos são mantidos. Apenas a linha de produção infantil adiciona --content-rating child (ou o alias antigo --child): força S1 a conter batidas do tipo "fechamento de valor", S3 cobre tokens negativos de segurança infantil (violence/gore/horror/blood/mature/nudity/weapon…), escaneia batidas em busca de conteúdo adulto (falha em strict). Ou seja: --child é um "interruptor de segurança infantil" puramente opcional; não passá-lo significa que o conteúdo do mangá-drama é completamente livre e não será infantilizado.
Scripts de Busca (Risco Zero de IP)
Dois scripts usam apenas biblioteca padrão + curl do sistema, sem necessidade de pip install:
# Ativos visuais S2: Ilustrações multistilo de domínio público OBI (inclui estilo livro infantil/manhua chinês) + imagens CC0 do Openverse + arte de domínio público do Met
python scripts/fetch_visual_assets.py --out <DIR> --sources obi,openverse,met
# Áudio S4: Openverse CC0 (sem chave); preencha chave PIXABAY/FREESOUND para ativar canais de expansão
python scripts/fetch_audio.py --out <DIR>
- Portões de qualidade embutidos: licença (PD/CC0), qualidade de imagem (lado maior ≥1000 e lado menor ≥600, arquivo ≥50KB), deduplicação (SHA256 entre execuções), portão de fonte (apenas fontes institucionais), portão de sensibilidade (Openverse
mature=truesempre excluído, requisito rígido para todas as plataformas). - A transferência OBI usa motor
curl(--retry 5 --retry-all-errors -k) para contornar falhas esporádicas de SSL dourllibdo Python neste ambiente.
Cinco Portões de Qualidade (Comuns a Todas as Estações)
- Portão de Licença: S2/S4 aceitam apenas
Public Domain/CC0; introdução de CC BY 4.0 deve incluir attribution. - Portão de Qualidade de Imagem: Imagem com lado maior ≥1000 e lado menor ≥600; áudio com duração 0,3–180s, arquivo ≥100KB.
- Portão de Deduplicação: SHA256 persistido entre execuções, imagens/áudio duplicados automaticamente ignorados.
- Portão de Fonte: Apenas fontes de nível institucional / domínio público (OBI, Openverse, Met, Freesound CC0…); rejeitar fontes desconhecidas.
- Portão de Sensibilidade: Todo conteúdo exclui
mature(infantil adicionalmente reforçado); S2/S3 injetam forçadamente palavras negativas do firewall de IP, bloqueando imagens protegidas conhecidas; para IPs populares de mangá-drama / web novel pode-se referenciar sua estrutura de tema / emoção / ponto de satisfação (camada de método), mas é proibido copiar completamente personagem por personagem, cena por cena, cena icônica (cópia total).
Firewall de IP (Referenciar, Não Copiar)
- Palavras negativas constantes em
assets/s2/negative-ip.json, cobrindo Peppa Pig, Disney, Marvel, Sanrio, Numberblocks, My Little Pony, etc. imagens protegidas por direitos autorais registrados de terceiros — estas são fronteiras rígidas, independentemente de referência ou não, não podem ser reproduzidas (o portão valida forçadamente a cobertura dos tokens). - Disciplina Específica para Mangá-Drama (Referenciar, Não Copiar): O "tipo de tema, estrutura emocional, paradigma de ponto de satisfação, linguagem de câmera, ritmo" de IPs populares de mangá-drama / web novel pertencem à camada de método, não passível de direitos autorais, pode ser usado como nutriente criativo, incentiva-se referenciar; mas é proibida a cópia completa — ou seja, não copiar personagem por personagem (mesmo nome e design), não replicar cena icônica por cena, não reproduzir diretamente estilo artístico marcante / combinação de cores icônica, não transportar diálogos originais. Mesmo que o usuário mencione um sucesso específico, apenas extrair seu "esqueleto de método reutilizável" em vez de "expressão", converter para descrição original ("protagonista masculino de preto com forte destino + protagonista feminina de vermelho confrontando"), então enviar para modelo de imagem/vídeo e sobrepor negative prompt como dupla segurança para bloquear imagens protegidas de terceiros.
- Este skill não incorpora nenhum texto protegido por direitos autorais, apenas estatísticas de estrutura / padrões de escrita; todos os exemplos são de domínio público ou material próprio do usuário.
Recursos
assets/s1/: Template de estrutura de história, metodologia de compressão de adaptação, tabela de batidas preenchível, formato de roteiro, dois exemplos de adaptação.assets/s2/: Banco de palavras negativasnegative-ip.json+ explicação do firewall de IPnegative-ip-firewall.md+ metodologia de ativos de personagemcharacter-design.md+ metodologia de ativos de cenascene-multiview.md.assets/s3/: Biblioteca de templates de storyboardtemplate-library.json, banco de movimentos de câmeracamera-movements.json, predefinições de plataformaplatform-presets.json, estatísticas de tagstag-stats.json, palavras negativas de qualidadenegative-quality.md.assets/s4/: Lista de áudio CC0 buscadaaudio-manifest.json.scripts/:fetch_visual_assets.py(buscar imagens S2),fetch_audio.py(buscar áudio S4),build_storyboard.py(geração automática de scaffold de storyboard S1+S2 → S3, suporta extração automática de âncorasref_images/ seleção automática de ângulopower_dynamic/ orçamento de tomada--target-duration/ desligar sugestão de autodesenvolvimento--no-growth),resolve_ref_images.py(S5 resolver tokensref_imagespara caminhos reais de imagem, gerarstoryboard.resolved.json),build_ffmpeg_concat.py(S5 gerar lista de concatenação FFmpeg + comando a partir de storyboard.json),validate_pipeline.py(portão entre estações, padrão--content-rating normalsem restrição de conteúdo;--content-rating child/--childaciona portão rígido infantil),collect.py(coleta de autodesenvolvimento: realimentar saída da execução + avaliação humana + logs de falha para servidor de memória),load_learnings.py(carga de autodesenvolvimento: buscarlearnings.jsondo servidor de memória e cachear localmente, parabuild_storyboard.pyler sugestões de padrões de falha frequentes).memory_server/:server.py(serviço de memória sem dependências, 4 tabelas SQLite + autenticação Bearer + limitação de taxa),growth.py(agregação →snapshot/learnings.json+ recarga de priors),.env.example,README.md(implantação Caddy HTTPS / systemd / cron).references/:architecture-licenses.md(referência a projetos open source e limites de licença),workflow.md(contratos detalhados das quatro estações e uso),case-studies.md(referência a movimentos de câmera / sintaxe de storyboard de mangá-drama/curtas virais, literatura metodológica, sem copiar IP),benchmark.md(avaliação comparativa: NVP vs ViMax/seedance/ai-shortfilm/ArcReel, matriz de pontuação + teste empírico),s5-composite.md(SOP de composição S5: ciclo de cinco etapas + matriz de ferramentas + lista de verificação final de consistência).
Observações
- As grandes bibliotecas de imagens/áudio não estão incorporadas no skill (mantém portabilidade); use os scripts para buscar em tempo de execução, ou aponte para seu próprio diretório de materiais CC0 (como
./assets/characters,S4-Áudio/samples/). - Este skill é uma metodologia de orquestração + ativos autocontidos, não depende de código externo como ViMax/ArcReel para executar.
- Após obter chave BHL / token NYPL, pode-se adicionar canais
fetch_bhl()/fetch_nypl()manualmente emfetch_visual_assets.py(OBI já verificado sem necessidade de chave).
Autodesenvolvimento (Opcional · Ciclo Fechado de Dados)
Permite que o skill cresça sozinho com o uso: após cada execução da linha de produção, os indicadores objetivos / avaliações humanas / logs de falha são realimentados no banco de memória, e após agregação, as "sugestões de padrões de falha frequentes / pontuação / sinais de estilo" são realimentados para o skill, permitindo evitar problemas na próxima geração. Puramente biblioteca padrão, zero dependências, pode ser implantado independentemente em um servidor pequeno, desacoplado do corpo do skill. Implantação completa em memory_server/README.md.
Usando em uma única máquina? Não precisa implantar. Se
NVP_MEMORY_URLnão estiver definido,collect.py/load_learnings.pyconectam-se automaticamente ao SQLite dentro do skill (memory_server/data/nvp_memory.db) e realizam agregação automática após coleta, configuração zero para ciclo completo. Apenas para "resumo multi-máquina / colaboração multi-pessoa / realimentação remota" é necessário iniciarserver.py(veja abaixo "Iniciar Serviço" e README §2).
Ciclo de três etapas:
- Coleta (após executar linha de produção):
python scripts/collect.py --project <DIR> --platform bilibililê automaticamente batidas / tomadas / taxa de resolução / duração descript.json/storyboard.json/storyboard.resolved.json, escreve no banco de memória (padrão SQLite local; seNVP_MEMORY_URLestiver definido, faz POST para o serviço). Pode adicionar avaliação humana--feedback 5 overall "ritmo muito bom", ou logs de falha--failures fails.json. Para máquina offline, usar--mirror ./mirror.json --dry-runpara gerar espelho, depoiscollect.py --sync ./mirror.jsonpara sincronizar com o servidor. Adicionar--localpara forçar local,--remotepara forçar serviço. - Agregação (automática local / programada no servidor): No modo local, a agregação é feita automaticamente após a coleta; no modo HTTP, usar cron para executar
python memory_server/growth.pya cada hora, agregando as quatro tabelas SQLite emsnapshot/learnings.json, e fazendo upsert do conhecimento estável na tabelapriors. - Realimentação (antes da próxima geração):
python scripts/load_learnings.pylêlearnings.jsone cacheia em.cache/learnings.json(padrão lê snapshot local; se URL estiver definida, busca remota;--localforça local,--no-fetchapenas lê cache);build_storyboard.pylê automaticamente e imprime "sugestões de autodesenvolvimento" durante a geração (padrões de falha frequentes → evitar com antecedência, como imagens de referência não resolvidas, falta de tomada de eixo de poder), pode desligar com--no-growth.
Iniciar Serviço: python memory_server/server.py --no-auth (teste local) ou python memory_server/server.py (público, precisa de variável de ambiente NVP_API_TOKEN / --token; usar Caddy como proxy reverso para TLS). Endpoints: GET /health, POST /ingest, GET /query, GET /snapshot, GET /export.