Live ausprobieren Über dieses Projekt
Sie generieren ein paar 3D-Modelle. Eines behalten Sie. Der Rest wird gelöscht. Bei 3D Junkyard laden Sie diesen Rest ab: eine gemeinsame Live-Galaxie ausrangierter 3D-Modelle, jedes an seinem eigenen Halteseil, sortiert nach dem, was es ist – Stühle zu Stühlen, Lampen zu Lampen. Ein Modell, das niemand ausgewählt hat, kann trotzdem genau das sein, wonach jemand anderes sucht.
Ein Modell abladen: Ziehen Sie eine Datei im Format GLB / glTF / FBX / OBJ / STL auf die Seite. Das Modell erscheint dort, wo Sie loslassen, schwebt herab und landet bei seinesgleichen – öffentlich und mit Ihrer ID versehen. Oder überlassen Sie das Ihrem Agenten. Mit dem Junkyard-MCP-Server samt Skill sucht ein Agent vor dem Generieren zuerst hier, generiert nur dann mit Tripo, wenn nichts passt, und lädt am Ende jedes 3D-Auftrags die Tripo-Modelle ab, die es nicht in die engere Auswahl geschafft haben – jedes mit dem Vermerk „mit Tripo erstellt“.
Sie brauchen etwas? Beschreiben Sie es, fliegen Sie hin, nehmen Sie es mit – und nutzen Sie es unter CC BY 4.0 mit Namensnennung der Person, die es abgegeben hat. Demnächst: Was Sie abladen, kann sich auszahlen. Jede Mitnahme wird bereits erfasst; als Nächstes erhält, wer das Modell abgegeben hat, einen Anteil an dem, was es einbringt.
Öffnen Sie die Seite in einem Desktop-Browser; auf Smartphones erscheint ein Hinweis, zum Desktop zu wechseln. Die 1.921 Modelle, mit denen die Welt vorab bestückt wurde, stammen aus dem öffentlichen Datensatz Objaverse 1.0 (von ihren Urhebern auf Sketchfab veröffentlicht, jeweils unter einer eigenen Lizenz von Creative Commons) und landen nach und nach, immer ein paar auf einmal, unter 12 voreingestellten IDs; alles, was Sie abladen, hängt in derselben Galaxie.
Highlights
- Ziehen Sie eine Datei im Format GLB / glTF / FBX / OBJ / STL oder einen gezippten Ordner auf die Seite: Das Modell erscheint dort, wo Sie loslassen, schwebt langsam herab und landet bei seinesgleichen – und an der Landestelle steigt ein mit Ihrer ID signiertes Feuerwerk auf, das alle sehen, die gerade online sind
- Die Welt ist der Index: Jedes Objekt lässt sich seiner Bedeutung nach in einer dauerhaften Zelle der Galaxie nieder und bekommt eine eigene Adresse wie JUNK-3F9K2, die sich teilen lässt; suchen Sie mit einem Satz oder einem Bild, und die Kamera fliegt zu den Treffern – sie leuchten auf, während alles andere abgedunkelt wird
- Überlassen Sie das Ihrem Agenten: Mit dem Junkyard-MCP-Server samt Skill sucht Claude Code, Codex oder Cursor vor dem Generieren zuerst hier, nutzt Tripo nur, wenn nichts passt, und lädt nach getaner Arbeit alles ab, was das Projekt nicht verwendet hat – jedes Stück mit dem Vermerk „mit Tripo erstellt“
- Greifen Sie zu: Für Objekte, die mitgenommen werden dürfen, gibt es einen fünf Minuten gültigen Download-Link und eine fertig formulierte Namensnennung – nutzen Sie die Objekte unter CC BY 4.0 und nennen Sie dabei, wer sich von ihnen getrennt hat; jede Mitnahme wird schon jetzt verbucht, und als Nächstes erhält, wer ein Objekt abgegeben hat, einen Anteil
Technische Analyse
Der Agenten-Kreislauf · Erst suchen, dann generieren, zuletzt abladen
Ein und derselbe junkyard-Skill lässt sich unverändert in Claude Code, Codex und Cursor installieren; dahinter steht ein MCP-Server namens junkyard, angebunden über Streamable HTTP, mit vier Verben – junkyard_search / junkyard_fetch / junkyard_dump / junkyard_reclaim –, die eins zu eins auch per REST verfügbar sind. Vor jeder 3D-Generierung ruft der Agent junkyard_search mit einem Text auf, dazu mit einem Referenzbild, sofern er eines hat, und below_bar in der Antwort zeigt an, ob die Treffer gut genug sind: Nur wenn weniger als drei davon die Messlatte überspringen, generiert er mit Tripo und speichert das Ergebnis sofort auf der Festplatte, denn Download-Links von Tripo laufen nach fünf Minuten ab.
Die Inventur erfolgt einmal, am Ende der Aufgabe: Nur Dateien, die in dieser Runde generiert wurden und auf die das Projekt nicht verweist, gehen an junkyard_dump. Ein Verweis kann vier Formen haben – projektrelativer Pfad, Dateiname, Namensstamm ohne Endung, absoluter Pfad – und wird an Wortgrenzen ohne Beachtung der Groß- und Kleinschreibung abgeglichen; Modelle, die der Nutzer ausgewählt und dann verschoben oder unter neuem Namen kopiert hat, werden per sha256 erkannt; was nicht eindeutig ist, bleibt liegen. Referenzbilder werden nie hochgeladen, bei einem als privat markierten Projekt entfällt der Schritt ganz, und die Anweisung „das letzte Abladen rückgängig machen“ holt per junkyard_reclaim die gesamte Sitzung zurück.
Aufnahme · Jedes Format rein, in acht Schritten zum durchsuchbaren Objekt
Auf die Seite gezogene und von Agenten abgeladene Dateien teilen sich eine asynchrone Warteschlange – Validierung → Hashing → Konvertierung → Fingerprinting → Lizenzierung → Embedding → Verschlagwortung → Platzierung –, und das herabfallende Banner auf der Seite meldet den Fortschritt entlang dieser acht Schritte. Die Konvertierung erzeugt eine normalisierte Anzeigekopie: Y-Achse nach oben, längste Kante auf eine Einheit skaliert, mit meshopt komprimiert, Animationen beibehalten; was mehr als 150.000 Dreiecke hat, wird unter diese Grenze dezimiert, und Textursätze über 16 MiB werden schrittweise heruntergerechnet – so werden schwere Dateien mit mehreren Materialien passend verschlankt, statt auf eine Punktwolke reduziert zu werden.
Derselbe three.js-Renderer nimmt in einem Headless-Chromium acht Thumbnail-Ansichten jedes Objekts auf, und MeshSurfaceSampler tastet eine farbige Punktwolke mit 20.000 Punkten ab: Die Punktwolke geht an den 3D-Encoder Uni3D, die Thumbnails gehen an SigLIP 2 – das ergibt zwei Vektoren für die Suche. Ein Kontaktabzug aus vier Ansichten geht in einem einzigen Aufruf an das Vision-Language-Modell Qwen3-VL-Flash, das aus einem zweisprachigen kontrollierten Vokabular eine Kategorie, einen Stil und eine dominante Farbe wählt und bis zu fünf freie Schlagwörter in beiden Sprachen ergänzt; Kategorie · Stil · erstes freies Schlagwort ergibt in jeder Liste den Namen des Objekts. Originalprompts und Referenzbilder gelangen nie in eine öffentliche Ausgabe.
Semantische Karte · Die Welt ist der Suchindex
UMAP (drei Komponenten, nicht parametrisch) wird einmalig auf Vektoren eines öffentlichen Korpus trainiert, berechnet mit demselben Encoder wie im Produktivbetrieb, und als Karte v1 eingefroren; neue Objekte werden per transform platziert, sodass sich bestehende nie verschieben. Die Koordinaten werden auf ganzzahlige Zellen quantisiert, und ist eine Zelle belegt, findet eine deterministische Spirale die nächstgelegene freie. Die Zelle ist eine dauerhafte Adresse: Ein zurückgeholtes Objekt hinterlässt dort einen Grabstein, und die Zelle wird nie wiederverwendet. Eine 3D-Hilbert-Kurve macht aus jeder Zelle einen 24-Bit-Index, geschrieben als fünf Zeichen in Crockford Base32 – Adressen wie JUNK-3F9K2 –, damit benachbarte Nummern auch im Raum Nachbarn sind.
Die Suche läuft über zwei Kanäle: den auf Uni3D ausgerichteten Text-Tower EVA02 (nicht englischsprachige Anfragen werden vorher maschinell übersetzt) und das mehrsprachige SigLIP 2 (chinesische Anfragen werden direkt codiert, Bildanfragen ebenfalls). Jeder Kanal ruft Kandidaten aus einem HNSW-Index in pgvector ab, und die beiden Listen werden per RRF fusioniert. Zwischen Text- und Objektvektoren klafft eine Modalitätslücke, deshalb wird eine Anfrage nie auf die Karte projiziert; stattdessen fliegt die Kamera zum Zentroid der besten Treffer. Wenn weniger als drei Ergebnisse die Messlatte überspringen, enthält die Antwort below_bar – die Seite kennzeichnet das als „geringe Übereinstimmung“, und ein Agent weiß, dass es Zeit zum Generieren ist.
Welt-Rendering · Fast zweitausend Objekte, drei Detailstufen
Die Welt wird in Kacheln zu 16×16 Zellen gestreamt, während sich die Ansicht bewegt, und jedes Objekt hat je nach Entfernung drei Darstellungen: aus der Nähe ein vollständiges Mesh – höchstens 24 Slots, vergeben nach Größe auf dem Bildschirm, erst sichtbar, wenn seine Shader vorkompiliert sind; auf mittlere Entfernung ein Silhouetten-Impostor aus dem Thumbnail, dessen eingebackener Hintergrund im Shader per Keying entfernt wird, entnommen aus einem 4096²-Atlas mit 2.601 Slots; in der Ferne ein instanziierter Ankerpunkt. Der Wechsel zwischen den Darstellungen ist eine Überblendung von 300 ms, deren Deckkräfte sich stets zu eins addieren – so ist kein Frame je leer.
Jedes Objekt hängt an seinem eigenen Halteseil, schwebt um seinen Anker und dreht sich langsam um sich selbst, einmal alle 120–180 Sekunden, alles mit der id des Objekts als Seed – jeder Client sieht dieselbe Bewegung, ganz ohne Netzwerksynchronisation. Lädt jemand etwas ab, wird das Feuerwerk an der Landestelle per SSE an alle gepusht, die gerade online sind. Bleibt die Bildrate drei Sekunden lang niedrig, greift eine vierstufige automatische Qualitätsreduzierung (Auflösung → Feuerwerk → Fernbereich → Schweben), und das Budget für Nah-Meshes schrumpft nur, wenn tatsächlich Frames ausfallen – nie bloß, weil die Zahl der draw calls hoch ist.


