GPT-6 Astra contre Claude Fable 5.1 : une tempête en three.js, même prompt, un seul passage

Codex avec GPT-6 Astra et Claude Code avec Claude Fable 5.1 ont reçu le même prompt : un voilier de pêche dans une tempête de nuit, en three.js, en un seul fichier. Les deux scènes s'exécutent ici, dans un bac à sable, avec les mesures.

GPT-6 Astra contre Claude Fable 5.1 : une tempête en three.js, même prompt, un seul passage
Réponse rapide

Sur un même prompt three.js (voilier de nuit dans la tempête, un seul fichier), Codex avec GPT-6 Astra a livré en 13 min 33 s la scène la plus lisible et la plus complète, pour 23 563 tokens en sortie. Claude Fable 5.1 a livré en 20 min 37 s un fichier 37 % plus léger, pour 52 008 tokens en sortie, avec une nuit très sombre hors des éclairs. Les deux remplissent les treize points du prompt et s'exécutent ci-dessous, sur votre machine.

Depuis le 4 septembre 2026, Codex tourne avec GPT-6 Astra, depuis le 1er septembre, Claude Code démarre par défaut sur Claude Fable 5.1. Les comparatifs publiés cette semaine se contentent de citer les fiches techniques. Celui-ci fait autre chose : un prompt, deux agents, un seul passage chacun, et les deux fichiers livrés s’exécutent ci-dessous, dans un bac à sable, avec leurs mesures.

Pourquoi une scène three.js plutôt qu’un exercice de code classique ?

Un test de refactoring se juge à la relecture d’un diff, ce qui laisse beaucoup de place à l’interprétation. Une scène 3D se juge en la regardant : la mer bouge ou non, les lanternes vacillent ou non, l’éclair illumine la scène ou non. Le prompt impose treize points précis (mer animée, écume, nuit, nuages, pluie, éclairs à délai aléatoire, bateau en primitives, tangage, au moins trois lanternes, contrôles orbitaux, redimensionnement, texte d’aide, un seul fichier) et une contrainte de forme, un index.html autonome chargeant three.js r170 ou plus récent depuis un CDN. C’est assez long pour départager deux modèles, assez court pour être relu en entier, et le résultat se vérifie sans être expert.

Comment le test a été mené

Le prompt, en français, est reproduit intégralement dans le banc ci-dessous. Personne n’a échangé avec les agents après l’envoi, personne n’a corrigé leur fichier avant la capture. Chaque agent a travaillé dans un dossier vide et devait livrer un seul fichier :

  • Codex, modèle gpt-6-astra, effort de raisonnement xhigh.
  • Claude Code, modèle claude-fable-5-1, effort de raisonnement xhigh.

Ce qui a été mesuré : la durée de génération, les tokens consommés (entrée, cache et sortie), la taille et le nombre de lignes du fichier, le respect point par point du prompt (vérifié dans le code, puis à l’écran), la syntaxe (node --check sur le module extrait), le rendu dans Chrome sans interface (SwiftShader, 1280 × 720, à 4, 12 et 20 secondes de temps réel après le chargement), les erreurs de console au chargement, et un comptage d’images en cinq secondes en rendu logiciel. Le banc ci-dessous mesure en plus les images par seconde sur votre propre machine, avec votre carte graphique : c’est la seule mesure de performance qui vaille, et elle est à vous.

Voilier dans la tempête : GPT-6 Astra (Codex) contre Claude Fable 5.1 (Claude Code)

Vue plein écran

Même prompt, un seul passage, aucune retouche : chaque candidat a livré un fichier index.html autonome. Cliquez sur « Exécuter » pour lancer la scène dans un bac à sable ; les images par seconde sont mesurées sur votre machine.

Prompt commun
code
Crée une scène 3D en three.js, dans un seul fichier index.html autonome, sans build ni dépendance locale (three.js chargé depuis un CDN par import map en module ES, version r170 ou plus récente).

Sujet : un voilier de pêche navigue de nuit sur une mer agitée, en pleine tempête.
- Mer : surface animée avec des vagues (déplacement de vertex), reflets sombres, écume discrète sur les crêtes si possible.
- Ciel : nuit noire, nuages bas, pluie visible (particules) poussée par le vent.
- Éclairs : toutes les quelques secondes, un éclair illumine brièvement toute la scène (flash, fort contraste, silhouette des nuages), avec un délai aléatoire entre deux éclairs.
- Bateau : coque, pont, mât, gréement et voile, modélisés uniquement avec des primitives three.js (aucun modèle externe, aucune texture externe). Il tangue et roule en suivant les vagues.
- Lanternes : au moins trois lanternes accrochées au bateau, lumière chaude et vacillante, qui éclairent le pont et l'eau autour du bateau.
- Caméra : contrôles orbitaux (OrbitControls) avec une position de départ qui met le bateau en valeur.
- Performance : viser 60 images par seconde sur un ordinateur portable ; le redimensionnement de la fenêtre est géré.
- Interface : aucune, à part un petit texte discret en bas à gauche indiquant les commandes.

