FilmForge Motion
Les peintures sont fixes comme des photogrammes ; pas de zooms, pas de dérive. Le mouvement vient de l'intérieur du cadre : particules, brouillard, vacillement, mirage, lumière, le tout rendu sur le GPU pour rien. La vidéo payante est réservée à ce que le code ne peut pas faire (un vrai vol, une transformation qui est le point culminant du film). Ce skill remplit le champ motion de chaque plan, applique les corrections QA, exporte la timeline pour le moteur de rendu et rend la prévisualisation que le réalisateur valide.
Chemins : scripts/, templates/ et config/ ci-dessous sont des dossiers à l'intérieur de ce skill (le répertoire de base affiché lors de son chargement), placés par ./install.sh. En travaillant depuis un clone du dépôt, ils sont tools/, templates/ et config/ à sa racine.
Le moteur de rendu est painted-film-pipeline (Python et GLSL ; modules nommés ci-dessous). Toutes les valeurs de pixels sont en 4K (3840x2160) ; le moteur les met à l'échelle par K = W / 3840, donc une prévisualisation en 1080p utilise les mêmes nombres.
Étape 1. Lire le plan
Pour chaque plan : son temps, l'ambiance de sa scène et son script de couleurs, sa durée après ré-étalonnage, la musique qui l'accompagne (phrases, temps forts dans beatmap.json), ce qui est déjà dans la peinture (feu, mer, ciel, verre). La vie doit appartenir au monde de la peinture : des braises s'élèvent d'un feu qui est peint ; la neige tombe là où le ciel est.
Étape 2. Choisir sa vie (le vocabulaire)
| Effet | Paramètre (champ du plan) | Valeurs |
|---|---|---|
| Bande de brouillard dérivant | fog + fogc | (force 0..1, y où il commence, y où il est plein, vitesse de dérive) ; couleur (r, v, b) 0..1 |
| Balayage lumineux sur les hautes lumières | sweep | (période s, largeur de bande px, intensité, 0) |
| Vacillement de feu autour d'un point | flick + fire | amplitude (0,07 à 0,45) ; (x, y, rayon px) |
| Mirage thermique dans une bande | shim | (y plein, y zéro, 0, force) |
| Secousse de caméra | shake | (début s, durée s, amplitude px) |
| Transition entrante / sortante | tin, tout | ("fade" ou "white", secondes) ; par défaut une coupe franche |
| Recadrage | crop | (x0, y0, x1, y1) en pixels source |
| Teinte des particules | ashc | (r, v, b) |
| Particules | life | une recette ou une lambda sur les systèmes de particules ci-dessous |
| Éclairs | bolts | liste des moments dans le plan |
| Fissure de verre | crack | (début s, durée s) |
Systèmes de particules (painted.py) : ash(t, n, wind=(vx, vy), size=(min, max), alpha, seed) pour cendres, poussière et neige ; flakes(...) pour les gros flocons doux ; sparkles(t, n, alpha, size) pour les scintillements et étoiles ; streaks(t, n, speed) pour la pluie ; embers(t, n, src=(x, y), spread, rise, life) pour les braises s'élevant d'une source. Recettes du film réel (film_cut.py) : SNOW(n, wind), EMB(n, alpha), GLINT, RAIN, STARS(n), GOLD. Signification complète des paramètres : references/pipeline-modules.md ; recettes d'ambiance testées : references/effects-cookbook.md.
Graphismes (graphics.py, overlays.py) : rubans de fils dorés qui se dessinent, ondulent avec la musique et se cassent (T(points, t0, draw, w)) ; mots manuscrits écrits de gauche à droite (W(text, t0, x, y, size)) ; noms de lieux qui se forment à partir de la matière de la scène et s'envolent (V(...)) ; le titre final.
Étape 3. Laisser la musique la guider
graphics.Drive mesure la partition par image (niveau et impulsion). Le bloom, la flambée des braises, la lueur des fils et la respiration du texte la suivent, de sorte qu'un temps fort fait flamber les braises sans image clé. Placez les transitions et les secousses sur les temps forts de beatmap.json (shake début = le moment du temps fort moins le début du plan).
Étape 4. Écrire le champ motion
Dans shotlist.yaml, par plan (exemple : un plan de forêt en feu de Simorgh, et le faisceau du Papillon Lanterne) :
motion:
life: EMB(320)
flick: 0.09
fire: [1920, 1300, 2600]
shim: [2160, 300, 0, 0.8]
ashc: [0.62, 0.55, 0.5]
motion:
tin: [white, 0.4]
sweep: [3.0, 520, 0.35, 0]
life: GOLD
shake: [0.0, 0.4, 10]
Un plan qui ne nécessite rien reçoit motion: none (la porte de montage veut que chaque plan soit décidé).
Étape 5. Appliquer les corrections QA
Pour chaque fix dans qa.yaml : exécuter son appel (recolor ou blue de grade.py, un patch, un crop sur le plan), écrire le fichier _g, remesurer avec ledger.py palette, puis définir done: true. Le grade correspondant (niveaux de la plaque) et le suréchantillonnage 4K sont automatiques dans le moteur de rendu.
Étape 6. Exporter, rendre, regarder
python3 scripts/shotlist.py export-cut shotlist.yaml --paintings art/film > code/timeline.py
imprime la timeline sous forme de lignes P_() pour film_cut.py. Ensuite, dans le moteur de rendu :
W=1920 H=1080 python film_cut.py still out/frames 6.0 12.0 24.0 # images fixes aux temps forts de l'histoire
python film_cut.py sheet out/sheet.jpg # une image par plan
python film_cut.py video film/preview_1080p.mp4 audio/score.wav # la prévisualisation avec la partition
Regardez la prévisualisation avec le son. Vérifiez les images fixes à chaque temps fort. Ensuite, le réalisateur valide l'étape de mouvement.
Quand payer pour la vidéo
Seulement lorsque le mouvement est l'histoire et que le code ne peut pas le simuler : vol (le lancement de Simorgh : véritables plans avec variations de vitesse), une naissance ou une transformation au point culminant. Estimez son coût dans budget.py (Kling 4.0 : 16,25 crédits par 5 s en 1080p, plus la peinture d'image clé) ; peignez d'abord les images clés et passez-les par QA ; faites une ébauche à moindre coût là où le modèle propose une ébauche et finalisez une seule prise. Tout le reste est raconté en poses clés peintes qui s'arrêtent (poses: 2), comme l'anime tient une pose.
Production
- le champ
motionde chaque plan (ounone) code/timeline.pydepuis export-cut- les corrections appliquées (fichiers
_g,done: truedans qa.yaml) film/preview_1080p.mp4, images fixes aux temps forts, une feuille d'une image par plan
Liste de vérification de la porte de montage
- Chaque plan peint a un plan de mouvement ou
motion: none - Chaque correction QA appliquée et remesurée
- La prévisualisation regardée avec le son ; images fixes à chaque temps fort vérifiées
- Validée
Table de réparation
| Symptôme | Correction |
|---|---|
| Ça ressemble à un diaporama | Chaque plan fixe a besoin d'une couche vivante liée à son monde (particules, brouillard, vacillement) ; variez-les par scène |
| Les effets semblent collés | Teintez les particules avec ashc provenant de la peinture ; émetteurs aux sources peintes ; couleur du brouillard provenant du ciel |
| Images chargées, bruyantes | Moins de particules (moitié de n), alpha plus bas ; une famille d'effets par scène |
| Des plans de différentes générations ne se coupent pas ensemble | Le grade correspondant est incorrect pour cette plaque : vérifiez les niveaux ; un seul grade, grain et vignette pour tous |
| Les effets ignorent la musique | Temps forts non utilisés : placez les secousses, les flambées et les transitions sur les temps forts du beatmap |
| Le texte est difficile à lire | Déplacez-le vers la zone calme de la peinture (text_area), agrandissez, ralentissez l'écriture |
Références
references/pipeline-modules.md: les modules du moteur de rendu et chaque paramètrereferences/effects-cookbook.md: recettes testées par ambiance, issues d'un film terminé