Experimente ao vivo Sobre este projeto
Você gera alguns modelos 3D. Fica com um. O resto é apagado. O 3D Junkyard é onde você descarta o resto: uma galáxia viva e compartilhada de modelos 3D rejeitados, cada um amarrado ao próprio cabo e agrupado pelo que é — cadeiras com cadeiras, luminárias com luminárias. Um modelo que ninguém escolheu ainda pode ser exatamente o que outra pessoa está procurando.
Descarte um: arraste um arquivo GLB / glTF / FBX / OBJ / STL para a página. Ele aparece onde você soltar, desce flutuando e pousa ao lado de seus semelhantes — público, com o seu ID. Ou deixe o seu agente fazer isso. Com o servidor MCP e o skill do Junkyard, um agente busca aqui antes de gerar, só gera com o Tripo quando nada serve e, ao fim de cada trabalho 3D, descarta os modelos do Tripo que ficaram de fora — cada um marcado como feito com o Tripo.
Precisa de algo? Descreva, voe até lá e pegue — use-o sob CC BY 4.0, dando crédito a quem o soltou. Em breve: o que você descarta vai poder gerar renda. Cada peça levada já fica registrada; em seguida, quem soltou o modelo vai receber uma parte do que ele render.
Abra no navegador de um computador; no celular, aparece um aviso para trocar de dispositivo. Os 1.921 modelos pré-carregados no mundo vêm do conjunto de dados público Objaverse 1.0 (publicados no Sketchfab por seus autores sob as próprias licenças Creative Commons) e vão pousando aos poucos em nome de 12 IDs predefinidos; o que você descartar fica pendurado na mesma galáxia.
Destaques
- Arraste para a página um arquivo GLB / glTF / FBX / OBJ / STL ou uma pasta compactada em zip: ele aparece onde você soltar, desce flutuando e pousa ao lado de seus semelhantes, enquanto no ponto de pouso estouram fogos de artifício assinados com o seu ID, visíveis para todos que estiverem online
- O mundo é o índice: cada peça se assenta, pelo significado, em uma célula permanente da galáxia, com um endereço próprio para compartilhar, como JUNK-3F9K2; busque com uma frase ou uma imagem e a câmera voa até os resultados, que se acendem enquanto todo o resto escurece
- Deixe com o seu agente: o Claude Code, o Codex ou o Cursor, com o servidor MCP e o skill do Junkyard, buscam aqui antes de gerar, só recorrem ao Tripo quando nada serve e, ao fim do trabalho, descartam aqui tudo o que o projeto não usou — cada peça marcada como feita com o Tripo
- Pegue: as peças liberadas para levar vêm com um link de download válido por cinco minutos e um texto de atribuição pronto; use-as sob CC BY 4.0, dando crédito a quem as soltou; cada peça levada já entra na contabilidade e, como próximo passo, quem a soltou vai receber uma parte
Análise técnica
O loop do agente · Buscar primeiro, gerar depois, descartar por último
Um mesmo skill junkyard é instalado sem alterações no Claude Code, no Codex e no Cursor, apoiado em um servidor MCP chamado junkyard, com transporte Streamable HTTP e quatro verbos — junkyard_search / junkyard_fetch / junkyard_dump / junkyard_reclaim — espelhados em REST. Antes de qualquer geração 3D, o agente chama junkyard_search com texto, mais uma imagem de referência se tiver uma, e o below_bar na resposta diz se os resultados são bons o bastante: só quando menos de três atingem o limiar ele gera com o Tripo, salvando o resultado em disco na mesma hora, porque os links de download do Tripo expiram em cinco minutos.
A contagem acontece uma única vez, ao fim da tarefa: só vão para junkyard_dump os arquivos gerados nesta rodada e não referenciados pelo projeto. Uma referência pode ter quatro formas — caminho relativo ao projeto, nome do arquivo, nome-base sem extensão, caminho absoluto — e é detectada por limites de palavra, sem diferenciar maiúsculas de minúsculas; modelos que o usuário escolheu e moveu, ou copiou com outro nome, são reconhecidos como usados pelo sha256; na dúvida, o arquivo fica. Imagens de referência nunca são enviadas, um projeto marcado como privado pula essa etapa por completo e, se o usuário pedir "desfaça o último descarte", junkyard_reclaim recupera a sessão inteira.
Ingestão · Qualquer formato na entrada, oito etapas até uma peça pesquisável
Os arquivos arrastados para a página e os descartados por agentes compartilham uma única fila assíncrona — validação → hash → conversão → impressão digital → licença → embedding → tags → posicionamento — e o banner que cai na página mostra o progresso nessas oito etapas. A conversão gera uma cópia de exibição normalizada: Y para cima, aresta mais longa redimensionada para uma unidade, compressão meshopt e animações preservadas; tudo o que passa de 150.000 triângulos é decimado até ficar abaixo disso, e conjuntos de texturas acima de 16 MiB têm a resolução reduzida em etapas, de modo que arquivos pesados com vários materiais são enxugados até caber, em vez de virarem uma nuvem de pontos.
O mesmo renderizador three.js, rodando em um Chromium headless, captura oito vistas em miniatura de cada peça, e o MeshSurfaceSampler extrai uma nuvem colorida de 20.000 pontos: a nuvem vai para o codificador 3D Uni3D e as miniaturas para o SigLIP 2, gerando dois vetores para a busca. Uma folha de contato com quatro vistas vai, em uma única chamada, para o modelo de visão e linguagem Qwen3-VL-Flash, que escolhe uma categoria, um estilo e uma cor dominante em um vocabulário controlado bilíngue e acrescenta até cinco tags livres nos dois idiomas; em todas as listas, o nome da peça é categoria · estilo · primeira tag livre. Os prompts originais e as imagens de referência nunca chegam a nenhuma saída pública.
Mapa semântico · O mundo é o índice de busca
O UMAP (três componentes, não paramétrico) é treinado uma única vez com vetores de um corpus público, gerados pelo mesmo codificador usado em produção, e congelado como mapa v1; peças novas são posicionadas com transform, então as existentes nunca se movem. As coordenadas são quantizadas em células de índice inteiro e, quando uma célula está ocupada, uma espiral determinística encontra a livre mais próxima. A célula é um endereço permanente: uma peça retirada deixa ali uma lápide, e a célula nunca é reutilizada. Uma curva de Hilbert 3D transforma cada célula em um índice de 24 bits escrito com cinco caracteres Crockford Base32, o que dá endereços como JUNK-3F9K2; assim, números vizinhos são vizinhos também no espaço.
A busca roda em dois canais: a torre de texto EVA02, alinhada ao Uni3D (consultas que não estão em inglês passam antes por tradução automática), e o SigLIP 2 multilíngue (o chinês é codificado diretamente, assim como as consultas por imagem). Cada canal recupera candidatos de um índice HNSW no pgvector, e as duas listas são fundidas com RRF. Vetores de texto e de peças ficam separados por uma lacuna de modalidade, por isso uma consulta nunca é projetada no mapa; em vez disso, a câmera voa até o centroide dos melhores resultados. Quando menos de três resultados atingem o limiar, a resposta traz below_bar — a página sinaliza "baixa correspondência", e o agente sabe que é hora de gerar.
Renderização do mundo · Quase duas mil peças, três níveis de detalhe
O mundo é carregado em streaming em blocos de 16×16 células à medida que a vista se move, e cada peça tem três aparências conforme a distância: de perto, uma malha completa (no máximo 24 vagas, distribuídas pelo tamanho na tela; ela só aparece depois que seus shaders estão pré-compilados); a meia distância, um impostor de silhueta feito a partir da miniatura, cujo fundo embutido na imagem é removido por chroma key no shader, tirado de um atlas de 4096² com 2.601 posições; de longe, um ponto de ancoragem instanciado. A troca de aparência é um crossfade de 300 ms cujas opacidades sempre somam um, de modo que nenhum quadro fica vazio.
Cada peça fica pendurada no próprio cabo, flutuando em torno da âncora e girando devagar, uma volta a cada 120–180 segundos, tudo com o id da peça como semente — todos os clientes veem o mesmo movimento sem nenhuma sincronização de rede. Quando alguém descarta algo, os fogos de artifício no ponto de pouso são enviados por SSE a todos que estão online. Se a taxa de quadros continuar baixa por três segundos, entra em ação uma degradação automática em quatro etapas (resolução → fogos de artifício → campo distante → flutuação), e o orçamento de malhas próximas só encolhe quando há queda real de quadros — nunca só porque há muitos draw calls.


