sofiayx Claude Fable 5.1 commited on
Commit
87cd95b
·
verified ·
1 Parent(s): 4318c27

Deep links from dataset cards: ?class= / &item=, thumbs, class-aware note

Browse files

- ?class=<class>[&item=<id>] opens a tab (and item) directly; the URL is kept in sync as tabs change so any view is shareable.
- thumbs/<dataset>.jpg: one hero screenshot per dataset, referenced by the dataset cards' 'Open in Lab' banners.
- The static-class 'Take it home' note was scene-only copy; it now describes USD physics vs GLB preview for non-scene static classes.
- README: table of which dataset backs each tab, plus the deep-link syntax.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

.gitattributes CHANGED
@@ -1 +1,4 @@
1
  *.glb filter=lfs diff=lfs merge=lfs -text
 
 
 
 
1
  *.glb filter=lfs diff=lfs merge=lfs -text
2
+ thumbs/warehouse-manipulation-and-states.jpg filter=lfs diff=lfs merge=lfs -text
3
+ thumbs/articulated-storage-and-appliances.jpg filter=lfs diff=lfs merge=lfs -text
4
+ thumbs/industrial-parts-and-packaging.jpg filter=lfs diff=lfs merge=lfs -text
README.md CHANGED
@@ -25,3 +25,15 @@ come from each class's public dataset (`assets/<class>/<vid>/<vid>.glb`); the
25
  joint metadata is served alongside as `viewer/<class>.json`. three.js from
26
  CDN — no build step, no backend.
27
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  joint metadata is served alongside as `viewer/<class>.json`. three.js from
26
  CDN — no build step, no backend.
27
 
