Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Detect and manage duplicate items in Zotero libraries
.claude/skills/brycewang-stanford-zoplicate-dedup-guide/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 34% | 0% |
| case-03 | ✗→✓ | ▲ Improved | -1% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 10% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 30% | 0% |
| case-11 | ✗→✓ | ▲ Improved | -15% | 0% |
Zoplicate is a Zotero plugin that detects and manages duplicate items in your library. It goes beyond Zotero's built-in duplicate detection by offering configurable matching criteria, batch merge operations, automatic deduplication on import, and smart metadata merging that keeps the best version of each field. Essential for researchers who import from multiple databases.
bash# Download .xpi from GitHub releases # Zotero 7: Tools → Add-ons → Install Add-on From File
markdown### Duplicate Detection - **DOI matching** — Most reliable, catches exact duplicates - **Title similarity** — Fuzzy matching for slight variations - **ISBN matching** — For books and proceedings - **Combined scoring** — Weighted match across multiple fields ### Smart Merge - Keep the most complete metadata from each duplicate - Preserve all tags from both items - Merge notes and annotations - Consolidate attachments (keep all unique PDFs) - Maintain collection memberships from both ### Automatic Mode - Detect duplicates on import - Configurable auto-merge threshold - Notification before auto-merge (optional)
json{ "detection": { "criteria": { "doi": {"enabled": true, "weight": 1.0}, "title": {"enabled": true, "weight": 0.8, "similarity_threshold": 0.85}, "isbn": {"enabled": true, "weight": 1.0}, "year_author": {"enabled": true, "weight": 0.6} }, "overall_threshold": 0.7, "ignore_case": true, "normalize_unicode": true }, "merge": { "strategy": "keep_most_complete", "preserve_tags": true, "merge_notes": true, "keep_all_attachments": true, "prefer_fields_from": "newer" }, "auto": { "detect_on_import": true, "auto_merge": false, "notify_on_detect": true } }
markdown### Manual Deduplication 1. Tools → Zoplicate → Find Duplicates 2. Review duplicate groups (side-by-side comparison) 3. Select master item for each group 4. Click "Merge" — metadata combined, duplicates removed ### Batch Operations 1. Tools → Zoplicate → Find All Duplicates 2. Review summary (X groups, Y total duplicates) 3. "Auto-select best" — picks master by completeness 4. "Merge All" — batch process all groups ### Import Deduplication 1. Import papers from database export (RIS, BibTeX) 2. Zoplicate auto-checks against existing library 3. Popup shows potential duplicates 4. Choose: Skip / Merge / Import as new
markdown### DOI Match (100% confidence) Item A: "Attention Is All You Need" — DOI: 10.48550/arXiv.1706.03762 Item B: "Attention is All You Need" — DOI: 10.48550/arXiv.1706.03762 → Exact duplicate (same DOI) ### Title Fuzzy Match (85% similarity) Item A: "BERT: Pre-training of Deep Bidirectional Transformers..." Item B: "Bert: Pre-Training of Deep Bidirectional Transformers..." → Likely duplicate (title similarity > threshold) ### Different Versions (not duplicate) Item A: "Paper Title" (arXiv v1, 2023) Item B: "Paper Title" (Published version, 2024) → Different DOIs, may want to keep both or merge
markdown### Multi-Database Import Workflow 1. Search PubMed → Export RIS → Import to Zotero 2. Search Scopus → Export RIS → Import to Zotero 3. Search Web of Science → Export RIS → Import to Zotero 4. Zoplicate detects cross-database duplicates 5. Merge: keep best metadata from each source ### With Other Plugins - **Zotero Connector** — Detect dups on browser import - **Better BibTeX** — Preserve citation keys on merge - **ZotMoov** — Reorganize attachments after merge
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-04 | pass→pass | 18,451 | 12,499 | -32% | 1 | 1 | 0% | 2,547 | 3,011 | +18% | 0 | 0 | — |
case-05 | pass→pass | 14,160 | 20,298 | +43% | 1 | 1 | 0% | 2,455 | 4,094 | +67% | 0 | 0 | — |
case-02 | fail→fail | 21,018 | 18,851 | -10% | 1 | 1 | 0% | 3,124 | 3,833 | +23% | 0 | 0 | — |
case-01 | fail→pass | 20,388 | 21,436 | +5% | 1 | 1 | 0% | 3,180 | 4,264 | +34% | 0 | 0 | — |
case-03 | fail→pass | 19,866 | 11,119 | -44% | 1 | 1 | 0% | 2,897 | 2,858 | -1% | 0 | 0 | — |
case-06 | pass→pass | 14,964 | 11,625 | -22% | 1 | 1 | 0% | 2,219 | 3,199 | +44% | 0 | 0 | — |
case-07 | fail→pass | 14,564 | 8,216 | -44% | 1 | 1 | 0% | 2,200 | 2,417 | +10% | 0 | 0 | — |
case-08 | fail→fail | 10,273 | 5,733 | -44% | 1 | 1 | 0% | 1,610 | 2,033 | +26% | 0 | 0 | — |
case-09 | fail→pass | 15,559 | 10,532 | -32% | 1 | 1 | 0% | 2,160 | 2,814 | +30% | 0 | 0 | — |
case-10 | pass→pass | 8,781 | 5,106 | -42% | 1 | 1 | 0% | 1,472 | 1,767 | +20% | 0 | 0 | — |
case-11 | fail→pass | 12,456 | 3,442 | -72% | 1 | 1 | 0% | 2,035 | 1,724 | -15% | 0 | 0 | — |
case-12 | fail→pass | 12,679 | 8,111 | -36% | 1 | 1 | 0% | 1,887 | 2,342 | +24% | 0 | 0 | — |
case-13 | fail→fail | 11,395 | 4,002 | -65% | 1 | 1 | 0% | 1,597 | 1,665 | +4% | 0 | 0 | — |
case-14 | pass→pass | 8,873 | 2,763 | -69% | 1 | 1 | 0% | 1,206 | 1,571 | +30% | 0 | 0 | — |
case-15 | fail→pass | 8,980 | 3,380 | -62% | 1 | 1 | 0% | 1,187 | 1,617 | +36% | 0 | 0 | — |
case-16 | pass→pass | 9,473 | 2,836 | -70% | 1 | 1 | 0% | 1,361 | 1,568 | +15% | 0 | 0 | — |
case-17 | pass→pass | 9,268 | 3,150 | -66% | 1 | 1 | 0% | 1,215 | 1,571 | +29% | 0 | 0 | — |
case-18 | pass→pass | 18,025 | 15,319 | -15% | 1 | 1 | 0% | 2,438 | 3,308 | +36% | 0 | 0 | — |
case-19 | fail→pass | 10,824 | 3,049 | -72% | 1 | 1 | 0% | 2,158 | 1,584 | -27% | 0 | 0 | — |
case-20 | fail→pass | 5,626 | 2,442 | -57% | 1 | 1 | 0% | 948 | 1,432 | +51% | 0 | 0 | — |
case-21 | pass→pass | 9,713 | 7,187 | -26% | 1 | 1 | 0% | 1,595 | 2,147 | +35% | 0 | 0 | — |
case-22 | fail→pass | 19,859 | 5,724 | -71% | 1 | 1 | 0% | 2,897 | 2,254 | -22% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +45 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.