antifile
Extract BibTeX metadata from PDFs, EPUBs, URLs, and identifiers (DOI, arXiv, ISBN)
and append it to a .bib file.
Install
pip install antifile
# or
uv tool install antifile
Usage
antifile INPUT -o refs.bib
INPUT can be:
- a PDF or EPUB file —
antifile paper.pdf -o refs.bib - a folder of PDFs/EPUBs —
antifile ~/Downloads/papers -o refs.bib(add--recursiveto descend into subfolders) - a URL —
antifile https://example.com/article -o refs.bib - a DOI —
antifile 10.1145/3292500 -o refs.bib - an arXiv ID —
antifile arXiv:1706.03762 -o refs.bib - an ISBN —
antifile 9780262033848 -o refs.bib
Entries are appended with de-duplication: a new entry matching an existing one
(by DOI, arXiv ID, ISBN, or normalized title+author) fills in any missing fields
rather than creating a duplicate. Pass --no-merge to skip on duplicate, or
--force to append anyway with an auto-suffixed key.
Options
| flag | effect |
|---|---|
-o, --output FILE |
target .bib (required; created if missing) |
--method {auto,doi,arxiv,isbn,crossref,llm,claude-code,codex} |
force a PDF extraction method (default: auto) |
--recursive |
recurse into subfolders for folder input |
--no-preview |
skip the first-page PDF preview |
--no-merge |
on duplicate, skip instead of filling missing fields |
--force |
append even if a duplicate exists |
LLM-assisted extraction
When a PDF has no resolvable identifier, antifile falls back to an LLM to read the first page. Set whichever API key you have — it's picked up from the environment:
export ANTHROPIC_API_KEY=... # or OPENAI_API_KEY, or GEMINI_API_KEY / GOOGLE_API_KEY
With no API key set, antifile falls back to a CLI agent if one is installed —
first the claude CLI, then the codex CLI. Each tier is skipped if its binary
isn't on your PATH. Full chain:
DOI → arXiv → ISBN → CrossRef title → LLM API →
claudeCLI →codexCLI → none
Related
- antilibrary — manage BibTeX libraries from the terminal (can call antifile via
--add-from-files). - antifind — online metadata search → BibTeX.
License
MIT
Release files for antifile 0.1.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| antifile-0.1.6.tar.gz | 39.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| antifile-0.1.6-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 67.0 kB
Release files / antifile-0.1.6.tar.gz
| Download URL | antifile-0.1.6.tar.gz |
|---|---|
| Size | 39.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5a708ad66edf1e45c5d8f4effac74da6e6ae1f4bb59acc0be440d6e8c492bd0d
|
|
BLAKE2b-256 checksum How to use checksums |
0949296fe488af08615493ef8314b754e1fc34e776560c4e3f2016261b7d9908
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.24 {"installer":{"name":"uv","version":"0.11.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / antifile-0.1.6-py3-none-any.whl
| Download URL | antifile-0.1.6-py3-none-any.whl |
|---|---|
| Size | 27.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
34eaab5afc4e64e96a186a6ed4a354489a2cf34082a3ed166f549e81f0fe028f
|
|
BLAKE2b-256 checksum How to use checksums |
58c7b93aca69579ea803ff368d419b1e734c936260cfef8ac3737f39cc355133
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.24 {"installer":{"name":"uv","version":"0.11.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|