yuchenlin/rebiber

A simple tool to update bib entries with their official information (e.g., DBLP or the ACL anthology).

Python

3,045

230 commits

updated Oct 12, 2026

See the code

README

Rebiber

Replace unofficial / arXiv BibTeX entries with official DBLP or ACL Anthology records. Cite keys are kept.

Web demo · Colab

Install from GitHub only. We do not publish or support PyPI (pip install rebiber is a 2021 1.1.3 release).

Install

Requires Python 3.10 or newer. Rebiber 1.4 uses bibtexparser 2 (>=2,<3).

uv tool install git+https://github.com/yuchenlin/rebiber
# or
pip install "rebiber @ git+https://github.com/yuchenlin/rebiber"

Develop from a checkout:

git clone https://github.com/yuchenlin/rebiber.git && cd rebiber
uv sync --extra dev          # or: pip install -e ".[dev]"
uv run pytest

Changes in 1.4

  • Migrate to bibtexparser 2 and raise the minimum Python version from 3.8 to 3.10.
  • Preserve single-space field indentation and one blank line between entries.
  • Apply field removal, venue abbreviation, field selection, title protection, and sorting to entries with repeated cite keys when -d False is set.

Usage

Omitting -o overwrites each -i file. Start with --dry-run.

rebiber -i refs.bib --dry-run
rebiber -i refs.bib --dry-run --report changes.txt
rebiber -i refs.bib -o refs.official.bib
rebiber -i refs.bib --used-in paper.tex appendix.tex
rebiber -i refs.bib --live-lookup          # opt-in DBLP search after a local miss
rebiber -i *.bib -o ./normalized/
rebiber -i refs.bib --format-only -o pretty.bib
rebiber -i refs.bib --keep author,title,booktitle,journal,year,volume,number,pages,doi --protect-titles

Examples: examples/input.bib → examples/output.bib.

FlagDefaultMeaning
-irequiredOne or more .bib files
-oin placeOutput file, or a directory if -i has multiple files
--dry-runoffPrint the change report; do not write .bib
--report PATH—Also write the change report to a file
--used-in TEX …all keysOnly replace keys cited in these files (\cite / \citep / \citet / \citealp / \citeyear / \nocite). Unused keys are still pretty-printed and still affected by -r / -s / -st / -d
--live-lookupoffOn a local miss, search DBLP by title (max 5 hits). Same author/title guards. Respect DBLP rate limits
--keep FIELDSkeep allAllowlist of fields (ID / ENTRYTYPE always kept)
--protect-titlesoffBrace acronyms in titles (BERT, GPT-2, …)
--format-onlyoffPretty-print only; no DB / DBLP / arXiv rewrite
--no-check-authorsoffSkip last-name overlap (empty authors still do not match)
-rnoneDrop fields, e.g. -r url,biburl,timestamp
-s TrueFalseShorten venues via rebiber/abbr.tsv
-d FalseTrueKeep duplicate cite keys
-st TrueFalseSort entries by cite key
-l / -apackagedCustom bib_list.txt / abbr.tsv
-u—Refresh packaged dumps from GitHub main
-v—Print version

Leftover unofficial arXiv entries may still query the arXiv API for year / primaryClass. Use --format-only for a fully offline run.

Matching

  • Authors. A title hit converts only if the first-author last names match or at least two last names overlap. Empty/missing authors never match (including with --no-check-authors). Trailing et al. / et.al. / and others are stripped.
  • Titles. Digit-preserving key first (16x16 ≠ 32x32), then the letters-only key used by older dumps.
  • Live DBLP. Prefers a published (non-arXiv/CoRR) hit; skips if several published hits remain. Digit keys must agree.
  • eprint. If the input has an arXiv id and the official record does not, it is copied onto the replacement (local dump and live).
  • ArXiv form. Unofficial preprints become @misc with eprint / archivePrefix / primaryClass. Already-published papers are not rewritten because an abstract mentions arXiv.
  • Broken entries. Unparsed or unclosed records are kept, not dropped.

Build a dump JSON:

uv run python -m rebiber.bib2json -i path/to/conf.bib -o path/to/conf.json

Example

@article{lin2020birds,
  title={Birds have four legs?! NumerSense: Probing Numerical Commonsense Knowledge of Pre-trained Language Models},
  author={Lin, Bill Yuchen and Lee, Seyeon and Khanna, Rahul and Ren, Xiang},
  journal={arXiv preprint arXiv:2005.00683},
  year={2020}
}

becomes the official EMNLP 2020 @inproceedings (same cite key), with anthology URL and DOI.

Supported venues

