Essayer en direct À propos de ce projet
Vous générez quelques modèles 3D. Vous en gardez un. Le reste est supprimé. 3D Junkyard, c’est là que vous déposez ce reste : une galaxie partagée de modèles 3D mis au rebut, en temps réel, chacun au bout de son filin, rangé selon ce qu’il est — les chaises avec les chaises, les lampes avec les lampes. Un modèle que personne n’a retenu peut encore être exactement ce que quelqu’un d’autre cherche.
Déposez un modèle : faites glisser un fichier GLB / glTF / FBX / OBJ / STL dans la page. Il apparaît là où vous le lâchez, descend doucement et se pose près de ses semblables — public, et signé de votre ID. Ou laissez faire votre agent. Avec le serveur MCP et le skill Junkyard, un agent cherche ici avant de générer, ne génère avec Tripo que si rien ne convient et, à la fin de chaque tâche 3D, dépose les modèles Tripo qui n’ont pas été retenus — chacun avec la mention « créé avec Tripo ».
Besoin de quelque chose ? Décrivez-le, volez jusqu’à lui, emportez-le — et utilisez-le sous CC BY 4.0 en créditant la personne qui s’en est défaite. Bientôt : ce que vous déposez pourra rapporter. Chaque récupération est déjà enregistrée ; prochaine étape : la personne qui s’est défaite du modèle touchera une part de ce qu’il rapporte.
Ouvrez le site dans un navigateur de bureau ; sur téléphone, un message vous invite à changer d’appareil. Les 1 921 modèles qui peuplent le monde d’emblée proviennent du jeu de données public Objaverse 1.0 (publiés sur Sketchfab par leurs auteurs, sous leurs propres licences Creative Commons) et y atterrissent quelques-uns à la fois sous 12 ID prédéfinis ; tout ce que vous déposez vient s’accrocher dans la même galaxie.
Points forts
- Glissez-déposez dans la page un fichier GLB / glTF / FBX / OBJ / STL, ou un dossier zippé : le modèle apparaît là où vous le lâchez, descend doucement et se pose près de ses semblables, tandis qu’au point d’atterrissage éclate un feu d’artifice signé de votre ID, visible par tous ceux qui sont en ligne
- Le monde est l’index : chaque objet s’installe, selon son sens, dans une cellule permanente de la galaxie, avec sa propre adresse partageable du type JUNK-3F9K2 ; cherchez avec une phrase ou une image, et la caméra file vers les résultats, qui s’illuminent tandis que tout le reste s’assombrit
- Passez le relais à votre agent : avec le serveur MCP et le skill Junkyard, Claude Code, Codex ou Cursor cherche ici avant de générer, ne recourt à Tripo que si rien ne convient et, une fois le travail terminé, y dépose tout ce que le projet n’a pas utilisé — chaque modèle avec la mention « créé avec Tripo »
- Servez-vous : les objets récupérables sont fournis avec un lien de téléchargement valable cinq minutes et une mention d’attribution prête à l’emploi — utilisez-les sous CC BY 4.0 en créditant la personne qui s’en est défaite ; chaque récupération est déjà comptabilisée et, prochaine étape, l’ancien propriétaire touchera sa part
Analyse technique
La boucle de l’agent · D’abord chercher, puis générer, enfin déposer
Un seul et même skill junkyard s’installe tel quel dans Claude Code, Codex et Cursor ; derrière lui, un serveur MCP en Streamable HTTP nommé junkyard expose quatre verbes — junkyard_search / junkyard_fetch / junkyard_dump / junkyard_reclaim — repris à l’identique en REST. Avant toute génération 3D, l’agent appelle junkyard_search avec du texte, plus une image de référence s’il en a une, et below_bar, dans la réponse, indique si les résultats sont assez bons : ce n’est que si moins de trois d’entre eux passent la barre qu’il génère avec Tripo, en enregistrant aussitôt le résultat sur le disque, car les liens de téléchargement de Tripo expirent au bout de cinq minutes.
L’inventaire se fait une seule fois, à la fin de la tâche : seuls les fichiers générés lors de ce tour et non référencés par le projet partent vers junkyard_dump. Une référence peut prendre quatre formes — chemin relatif au projet, nom de fichier, nom de base sans extension, chemin absolu — et se compare en respectant les limites de mots, sans distinction de casse ; les modèles que l’utilisateur a retenus puis déplacés ou copiés sous un nouveau nom sont reconnus par leur sha256 ; dans le doute, tout reste. Les images de référence ne sont jamais envoyées, un projet marqué comme privé saute entièrement l’étape, et la consigne « annuler le dernier dépôt » reprend toute la session avec junkyard_reclaim.
Ingestion · Tout format en entrée, huit étapes jusqu’à un objet recherchable
Les fichiers glissés dans la page et ceux déposés par les agents partagent une même file d’attente asynchrone — validation → hachage → conversion → empreinte → licence → embedding → étiquetage → placement — et le bandeau qui tombe dans la page affiche la progression au fil de ces huit étapes. La conversion produit une copie d’affichage normalisée : axe Y vers le haut, plus grande arête ramenée à une unité, compression meshopt, animations conservées ; au-delà de 150 000 triangles, le modèle est décimé sous ce seuil, et les jeux de textures de plus de 16 MiB sont sous-échantillonnés palier par palier : les fichiers lourds à plusieurs matériaux sont ainsi allégés jusqu’à rentrer dans les limites, plutôt que réduits à un nuage de points.
Le même moteur de rendu three.js, exécuté dans un Chromium headless, prend huit vues miniatures de chaque objet, et MeshSurfaceSampler en tire un nuage de 20 000 points colorés : le nuage part vers l’encodeur 3D Uni3D et les miniatures vers SigLIP 2, ce qui donne deux vecteurs pour la recherche. Une planche contact de quatre vues est envoyée en un seul appel au modèle vision-langage Qwen3-VL-Flash, qui choisit une catégorie, un style et une couleur dominante dans un vocabulaire contrôlé bilingue, puis ajoute jusqu’à cinq étiquettes libres dans les deux langues ; catégorie · style · première étiquette libre devient le nom de l’objet dans toutes les listes. Les prompts d’origine et les images de référence ne se retrouvent jamais dans une sortie publique.
Carte sémantique · Le monde est l’index de recherche
UMAP (trois composantes, non paramétrique) est entraîné une seule fois sur des vecteurs d’un corpus public, calculés avec le même encodeur qu’en production, puis figé en tant que carte v1 ; les nouveaux objets sont placés avec transform, si bien que les objets existants ne bougent jamais. Les coordonnées sont quantifiées en cellules entières et, quand une cellule est prise, une spirale déterministe trouve la cellule libre la plus proche. La cellule est une adresse permanente : un objet repris y laisse une pierre tombale, et la cellule n’est jamais réutilisée. Une courbe de Hilbert 3D convertit chaque cellule en un index de 24 bits, écrit en cinq caractères Crockford Base32 — d’où des adresses comme JUNK-3F9K2 — de sorte que des numéros voisins sont aussi voisins dans l’espace.
La recherche passe par deux canaux : la tour texte EVA02 alignée sur Uni3D (les requêtes dans une autre langue que l’anglais sont d’abord traduites automatiquement) et SigLIP 2 multilingue (le chinois est encodé directement, tout comme les requêtes par image). Chacun extrait ses candidats d’un index HNSW dans pgvector, et les deux listes sont fusionnées par RRF. Les vecteurs de texte et ceux des objets sont séparés par un écart de modalité : une requête n’est donc jamais projetée sur la carte ; la caméra vole plutôt vers le centroïde des meilleurs résultats. Quand moins de trois résultats passent la barre, la réponse contient below_bar — la page l’affiche comme « faible correspondance », et un agent sait qu’il est temps de générer.
Rendu du monde · Près de deux mille objets, trois niveaux de détail
Le monde est chargé en streaming par tuiles de 16×16 cellules au gré des mouvements de la vue, et chaque objet a trois apparences selon la distance : de près, un maillage complet — 24 emplacements au plus, attribués selon la taille à l’écran, affiché seulement une fois ses shaders précompilés ; à mi-distance, un imposteur en silhouette tiré de la miniature, dont le fond incrusté est retiré par keying dans le shader, puisé dans un atlas 4096² de 2 601 emplacements ; au loin, un point d’ancrage instancié. Le passage d’une apparence à l’autre est un fondu enchaîné de 300 ms dont la somme des opacités vaut toujours un, si bien qu’aucune frame n’est jamais vide.
Chaque objet est suspendu à son propre filin, dérive autour de son ancre et tourne lentement sur lui-même, un tour toutes les 120–180 secondes, le tout avec l’id de l’objet pour graine — chaque client voit le même mouvement sans aucune synchronisation réseau. Quand quelqu’un dépose un objet, le feu d’artifice au point d’atterrissage est poussé via SSE à tous ceux qui sont en ligne. Si la fréquence d’images reste basse pendant trois secondes, une dégradation automatique en quatre paliers se déclenche (résolution → feux d’artifice → champ lointain → dérive), et le budget des maillages proches ne diminue que lorsque des frames sautent réellement — jamais simplement parce que les draw calls sont nombreux.


