Que fait Archival film (档案影像) ?
Films d'histoires générés par code, construits à partir de véritables archives. Chaque image est calculée (WebGL dans un Chrome sans tête, Python là où cela convient), de sorte que les résultats sont reproductibles, les sous-titres sont exacts et chaque source est vérifiée en termes de licence. L'utilisateur dirige le goût ; references/style-canon.md contient tout ce qu'il a déjà demandé — lisez-le d'abord, il remplace vos paramètres par défaut.
Valeurs par défaut (modifier uniquement si l'utilisateur le demande)
Chinois, vertical 1080×1920, environ 3 minutes + crédits après le montage principal. Narration activée (voix neurale Edge, ton documentaire masculin profond, 1.2× — la plage de l'utilisateur 1.1–1.25×) lisant les sous-titres. Musique : un morceau de bibliothèque audio pour tout le film, crédits inclus. Livraison = MP4 + couverture conçue + texte pour Douyin et Xiaohongshu. Mémoire : tous les processus de rendu/capture/modèle utilisent ensemble au maximum un quart de la RAM (8 Go → 2 Go). Plus lent est acceptable.
Configuration (une fois par machine, puis une fois par film)
sh scripts/setup.sh→~/.cache/archival-film/: un environnement virtuel Python 3.11 ($AF/py: numpy, pillow, onnxruntime, edge-tts), le modèle de profondeur, l'enregistrement de machine à écrire, les packages node pour WebGL. Il se trouve en dehors des dossiers de projet, donc nettoyer un projet ne casse jamais les outils. Polices :PROJECT=~/.cache/archival-film/assets sh scripts/fetch_fonts.sh classic.sh scripts/new_project.sh <dir>→ dossier de projet avecplates/ depth/ music/ sfx/ footage/ out/ prev/ web/, polices/machine à écrire/node_modules liés, le kit web et un modèlefilm.py. Exécutez les scripts commePROJECT=<dir> FILM=film $AF/py <skill>/scripts/<script>.py ….
Mode test rapide
Lorsque l'utilisateur demande un court essai ("随便做个10s试试", un échantillon, un test de la compétence), sautez les quatre points de contrôle, gardez tout le reste (matériel réel, faits, narration, son, l'apparence), et dites dans la livraison quels choix vous avez faits en son nom. Un exemple de 10 s fonctionnel est templates/film_collage_example.py (+ templates/cuts_example.json).
Workflow — avec les quatre points de contrôle de l'utilisateur
- Brief — sujet, durée, contraintes éventuelles. Pour une refonte, listez tout ce que les versions précédentes ont utilisé et évitez-le complètement (
references/narrative.md§ Remakes). - Faits et matériel — liste de faits sourcés ; trouvez et téléchargez le matériel avec licences (
references/sourcing.md,scripts/cands.py,scripts/fetch_commons.py) ; images et restauration si utiles (references/enhancement.md) ; cartes de profondeur (scripts/depth.py) ; planches contact avec repères de grille. - Script — concevez-le comme un marketeur pour un inconnu (
references/narrative.md) : prémisse avec une contradiction dans les 3 premières secondes, une question ouverte à laquelle on répond à la fin, des points d'ancrage pour les noms/lieux inconnus, un substitut pour le spectateur, une escalade toutes les 20 à 30 secondes, des sous-titres écrits pour être lus à voix haute dans le budget de parole (references/narration.md). → Point de contrôle 1 : script. Montrez le texte complet des sous-titres, l'accroche, la question ouverte et la promesse du titre/couverture prévu. Attendez l'approbation avant tout travail d'image. - Musique, palette, apparence, voix — proposez 2–3 apparences à partir de
references/style-menu.mdadaptées au sujet, une palette simple et audacieuse (1–2 couleurs fortes par époque + noir + papier ; montrez-la sur une vraie image brute, pas seulement en échantillons), un morceau de bibliothèque audio pour tout le film, trouvé en ligne (Kevin MacLeod / FMA / CC0 —references/audio.md; classique uniquement si l'utilisateur veut une musique d'époque ; jamais de changement de chanson entre les sections — "全局用一个bgm") avec une ambiance/énergie qui correspond (mesurez avecscripts/beats.py; vif pour les affaires/tech), et des auditions vocales (scripts/narrate.py --audition). → Point de contrôle 2 : musique + palette (+ apparence et voix). - Chronométrage — ajustez le seul morceau avec
Kit.music_bed()(→scripts/music_edit.py) ; générez la narration (scripts/narrate.py), corrigez chaque dépassement qu'elle signale, synchronisez la frappe avec la voix (apply_narration) ; placez les coupures et les hits sur les attaques de la musique. - Images — par défaut une animation collage (剪报画), lisez
references/collage.md: découpez le matériel en morceaux avecscripts/cutout.py(figures découpées aux ciseaux, coupures déchirées, vrais titres, régions de carte), animez les morceaux — jamais la caméra — en tant queCOLLAGEdans film.py (images clés, aspects visuels photo/demi-teinte/tache/remplissage/encre/couleur, déchirure, croissance, secousse, balancement), exportez avecscripts/export_web.py, rendez avecweb/collage.js. Une couleur d'accent avec signification, jamais une sépia uniforme. Ajoutez d'autres techniques là où elles conviennent (references/style-menu.mdpalette ; éclatement et assemblage de points dansweb/example_opening.js, aspects visuels Python dansreferences/looks.md). La scène à caméra continueweb/journey.jsa été rejetée comme valeur par défaut (references/webgl.md). La colorisation uniquement comme un effet N&B→couleur, créditée. Écrivez-le avecscripts/collage_kit.py(sous-titres depuis la voix, morceaux atterrissant sur les temps, empilement par arrivée). Ou réalisez le film à partir des modules d'effets modernes (web/fx.js,references/fx.md) : dot morph, wirephoto, chambre noire, typo cinétique, tableau d'enquête, montage d'images + rotoscopie gravure sur bois, encre fluide, pixel sort, nuage de points, portrait de personnage, plusholdet marques de guidage SVG. D'abord écrivez la liste des plans — par ligne : le seul sujet à voir, où, le mot repère (Kit.W), comment l'effet y conduit l'œil, et pourquoi cet effet signifie la ligne ; pas de signification → unhold. L'effet culmine sur le mot repère et se résout en un sujet clair ("特效要有明确的视觉引导,而不是堆砌素材"). Écrivez-le avecscripts/fx_plan.py→Kit.fx_cuts(), vérifiez chaque image avecscripts/fx_sheet.py(est-ce quevoirest la première chose que vous voyez ?) avant le rendu. Proposez-le au point de contrôle 2 à côté du collage pour les sujets modernes / commerciaux / techniques. → Point de contrôle 3 : images fixes / échantillon. Envoyez une planche contact des images clés et un échantillon de 10 à 20 secondes avec son — ou le film entier en coupe approximative (scripts/rough.py, ~150 Mo) lorsque la mémoire est limitée ou que l'utilisateur veut tout voir. - Son — chaque effet est un enregistrement réel trouvé en ligne avec
scripts/fetch_sfx.py(Commons, 78 tours et enregistrements de terrain de l'Internet Archive, Freesound avec une clé ; licence enregistrée, auto-découpé danssfx/bank.json). Conception dense :Kit.sfx_events()place un claquement/claque/déchirure de papier sur chaque atterrissage et déchirure (Kit.fx_sfx_events()fait de même pour les films d'effets : whoosh, radiofax, verser/éclabousser, projecteur, glitch, vent, clés) ; ajoutez des ambiances par section et des sons diégétiques ; voix d'époque à partir d'enregistrements PD (references/audio.md,scripts/sfx_build.py). → Point de contrôle 4 : liste sonore. Envoyez la liste des effets et des voix d'époque avec les heures et les sources avant le rendu final. - Rendu et mixage —
scripts/run_chunks.py(budget mémoire, morceaux cassés relancés), concaténation, puisscripts/mixdown.py --voice …(voix en ducking, −14 LUFS / −1 dBTP). - Livraison — vérifiez (
references/verification.md), puis envoyez le MP4, la couverture et le texte pour les plateformes (references/platform-copy.md) ; un aperçu 720p de moins de 30 Mo si l'utilisateur suit depuis un téléphone.
Ce qui compte le plus pour cet utilisateur (forme courte ; raisons dans style-canon.md)
- Uniquement du matériel d'archives réel ; les effets de code agissent dessus. Pas d'objets modélisés, pas d'emblèmes auto-dessinés.
- Une histoire claire pour un inconnu ; les petites personnes face au grand événement montré par les faits, jamais prêché ; pas de slogans IA ; les grands mots typographiques proviennent des sources.
- Pensée d'animateur : les morceaux bougent, pas la caméra (les survols étaient "烂完了") ; découpez le matériel comme un collage de journal ; pas de zoom puis coupe ; pas de flashs couleur plein écran comme transitions.
- Accent coloré fort avec signification — jamais une sépia/jaune uniforme sur tout ; utilisez les effets pour de vrai.
- Chaque plan a un seul sujet auquel l'effet conduit l'œil, sur le mot qui le nomme — les effets comme verbe de la ligne, jamais pour eux-mêmes ou pour entasser du matériel ; des
holdsobres entre eux. SVG uniquement pour les marques de guidage, jamais pour dessiner des images. - Effets riches et impressionnants — mais pas trop travaillés, ornement raffiné ("太精致" a été rejeté). Avant-garde plutôt que décoratif.
- Un seul morceau d'ambiance générique de fond pour tout le film (CC BY / CC0, trouvé en ligne) dont l'ambiance correspond ; le classique semblait "怪" ; narration 1.1–1.25× ; pas de "ding" ; machine à écrire par caractère tapé, pas de cloche ; son réel dense.
- Sous-titres complets et maintenus jusqu'à la ligne suivante ; palette audacieuse et simple ; morceaux ultérieurs par-dessus.
- Sous-titres sur des bandes pleines, lisibles sur un téléphone ; une couleur thématique forte ; crédits après le montage principal.
- Les refontes ne partagent rien avec les versions antérieures (
scripts/overlap_check.py).
Fichiers
scripts/— image :render_print.py anim.py futur.py captions.py cjkwrap.py base.py cfg.py; matériel :cands.py fetch_commons.py fetch_ia.py depth.py cutout.py fetch_fonts.sh; films collage / effets :collage_kit.py fx_plan.py fx_sheet.py rough.py; audio :fetch_sfx.py beats.py onsets.py music_edit.py narrate.py sfx_build.py mixdown.py; pont WebGL :export_web.py; rendu :run_chunks.py; vérifications :contact.py grid.py overlap_check.py; environnement :setup.sh new_project.sh.web/—index.html(charge?scene=NAME),fx.js+fx/*.js(modules d'effets modernes,fx/hold.jsimage simple,fx/guide.jsmarques de guidage SVG),collage.js(la scène d'animation découpée par défaut, pilotée par out/timeline.json),captions.js(bandeaux de sous-titres partagés),journey.js(scène à caméra continue, rejetée comme défaut),example_opening.js(scène plus ancienne construite à la main : éclatement, champ de points — réutilisez ses effets, pas ses coupures/flashs),capture.mjs(capture déterministe),package.json.templates/film_template.py— le format du module film (plans, sous-titres, spécifications d'impression, événements sonores, crédits) ;templates/film_collage_example.py+cuts_example.json— un film collage complet de 10 s (San Francisco 1906) ;templates/film_journey_example.py— l'ancienne version voyage de celui-ci.references/— style-canon, narrative, narration, style-menu, collage, looks, webgl, audio, sourcing, enhancement, platform-copy, verification, known-gaps (éléments ouverts pour les prochaines séries de correctifs).