Toggle files in rebiber/bib_list.txt. ACL Anthology includes *CL main conferences and workshops. Other dumps are main tracks only (no CVPR/ICCV workshops).

A monthly Action opens a PR with fresh DBLP + anthology data. Years below are what is in this repo, not “whatever DBLP has tomorrow.”

Kept current (monthly job + recent dumps)

VenueYears
ACL Anthologycurrent (split acl_1/2/3.json)
AAAI2010–2026
ACCV2022, 2024
AISTATS2013–2025
BMVC2010–2024
CHI2010–2026
CVPR2000–2025
ECCV2022, 2024
ICASSP2015–2025
ICCVodd years 2003–2025
ICLR2013–2025
ICML2000–2025
IJCAI2011, 2013, 2015–2025
INTERSPEECH2016–2025
KDD2010–2026
ICRA / IROS2020–2025 (main)
RSS / CoRL2020–2024 (main)
JMLR2020–2026
TMLR2022–2026
WACV2022–2026
MLSys2019–2025
MICCAI2022–2025 (main)
NeurIPS2000–2025
SIGIR2010–2026
UAI2010–2025
WWW2001–2026

Not in the index: COLM (empty DBLP toc). ICLR/ICML/CVPR 2026, RSS/CoRL 2025, ECCV 2026 — not on DBLP yet.

Historical (frozen ~2020): ALENEX, ASONAM, BigData, CIDR, CIKM, COLT, MM, RecSys, SDM, SIGMOD (through 2022; later years are PACMMOD), SODA, STOC, WSDM.

Thanks to Anton Tsitsulin for the original dump collection.

Adding a venue

uv run python -m rebiber.download_dblp --confs iclr --start-year 2026

That writes rebiber/data/{conf}{year}.bib.json and appends bib_list.txt when needed. PRs welcome.

Star history

In-repo SVGs, refreshed weekly from the GitHub API (no third-party token).

All-time stars

2026 year-to-date

Contact

billyuchenlin@gmail.com · i@yuchenlin.xyz · GitHub issues

bibliography
bibtex
latex
machine-learning
natural-language-processing
publication
research-paper

yuchenlin/rebiber

A simple tool to update bib entries with their official information (e.g., DBLP or the ACL anthology).

Python

3,045

230 commits

updated Oct 12, 2026

See the code

README

Rebiber

Replace unofficial / arXiv BibTeX entries with official DBLP or ACL Anthology records. Cite keys are kept.

Web demo · Colab

Install from GitHub only. We do not publish or support PyPI (pip install rebiber is a 2021 1.1.3 release).

Install

Requires Python 3.10 or newer. Rebiber 1.4 uses bibtexparser 2 (>=2,<3).

uv tool install git+https://github.com/yuchenlin/rebiber
# or
pip install "rebiber @ git+https://github.com/yuchenlin/rebiber"

Develop from a checkout:

git clone https://github.com/yuchenlin/rebiber.git && cd rebiber
uv sync --extra dev          # or: pip install -e ".[dev]"
uv run pytest

Changes in 1.4

  • Migrate to bibtexparser 2 and raise the minimum Python version from 3.8 to 3.10.
  • Preserve single-space field indentation and one blank line between entries.
  • Apply field removal, venue abbreviation, field selection, title protection, and sorting to entries with repeated cite keys when -d False is set.

Usage

Omitting -o overwrites each -i file. Start with --dry-run.

rebiber -i refs.bib --dry-run
rebiber -i refs.bib --dry-run --report changes.txt
rebiber -i refs.bib -o refs.official.bib
rebiber -i refs.bib --used-in paper.tex appendix.tex
rebiber -i refs.bib --live-lookup          # opt-in DBLP search after a local miss
rebiber -i *.bib -o ./normalized/
rebiber -i refs.bib --format-only -o pretty.bib
rebiber -i refs.bib --keep author,title,booktitle,journal,year,volume,number,pages,doi --protect-titles

Examples: examples/input.bib → examples/output.bib.

FlagDefaultMeaning
-irequiredOne or more .bib files
-oin placeOutput file, or a directory if -i has multiple files
--dry-runoffPrint the change report; do not write .bib
--report PATH—Also write the change report to a file
--used-in TEX …all keysOnly replace keys cited in these files (\cite / \citep / \citet / \citealp / \citeyear / \nocite). Unused keys are still pretty-printed and still affected by -r / -s / -st / -d
--live-lookupoffOn a local miss, search DBLP by title (max 5 hits). Same author/title guards. Respect DBLP rate limits
--keep FIELDSkeep allAllowlist of fields (ID / ENTRYTYPE always kept)
--protect-titlesoffBrace acronyms in titles (BERT, GPT-2, …)
--format-onlyoffPretty-print only; no DB / DBLP / arXiv rewrite
--no-check-authorsoffSkip last-name overlap (empty authors still do not match)
-rnoneDrop fields, e.g. -r url,biburl,timestamp
-s TrueFalseShorten venues via rebiber/abbr.tsv
-d FalseTrueKeep duplicate cite keys
-st TrueFalseSort entries by cite key
-l / -apackagedCustom bib_list.txt / abbr.tsv
-u—Refresh packaged dumps from GitHub main
-v—Print version

