Skip to content

Commit 01bbd3e

Browse files
committed
Add screenshots and restructure README
1 parent 686e402 commit 01bbd3e

4 files changed

Lines changed: 68 additions & 16 deletions

File tree

‎README.md‎

Lines changed: 68 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,74 +6,126 @@ Nearby points are semantically similar papers, so a cluster is a topic.
66

77
**Live site: https://flecomet.github.io/cvpr-explorer/**
88

9-
> This is a fork of [dataplayer12/cvpr-explorer](https://github.com/dataplayer12/cvpr-explorer)
10-
> ([cvprexplorer.com](http://cvprexplorer.com)), rewritten for CVPR 2026: OpenAI embeddings
11-
> replaced with the open SPECTER2 scientific-document model, automatic cluster labels, and a
12-
> static front-end that needs no server. Original idea and design credit to
13-
> [@dataplayer12](https://github.com/dataplayer12). Same license as upstream — see [LICENSE](LICENSE).
9+
Fork of [dataplayer12/cvpr-explorer](https://github.com/dataplayer12/cvpr-explorer), rewritten
10+
for CVPR 2026. See [Credits](#credits).
11+
12+
[![CVPR 2026 Explorer showing the full map with one paper selected](docs/img/map.png)](https://flecomet.github.io/cvpr-explorer/)
13+
14+
![Searching for "diffusion" dims every other paper, then a click opens the abstract](docs/img/demo.gif)
1415

1516
## Why
1617

1718
Conference sites list 4000+ papers as one flat list. Finding the ones you care about means
1819
scrolling past thousands you don't. Here you zoom into the region of the map you're interested
19-
in — diffusion, 3D reconstruction, medical imaging — and read only those.
20+
in, such as diffusion, 3D reconstruction or medical imaging, and read only those papers.
21+
22+
## Reading the map
23+
24+
Each point is one paper. Position comes from the abstract: papers with similar abstracts land
25+
close together. Colours mark topic clusters, and the legend names each one with its most
26+
characteristic terms. Grey points are papers that fit no cluster.
27+
28+
- **Search** matches titles and abstracts and dims every other point, so the shape of the map
29+
stays visible. The query is stored in the URL, so
30+
[`?q=diffusion`](https://flecomet.github.io/cvpr-explorer/?q=diffusion) is a shareable link.
31+
- **Click** a point to show the title, authors and abstract in the side panel, with a link to the PDF.
32+
- **Scroll and drag** to zoom and pan.
33+
34+
<img src="docs/img/panel.png" alt="Side panel with the title, authors, PDF button and abstract of a selected paper" width="300">
35+
36+
Distances are approximate. UMAP, the 2D projection method, preserves local neighbourhoods
37+
better than global distances. Read "these two papers are close" as meaningful, and "this
38+
cluster is twice as far away as that one" as unreliable.
39+
40+
## Largest topics
41+
42+
The pipeline finds 32 topic clusters. A further 1477 papers (36%) belong to none of them.
43+
Labels are generated automatically from the abstracts.
44+
45+
| Papers | Cluster label |
46+
|-------:|---------------|
47+
| 277 | 3d · point · view |
48+
| 197 | medical · clinical · image |
49+
| 176 | attacks · attack · adversarial |
50+
| 149 | gaussian · 3dgs · 3d |
51+
| 134 | generation · diffusion · training |
52+
| 122 | action · vla · robot |
53+
| 114 | reasoning · visual · multimodal |
54+
| 112 | 3d · generation · mesh |
2055

2156
## How it works
2257

23-
The pipeline is offline; the site is static.
58+
The pipeline is offline and the site is static.
2459

2560
| Step | Script | Output |
2661
|------|--------|--------|
2762
| Scrape titles, authors, abstracts, PDF links | `scrape.py` | `data/cvpr_2026_papers.json` |
2863
| Embed abstracts with SPECTER2 | `embed.py` | `data/cvpr_2026_specter2.npy` |
29-
| UMAP to 2D + HDBSCAN clusters + c-TF-IDF labels | `layout.py` | `data/cvpr_2026_layout.json` |
64+
| UMAP to 2D, HDBSCAN clusters, c-TF-IDF labels | `layout.py` | `data/cvpr_2026_layout.json` |
3065
| Merge into the site payload | `build_site.py` | `site/data.json` |
3166

32-
`site/index.html` renders that payload client-side with plotly.js. No backend, no API keys at
33-
serve time.
67+
`layout.py` runs UMAP on the cosine-normalised embeddings, then HDBSCAN, a density-based
68+
clustering method, on the 2D coordinates. Cluster labels use c-TF-IDF: terms score high when
69+
they are frequent in one cluster and rare in the others.
70+
71+
`site/index.html` renders the payload client-side with plotly.js. No backend and no API keys
72+
are needed at serve time.
3473

3574
## Run the pipeline
3675

3776
```shell
3877
pip install -r requirements-pipeline.txt
3978
python scrape.py # writes data/cvpr_2026_papers.json
40-
python embed.py # writes data/cvpr_2026_specter2.npy (GPU recommended)
79+
python embed.py # writes data/cvpr_2026_specter2.npy, GPU recommended
4180
python layout.py # writes data/cvpr_2026_layout.json
4281
```
4382

4483
## Serve locally
4584

46-
Static site (what the live URL serves):
85+
The static site is what the live URL serves:
4786

4887
```shell
4988
python build_site.py
5089
python -m http.server -d site 8000 # http://localhost:8000
5190
```
5291

53-
Or the original Dash app:
92+
<details>
93+
<summary>Original Dash app and Docker</summary>
94+
95+
The upstream Dash app is still in the repository:
5496

5597
```shell
5698
pip install -r requirements.txt
5799
python app.py # http://localhost:8050
58100
```
59101

60-
Or with Docker:
102+
With Docker:
61103

62104
```shell
63105
docker compose build
64106
docker compose up
65107
```
66108

109+
</details>
110+
67111
## Deployment
68112

69113
Pushing to `main` runs `.github/workflows/pages.yml`, which rebuilds `site/data.json` and
70114
publishes `site/` to GitHub Pages.
71115

72116
## Roadmap
73117

74-
- [x] SPECTER2 embeddings (open model, no API key)
118+
- [x] SPECTER2 embeddings, an open model that needs no API key
75119
- [x] 2D projection with clusters and automatic topic labels
76-
- [x] Static site — no server, no cold start
120+
- [x] Static site with no server and no cold start
77121
- [x] Keyword search across titles and abstracts
78122
- [ ] Mark papers with released code
79123
- [ ] Add more conferences and years back
124+
125+
## Credits
126+
127+
This is a fork of [dataplayer12/cvpr-explorer](https://github.com/dataplayer12/cvpr-explorer)
128+
([cvprexplorer.com](http://cvprexplorer.com)). The fork replaces the OpenAI embeddings with the
129+
open SPECTER2 scientific-document model, adds automatic cluster labels, and serves a static
130+
front-end that needs no server. The original idea and design are by
131+
[@dataplayer12](https://github.com/dataplayer12). Same licence as upstream, see [LICENSE](LICENSE).

‎docs/img/demo.gif‎

181 KB
Loading

‎docs/img/map.png‎

323 KB
Loading

‎docs/img/panel.png‎

84.8 KB
Loading

0 commit comments

Comments
 (0)