Archival Film (档案影像)
Filmes de história gerados por código, construídos a partir de material de arquivo real. Cada quadro é computado (WebGL em Chrome headless, Python onde couber), para que os resultados sejam reproduzíveis, as legendas sejam exatas e cada fonte tenha sua licença verificada. O usuário direciona o gosto; references/style-canon.md contém tudo o que ele já pediu — leia-o primeiro, pois ele substitui seus padrões.
Padrões (altere apenas se o usuário pedir)
Chinês, vertical 1080×1920, cerca de 3 minutos + créditos após o corte principal. Narração ativada (voz neural Edge, tom documental masculino grave, 1,2× — a faixa do usuário 1,1–1,25×) lendo as legendas. Música: uma faixa de biblioteca stock para todo o filme, créditos incluídos. Entrega = MP4 + capa projetada + cópia para Douyin e Xiaohongshu. Memória: todos os processos de renderização/captura/modelo juntos usam no máximo um quarto da RAM (8 GB → 2 GB). Mais lento é aceitável.
Configuração (uma vez por máquina, depois uma vez por filme)
sh scripts/setup.sh→~/.cache/archival-film/: um ambiente virtual Python 3.11 ($AF/py: numpy, pillow, onnxruntime, edge-tts), o modelo de profundidade, a gravação da máquina de escrever, pacotes node para WebGL. Fica fora das pastas do projeto, portanto limpar um projeto nunca quebra as ferramentas. Fontes:PROJECT=~/.cache/archival-film/assets sh scripts/fetch_fonts.sh classic.sh scripts/new_project.sh <dir>→ pasta do projeto complates/ depth/ music/ sfx/ footage/ out/ prev/ web/, fontes/máquina de escrever/node_modules vinculados, o kit web e um modelofilm.py. Execute scripts comoPROJECT=<dir> FILM=film $AF/py <skill>/scripts/<script>.py ….
Modo de teste rápido
Quando o usuário pedir um teste curto ("随便做个10s试试", uma amostra, um teste da habilidade), pule os quatro pontos de verificação, mantenha todo o resto (material real, fatos, narração, som, visual) e diga na entrega quais escolhas você fez em nome dele. Um exemplo de 10 s funcional está em templates/film_collage_example.py (+ templates/cuts_example.json).
Fluxo de trabalho — com os quatro pontos de verificação do usuário
- Briefing — tópico, duração, restrições. Para uma refilmagem, liste tudo o que as versões anteriores usaram e evite tudo (
references/narrative.md§ Remakes). - Fatos e material — lista de fatos com fontes; encontre e baixe material com licenças (
references/sourcing.md,scripts/cands.py,scripts/fetch_commons.py); filmagens e restauração se útil (references/enhancement.md); mapas de profundidade (scripts/depth.py); contatos com marcas de grade. - Roteiro — projete-o como um marketeiro para um estranho (
references/narrative.md): premissa com uma contradição nos primeiros 3 s, uma pergunta em aberto paga no final, âncoras para nomes/lugares desconhecidos, um substituto para o espectador, escalada a cada 20–30 s, legendas escritas para serem lidas em voz alta dentro do orçamento de fala (references/narration.md). → Ponto de verificação 1: roteiro. Mostre o texto completo da legenda, o gancho, a pergunta em aberto e a promessa planejada do título/capa. Aguarde aprovação antes de qualquer trabalho com imagens. - Música, paleta, visual, voz — proponha 2–3 visuais de
references/style-menu.mdadequados ao assunto, uma paleta ousada e simples (1–2 cores fortes por época + preto + papel; mostre-a em um still bruto real, não apenas como amostras), uma faixa de biblioteca stock para todo o filme, encontrada online (Kevin MacLeod / FMA / CC0 —references/audio.md; clássica apenas se o usuário quiser música de época; nunca mude a música entre seções — "全局用一个bgm") com um clima/direção que se encaixe (meça comscripts/beats.py; animado para negócios/tecnologia), e audições de voz (scripts/narrate.py). → Ponto de verificação 2: música + paleta (+ visual e voz). - Temporização — encaixe a faixa única com
Kit.music_bed()(→scripts/music_edit.py); gere a narração (scripts/narrate.py), corrija todos os excessos que ela relatar, sincronize a digitação com a voz (apply_narration); coloque cortes e acentos nos ataques da música. - Imagens — por padrão uma animação de colagem (剪报画), leia
references/collage.md: corte o material em pedaços comscripts/cutout.py(figuras recortadas com tesoura, recortes rasgados, manchetes reais, regiões de mapa), anime os pedaços — nunca a câmera — comoCOLLAGEem film.py (keyframes, looks de impressão foto/meio-tom/marca/preenchimento/tinta/cor, rasgo, crescer, sacudir, balançar), exporte comscripts/export_web.py, renderize comweb/collage.js. Uma cor de destaque com significado, nunca um sépia uniforme. Adicione outras técnicas onde couberem (references/style-menu.mdpaleta; fragmentação e montagem de pontos emweb/example_opening.js, looks de impressão Python emreferences/looks.md). O movimento de câmera contínuaweb/journey.jsfoi rejeitado como padrão (references/webgl.md). Colorização apenas como efeito P&B→cor, com créditos. Escreva comscripts/collage_kit.py(legendas da voz, pedaços pousando nos acentos, empilhamento por chegada). Ou faça o filme a partir dos módulos de efeito modernos (web/fx.js,references/fx.md): dot morph, wirephoto, darkroom, kinetic type, investigation board, footage montage + woodcut rotoscope, ink fluid, pixel sort, point cloud, character portrait, maisholde marcas de guia SVG. Primeiro escreva a lista de planos — por linha: o único sujeito a ser visto, onde, a palavra de destaque (Kit.W), como o efeito guia o olhar para lá, e por que esse efeito significa a linha; sem significado → umhold. O efeito atinge o pico na palavra de destaque e resolve em um sujeito limpo ("特效要有明确的视觉引导,而不是堆砌素材"). Escreva comscripts/fx_plan.py→Kit.fx_cuts(), verifique cada quadro comscripts/fx_sheet.py(oseeé a primeira coisa que você vê?) antes de renderizar. Ofereça no ponto de verificação 2 ao lado da colagem para assuntos modernos / empresariais / tecnológicos. → Ponto de verificação 3: stills / amostra. Envie uma folha de contato de stills-chave e uma amostra de 10–20 s com som — ou o filme inteiro como um corte bruto (scripts/rough.py, ~150 MB) quando a memória estiver apertada ou o usuário quiser ver tudo. - Som — cada efeito é uma gravação real encontrada online com
scripts/fetch_sfx.py(Commons, Internet Archive 78s e gravações de campo, Freesound com uma chave; licença registrada, cortada automaticamente emsfx/bank.json). Design denso:Kit.sfx_events()coloca um tapa/baque/rasgo em cada pouso e rasgo (Kit.fx_sfx_events()faz o mesmo para filmes de efeito: whoosh, radiofax, pour/slosh, projetor, glitch, vento, teclas); adicione ambiência por seção e sons diegéticos; vozes de época de discos de domínio público (references/audio.md,scripts/sfx_build.py). → Ponto de verificação 4: lista de som. Envie a lista de efeitos e vozes de época com tempos e fontes antes da renderização final. - Renderizar e mixar —
scripts/run_chunks.py(orçamento de memória, blocos quebrados são reexecutados), concatene, depoisscripts/mixdown.py --voice …(voz com duck, −14 LUFS / −1 dBTP). - Entregar — verifique (
references/verification.md), depois envie o MP4, a capa e a cópia da plataforma (references/platform-copy.md); uma prévia em 720p com menos de 30 MB se o usuário estiver acompanhando de um celular.
O que mais importa para este usuário (forma curta; razões em style-canon.md)
- Apenas material de arquivo real; efeitos de código agem sobre ele. Nenhum objeto modelado, nenhum emblema autodesenhado.
- Uma história clara para um estranho; pessoas pequenas vs. o grande evento mostrado por fatos, nunca pregado; sem slogans de IA; palavras tipográficas grandes vêm das fontes.
- Pensamento de animador: as peças se movem, não a câmera (vôos eram "烂完了"); corte o material como uma colagem de jornal; sem zoom-e-depois-corte; sem flashes de cor em tela cheia como transições.
- Ênfase de cor forte com significado — nunca um sépia/amarelo uniforme sobre tudo; use os efeitos para valer.
- Cada quadro tem um sujeito para onde o efeito guia o olhar, na palavra que o nomeia — efeitos como o verbo da linha, nunca por si mesmos ou para empilhar material; holds simples entre eles. SVG apenas para marcas de guia, nunca para desenhar figuras.
- Efeitos ricos e impressionantes — mas não extravagantes, ornamentos refinados ("太精致" foi rejeitado). Vanguarda sobre decorativo.
- Uma faixa de fundo stock genérica para todo o filme (CC BY / CC0, encontrada online) cujo clima se encaixa — clássico soou "怪"; narração 1,1–1,25×; sem "ding"; máquina de escrever por caractere digitado, sem campainha; som real denso.
- Legendas completas e mantidas até a próxima linha; paleta ousada e simples; peças posteriores por cima.
- Legendas em blocos sólidos, legíveis em um celular; uma cor de tema forte; créditos após o corte principal.
- Refilmagens não compartilham nada com versões anteriores (
scripts/overlap_check.py).
Arquivos
scripts/— imagem:render_print.py anim.py futur.py captions.py cjkwrap.py base.py cfg.py; material:cands.py fetch_commons.py fetch_ia.py depth.py cutout.py fetch_fonts.sh; filmes de colagem/efeito:collage_kit.py fx_plan.py fx_sheet.py rough.py; áudio:fetch_sfx.py beats.py onsets.py music_edit.py narrate.py sfx_build.py mixdown.py; ponte WebGL:export_web.py; renderização:run_chunks.py; verificações:contact.py grid.py overlap_check.py; ambiente:setup.sh new_project.sh.web/—index.html(carrega?scene=NAME),fx.js+fx/*.js(módulos de efeito modernos,fx/hold.jsimagem simples,fx/guide.jsmarcas de guia SVG),collage.js(a cena de animação de recorte padrão, dirigida por out/timeline.json),captions.js(blocos de legenda compartilhados),journey.js(cena de câmera contínua, rejeitada como padrão),example_opening.js(cena mais antiga construída à mão: fragmentação, campo de pontos — reutilize seus efeitos, não seus cortes/flashes),capture.mjs(captura determinística),package.json.templates/film_template.py— o formato do módulo do filme (planos, legendas, especificação de impressão, eventos de som, créditos);templates/film_collage_example.py+cuts_example.json— um filme de colagem completo de 10 s (San Francisco 1906);templates/film_journey_example.py— a versão mais antiga de jornada dele.references/— style-canon, narrative, narration, style-menu, collage, looks, webgl, audio, sourcing, enhancement, platform-copy, verification, known-gaps (itens em aberto para as próximas rodadas de patches).