Leftover unofficial arXiv entries may still query the arXiv API for year / primaryClass. Use --format-only for a fully offline run.

Matching

  • Authors. A title hit converts only if the first-author last names match or at least two last names overlap. Empty/missing authors never match (including with --no-check-authors). Trailing et al. / et.al. / and others are stripped.
  • Titles. Digit-preserving key first (16x16 ≠ 32x32), then the letters-only key used by older dumps.
  • Live DBLP. Prefers a published (non-arXiv/CoRR) hit; skips if several published hits remain. Digit keys must agree.
  • eprint. If the input has an arXiv id and the official record does not, it is copied onto the replacement (local dump and live).
  • ArXiv form. Unofficial preprints become @misc with eprint / archivePrefix / primaryClass. Already-published papers are not rewritten because an abstract mentions arXiv.
  • Broken entries. Unparsed or unclosed records are kept, not dropped.

Build a dump JSON:

uv run python -m rebiber.bib2json -i path/to/conf.bib -o path/to/conf.json

Example

@article{lin2020birds,
  title={Birds have four legs?! NumerSense: Probing Numerical Commonsense Knowledge of Pre-trained Language Models},
  author={Lin, Bill Yuchen and Lee, Seyeon and Khanna, Rahul and Ren, Xiang},
  journal={arXiv preprint arXiv:2005.00683},
  year={2020}
}

becomes the official EMNLP 2020 @inproceedings (same cite key), with anthology URL and DOI.

Supported venues

Toggle files in rebiber/bib_list.txt. ACL Anthology includes *CL main conferences and workshops. Other dumps are main tracks only (no CVPR/ICCV workshops).

A monthly Action opens a PR with fresh DBLP + anthology data. Years below are what is in this repo, not “whatever DBLP has tomorrow.”

Kept current (monthly job + recent dumps)

VenueYears
ACL Anthologycurrent (split acl_1/2/3.json)
AAAI2010–2026
ACCV2022, 2024
AISTATS2013–2025
BMVC2010–2024
CHI2010–2026
CVPR2000–2025
ECCV2022, 2024
ICASSP2015–2025
ICCVodd years 2003–2025
ICLR2013–2025
ICML2000–2025
IJCAI2011, 2013, 2015–2025
INTERSPEECH2016–2025
KDD2010–2026
ICRA / IROS2020–2025 (main)
RSS / CoRL2020–2024 (main)
JMLR2020–2026
TMLR2022–2026
WACV2022–2026
MLSys2019–2025
MICCAI2022–2025 (main)
NeurIPS2000–2025
SIGIR2010–2026
UAI2010–2025
WWW2001–2026

Not in the index: COLM (empty DBLP toc). ICLR/ICML/CVPR 2026, RSS/CoRL 2025, ECCV 2026 — not on DBLP yet.

Historical (frozen ~2020): ALENEX, ASONAM, BigData, CIDR, CIKM, COLT, MM, RecSys, SDM, SIGMOD (through 2022; later years are PACMMOD), SODA, STOC, WSDM.

Thanks to Anton Tsitsulin for the original dump collection.

Adding a venue

uv run python -m rebiber.download_dblp --confs iclr --start-year 2026

That writes rebiber/data/{conf}{year}.bib.json and appends bib_list.txt when needed. PRs welcome.

Star history

In-repo SVGs, refreshed weekly from the GitHub API (no third-party token).

All-time stars

2026 year-to-date

Contact

billyuchenlin@gmail.com · i@yuchenlin.xyz · GitHub issues

bibliography
bibtex
latex
machine-learning
natural-language-processing
publication
research-paper

Project health

Overall

4.7/10

Maintained

10/10

Code review

0/10
OpenSSF Scorecard

Latest release

1.1.3 · Sep 8, 2021

Releases this year

0

Significant stargazers

(top 24 of 49)

Bhavnick Minhas

119 followers · starred Jul 2021

Sebastian Raschka

40,675 followers · starred Jan 2021

Yushi Bai

189 followers · starred Feb 2021

Liang Wang

242 followers · starred Sep 2021