add-conference

$npx mdskill add huggingface/paperswithcode/add-conference

This skill adds curated rows to the `conferences` table so conference pages at `/conferences/<slug>` render correctly with metadata, hero images, deadlines, and linked papers. Prefer small idempotent migrations plus applying the same change to the live database.

SKILL.md

.github/skills/add-conferenceView on GitHub ↗
---
name: add-conference
description: Add or update conference rows in the paperswithcode repo database. Use this whenever the user asks to add a conference, create a conference page, import accepted papers for a venue (CVPR, ICLR, NeurIPS, ICML, ICRA, etc.), set conference dates/venue/description/hero image, or link papers to a conference edition. Trigger even for casual phrasing like "add CVPR 2027", "create the ICLR 2026 page", "import conference papers from this CSV", or "set the conference thumbnail".
---

# Add a Conference

This skill adds curated rows to the `conferences` table so conference pages at `/conferences/<slug>` render correctly with metadata, hero images, deadlines, and linked papers. Prefer small idempotent migrations plus applying the same change to the live database.

> **Image storage:** seed PNG → `/tmp/paperswithcode_entity_image_seeds/conferences/<slug>.png` → `import_entity_image.py` → SQL bytes served at `/api/v1/conferences/<slug>/image`. Do **not** put conference heroes in `frontend/public/` (that folder is for browser assets only: favicons, `og-image.png`, logos).

When the user says **"similarly add X"** (often with just a venue name and year), run the full workflow below without re-asking — same metadata pattern, thumbnail import, and verification steps as the prior conference in the conversation unless they specify otherwise.

## End-to-End Checklist

For a typical new conference edition:

1. Confirm the conference does not already exist (`slug`, `name`, `year`).
2. Pick a stable slug: `<short-name-lowercase>-<year>` (e.g. `cvpr-2026`, `iclr-2026`, `icra-2026`).
3. Write metadata + migration SQL (or idempotent Python upsert script).
4. Add hero image: save seed PNG under `/tmp/paperswithcode_entity_image_seeds/conferences/<slug>.png`, then import into SQL (see Thumbnail).
5. Apply migration to the live DB.
6. Link papers when the user provides a CSV or asks for import (see Paper linking).
7. Verify API + report production URL.

Skip paper import only when the user explicitly asks for the conference row alone.

## Core Rules

Conferences are normalized venue editions. Each gets its own page at `/conferences/<slug>`.

- **`slug`**: lowercase short name + hyphen + year (`cvpr-2026`, not `CVPR2026`).
- **`name`**: display title including year (e.g. `CVPR 2026`, `ICLR 2026`).
- **`short_name`**: abbreviation without year (`CVPR`, `ICLR`, `NeurIPS`).
- **`year`**: integer edition year.
- **`url`**: official conference homepage.
- **`start_date` / `end_date`**: conference dates when known (`DATE` columns).
- **`venue` / `location`**: physical venue and city/country when known.
- **`description`**: one concise paragraph — what the venue is, what research it covers, and what users can browse on this page. Use relative on-site links when helpful; never hard-code `paperswithcode.co` or localhost inside markdown fields.
- **`hf_url`**: optional Hugging Face dataset or org page for the edition (e.g. `https://huggingface.co/datasets/ai-conferences/CVPR2026`).
- **`image_url`**: leave NULL for new self-hosted images — the API resolves `/api/v1/conferences/<slug>/image` once `image_mime_type` is set. Use an external URL only when you cannot self-host.
- **`image_credit`**: attribution as markdown link, e.g. `[CVPR 2026](https://cvpr.thecvf.com/)`.
- **Paper association:** use `paper_conferences` junction (`source = 'manual'` or importer tag). Display tags on paper pages also use denormalized `papers.proceeding` (e.g. `CVPR 2026`, `CVPR 2026 Oral`).
- **Images:** curated self-hosted heroes are stored in SQL (`image_data` / `image_mime_type`). Do **not** add runtime assets under `frontend/public/images/`.

## Workflow

### 1. Understand the requested conference

