weights-drop
Every new open-weight model release on HuggingFace — without scrolling through 5,000 LoRAs.
A live, public dashboard that surfaces fresh base-model releases (not finetunes, not LoRAs, not requantizations), scored by week-1 download velocity. Refreshed every 2 hours from the HuggingFace public API. No auth, no accounts.
What it tracks
HuggingFace publishes 2,000–4,000 new model uploads per day, but the genuinely new base-model releases — the "DeepSeek V4 Pro" / "Qwen 3.6 Coder" / "Mistral Codestral 2" tier — number maybe 5–15 per week. They get buried under the LoRA flood. weights-drop is the page that surfaces them.
For each tracked release you get:
- author, name, parameter count, license, pipeline tag
- day-1 and week-1 download reach
- a 0–100 Velocity Score with a colored badge (🔥 frontier, ⚡ strong, 📦 solid)
- a 14-snapshot sparkline of downloads over time
- one-click link to the model on HuggingFace
How it filters
Full transparency: every constant used by the base-model filter is visible in the in-app "about the filter" page (or hit GET /weights-drop/api/about/filter directly).
A model passes the filter iff ALL of:
1. No base_model: tag (which would mark it as derived).
2. No derivative tag (lora, peft, adapter, qlora, dora, merge, mergekit).
3. No quantization tag (gguf, mlx, awq, gptq, …) — unless the author is a known first-party publisher (e.g. meta-llama, deepseek-ai, Qwen, mistralai).
4. pipeline_tag is in the accepted list (text-generation, image-text-to-text, automatic-speech-recognition, text-to-image, …).
5. Author is not on the small bot-deny list (bulk requantizers / mergers).
6. Reached activation: likes ≥ 5 OR downloads ≥ 200 within 24h, OR is first-party.
Data sources (real, no mocks)
| Source | URL | Refresh |
| --- | --- | --- |
| HF model list (newest) | https://huggingface.co/api/models?sort=createdAt&direction=-1&limit=100&full=true (× 4 pages) | every 2 hours |
| HF trending | https://huggingface.co/api/trending?type=model&limit=50 | every 2 hours |
| HF single model (drawer view) | https://huggingface.co/api/models/{author}/{name} | per-request, on demand |
If HuggingFace is unreachable during a refresh window, the failure is recorded in the fetch_errors table and the dashboard's "last refresh" footer reflects the last successful snapshot. No fallback data is synthesized.
Run locally
npm install
cp .env.example .env # then edit PORT / DB_PATH if needed
npm start
Open <http://localhost:4789/weights-drop/>.
The first refresh runs ~1s after boot if the DB is empty or the last snapshot is older than 2h. You'll see real rows appear within a few seconds.
Endpoints
All endpoints are public, mounted under /weights-drop.
GET /— SPAGET /api/drops?range=24h|7d|30d|all&pipeline=&org=&minScore=&sort=score|created|downloads&limit=&offset=— board JSONGET /api/drop/:author/:name— single-model detail including snapshotsGET /api/stats— top-of-page stat cardsGET /api/feed.json— JSON Feed 1.1 of the last 50 dropsGET /api/feed.rss— RSS 2.0 variantGET /api/about/filter— full filter & scoring configurationPOST /refresh— manual refresh (rate-limited 1 per 30s per IP)GET /health— liveness probe
Stack
- Node.js 20+, Express 4
- better-sqlite3 (WAL)
- node-cron (
0 /2fetch,30 /6re-score,15 4 *housekeeping) - helmet + compression + express-rate-limit
- Vanilla JS SPA (no framework), dark theme, English labels
License
MIT.