28
+ ## Datasets behind each tab
29
+
30
+ | Tab(s) | Dataset |
31
+ | --- | --- |
32
+ | Boxes · Cages · Pallet Boxes | [warehouse-manipulation-and-states](https://huggingface.co/datasets/projectsim/warehouse-manipulation-and-states) |
33
+ | Desks · Ovens · Wardrobes | [articulated-storage-and-appliances](https://huggingface.co/datasets/projectsim/articulated-storage-and-appliances) |
34
+ | Gas Cylinders · Pallet Racking | [industrial-parts-and-packaging](https://huggingface.co/datasets/projectsim/industrial-parts-and-packaging) |
35
+ | Scenes | [scenes-and-worlds](https://huggingface.co/datasets/projectsim/scenes-and-worlds) |
36
+
37
+ Deep links: `?class=<class>` opens a tab (e.g. `?class=logistics_cage`),
38
+ `&item=<id>` selects an item. The header's **Dataset** button always points at
39
+ the active class's folder in its dataset.
index.html CHANGED
@@ -220,7 +220,7 @@ body:not(.class-static) #scene-links { display: none; }
220
  <a id="scene-usd-link" href="#" target="_blank" rel="noopener">Full USD (with Gaussian splat) on Hugging Face →</a>
221
  <a id="scene-glb-link" href="#" target="_blank" rel="noopener">This scene as GLB →</a>
222
  <a id="scene-dataset-link" href="https://huggingface.co/datasets/projectsim/scenes-and-worlds" target="_blank" rel="noopener">Browse the scenes-and-worlds dataset →</a>
223
- <div class="note">USD ships the full room including the Gaussian splat backdrop; the GLB is a lightweight preview (splat dropped, textures baked).</div>
224
  </div>
225
  </aside>
226
  </main>
@@ -603,6 +603,9 @@ async function loadItem(cls, item) {
603
  ? "Full USD (with Gaussian splat) on Hugging Face \u2192"
604
  : "Full USD on Hugging Face \u2192";
605
  document.getElementById("scene-glb-link").textContent = "This " + (isScene ? "scene" : "asset") + " as GLB \u2192";
 
 
 
606
  document.getElementById("scene-dataset-link").href = `${HFDS}/${cls.dataset}/tree/main/${cls.items_dir || ("assets/" + cls.class)}`;
607
  document.getElementById("scene-dataset-link").textContent = `Browse ${cls.class} in the ${cls.dataset} dataset \u2192`;
608
  }
@@ -746,6 +749,11 @@ fetch("classes.json")
746
  dslink.href = `${HFDS}/${cls.dataset}/tree/main/${dsDir}`;
747
  dslink.textContent = `Dataset \u00b7 ${cls.class}`;
748
  dslink.title = `projectsim/${cls.dataset} \u2192 ${dsDir}`;
 
 
 
 
 
749
  document.body.classList.toggle("class-static", !!cls.static);
750
  list.innerHTML = "";
751
  cls.items.forEach((item, i) => {
@@ -773,7 +781,15 @@ fetch("classes.json")
773
  t.onclick = () => selectClass(cls);
774
  tabs.appendChild(t);
775
  }
776
- selectClass(catalog[0]);
 
 
 
 
 
 
 
 
777
  resize();
778
  tick();
779
  });
 
220
  <a id="scene-usd-link" href="#" target="_blank" rel="noopener">Full USD (with Gaussian splat) on Hugging Face →</a>
221
  <a id="scene-glb-link" href="#" target="_blank" rel="noopener">This scene as GLB →</a>
222
  <a id="scene-dataset-link" href="https://huggingface.co/datasets/projectsim/scenes-and-worlds" target="_blank" rel="noopener">Browse the scenes-and-worlds dataset →</a>
223
+ <div class="note" id="scene-note">USD ships the full room including the Gaussian splat backdrop; the GLB is a lightweight preview (splat dropped, textures baked).</div>
224
  </div>
225
  </aside>
226
  </main>
 
603
  ? "Full USD (with Gaussian splat) on Hugging Face \u2192"
604
  : "Full USD on Hugging Face \u2192";
605
  document.getElementById("scene-glb-link").textContent = "This " + (isScene ? "scene" : "asset") + " as GLB \u2192";
606
+ document.getElementById("scene-note").textContent = isScene
607
+ ? "USD ships the full room including the Gaussian splat backdrop; the GLB is a lightweight preview (splat dropped, textures baked)."
608
+ : "USD carries the sim physics (mass, inertia, colliders) and per-zone PBR maps; the GLB is a static textured preview.";
609
  document.getElementById("scene-dataset-link").href = `${HFDS}/${cls.dataset}/tree/main/${cls.items_dir || ("assets/" + cls.class)}`;
610
  document.getElementById("scene-dataset-link").textContent = `Browse ${cls.class} in the ${cls.dataset} dataset \u2192`;
611
  }
 
749
  dslink.href = `${HFDS}/${cls.dataset}/tree/main/${dsDir}`;
750
  dslink.textContent = `Dataset \u00b7 ${cls.class}`;
751
  dslink.title = `projectsim/${cls.dataset} \u2192 ${dsDir}`;
752
+ if (!LOCAL_BASE) {
753
+ const q = new URLSearchParams(location.search);
754
+ q.set("class", cls.class); q.delete("item");
755
+ history.replaceState(null, "", `?${q}`);
756
+ }
757
  document.body.classList.toggle("class-static", !!cls.static);
758
  list.innerHTML = "";
759
  cls.items.forEach((item, i) => {
 
781
  t.onclick = () => selectClass(cls);
782
  tabs.appendChild(t);
783
  }
784
+ // ?class=<class>[&item=<id>] deep-links into a tab (used by the dataset
785
+ // cards' "Open in Lab" links). The URL is kept in sync on tab change.
786
+ const want = new URLSearchParams(location.search);
787
+ const startCls = catalog.find(c => c.class === want.get("class")) || catalog[0];
788
+ selectClass(startCls);
789
+ if (want.get("item")) {
790
+ const idx = startCls.items.findIndex(it => it.id === want.get("item"));
791
+ if (idx > 0) list.children[idx]?.click();
792
+ }
793
  resize();
794
  tick();
795
  });
thumbs/articulated-storage-and-appliances.jpg ADDED

Git LFS Details

  • SHA256: 2437fc126dc1b16f6d04eb848fd46a31581392bfa57eb903c10d5fbaaf6d714b
  • Pointer size: 131 Bytes
  • Size of remote file: 107 kB
thumbs/industrial-parts-and-packaging.jpg ADDED

Git LFS Details

  • SHA256: 60cba996cd792a35349eed6a8af57a81197114c2af283840a3bda1b0898b754f
  • Pointer size: 131 Bytes
  • Size of remote file: 184 kB
thumbs/scenes-and-worlds.jpg ADDED
thumbs/warehouse-manipulation-and-states.jpg ADDED

Git LFS Details

  • SHA256: 9648ec533f8089c326482de636f0bc550c165ab8fcc0c0c66c3e91177897a4d8
  • Pointer size: 131 Bytes
  • Size of remote file: 169 kB