- Record full name, short name, year, official URL, dates, venue/location, and any hero image the user attached.
- Search for an existing row by `slug`, `name`, and `year` before creating a new one.
- Check sibling editions (e.g. `cvpr-2025`, `cvpr-2026`) to calibrate description tone and metadata fields.

### 2. Choose metadata

| Field | Example (CVPR 2026) |
|-------|---------------------|
| `name` | `CVPR 2026` |
| `slug` | `cvpr-2026` |
| `short_name` | `CVPR` |
| `year` | `2026` |
| `url` | `https://cvpr.thecvf.com/` |
| `start_date` | `2026-06-03` |
| `end_date` | `2026-06-07` |
| `venue` | `Colorado Convention Center` |
| `location` | `Denver, USA` |
| `hf_url` | `https://huggingface.co/datasets/ai-conferences/CVPR2026` |
| `image_credit` | `[CVPR 2026](https://cvpr.thecvf.com/)` |

### 3. Thumbnail

Conference hero images are DB-backed. Save a seed PNG, import it, then verify the API image endpoint.

**If the user provides an image**, copy it to:

```text
/tmp/paperswithcode_entity_image_seeds/conferences/<slug>.png
```

**Otherwise**, source a suitable logo or venue graphic:

1. Prefer the official conference logo or branding from the conference homepage.
2. Crop to a clear hero image (avoid tiny favicons); PNG is preferred.
3. Save to `/tmp/paperswithcode_entity_image_seeds/conferences/<slug>.png`.
4. Set `image_credit` to the official site or source.

After the conference row exists, import the PNG into SQL:

```bash
uv run --env-file backend/keys.env python backend/database/import_entity_image.py \
    conferences <slug> /tmp/paperswithcode_entity_image_seeds/conferences/<slug>.png
```

No frontend rebuild is needed for entity images — they are served from the backend API.

### 4. Create and apply migration

Add `backend/database/migrations/add_<slug>_conference.sql` using `ON CONFLICT (slug) DO UPDATE`.

Example:

```sql
INSERT INTO conferences (
    name, slug, short_name, year, url,
    start_date, end_date, venue, location,
    description, image_url, image_credit, hf_url
)
VALUES (
    'CVPR 2026',
    'cvpr-2026',
    'CVPR',
    2026,
    'https://cvpr.thecvf.com/',
    '2026-06-03',
    '2026-06-07',
    'Colorado Convention Center',
    'Denver, USA',
    'CVPR (IEEE/CVF Conference on Computer Vision and Pattern Recognition) is a flagship venue for computer vision, video understanding, and related machine learning research.',
    NULL,
    '[CVPR 2026](https://cvpr.thecvf.com/)',
    'https://huggingface.co/datasets/ai-conferences/CVPR2026'
)
ON CONFLICT (slug) DO UPDATE SET
    name = EXCLUDED.name,
    short_name = EXCLUDED.short_name,
    year = EXCLUDED.year,
    url = EXCLUDED.url,
    start_date = EXCLUDED.start_date,
    end_date = EXCLUDED.end_date,
    venue = EXCLUDED.venue,
    location = EXCLUDED.location,
    description = EXCLUDED.description,
    image_url = EXCLUDED.image_url,
    image_credit = EXCLUDED.image_credit,
    hf_url = EXCLUDED.hf_url,
    updated_at = CURRENT_TIMESTAMP;
```

Apply to the live DB:

```bash
uv run --env-file backend/keys.env python3 - <<'PY'
from pathlib import Path
from sqlalchemy import text
from backend.database.connection import db_manager

sql = Path("backend/database/migrations/add_<slug>_conference.sql").read_text()
with db_manager.engine.begin() as conn:
    conn.execute(text(sql))
PY
```

For large paper imports, follow the idempotent Python pattern in existing setup scripts instead of raw SQL:

- `backend/database/conferences_setup/import_cvpr2026.py`
- `backend/database/conferences_setup/import_iclr2026.py`
- `backend/database/conferences_setup/import_icra2026.py`

### 5. Paper linking

When importing accepted papers:

1. Upsert the conference row first (step 4).
2. For each paper: create or update the `papers` row, set `proceeding` (e.g. `CVPR 2026`, `CVPR 2026 Oral`, `CVPR 2026 Spotlight`), and insert into `paper_conferences`.
3. Link repos/project pages when present in the source CSV.
4. Run task keyword backfill if new papers were added:

```bash
uv run --env-file backend/keys.env \
    backend/database/tasks_setup/link_papers_by_task_keywords.py
```

Use `source = 'manual'` on `paper_conferences` for admin/script imports unless a dedicated importer tag exists.

### 6. Optional: deadlines

The database is the source of truth for https://paperswithcode.co/ai-deadlines
(the huggingface/ai-deadlines YAML repo is no longer imported). Scheduled sweeps
(`sweep_conference_deadlines` / `refresh_conference_deadlines`) research new
editions and deadline changes; to set or correct an edition's deadlines by hand,
use the audited admin endpoint. The list replaces the edition's deadlines, dates
are local times in each deadline's timezone (write `AoE` for Anywhere on Earth),
and `short_name` creates the edition when the slug does not exist yet:

```bash
curl -X PUT https://paperswithcode.co/api/v1/conferences/<series>-<year>/deadlines \
  -H "X-Admin-Token: $PWC_ADMIN_API_TOKEN" -H "Content-Type: application/json" \
  -d '{"short_name": "CVPR", "url": "https://cvpr.thecvf.com/Conferences/2027",
       "deadlines": [
         {"type": "abstract", "label": "Abstract Submission", "date": "2026-11-06 23:59:59", "timezone": "AoE"},
         {"type": "paper", "label": "Paper Submission", "date": "2026-11-13 23:59:59", "timezone": "AoE"}
       ]}'
```

Deadline series and edition slugs follow `<series>-<year>` (e.g. `cvpr-2027`).

## Database Access

Run Python and project CLIs from the repo root:

```bash
uv run --env-file backend/keys.env python3 ...
```

Keep writes scoped to the requested conference edition. Do not rewrite unrelated conference metadata or paper links.

## Verification

Before reporting done:

1. Conference row:

```sql
SELECT id, slug, name, year, image_url, image_mime_type, hf_url
FROM conferences
WHERE slug = '<slug>';
```

2. Linked paper count:

```sql
SELECT COUNT(*) FROM paper_conferences pc
JOIN conferences c ON c.id = pc.conference_id
WHERE c.slug = '<slug>';
```

3. Conference API (expect `"image_url": "/api/v1/conferences/<slug>/image"` when DB image imported):

```bash
curl -fsS "http://localhost:8000/api/v1/conferences/<slug>" | uv run python3 -m json.tool
curl -fsS -o /dev/null -w "%{http_code}\n" "http://localhost:8000/api/v1/conferences/<slug>/image"
```

If the API is stale, verify the database row directly and report the stale API
response. Do not start or restart deployed services during data curation.

## Reporting Back

Always include:

- **Production conference URL**: `https://paperswithcode.co/conferences/<slug>`
- **Edition metadata**: year, dates, venue/location when set
- **Thumbnail**: confirm `/api/v1/conferences/<slug>/image` returns HTTP 200 after import
- **Paper import summary**: papers created/updated, `paper_conferences` links added (if applicable)
- **HF link**: `hf_url` when set

## Reference: recent conference additions

| Slug | Notes |
|------|-------|
| `cvpr-2026` | CSV import from `data/cvpr2026_papers.csv`; DB-backed hero image |
| `iclr-2026` | ICLR 2026 edition with HF dataset link |
| `icra-2026` | Robotics venue edition |

More from huggingface/paperswithcode