Contraintes : tout le code (HTML, CSS, JavaScript) dans index.html ; pas de fichiers supplémentaires ; le fichier doit fonctionner en l'ouvrant directement dans un navigateur moderne (Chrome, Firefox, Safari). Ne pose pas de question, livre le fichier complet.
Protocole

Un seul prompt, en français, identique pour les deux candidats, sans échange après l’envoi ni correction avant la capture. Codex, modèle gpt-6-astra, effort xhigh. Claude Code, modèle claude-fable-5-1, effort xhigh. Chaque agent travaille dans un dossier vide et livre un fichier index.html. Mesures : durée de génération, tokens rapportés par l’outil, taille du fichier, respect point par point du prompt, rendu dans Chrome sans interface (SwiftShader, 1280 × 720), erreurs de console au chargement, images par seconde dans le bac à sable du lecteur.

AClaude Code · Claude Fable 5.1claude-fable-5-1 (xhigh)

S’exécute dans un bac à sable isolé (iframe sandbox et CSP) : aucun accès au site, aux cookies ni à votre session. Rien ne se charge avant votre clic.

TéléchargerOuvrir à part
Éditeur
Anthropic
Modèle
claude-fable-5-1 (xhigh)
Outil
Claude Code
Date
2026-09-07
Durée
20 min 37 s
Tokens en entrée
4 327 305 (dont 4 242 975 lus en cache)
Tokens en sortie
52 008
Coût
abonnement Claude (≈ 4,70 $ au tarif API)
Taille du fichier
26 Ko
BCodex · GPT-6 Astragpt-6-astra (xhigh)Retenu

S’exécute dans un bac à sable isolé (iframe sandbox et CSP) : aucun accès au site, aux cookies ni à votre session. Rien ne se charge avant votre clic.

TéléchargerOuvrir à part
Éditeur
OpenAI
Modèle
gpt-6-astra (xhigh)
Outil
Codex
Date
2026-09-07
Durée
13 min 33 s (813 s)
Tokens en entrée
422 332 (dont 357 504 lus en cache)
Tokens en sortie
23 563 (dont 4 942 de raisonnement)
Coût
abonnement ChatGPT (≈ 2,20 $ au tarif API)
Taille du fichier
42 Ko
MesuresA · Claude Code · Claude Fable 5.1B · Codex · GPT-6 Astra
Durée de génération20 min 37 s13 min 33 s
Tokens en entrée4 327 305, dont 4 242 975 lus en cache422 332, dont 357 504 lus en cache
Tokens en sortie52 00823 563
Taille du fichier26 616 octets, 628 lignes42 574 octets, 857 lignes
Points du prompt vérifiés13 / 1313 / 13
Erreurs de console au chargement00
Images en 5 s, rendu logiciel SwiftShader9144

Verdict

Codex avec GPT-6 Astra livre la scène la plus fournie et la plus lisible (mer grise et écumeuse, plafond nuageux, gréement détaillé, quatre lanternes, finitions non demandées), en 13 min 33 s. Claude Fable 5.1 livre en 20 min 37 s un fichier 37 % plus léger, une nuit réellement noire où le bateau se lit à ses lanternes et à leurs reflets, et des shaders plus compacts, mais dépense plus de tokens en sortie. Sur le respect du prompt, égalité. Le bon chiffre de performance est celui que le banc mesure sur votre machine.

Ce que chaque candidat a livré

Les deux fichiers passent node --check, chargent three.js 0.170.0 par import map depuis jsdelivr avec OrbitControls, n’utilisent aucune texture externe et ne produisent aucune erreur de console au chargement. Sur les treize points du prompt, les deux cochent tout. La seule nuance est la pluie de Claude, faite de 5 500 traînées de ligne plutôt que de points, animées entièrement dans le vertex shader et teintées par les lanternes quand elles tombent près du bateau.

