Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,8 @@
"\n",
"- `MINIMAX_SPEND_QUOTA = 0` (défaut) → on ne charge **que** les artefacts déjà commités (PNG + JSON). Zéro appel réseau.\n",
"- `MINIMAX_SPEND_QUOTA = 1` + clé présente + artefact absent → **seulement alors** on invoque le service.\n",
"- **Aucun `.mp4` n'est commité** : la preuve d'exécution = `task_id` (dans le JSON) + keyframes PNG + waveform audio PNG. Les originaux HD vont sur un GDrive privé (noté en prose, jamais dans le dépôt)."
"- **Aucun `.mp4` n'est commité** : la preuve d'exécution, *lorsqu'une génération a eu lieu*, est faite du `task_id` (dans le JSON) + keyframes PNG + waveform audio PNG. Les originaux HD vont sur un GDrive privé (noté en prose, jamais dans le dépôt).\n",
"- **Ce carnet ne commit aucun de ces artefacts** : `assets/h3-cloud/` ne contient que l'image de référence d'entrée du scénario image-to-video. Les deux scénarios s'exécutent donc en **mode squelette** (colonne `Artefact` = `non` du tableau de statut) : aucune génération n'a eu lieu sur ce carnet — la clé n'était pas présente au run, et le plan bloque de toute façon la série H3 (verdict SOTA en tête de carnet). La preuve d'exécution de la famille cloud : preuve embarquée dans [04-5b](04-5b-MiniMax-video-01-v1-Cloud-Video.ipynb) (`video-01` sur `/v1`, sortie de cellule, sans metadata papermill) et preuve fichier dans [04-3](04-3-Sora-API-Cloud-Video.ipynb) (`assets/sora-real/`)."
]
},
{
Expand Down Expand Up @@ -708,7 +709,7 @@
"\n",
"| Voie | Résolution | Audio natif | Licence/ToS en UE | Verdict |\n",
"|------|-----------|-------------|-------------------|---------|\n",
"| **H3 service cloud** (04-5) | HD / 2K | Stéréo synchronisé | ToS service : OK | **SOTA-OK** (cloud) |\n",
"| **H3 service cloud** (04-5) | HD / 2K | Stéréo synchronisé | ToS service : OK (UE) | **SOTA-OK (ToS UE) + RECOVERABLE-USER-HAND (serie H3 bloquee 2013)** |\n",
"| CogVideoX-2b local (02-7) | 480p | Muet | Apache-2.0 : OK | Local dégradé mais libre |\n",
"| LTX-2 local (02-5) | 768p | Oui | UE-permissive : OK | Local audiovisuel |\n",
"| H3 *poids* auto-hébergés | — | — | Community License : **UE exclue** | **INTRINSIC** (interdit) |\n",
Expand All @@ -717,9 +718,9 @@
"\n",
"1. Le service cloud est l'**unique voie légale en UE** pour la pleine capacité H3 (HD/2K + audio stéréo + omni-référence).\n",
"2. L'idempotence (`MINIMAX_SPEND_QUOTA`) protège le quota quotidien de 5 générations — une ré-exécution sans artefact ne déclenche aucun appel réseau.\n",
"3. Les artefacts commités (PNG + JSON `task_id`) suffisent comme **preuve d'exécution** ; les `.mp4` HD restent sur GDrive privé.\n",
"3. La preuve d'exécution d'une génération est faite du couple **PNG + JSON `task_id`** (les `.mp4` HD restent sur GDrive privé) — mais **ce carnet n'en commit aucun** : la série H3 y est bloquée par le plan, et les deux scénarios tournent en mode squelette (colonne `Artefact` = `non`). Les preuves de la famille cloud : preuve embarquée dans [04-5b](04-5b-MiniMax-video-01-v1-Cloud-Video.ipynb) (sortie de cellule, sans metadata papermill) et preuve fichier dans [04-3](04-3-Sora-API-Cloud-Video.ipynb) (`assets/sora-real/`).\n",
"\n",
"> **Note technique** : le `task_id` dans `response.json` est la preuve cryptographique d'exécution côté service. Il est repris dans les exercices ci-dessous."
"> **Note technique** : le `task_id` dans `response.json` est la preuve cryptographique d'exécution côté service. Il est repris dans les exercices ci-dessous — qui rendront donc `None` tant qu'aucun `response.json` n'est commité pour ce carnet, ce qui est le cas aujourd'hui (cf. §1)."
]
},
{
Expand All @@ -744,6 +745,8 @@
"\n",
"**Contexte** : le fichier `response.json` est la preuve d'exécution d'une génération cloud. En extraire proprement les métadonnées permet de vérifier qu'une génération a bien eu lieu (sans avoir à recharger la vidéo HD).\n",
"\n",
"> **Pour ce carnet, `response.json` est absent** : la série H3 y est bloquée par le plan (cf. §1) et aucun artefact de génération n'est commité. L'exercice porte donc sur le contrat de parsing — il rend `None` tant que le fichier est absent, ce qui est le comportement attendu et non une panne. La trace d'exécution réelle de la famille cloud est dans [04-5b](04-5b-MiniMax-video-01-v1-Cloud-Video.ipynb).\n",
"\n",
"**Indices** :\n",
"- `# Étape 1` : ouvrir le JSON depuis `ARTIFACTS_PATH / name / \"response.json\"`.\n",
"- `# Étape 2` : extraire les 7 champs ci-dessus avec `.get()` (valeurs absentes -> `None`).\n",
Expand Down Expand Up @@ -816,7 +819,7 @@
"\n",
"**Objectif** : calculer des statistiques d'amplitude (RMS, crête, dynamique) **sur les échantillons PCM de la piste audio** d'un scénario — jamais sur l'image de la forme d'onde. Ces nombres répondent à deux questions mesurables : la piste est-elle **présente**, et son énergie est-elle **non nulle**.\n",
"\n",
"**Contexte** : `waveform.png` est la **visualisation** extraite via `ffmpeg` de la piste stéréo de la génération H3 — pas la donnée. Tout traceur de forme d'onde **autoscale son axe vertical** : un signal faible et un signal 10x plus fort donnent le même dessin, seule l'étiquette de l'axe change (audit D07 : le rapport d'énergie rendu par la recette « pixels du PNG » est 1.0 là où le rapport réel est 10.0, et le silence s'y lit à 0.7 % d'un sinus pleine échelle — le résidu est le fond blanc de l'image). La mesure se fait donc sur la piste décodée ; le PNG reste l'illustration.\n",
"**Contexte** : `waveform.png` est la **visualisation** extraite via `ffmpeg` de la piste stéréo d'une génération H3 — pas la donnée (sur ce carnet, aucun `waveform.png` n'est commité : la série est bloquée par le plan, cf. §1 ; l'exercice porte donc sur le contrat de mesure, pas sur un fichier présent). Tout traceur de forme d'onde **autoscale son axe vertical** : un signal faible et un signal 10x plus fort donnent le même dessin, seule l'étiquette de l'axe change (audit D07 : le rapport d'énergie rendu par la recette « pixels du PNG » est 1.0 là où le rapport réel est 10.0, et le silence s'y lit à 0.7 % d'un sinus pleine échelle — le résidu est le fond blanc de l'image). La mesure se fait donc sur la piste décodée ; le PNG reste l'illustration.\n",
"\n",
"Le contrat de mesure est celui du corpus ([02-3-MusicGen](../../Audio/02-Advanced/02-3-MusicGen-Generation.ipynb) c22) : `rms = sqrt(mean(samples**2))`, `peak = max(abs(samples))`, `dynamic_range = 20·log10(peak/rms)` en dB, sur une échelle **flottante [-1, 1]** ; par convention, un signal nul rend les trois grandeurs à 0.0.\n",
"\n",
Expand All @@ -827,7 +830,7 @@
"4. Qualité **perçue** — hors de portée d'un RMS : un RMS non nul dit qu'il y a du son, pas qu'il est *natif* ni *généré*. La comparaison avec CogVideoX local (02-7) porte sur la **présence d'une piste**, fait vérifiable — pas sur une preuve de génération.\n",
"\n",
"**Indices** :\n",
"- `# Étape 1` : localiser la piste audio du scénario sous `ARTIFACTS_PATH / name` ; si aucun fichier audio n'est présent, retourner `None` — l'artefact committé est une preuve d'exécution, pas un .mp4.\n",
"- `# Étape 1` : localiser la piste audio du scénario sous `ARTIFACTS_PATH / name` ; si aucun fichier audio n'est présent, retourner `None` — quand il en existe un, l'artefact committé est une preuve d'exécution, pas un .mp4 ; quand il n'en existe pas (cas de ce carnet), `None` est la réponse correcte et distingue « absent » de « mesuré à zéro ».\n",
"- `# Étape 2` : décoder les échantillons en échelle [-1, 1] (par ex. `ffmpeg -i <piste> -ac 1 -f wav` vers un wav temporaire, puis le module `wave` + numpy : entiers 16 bits divisés par 32768.0).\n",
"- `# Étape 3` : appliquer le contrat ci-dessus ; retourner `{\"rms\": float, \"peak\": float, \"dynamic_range\": float}` ou `None` si la piste est absente (NON_TESTE — distinct d'un zéro mesuré).\n"
]
Expand Down Expand Up @@ -1099,7 +1102,7 @@
"|----------|------|---------|------------------------|\n",
"| [02-6](../02-Advanced/02-6-MiniMax-H3-Architecture-Licensing.ipynb) | H3 *poids* auto-hébergés | **INTRINSIC** | Rien (UE exclue par la Community License) |\n",
"| [02-7](../02-Advanced/) | CogVideoX-2b local | Local libre | 480p, muet, Apache-2.0 |\n",
"| **04-5 (ce notebook)** | **H3 service cloud** | **SOTA-OK (cloud)** | **HD/2K + audio stéréo + omni-référence** |\n",
"| **04-5 (ce notebook)** | **H3 service cloud** | **SOTA-OK (ToS UE) + RECOVERABLE-USER-HAND (serie H3 bloquee 2013)** | **HD/2K + audio stéréo + omni-référence** — capacité du service, non exerçable sur ce carnet : la série y est bloquée par le plan |\n",
"\n",
"### Réversibilité et souveraineté\n",
"\n",
Expand All @@ -1108,10 +1111,10 @@
"\n",
"### Points à retenir\n",
"\n",
"1. **Bifurcation juridique** : licence des poids (UE exclue, INTRINSIC) ≠ ToS du service (UE ouverte, SOTA-OK).\n",
"2. **Idempotence** : `MINIMAX_SPEND_QUOTA=0` protège le quota de 5 générations/jour ; les artefacts commités (PNG + JSON `task_id`) sont la preuve d'exécution.\n",
"1. **Bifurcation juridique** : licence des poids (UE exclue, INTRINSIC) ≠ ToS du service (UE ouverte, SOTA-OK). L'**entitlement** est une troisième dimension, distincte des deux précédentes : la série H3 y est bloquée par le plan (400 TokenPlan 2013) → `RECOVERABLE-USER-HAND` sur ce carnet. Le verdict complet est identique à celui porté par [04-5b](04-5b-MiniMax-video-01-v1-Cloud-Video.ipynb).\n",
"2. **Idempotence** : `MINIMAX_SPEND_QUOTA=0` protège le quota de 5 générations/jour ; les artefacts commités (PNG + JSON `task_id`) **seraient** la preuve d'exécution — ici il n'y en a aucun (mode squelette, colonne `Artefact` = `non`).\n",
"3. **Capacité distinctive** : HD/2K + audio stéréo natif synchronisé + entrées omni-références — exercée ici par 2 scénarios omni-modaux, pas 5 t2v triviaux.\n",
"4. **Aucun `.mp4` commité** : les originaux HD vont sur GDrive privé ; le dépôt ne garde que les preuves légères.\n",
"4. **Aucun `.mp4` commité** : les originaux HD vont sur GDrive privé. Sur ce carnet, le dépôt ne garde même pas de preuve légère (aucun artefact H3 commité) ; les preuves légères de la famille : preuve embarquée dans [04-5b](04-5b-MiniMax-video-01-v1-Cloud-Video.ipynb) (sortie de cellule) et preuve fichier dans [04-3](04-3-Sora-API-Cloud-Video.ipynb) (`assets/sora-real/`).\n",
"\n",
"> **Pour aller plus loin** : combiner ce notebook avec [02-5 (LTX-2)](../02-Advanced/02-5-LTX2-Audiovisual.ipynb) pour un pipeline hybride cloud-souverain (H3 cloud pour la qualité, LTX-2 local pour la réversibilité)."
]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,11 +58,13 @@
"L'audit serie × endpoint (realise en cycle 196) a produit un **verdict couple** :\n",
"\n",
"- `MiniMax-H3` sur `/v2/video_generation` — **400** « TokenPlan or Credit does not currently support MiniMax-H3 series models » (2013 TokenPlan-blocked). Entitlement bloque la serie H3.\n",
"- `video-01` sur `/v1/video_generation` — **200** + `task_id` (task `429397735923998`, 1 generation reellement debitee, plafond=1 respecte). **L'org A un droit video reel sur `video-01`** ; le diagnostic initial « pas de droit video, upgrade user » etait une **inference trop large** (le 400 etait scope a la serie H3, pas au service).\n",
"- `video-01` sur `/v1/video_generation` — **200** + `task_id` (task `429397735923998`, 1 generation reellement debitee, plafond=1 respecte ; c'est la generation de l'audit serie × endpoint, distincte de celle rejouee par la sonde de ce carnet, `431137218855159`). **L'org A un droit video reel sur `video-01`** ; le diagnostic initial « pas de droit video, upgrade user » etait une **inference trop large** (le 400 etait scope a la serie H3, pas au service).\n",
"\n",
"Ce notebook documente le **chemin cloud V1** : endpoint `/v1`, modele `video-01` (Hailuo line, video muet — pas d'audio natif contrairement a H3). Architecture pedagogique en 4 sections : verdict table, sonde HTTP non-brulante, interpretation structurelle, exercices.\n",
"\n",
"**Statut cle** : `MINIMAX_GENAI_API_KEY` non livree au worker au moment de la redaction (cf. `Minimax-H3 verdict requalification`, PR #10312). Notebook **execut-able SANS cle** : toutes les fonctions sont des stubs type-checkes qui rendent un verdict structurel sur les payloads/responses sans jamais POST reel. Generation reelle reservee a un futur cycle ou la cle sera delivree."
"**Statut cle** : `MINIMAX_GENAI_API_KEY` non livree au worker **au moment de la redaction** (cf. `Minimax-H3 verdict requalification`, PR #10312). Notebook **execut-able SANS cle** : la sonde HTTP et les fonctions de lecture sont des stubs type-checkes qui rendent un verdict structurel sur les payloads/responses (`DESCRIPTIF_STUB`), **sans POST reel**.\n",
"\n",
"La cle a neanmoins ete delivree depuis : la **sortie commitee** de la cellule de validation enregistre une generation reelle (`\"sent\": true`, `\"actual_status\": 200`, `task_id` `431137218855159`, plafond respecte a 1 generation). Le regime « sans POST reel » decrit donc le **mode par defaut sans cle**, pas la sortie de ce carnet — les deux regimes coexistent ici, et la section « Lecture chiffree » montre le second."
]
},
{
Expand Down Expand Up @@ -210,7 +212,7 @@
"\n",
"| Serie / Modele | Endpoint | HTTP | Message | Verdict |\n",
"|----------------|----------|------|---------|---------|\n",
"| `MiniMax-H3` | `/v2/video_generation` | 400 | `TokenPlan or Credit does not currently support MiniMax-H3 series models` (2013) | **TokenPlan-blocked (serie H3)** |\n",
"| `MiniMax-H3` | `/v2/video_generation` | 400 | `TokenPlan or Credit does not currently support MiniMax-H3 series models` (2013) | **SOTA-OK (ToS UE) + RECOVERABLE-USER-HAND (serie H3 bloquee 2013)** — l'entitlement de la serie H3 est bloque par le plan ; le ToS du service, lui, reste ouvert en UE. Ce verdict est celui que porte [04-5](04-5-MiniMax-H3-Cloud-Video.ipynb) |\n",
"| `MiniMax-Hailuo-02` | `/v2/video_generation` | 400 | `this model is not supported by /v2/video_generation` | endpoint H3-only, pas refusal d'entitlement |\n",
"| `video-01` | `/v2/video_generation` | 400 | idem | idem |\n",
"| `Hailuo-01` | `/v2/video_generation` | 400 | idem | idem |\n",
Expand Down Expand Up @@ -424,7 +426,7 @@
"id": "6db27ef8",
"metadata": {},
"source": [
"**Lecture chiffree — le verdict OK atteste une generation reelle, pas une extrapolation.** Le JSON commite rend `\"actual_status\": 200`, un task_id `\"431137218855159\"`, `\"status_code\": 0` et `\"verdict\": \"OK\"` : la sonde a debite exactement une generation sur le quota journalier consenti — la cle etait disponible au setup et le parametre de depense leve la garde no_post. La section precedente decrit le regime sans cle (verdict structurel, rien de debite) ; cette sortie-ci est l'autre regime, execute : le verdict est firsthand, c'est la reponse du service, pas une lecture de sa documentation.\n",
"**Lecture chiffree — le verdict OK atteste une generation reelle, pas une extrapolation.** La sortie commitee de la cellule de validation rend `\"actual_status\": 200`, un task_id `\"431137218855159\"`, `\"status_code\": 0` et `\"verdict\": \"OK\"` : la sonde a debite exactement une generation sur le quota journalier consenti — la cle etait disponible au setup et le parametre de depense leve la garde no_post. La section precedente decrit le regime sans cle (verdict structurel, rien de debite) ; cette sortie-ci est l'autre regime, execute : le verdict est firsthand, c'est la reponse du service, pas une lecture de sa documentation.\n",
"\n",
"**Et le mode descriptif ?** Tant que `MINIMAX_GENAI_API_KEY` n'est pas livree, le notebook reste **execut-able SANS cle** et rend un verdict structurel (`DESCRIPTIF_STUB`) sur la forme des requetes/responses. C'est la **meme posture cle que 04-5** : key-gated skeleton.\n",
"\n",
Expand Down Expand Up @@ -646,14 +648,14 @@
"| Notebook | Endpoint | Modele | Verdict | Audio | UE-licence | Cout indicatif |\n",
"|----------|----------|--------|---------|-------|-----------|----------------|\n",
"| CogVideoX-2b local | local (RTX 3090) | `THUDM/CogVideoX-2b` | **SOTA-OK** | muet | Apache-2.0 | 0 (cout GPU local) |\n",
"| [04-5 MiniMax-H3/v2 cloud](04-5-MiniMax-H3-Cloud-Video.ipynb) | `/v2/video_generation` | `MiniMax-H3` | **RECOVERABLE-USER-HAND (serie H3 bloquee 2013)** | **oui (HD/2K + audio natif synchronise)** | UE-locked (Community License cession) | ~5 generations / 5j |\n",
"| [04-5 MiniMax-H3/v2 cloud](04-5-MiniMax-H3-Cloud-Video.ipynb) | `/v2/video_generation` | `MiniMax-H3` | **SOTA-OK (ToS UE) + RECOVERABLE-USER-HAND (serie H3 bloquee 2013)** | **oui (HD/2K + audio natif synchronise)** | ToS service : UE ouverte (la Community License ne concerne que les poids auto-heberges, hors ligne) | ~5 generations / 5j |\n",
"| **04-5b MiniMax-video-01/v1 (ce notebook)** | **`/v1/video_generation`** | **`video-01`** | **SOTA-OK (plan-couvert)** | muet | UE (Pas d'exclusion territoriale trouvee dans les 3 instruments lus) | identique 04-5 |\n",
"| [04-4 Production Video Pipeline](04-4-Production-Video-Pipeline.ipynb) | orchestrateur local | multiplexe | chaisage | selon briques | selon briques | selon briques |\n",
"| [04-4 Production Video Pipeline](04-4-Production-Video-Pipeline.ipynb) | orchestrateur local | multiplexe + chainage de scenes | **verdict herite des briques** (pas de SOTA propre a l'orchestrateur) | selon briques | selon briques | selon briques |\n",
"\n",
"**Verdict concentre** :\n",
"\n",
"- Pour la **video sans audio** en UE : **video-01/v1** est la voie cloud immediatement disponible avec le plan actuel (plafond 5 generations / jour, plafond respecte a 1 dans cette serie).\n",
"- Pour la **video + audio natif** : seul **H3/v2** le permet (HD/2K + audio stereo). H3 est bloque par 2013 TokenPlan dans cette org — escalade `RECOVERABLE-USER-HAND` necessaire si le use-case exige l'audio.\n",
"- Pour la **video + audio natif** : seul **H3/v2** le permet (HD/2K + audio stereo). H3 est bloque par 2013 TokenPlan dans cette org — verdict **SOTA-OK (ToS UE) + RECOVERABLE-USER-HAND (serie H3 bloquee 2013)**, **identique** a celui porte par [04-5](04-5-MiniMax-H3-Cloud-Video.ipynb) ; l'escalade `RECOVERABLE-USER-HAND` est necessaire si le use-case exige l'audio.\n",
"- Pour la **video offline / pas de cle API / GPU disponible** : `02-7` CogVideoX-2b local (Apache-2.0).\n",
"\n",
"**Lecon G.9 retenons** : extrapoler un refus isole a l'ensemble d'un service est une erreur frequente. Sonder serie × endpoint en tableau, pas par un seul POST.\n",
Expand Down
Loading