SkillDescription
add-benchmarkAdd or update benchmark datasets/leaderboards in the paperswithcode repo database. Use this whenever the user asks to add a benchmark, add a leaderboard, set default/featured benchmarks for a task, link benchmarks to tasks, add Accuracy or other metrics for a benchmark, or fix benchmark source links. This is repo-specific and should trigger even if the user only names benchmark titles and a task page.
add-evalsAdd evaluation results to the paperswithcode database from any source — Hugging Face model cards, arXiv/HF/PapersWithCode paper text, or GitHub repository READMEs — restricted to benchmarks that already exist with a task association and the exact leaderboard metric already configured. Use this whenever the user shares a Hugging Face model URL or repo id, an arXiv id / HF paper / PapersWithCode paper, a GitHub repository URL, or a model release page and asks to add evaluation results, benchmark scores, or leaderboard entries — even when phrased casually like "add scores from this model", "import benchmarks from <hf url>", "ingest the eval table from this paper into the DB", "grab the benchmarks from this repo's README", or "add evaluations for this release". By default import only the model(s) the source paper introduces — never post comparison-table baselines onto other papers as external evals unless the user explicitly asks. If the source is not backed by an arXiv paper, first use the add-external-paper skill to create or update the `source = 'external'` paper row, then attach evaluation rows to that paper. This skill must skip source-only metrics, component scores, subscores, and alternate metric labels unless that metric is already configured for the exact leaderboard; use it instead of generic ingestion guidance whenever the user is trying to populate evaluation results from a model, paper, or repository source.
add-external-paperAdd non-ArXiv external papers/resources to the paperswithcode repo database. Use this whenever the user asks to add, index, submit, or populate a paper/resource/release that does not have an arXiv paper, including Hugging Face model cards, GitHub repositories, blog posts, vendor technical reports, external PDFs, project pages, or release announcements. This skill should trigger even when the user casually says "add this repo/model/blog to paperswithcode" or gives a URL such as GitHub, Hugging Face, a company blog, a PDF, or a technical report and wants it to appear as a paper page with tasks, methods, code, project links, HF artifacts, and a thumbnail.
add-methodAdd or update AI/ML method taxonomy rows in the paperswithcode repo database. Use this whenever the user asks to add a method, technique, architecture, attention mechanism, training method, model-family method, or source/visual metadata for a method; says phrases like "make GPT-4 a method", "add X as a method", "similarly add this method", "link papers that cite the source paper", or "update the method source to point to the paper page"; or gives a method name plus a paper, arXiv id, PapersWithCode URL, Hugging Face report, GitHub explainer, blog post, or image for the method thumbnail.
add-taskAdd or update AI/ML task taxonomy rows in the paperswithcode repo database. Use this whenever the user asks to add a task, create a new benchmark category, add a subtask under an existing task, set task description/keywords/area/image, or expand task coverage; says phrases like "add X as a task", "create a task page for", "similarly add this task", or "we need a task for"; or names a research area (ASR, object detection, agents, tabular learning) that should become a browsable /tasks/ page with keywords and a hero image. After adding the task, recommend standard benchmarks to link next (use add-benchmark when the user wants them ingested).
complete-task>-
complete-task-based-on-hfComplete or audit a Papers With Code task using Hugging Face model popularity as the discovery signal. Use this whenever a user asks to scan the most downloaded or trending Hugging Face models for a pipeline/task, resolve their canonical technical reports, and add missing paper-native evaluations to existing Papers With Code benchmarks. Trigger for requests like "complete this task from HF", "check popular Hub models for missing evals", or a Hugging Face models URL with `pipeline_tag` and `sort`; use `add-evals` instead for one already-known model or paper, and `complete-task-v2` for a holistic field survey beyond Hugging Face.
complete-task-v2>-
create-thumbnailCreate, replace, audit, and publish Papers With Code paper thumbnails for one paper or every paper on a benchmark page. Use this whenever a user asks to add a thumbnail, fix an "Untitled resource" card, use artwork from a source/project/GitHub README, regenerate a paper preview, or find papers on a benchmark with missing, generic, stale, or broken thumbnails. This is the repo-specific end-to-end workflow for source selection, portrait composition, cache-safe publication, and live visual verification.
create-trendsResearch, write, and optionally publish exactly three field-direction bullets for a Papers With Code task page's `research_trends`, synthesizing recurring themes from recent major papers, current trending work, and widely reported benchmarks. Use this whenever the user asks where an AI/ML field is headed, wants key trends or techniques extracted from recent papers, asks to add/update the three bullets below a task description, or wants a concise AlphaXiv-style classic-versus-recent overview—even if they only provide a task-page URL or task name.