Mesure Claude Fable 5.1 (Claude Code) GPT-6 Astra (Codex)
Durée de génération 20 min 37 s 13 min 33 s
Tokens en entrée 4 327 305, dont 4 242 975 lus en cache 422 332, dont 357 504 lus en cache
Tokens en sortie 52 008 23 563, dont 4 942 de raisonnement
Fichier 26 616 octets, 628 lignes 42 574 octets, 857 lignes
Points du prompt 13 sur 13 13 sur 13
Lanternes 4 lanternes (proue, mât, deux à l’arrière) à verre émissif, chacune avec sa lumière ponctuelle et sa phase de vacillement, positions et intensités passées au shader de l’eau 4 lanternes dont la position et la puissance sont passées au shader de l’eau, pour que leurs reflets suivent la houle
Mer ShaderMaterial complet, quatre vagues de Gerstner, normales par différences finies, plan de 220 × 220 segments, écume sur les crêtes révélée par les lanternes et l’éclair ShaderMaterial complet, plan de 240 × 240 segments, reflets du ciel calculés par bruit fractal, écume en points
Ciel et nuages Sphère de ciel en shader, plafond de nuages en bruit fractal poussé par le vent, rétro-éclairé par l’éclair autour du point d’impact Sphère de ciel en shader, plafond nuageux par projection et bruit fractal, rétro-éclairé par l’éclair
Éclairs Lumière directionnelle et uniforme uFlash partagé par la mer, le ciel, les nuages et la pluie, deux à quatre décharges par coup, trait de foudre en lignes additives sept fois sur dix Lumière directionnelle et variable flash partagée avec les shaders du ciel et de l’eau
Performance prévue Ratio de pixels plafonné à 1,5, abaissé par paliers sous 45 images par seconde, aucune ombre portée Ratio de pixels plafonné à 1,6 et abaissé automatiquement sous 48 images par seconde
Images en 5 s, rendu logiciel 91 44

Deux idées valent d’être retenues, une de chaque côté. Claude n’anime pas sa pluie depuis JavaScript : chaque traînée est déplacée, rebouclée dans une boîte autour du bateau et étirée dans le sens du vent par le vertex shader, le processeur n’y touche jamais :

glsl
vec3 p = position + uVel * uTime;
p.x = mod(p.x + uBox.x * 0.5, uBox.x) - uBox.x * 0.5;
p.z = mod(p.z + uBox.z * 0.5, uBox.z) - uBox.z * 0.5;
p.y = mod(p.y, uBox.y);
p -= normalize(uVel) * tip * 1.6; // le second sommet dessine la traînée

Codex, lui, mesure ses propres images par seconde et baisse la définition quand la machine ne suit pas, une idée que Claude reprend aussi, en plus court :

javascript
if (frameCount >= 150) {
  const fps = frameCount / sampleTime;
  if (fps < 48 && pixelRatio > 1) {
    pixelRatio = Math.max(1, pixelRatio - 0.2);
    renderer.setPixelRatio(pixelRatio);
    spray.material.uniforms.uPixelRatio.value = pixelRatio;
  }
  frameCount = 0; sampleTime = 0; performanceSamples++;
}

Ce que l’on voit à l’écran

Les captures ci-dessous viennent de Chrome sans interface, en rendu logiciel, douze secondes après le chargement, sans intervention sur la caméra. Le banc plus haut vous donne la scène réelle, avec votre carte graphique et votre souris.

Scène three.js de Claude Fable 5.1 : voilier de nuit lu par ses quatre lanternes, reflets chauds sur une houle noire, pluie en traînées
Claude Fable 5.1 : une nuit noire au sens propre, un bateau qui n’existe que par ses lanternes, une houle qui accroche leur lumière.
Scène three.js de GPT-6 Astra : voilier de pêche sur une mer grise agitée, écume, plafond nuageux, quatre lanternes
GPT-6 Astra : une mer lisible, de l'écume sur les crêtes, un plafond de nuages, un bateau entier dans le cadre.

La différence saute aux yeux et tient à une lecture du prompt. Claude a pris « nuit noire » au pied de la lettre : hors des éclairs, la scène est presque monochrome, le bateau se lit à ses quatre lanternes et à leurs reflets sur l’eau, la pluie n’est visible que dans leur halo. Les nuages, l’écume et la silhouette du gréement n’apparaissent qu’au moment du flash, qui les révèle d’un coup avant de les rendre à la nuit. C’est cohérent et c’est dramatique, mais un lecteur pressé ne verra pas la moitié du travail. Codex a construit une scène plus lisible : houle grise, écume sur les crêtes, plafond nuageux, gréement complet avec ses enfléchures, quatre lanternes dont les reflets suivent la surface. Il a aussi ajouté ce que personne n’avait demandé, un texte d’aide adapté au mobile, un attribut d’accessibilité sur le canevas et une touche de pause, sans sortir du fichier unique.

Sur la mécanique, les deux bateaux tanguent et roulent avec la houle, celui de Claude en échantillonnant la hauteur de l’eau en quatre points autour de la coque avec un peu d’inertie. Les deux pluies sont poussées par le vent, les deux éclairs arrivent à intervalle aléatoire et illuminent toute la scène. Aucun des deux ne triche.

