Repository navigation
fix(genai,#18574): aligne la consigne du fondu enchaîne sur sa solution (Video/01-1) - #19632
Conversation
…on (Video/01-1) La consigne de l'exemple guide 1 prescrivait `clip.fadeout()` / `clip.fadein()` -- un fondu vers le NOIR -- et ne nommait jamais `padding`, alors que la solution fait un fondu ENCHAINE (`vfx.CrossFadeIn`/`vfx.CrossFadeOut` + `concatenate_videoclips(method="compose", padding=-0.5)`) et que sa propre lecture declare qu'« un simple FadeOut/FadeIn aurait au contraire fait passer l'image par le noir ». Un etudiant qui suivait les etapes obtenait donc exactement le resultat que la lecture declare faux. Etapes et indices sont reecrits pour prescrire le geste reel : `padding` negatif nomme, et la confusion CrossFade* / Fade* explicitee. La duree comparee etait en outre partiellement circulaire (formule arithmetique contre propriete de la meme composition, jamais une re-sonde du fichier ecrit). Elle est fermee en CITANT la re-sonde independante qui existe deja en Section 3 (`ffmpeg.probe` sur `crossfade.mp4` -> `4.0` s), sans ajouter de code. Correctif markdown-only : aucune cellule de code touchee, exception C.2, pas de re-execution due. Le diff se limite a 10 insertions / 8 suppressions. See #18574 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
|
Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
|
Scope = notebooks CHANGED in this PR, not the whole corpus. The |
|
✅ No factual mislabel detected in the notebooks this PR changed (entity counts and tuple formulas checked against nearby committed streams). Scope = notebooks CHANGED in this PR, not the whole corpus. The |
Golden-Set Execution (H.7 P3)✅ 9/9 notebooks passed (certified reproducible)
Pinned lockfile: |
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
|
[ADJOINT PREFLIGHT] |
|
[ADJOINT PREFLIGHT] |
Grain: MED/notebook-python — lane myia-po-2024:CoursIA — prev: MED/notebook-python #19627
Objet
See #18574— deuxième des quatre PR issues du verdict de seconde passe, qui a classé À MUSCLER l'exemple guidé 1 de01-1-Video-Operations-Basics.ipynb(contribution @kaiiine,PR #18484) : la consigne prescrit un autre geste que la solution.Le défaut, mesuré
clip.fadeout()/clip.fadein()vfx.CrossFadeOut/vfx.CrossFadeInconcatenate_videoclips(..., method="compose", padding=-0.5)paddingvfx.FadeOut(duration)/vfx.FadeIn(duration)Or la lecture du même exemple (cellule 15) écrit noir sur blanc : « Un simple
FadeOut/FadeInaurait au contraire fait passer l'image par le noir. » Un étudiant qui suivait les étapes obtenait donc exactement le résultat que la lecture déclare faux — et sans jamais voir lepadding, il ne pouvait pas deviner le chevauchement.Correction
Étapes et indices réécrits pour prescrire le geste réel :
CrossFadeOutsur la fin de chaque segment (sauf le dernier),CrossFadeInsur le début de chacun (sauf le premier), et l'assemblage par chevauchement avecpaddingnégatif nommé. Un indice explicite écarte la confusionCrossFade*(les deux plans se superposent, ~50 % d'opacité) /Fade*(fondu vers le noir), et donne la durée attendue comme signature du chevauchement :5 s - 2 × 0,5 s = 4 s.Second point, fermé sans ajouter de code. La durée comparée était partiellement circulaire :
4.00s« obtenue » venait deresult.duration, une propriété de la composition en mémoire, comparée à une formule arithmétique — jamais une re-sonde du fichier écrit. Plutôt que d'ajouter une sonde (ce qui aurait imposé une ré-exécution), la lecture cite la re-sonde indépendante qui existe déjà en Section 3 :ffmpeg.probesurcrossfade.mp4→4.0s. Les deux mesures concordent, et c'est la seconde — extérieure à moviepy — qui ferme la vérification.Pourquoi markdown-only (et pas de ré-exécution)
Aucune cellule de code n'est touchée. La re-exécution a été mesurée avant d'être écartée : le carnet relancé tel quel donne 14 sorties différentes sur 31 (4 images PNG non déterministes à ~40 octets près, plus des durées et benchmarks), soit ~260 Ko de base64 churnés — un diff de plusieurs centaines de Ko pour une correction d'un paragraphe. Le correctif relève donc de l'exception C.2 (markdown-only) :
execution_countetoutputsrestent ceux de la passe réellement exécutée.Pour mémoire, la mesure a exigé de réparer l'environnement (règle F) :
ffmpeg-pythonetdecordmanquaient sur l'interpréteur du kernelspecpython3— les installer était la condition pour distinguer une ré-exécution fidèle d'une dégradation silencieuse.Validation — organes passés
check_null_exec(H.3 pre-commit)check_cell_source_parsescheck_credited_examplescheck_interp_positioningcheck_c2_compliance·check_notebook_outputs_requiredcheck_prose_quantitative_claims --diff(bloquant)restore_accents_canonical --checkH.3·#13326Pré-existants, signalés (non touchés)
check_split_reading_cells:generic_pair cellules [15, 16]— présent à l'identique surorigin/main, avant toute modification.restore_accents_canonical --check:7 accent(s) in 5/25 markdown cells— même compte en base et en tête. Curer ces accents est une tranche d'accents au sens du ruling Rollout deaccent repo-wide : piloter les tranches par serie (~946 notebooks candidats) #16638, qui exige que rien d'autre que les accents ne change dans la PR : les mêler ici violerait cet invariant. Hors périmètre, à traiter par sa propre tranche.Suivi
Restent
À MUSCLER:Image/01-1(exemple 3, comptage de mots du prompt sans rapport avec l'image) etTexte/06(exemple 1, le PDF jamais exercé).🤖 Generated with Claude Code