Pruébalo en vivo Sobre este proyecto
Generas unos cuantos modelos 3D. Te quedas con uno. El resto se borra. 3D Junkyard es donde tiras el resto: una galaxia viva y compartida de modelos 3D descartados, cada uno amarrado a su propio cable y agrupado según lo que es, sillas con sillas y lámparas con lámparas. Un modelo que nadie eligió aún puede ser justo lo que otra persona anda buscando.
Tira uno: arrastra a la página un archivo GLB / glTF / FBX / OBJ / STL. Aparece donde lo sueltas, desciende flotando y se posa junto a sus semejantes, a la vista de todos y con tu ID. O deja que lo haga tu agente. Con el servidor MCP y el skill de Junkyard, un agente busca aquí antes de generar, solo genera con Tripo cuando nada encaja y, al final de cada trabajo 3D, tira los modelos de Tripo que se quedaron fuera, cada uno etiquetado como hecho con Tripo.
¿Necesitas algo? Descríbelo, vuela hasta él, llévatelo y úsalo bajo CC BY 4.0, dando crédito a quien lo soltó. Próximamente: lo que tires podrá generar ingresos. Cada pieza que alguien se lleva ya queda registrada; después, quien soltó el modelo recibirá una parte de lo que genere.
Ábrelo en un navegador de escritorio; en el teléfono aparece un aviso para que cambies de dispositivo. Los 1.921 modelos precargados en el mundo proceden del conjunto de datos público Objaverse 1.0 (publicados en Sketchfab por sus autores con sus propias licencias Creative Commons) y van aterrizando unos pocos cada vez a nombre de 12 ID predefinidos; lo que tú tires cuelga en la misma galaxia.
Puntos clave
- Arrastra a la página un archivo GLB / glTF / FBX / OBJ / STL o una carpeta comprimida en zip: aparece donde lo sueltas, desciende flotando y se posa junto a sus semejantes, mientras en el punto de aterrizaje estallan unos fuegos artificiales firmados con tu ID, visibles para todos los que estén conectados
- El mundo es el índice: cada pieza se asienta según su significado en una celda permanente de la galaxia, con una dirección propia que puedes compartir, como JUNK-3F9K2; busca con una frase o una imagen y la cámara vuela hasta los resultados, que se iluminan mientras todo lo demás se atenúa
- Déjaselo a tu agente: Claude Code, Codex o Cursor, con el servidor MCP y el skill de Junkyard, buscan aquí antes de generar, solo recurren a Tripo cuando nada encaja y, al terminar el trabajo, tiran aquí todo lo que el proyecto no usó, cada pieza etiquetada como hecha con Tripo
- Llévatelo: las piezas que se pueden llevar incluyen un enlace de descarga válido durante cinco minutos y un texto de atribución ya redactado; úsalas bajo CC BY 4.0 dando crédito a quien las soltó; cada pieza que alguien se lleva ya se contabiliza, y lo próximo será que quien la soltó reciba su parte
Análisis técnico
El bucle del agente · Buscar primero, generar después, tirar al final
Un mismo skill junkyard se instala sin cambios en Claude Code, Codex y Cursor, respaldado por un servidor MCP llamado junkyard, con transporte Streamable HTTP y cuatro verbos —junkyard_search / junkyard_fetch / junkyard_dump / junkyard_reclaim— replicados en REST. Antes de cualquier generación 3D, el agente llama a junkyard_search con texto, más una imagen de referencia si la tiene, y el below_bar de la respuesta indica si los resultados son lo bastante buenos: solo si menos de tres superan el umbral genera con Tripo, y guarda el resultado en disco de inmediato porque los enlaces de descarga de Tripo caducan a los cinco minutos.
El recuento se hace una sola vez, al terminar la tarea: solo pasan a junkyard_dump los archivos generados en esta ronda que el proyecto no referencia. Una referencia puede adoptar cuatro formas —ruta relativa al proyecto, nombre de archivo, nombre base sin extensión, ruta absoluta— y se detecta por límites de palabra, sin distinguir mayúsculas de minúsculas; los modelos que el usuario eligió y movió, o copió con otro nombre, se reconocen como usados por su sha256; lo que no está claro se queda. Las imágenes de referencia nunca se suben, un proyecto marcado como privado se salta el paso por completo y, si el usuario pide «deshaz el último volcado», junkyard_reclaim recupera toda la sesión.
Ingesta · Cualquier formato de entrada, ocho pasos hasta una pieza buscable
Los archivos arrastrados a la página y los que tiran los agentes comparten una única cola asíncrona —validación → hash → conversión → huella → licencia → embedding → etiquetado → colocación—, y el banner que cae en la página muestra el avance por esos ocho pasos. La conversión produce una copia de visualización normalizada: Y hacia arriba, lado más largo escalado a una unidad, compresión meshopt y animaciones conservadas; todo lo que supera los 150.000 triángulos se diezma hasta quedar por debajo, y a los conjuntos de texturas de más de 16 MiB se les baja la resolución paso a paso, de modo que los archivos pesados con varios materiales se aligeran hasta caber en lugar de quedar reducidos a una nube de puntos.
El mismo renderizador de three.js, ejecutado en Chromium en modo headless, captura ocho vistas en miniatura de cada pieza, y MeshSurfaceSampler extrae una nube coloreada de 20.000 puntos: la nube va al codificador 3D Uni3D y las miniaturas a SigLIP 2, lo que da dos vectores para la búsqueda. Una hoja de contactos de cuatro vistas se envía en una sola llamada al modelo de visión y lenguaje Qwen3-VL-Flash, que elige una categoría, un estilo y un color dominante de un vocabulario controlado bilingüe y añade hasta cinco etiquetas libres en ambos idiomas; en todas las listas, el nombre de la pieza es categoría · estilo · primera etiqueta libre. Los prompts originales y las imágenes de referencia nunca llegan a ninguna salida pública.
Mapa semántico · El mundo es el índice de búsqueda
UMAP (tres componentes, no paramétrico) se entrena una sola vez con vectores de un corpus público obtenidos con el mismo codificador que se usa en producción y se congela como mapa v1; las piezas nuevas se colocan con transform, así que las existentes nunca se mueven. Las coordenadas se cuantizan en celdas de índice entero y, si una celda ya está ocupada, una espiral determinista encuentra la libre más cercana. La celda es una dirección permanente: una pieza retirada deja allí una lápida y la celda nunca se reutiliza. Una curva de Hilbert 3D convierte cada celda en un índice de 24 bits escrito con cinco caracteres Crockford Base32 —direcciones como JUNK-3F9K2—, de modo que números vecinos son también vecinos en el espacio.
La búsqueda va por dos canales: la torre de texto EVA02 alineada con Uni3D (las consultas que no están en inglés se traducen antes automáticamente) y SigLIP 2 multilingüe (el chino se codifica directamente, igual que las consultas por imagen). Cada canal recupera candidatos de un índice HNSW en pgvector, y las dos listas se fusionan con RRF. Entre los vectores de texto y los de las piezas hay una brecha de modalidad, por lo que una consulta nunca se proyecta sobre el mapa; en su lugar, la cámara vuela al centroide de los mejores resultados. Cuando menos de tres resultados superan el umbral, la respuesta incluye below_bar: la página lo marca como «coincidencia baja» y el agente sabe que es hora de generar.
Renderizado del mundo · Casi dos mil piezas, tres niveles de detalle
El mundo se carga en streaming por teselas de 16×16 celdas a medida que se mueve la vista, y cada pieza tiene tres aspectos según la distancia: de cerca, una malla completa (24 plazas como máximo, asignadas según el tamaño en pantalla; solo aparece cuando sus shaders ya están precompilados); a media distancia, un impostor de silueta hecho con la miniatura, cuyo fondo horneado se elimina por croma en el shader, sacado de un atlas de 4096² con 2.601 casillas; a lo lejos, un punto de anclaje instanciado. El cambio de aspecto es un fundido cruzado de 300 ms cuyas opacidades siempre suman uno, así que ningún fotograma queda vacío.
Cada pieza cuelga de su propio cable: deriva alrededor de su ancla y gira despacio, una vuelta cada 120–180 segundos, todo ello con el id de la pieza como semilla, de modo que todos los clientes ven el mismo movimiento sin ninguna sincronización de red. Cuando alguien tira algo, los fuegos artificiales del punto de aterrizaje llegan por SSE a todos los que están conectados. Si la tasa de fotogramas se mantiene baja durante tres segundos, se activa una degradación automática en cuatro pasos (resolución → fuegos artificiales → campo lejano → deriva), y el presupuesto de mallas cercanas solo se recorta cuando de verdad caen fotogramas, nunca solo porque haya muchos draw calls.