Temps, tokens et coût

Codex a été plus rapide, 13 min 33 s contre 20 min 37 s. Sur les tokens, les deux colonnes se lisent de la même façon : l’entrée compte tout le contexte relu à chaque tour de raisonnement, et l’essentiel en est servi depuis le cache, 85 % chez Codex, 98 % chez Claude. La sortie est le chiffre qui parle : 52 008 tokens pour Claude contre 23 563 pour Codex, soit 2,2 fois plus, à effort de raisonnement identique. Le fichier de Claude est pourtant le plus léger, de seize kilooctets, soit 37 % de moins, pour un cahier des charges rempli.

En prix catalogue, les deux modèles partent du même tarif de base : 10 $ par million de tokens en entrée et 50 $ en sortie. La différence se joue sur le cache, lu à 0,25 $ le million chez Anthropic contre 1 $ chez OpenAI. Au tarif de l’API, la génération de Claude vaudrait environ 4,70 $, dont 2,60 $ pour la seule sortie, celle de Codex environ 2,20 $, dont 1,18 $ de sortie. Les deux ont été payées par un abonnement, Claude et ChatGPT, qui les décompte en quota plutôt qu’en dollars : ces montants disent ce que coûterait le même passage à l’API, pas ce qui a été débité.

Lequel choisir, pour quoi ?

  • Pour livrer une scène présentable du premier coup, Codex avec GPT-6 Astra : la scène la plus complète et la plus lisible, avec des attentions de finition qui ne figuraient pas dans le prompt.
  • Pour une base légère à retravailler, Claude Fable 5.1 : un fichier plus court, des shaders compacts qui partagent leurs variables, une pluie qui ne coûte rien au processeur, et une direction artistique plus tranchée qu’il faudra parfois éclaircir.
  • Pour la reproductibilité, ni l’un ni l’autre sans précaution : un prompt, un passage et un jour donnent une scène, le même test relancé demain en donnera une autre. C’est pourquoi le banc reste en ligne, avec le prompt et les deux fichiers téléchargeables.

Le banc sera rejoué à chaque changement de modèle par défaut dans l’un des deux outils. Pour situer ces deux agents parmi les autres, le panorama des agents de code en ligne de commande les compare sur les skills, MCP, les hooks et le bac à sable. Pour ce que ce bac à sable bloque vraiment, voir Cloisonner Claude Code et Codex. Et si la facture de Claude Code vous inquiète, la méthode de Spotify s’applique ici aussi.

Ce qu’il faut retenir

  • Même prompt, un seul passage : les deux agents ont rempli les treize points demandés et livré un fichier valide, sans erreur de console.
  • Codex avec GPT-6 Astra a livré en 13 min 33 s la scène la plus lisible et la plus complète, pour 23 563 tokens en sortie.
  • Claude Fable 5.1 a livré en 20 min 37 s un fichier 37 % plus léger, pour 52 008 tokens en sortie, avec une nuit si noire qu’elle cache une partie du travail hors des éclairs.
  • Le rendu logiciel donne 91 images en 5 s contre 44 : la scène de Claude est deux fois plus légère à calculer. Votre carte graphique donnera le vrai chiffre dans le banc.
  • Le résultat vaut pour un prompt, un passage et un jour : le banc reste en ligne et sera rejoué à chaque changement de modèle.

Erreurs fréquentes

Nuit trop noire Une scène fidèle à « nuit noire » se lit mal sur un écran clair : juger au moment d'un éclair, ou préciser dans le prompt le niveau de lisibilité attendu hors des éclairs.
Capture en temps virtuel Sous SwiftShader, --virtual-time-budget avec --screenshot rend parfois des images incohérentes (voile clair sur toute la scène) : capturer en temps réel par le protocole de débogage (Page.captureScreenshot).
WebGL sans interface Chrome headless n'ouvre pas de contexte WebGL sans --use-angle=swiftshader --enable-unsafe-swiftshader, la capture reste noire sinon.
Iframe bloquée Certains navigateurs intégrés refusent toute iframe locale (ERR_BLOCKED_BY_CLIENT) : ouvrir la scène « à part » depuis le banc.

BenchmarkClaude CodeCodexJavaScriptthree.js

Damien Flandrin Développeur web depuis 2010, créateur de Gekkode et d’Email Impact. Chaque article est testé sur un projet réel avant publication. Contact
Newsletter

Les nouveaux tests, tutoriels et projets, par e-mail.

Tests reproductibles, code versionné, résultats datés. Jamais de spam.