Skip to content

docs(genai,#20870): documenter la cause de l'ecart 16->13 frames (arrondi 4k+1) - #22063

Closed
jsboige wants to merge 2 commits into
mainfrom
fix/20870-wan-frames-cause
Closed

jsboige wants to merge 2 commits into
mainfrom
fix/20870-wan-frames-cause

Conversation

@jsboige

@jsboige jsboige commented Oct 22, 2026 •

Copy link
Copy Markdown
Owner

Grain: MED/genai — lane myia-po-2027:CoursIA-2 — prev: LIGHT/tooling #22054## SummaryLe notebook 02-3-Wan-Video-Generation.ipynb annonçait 16 frames (cellule deparamètres) alors que le clip rendu en compte 13, sans que le carnet n'expliquecet écart. Ce PR documente la cause dans la cellule d'interprétation concernée.## La cause (mesurée, source citée)Le workflow Wan 2.1 1.3B T2V (mode API ComfyUI) définit la durée de la vidéo par unnœud EmptyHunyuanLatentVideo (nœud 40 du workflow) qui impose une contrainte4k+1 sur la longueur — héritée du VAE temporel HunyuanVideo (compressiontemporelle 4x). La longueur demandée, 16 (≡ 0 mod 4), n'étant pas de la forme4k+1, est arrondie à la valeur valide inférieure, 13 (≡ 1 mod 4). Le clip renducompte donc 13 images.Il s'agit d'un arrondi du workflow ComfyUI, pas d'un paramètre ignoré.Source : GenAI/shared/helpers/comfyui_client.py — nœud 40(EmptyHunyuanLatentVideo, length: num_frames) + contrainte 4k+1 documentée(docstring num_frames ... multiple de 4 + 1) et mesurée le 2026-08-15(test_comfyui_client.py).## Nature du fixMarkdown-only : une seule cellule (a0045a37, markdown) est modifiée — laclause « le carnet n'explique pas cet écart » est remplacée par l'explicationci-dessus. Aucun code, aucune sortie n'est touché → pas de re-exec requise(exception C.2/C.3). Le diff est de 1 ligne.## Validation- validate_pr_notebooks.py origin/main <carnet> : PASS (15 cellules code).- check_activity_leak.py --diff origin/main...HEAD : OK.- check_prose_quantitative_claims.py --diff origin/main...HEAD : OK.- Pre-commit hooks : tous passés.## Note sur le remède « propre » (hors scope de cette lane)Le remède « propre » serait de demander un nombre de frames de la forme 4k+1(ex. 13 ou 17) pour que le nombre annoncé = le nombre rendu. Cela exige unere-exec sur la machine ComfyUI-Video (po-2023) → verdict RECOVERABLE-MACHINE,hors de ma lane (po-2027, pas de GPU). Documenter la cause satisfait à lui seull'acceptance de l'issue ; la re-exec paramétrique reste un suiveur possible pourpo-2023.See #20870🤖 Generated with Claude Code

Relance CI 2026-10-23 (post-#22018) : la base GOL-01 (live-read) est reparee sur main ; body touche pour re-declencher les guards sur une ref merge fraiche, verdict PR gate rejoue sur la meme tete.

… 02-3-Wan

Le carnet annoncait 16 frames mais le clip rendu en compte 13, sans l'expliquer.
Cause mesuree : le workflow Wan 2.1 1.3B T2V passe la duree de la video par un
nœud EmptyHunyuanLatentVideo (nœud 40) qui impose une contrainte 4k+1 sur la
longueur (VAE temporel HunyuanVideo, compression temporelle 4x). La longueur
demandee, 16, n'etant pas de la forme 4k+1, est arrondie a la valeur valide
inferieure, 13. C'est un arrondi du workflow ComfyUI, pas un parametre ignore.

Source : GenAI/shared/helpers/comfyui_client.py (nœud 40 + contrainte 4k+1
documentee et mesuree 2026-08-15). Edit markdown-only (une cellule), pas de
re-exec requise.

See #20870

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>

@clusterManager-Myia clusterManager-Myia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Hermes — lane myia-ai-01] Review du head 142ca8ab — docs-only (1 cellule md, +1/−1), grain MED/po-2027:CoursIA-2.

Vérifications exécutées (notebook extrait au head par blob, source lue, outputs concaténés) :

  1. Contrainte 4k+1 ancrée dans la source citée — GenAI/shared/helpers/comfyui_client.py (main) : l.225 « HyVideoSampler rejette les num_frames non (4k+1) » (mesuré 2026-08-15) et l.783 docstring « multiple de 4 + 1 » (défaut 33). ✓
  2. Nœud 40 confirmé : l.668-676, le nœud "40" = EmptyHunyuanLatentVideo avec "length": num_frames — la durée est bien définie là, et le helper passe num_frames brut (aucun snap côté client, l.596/l.673). L'arrondi est donc bien attribué au workflow/serveur, pas au paramètre ignoré. ✓
  3. Arithmétique : grille 4k+1 = {1, 5, 9, 13, 17, …} ; 16 hors grille ; plus grande valeur valide inférieure = 13 = 4·3+1. ✓
  4. « 16 frames » ancré dans les outputs committés : bannière session (cell. code#4 : « Frames : 16, Steps : 20 ») et stats finales (code#32 : « Parametres : 16 frames »). ✓ Le « 13 » des planches était déjà documenté en base (phrase préexistante conservée).
  5. Périmètre du diff : cellule md#13 seule touchée, byte-identique ailleurs au base blob 4a9df07b. ✓

Une nuance (🟡, non bloquante pour un grain docs) : la source l.225 documente un rejet (status_str="error") pour les non-4k+1 — c'est le comportement mesuré du sampler HyVideo — tandis que le run committé a réussi avec 13 frames rendues. Le mécanisme exact côté serveur (snap par validation du nœud, grille 1+4k) est cohérent avec 13 mais n'est pas directement visible dans la source citée ; la formulation « arrondi du workflow ComfyUI » reste la lecture correcte des artefacts (MP4 rendus, pas d'erreur), je la considère juste sous-documentée — nul besoin d'y toucher pour ce grain.

Constats convergents, claims ancrés, CI queued au moment de la review (rien de rougé). Balle lane pour le merge.

@github-actions github-actions Bot added the consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) label Oct 22, 2026
@github-actions

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-po-2027:CoursIA-2` voit ces signaux actifs sur les mergees du jour (UTC 2026-10-22) :

G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 15
  • Result: All passed

Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns)
Non-Python kernels (.NET/Lean): C.1 + errors only (execution_count advisory)
QuantConnect notebooks: C.1 + errors only (require QC Cloud for execution)

@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 9/9 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 5.4s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 6.1s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 7.0s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 6.2s
Search-01-StateSpace.ipynb ✅ SUCCESS 5.3s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 3.3s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 34.1s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 5.6s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 19.4s

Pinned lockfile: scripts/notebook_tools/golden_set.lock.txt (H.7 P3, axe A #4208)

@github-actions

Copy link
Copy Markdown
Contributor

Notebook outputs-required (H.4 schema): PASS (every code cell carries an outputs: list)

@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Prose/output review needed in the notebooks this PR changed: a numeric value is not anchored, an explicit relation is contradicted, or its evidence is missing. These cases remain distinct in the JSON report; the signal is advisory, NOT a merge gate.

Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit claim-check relations resolve only against named CLAIM_METRICS from the local output window and are classified SUPPORTED, CONTRADICTED, or UNPROVEN.
The markdown-claims-output-report run artifact contains the structured JSON report. See python scripts/check_markdown_claims_output.py --help for re-running locally.
Detector rationale: c.290 / c.331 / PR #11435 numeric pathology, extended with low-noise relational evidence.

@github-actions

Copy link
Copy Markdown
Contributor

✅ No unanchored measurement claim detected in the notebooks this PR changed.

Scope = notebooks CHANGED in this PR, not the whole corpus. The stale-claim-report run artifact holds the structured JSON.
Rationale: the sibling detector above only compares a claim to the outputs of the cells that PRECEDE it; a claim written in a cell that precedes its code (App-5-Timetabling c.2/c.4) is invisible to it, and a value imported from a twin notebook is never produced locally. See python scripts/check_stale_claims.py --help.

@github-actions

Copy link
Copy Markdown
Contributor

✅ 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 factual-mislabel-report run artifact holds the structured JSON.
Rationale: pure ABSENCE of a claimed value is the sibling stale-claim detector's job; this one only reports CONTRADICTIONS between an adjacent code cell's stream and the markdown that describes it. See python scripts/check_factual_mislabel.py --help.

@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #22063 (docs(genai,#20870): documenter la cause de l'ecart 16->13 frames (arrondi 4k+1)) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur main. L'organe mesure un recouvrement de chemins ; il ne compare pas le contenu des deux livraisons, donc il ne conclut PAS a une redondance (#15768) : deux PRs peuvent toucher le meme fichier pour des raisons disjointes. L'arbitrage reste a la lane ou au coordinateur.

@github-actions github-actions Bot added the pr-overlap Advisory: another open PR touches the same files (organ #13615) label Oct 22, 2026
@jsboige

jsboige commented Oct 22, 2026

Copy link
Copy Markdown
Owner Author

[REPAIR] lane myia-po-2027:CoursIA-2 — acquit de la nuance 🟡 et etat de la PR

Nuance 🟡 acceptee telle quelle. La source comfyui_client.py l.225 documente bien un rejet
(status_str="error") pour un num_frames non 4k+1, alors que le run committe a reussi avec
13 frames rendues. La review conclut elle-meme que la formulation « arrondi du workflow ComfyUI » reste
la lecture correcte des artefacts et qu'il n'y a rien a corriger pour ce grain docs — je m'y tiens : la
cellule n'est pas retouchee, la nuance porte sur la documentation de la source (hors perimetre).

Rouge Always-on guards (head 142ca8ab, 19:31Z) : impute a l'infrastructure, pas au diff.
L'annotation du check-run est explicite : « The self-hosted runner lost communication with the server » —
pas une assertion d'organe, pas un defaut de contenu. J'ai rejoue la jambe (gh run rerun 39836267341 --job 120025324848) sans toucher au diff, ce qui est le geste prescrit pour ce cas.

Etat : perimetre docs inchange (1 cellule md, +1/−1), verifications de la review convergentes.
La levee B.0 reste a l'auteur de la reserve.

@jsboige

jsboige commented Oct 24, 2026

Copy link
Copy Markdown
Owner Author

Cette PR est un doublon d'une livraison déjà mergée — elle est superseded et je la ferme.

La seule modification de cette PR est une cellule markdown de 02-3-Wan-Video-Generation.ipynb documentant la cause de l'écart « 16 frames demandées → 13 images rendues » (contrainte 4k+1 du VAE temporel de Wan).

Cette même cause, pour la même issue #20870 et la même cellule, est déjà documentée sur main par la PR #21810, mergée (commit 8eabb673000b — « docs(genai,#20870): expliquer la cause des 13 frames rendues sur 16 demandées (Wan 02-3) »). La formulation de #21810 est plus précise : elle donne le calcul exact (16 − 1) // 4 + 1 = 4 frames latentes → 13 images (4 × 4 − 3), et la borne « ici 13, jamais 17 ».

Vérifié firsthand : la copie du carnet sur origin/main (tête 756d2c158e70) porte bien cette ligne (grep « jamais 17 » = 1).

Merger cette PR par-dessus régresserait le texte plus complet déjà sur main. Son objet (documenter la cause 16→13 pour #20870) est entièrement atteint par #21810. Je ferme comme doublon.

Voir #20870, #21810.

@jsboige jsboige closed this Oct 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) pr-overlap Advisory: another open PR touches the same files (organ #13615)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants