Catalog PyPI
PACKAGE EXPLORERView in registry

academic-paperweight

PyPI

Automated retrieval, filtering, and LLM-powered summarization of arXiv papers based on your research interests.

academicaiarxivllmmachine-learningnotificationspapersresearchsummarization
Versions collected1
Direct dependencies18From release 0.3.1
Last observed20 Oct, 17:50 UTC

README

Version 0.3.1 documentation

paperweight

PyPI GitHub License Python 3.11+

paperweight is an arXiv triage CLI. It fetches recent papers, filters them against your research interests, and produces a ranked digest — optionally with LLM-powered summarization — that you can read in minutes.

Why this exists

Checking arXiv directly is great for discovery. paperweight is for a different job:

  • keep your daily list short
  • rank by your interests
  • make output scriptable (stdout, json, atom)
  • run the same way every day

How it works

arXiv API → metadata fetch → AI triage → keyword scoring → (optional) LLM summary → deliver
  1. Fetch — pull recent papers from configured arXiv categories.
  2. Triage — an LLM shortlists papers by title and abstract (or pass all through with heuristic fallback when no key is set).
  3. Score — keyword matching against titles and abstracts produces a relevance score.
  4. Summarize — in abstract mode (default) the abstract is passed through as-is; in summary mode an LLM generates a concise summary from the full paper.
  5. Deliver — output as plain text, JSON, Atom feed, or email.

Install

pip install academic-paperweight

From source (requires uv):

git clone https://github.com/seanbrar/paperweight.git
cd paperweight
uv sync --all-extras
source .venv/bin/activate

Quick start (works without API keys)

paperweight init    # create config.yaml with safe defaults
paperweight doctor  # check your setup for issues
paperweight run     # fetch papers and produce a digest

The first run automatically backfills a week of papers. After that, the same paperweight run fetches only what's new. Use --force-refresh to re-fetch if you've already run today.

Notes:

  • Default analyzer mode is abstract (no API key required).
  • Triage runs with heuristic fallback if no LLM key is present.

Example output

Running paperweight with the default config prints a plain-text digest to stdout:

paperweight digest

1. CoPE-VideoLM: Codec Primitives For Efficient Video Language Models
   Authors: Sayan Deb Sarkar, Rémi Pautrat, Ondrej Miksik +4 more
   Date: 2026-02-13
   Score: 6.24
   Matched: language model, reasoning, transformer
   Link: http://arxiv.org/abs/2602.13191v1
   Summary: Video Language Models (VideoLMs) empower AI systems to understand
   temporal dynamics in videos. To fit to the maximum context window constraint,
   current methods use keyframe sampling which can miss both macro-level events
   and micro-level details ...

2. In-Context Autonomous Network Incident Response: ...
   Authors: Yiran Gao, Kim Hammar, Tao Li
   Date: 2026-02-13
   Score: 6.24
   Matched: language model, reasoning
   Link: http://arxiv.org/abs/2602.13156v1
   Summary: Rapidly evolving cyberattacks demand incident response systems ...

Pipe to JSON for scripting, or deliver as an Atom feed or email — see CLI below.

CLI

paperweight [run-options]
paperweight run [run-options]
paperweight init [--config PATH] [--force]
paperweight doctor [--config PATH] [--strict]

Examples:

# default plain-text digest to stdout
paperweight

# JSON output for scripts
paperweight run --delivery json --output ./paperweight.json

# Atom feed output
paperweight run --delivery atom --output ./paperweight.xml

# optional email delivery (requires notifier.email config)
paperweight run --delivery email

# cap processing to 20 papers (output may be fewer after filtering)
paperweight run --max-items 20

# strict checks for CI/release gates
paperweight doctor --strict

# activate a named profile
paperweight run --profile fast

Full command reference: docs/CLI.md

Configuration

paperweight init generates a config.yaml with all required sections. Core sections:

SectionPurpose
arxivarXiv categories to watch and max results per fetch
triageLLM-powered shortlisting on title + abstract (opt-in, requires API key)
processorKeyword lists and scoring weights for relevance ranking
analyzerabstract (default, no key) or summary (LLM-generated)
concurrencyThread/worker limits for fetching, triage, and summarization
feedMetadata for --delivery atom output
metadata_cacheAvoids repeated arXiv API calls within a TTL window
profilesNamed config overlays activated with --profile NAME
loggingLog level and optional log file path
notifierSMTP settings for --delivery email
dbOptional Postgres persistence for runs and results
storageBase directory for artifact storage

Full reference: docs/CONFIGURATION.md

Secrets and environment variables

API keys and passwords can be supplied via:

  • a .env file in the project root (OPENAI_API_KEY, GEMINI_API_KEY, etc.)
  • ${VAR} interpolation in config.yaml (e.g., password: ${EMAIL_PASSWORD})
  • PAPERWEIGHT_ prefixed env vars to override any config value

See docs/ENVIRONMENT_VARIABLES.md for details.

Roadmap

See docs/ROADMAP.md for quantified release goals and forward plan.

Development

make lint        # ruff check
make typecheck   # mypy
make test        # pytest with coverage
make format      # auto-format with ruff
make all         # lint + typecheck + test

See docs/CONTRIBUTING.md for the full contributing guide.

License

MIT

Downloads & popularity

1downloads
1-day window · source-reported counts19 Oct 2026
54270
2026-07-23: 3 · observed 2026-10-20T20:11:57.0436894Z · period 2026-07-23–2026-07-232026-07-27: 1 · observed 2026-10-20T20:11:57.0436894Z · period 2026-07-27–2026-07-272026-08-01: 1 · observed 2026-10-20T20:11:57.0436894Z · period 2026-08-01–2026-08-012026-08-02: 1 · observed 2026-10-20T20:11:57.0436894Z · period 2026-08-02–2026-08-022026-08-03: 12 · observed 2026-10-20T20:11:57.0436894Z · period 2026-08-03–2026-08-032026-08-04: 8 · observed 2026-10-20T20:11:57.0436894Z · period 2026-08-04–2026-08-042026-08-06: 1 · observed 2026-10-20T20:11:57.0436894Z · period 2026-08-06–2026-08-062026-08-09: 3 · observed 2026-10-20T20:11:57.0436894Z · period 2026-08-09–2026-08-092026-08-13: 2 · observed 2026-10-20T20:11:57.0436894Z · period 2026-08-13–2026-08-132026-08-14: 4 · observed 2026-10-20T20:11:57.0436894Z · period 2026-08-14–2026-08-142026-08-17: 8 · observed 2026-10-20T20:11:57.0436894Z · period 2026-08-17–2026-08-172026-08-18: 54 · observed 2026-10-20T20:11:57.0436894Z · period 2026-08-18–2026-08-182026-08-19: 2 · observed 2026-10-20T20:11:57.0436894Z · period 2026-08-19–2026-08-192026-08-20: 1 · observed 2026-10-20T20:11:57.0436894Z · period 2026-08-20–2026-08-202026-08-22: 1 · observed 2026-10-20T20:11:57.0436894Z · period 2026-08-22–2026-08-222026-08-23: 3 · observed 2026-10-20T20:11:57.0436894Z · period 2026-08-23–2026-08-232026-08-24: 10 · observed 2026-10-20T20:11:57.0436894Z · period 2026-08-24–2026-08-242026-08-26: 1 · observed 2026-10-20T20:11:57.0436894Z · period 2026-08-26–2026-08-262026-08-28: 3 · observed 2026-10-20T20:11:57.0436894Z · period 2026-08-28–2026-08-282026-08-31: 3 · observed 2026-10-20T20:11:57.0436894Z · period 2026-08-31–2026-08-312026-09-01: 1 · observed 2026-10-20T20:11:57.0436894Z · period 2026-09-01–2026-09-012026-09-03: 1 · observed 2026-10-20T20:11:57.0436894Z · period 2026-09-03–2026-09-032026-09-06: 6 · observed 2026-10-20T20:11:57.0436894Z · period 2026-09-06–2026-09-062026-09-09: 2 · observed 2026-10-20T20:11:57.0436894Z · period 2026-09-09–2026-09-092026-09-10: 1 · observed 2026-10-20T20:11:57.0436894Z · period 2026-09-10–2026-09-102026-09-12: 1 · observed 2026-10-20T20:11:57.0436894Z · period 2026-09-12–2026-09-122026-09-18: 6 · observed 2026-10-20T20:11:57.0436894Z · period 2026-09-18–2026-09-182026-09-21: 2 · observed 2026-10-20T20:11:57.0436894Z · period 2026-09-21–2026-09-212026-09-24: 6 · observed 2026-10-20T20:11:57.0436894Z · period 2026-09-24–2026-09-242026-09-26: 1 · observed 2026-10-20T20:11:57.0436894Z · period 2026-09-26–2026-09-262026-09-27: 3 · observed 2026-10-20T20:11:57.0436894Z · period 2026-09-27–2026-09-272026-09-28: 5 · observed 2026-10-20T20:11:57.0436894Z · period 2026-09-28–2026-09-282026-09-29: 4 · observed 2026-10-20T20:11:57.0436894Z · period 2026-09-29–2026-09-292026-09-30: 4 · observed 2026-10-20T20:11:57.0436894Z · period 2026-09-30–2026-09-302026-10-01: 1 · observed 2026-10-20T20:11:57.0436894Z · period 2026-10-01–2026-10-012026-10-03: 1 · observed 2026-10-20T20:11:57.0436894Z · period 2026-10-03–2026-10-032026-10-05: 6 · observed 2026-10-20T20:11:57.0436894Z · period 2026-10-05–2026-10-052026-10-06: 1 · observed 2026-10-20T20:11:57.0436894Z · period 2026-10-06–2026-10-062026-10-08: 4 · observed 2026-10-20T20:11:57.0436894Z · period 2026-10-08–2026-10-082026-10-09: 2 · observed 2026-10-20T20:11:57.0436894Z · period 2026-10-09–2026-10-092026-10-10: 1 · observed 2026-10-20T20:11:57.0436894Z · period 2026-10-10–2026-10-102026-10-13: 1 · observed 2026-10-20T20:11:57.0436894Z · period 2026-10-13–2026-10-132026-10-15: 1 · observed 2026-10-20T20:11:57.0436894Z · period 2026-10-15–2026-10-152026-10-19: 1 · observed 2026-10-20T20:11:57.0436894Z · period 2026-10-19–2026-10-19
23 Jul19 Oct

pypistats · 44 observations shown. Missing days are unknown. Source category: overall: without mirrors.

View observed values
Date / source periodValueObserved at
2026-10-19 – 2026-10-1912026-10-20T20:11:57.0436894Z
2026-10-15 – 2026-10-1512026-10-20T20:11:57.0436894Z
2026-10-13 – 2026-10-1312026-10-20T20:11:57.0436894Z
2026-10-10 – 2026-10-1012026-10-20T20:11:57.0436894Z
2026-10-09 – 2026-10-0922026-10-20T20:11:57.0436894Z
2026-10-08 – 2026-10-0842026-10-20T20:11:57.0436894Z
2026-10-06 – 2026-10-0612026-10-20T20:11:57.0436894Z
2026-10-05 – 2026-10-0562026-10-20T20:11:57.0436894Z
2026-10-03 – 2026-10-0312026-10-20T20:11:57.0436894Z
2026-10-01 – 2026-10-0112026-10-20T20:11:57.0436894Z
2026-09-30 – 2026-09-3042026-10-20T20:11:57.0436894Z
2026-09-29 – 2026-09-2942026-10-20T20:11:57.0436894Z
2026-09-28 – 2026-09-2852026-10-20T20:11:57.0436894Z
2026-09-27 – 2026-09-2732026-10-20T20:11:57.0436894Z
2026-09-26 – 2026-09-2612026-10-20T20:11:57.0436894Z
2026-09-24 – 2026-09-2462026-10-20T20:11:57.0436894Z
2026-09-21 – 2026-09-2122026-10-20T20:11:57.0436894Z
2026-09-18 – 2026-09-1862026-10-20T20:11:57.0436894Z
2026-09-12 – 2026-09-1212026-10-20T20:11:57.0436894Z
2026-09-10 – 2026-09-1012026-10-20T20:11:57.0436894Z
2026-09-09 – 2026-09-0922026-10-20T20:11:57.0436894Z
2026-09-06 – 2026-09-0662026-10-20T20:11:57.0436894Z
2026-09-03 – 2026-09-0312026-10-20T20:11:57.0436894Z
2026-09-01 – 2026-09-0112026-10-20T20:11:57.0436894Z
2026-08-31 – 2026-08-3132026-10-20T20:11:57.0436894Z
2026-08-28 – 2026-08-2832026-10-20T20:11:57.0436894Z
2026-08-26 – 2026-08-2612026-10-20T20:11:57.0436894Z
2026-08-24 – 2026-08-24102026-10-20T20:11:57.0436894Z
2026-08-23 – 2026-08-2332026-10-20T20:11:57.0436894Z
2026-08-22 – 2026-08-2212026-10-20T20:11:57.0436894Z
2026-08-20 – 2026-08-2012026-10-20T20:11:57.0436894Z
2026-08-19 – 2026-08-1922026-10-20T20:11:57.0436894Z
2026-08-18 – 2026-08-18542026-10-20T20:11:57.0436894Z
2026-08-17 – 2026-08-1782026-10-20T20:11:57.0436894Z
2026-08-14 – 2026-08-1442026-10-20T20:11:57.0436894Z
2026-08-13 – 2026-08-1322026-10-20T20:11:57.0436894Z
2026-08-09 – 2026-08-0932026-10-20T20:11:57.0436894Z
2026-08-06 – 2026-08-0612026-10-20T20:11:57.0436894Z
2026-08-04 – 2026-08-0482026-10-20T20:11:57.0436894Z
2026-08-03 – 2026-08-03122026-10-20T20:11:57.0436894Z
2026-08-02 – 2026-08-0212026-10-20T20:11:57.0436894Z
2026-08-01 – 2026-08-0112026-10-20T20:11:57.0436894Z
2026-07-27 – 2026-07-2712026-10-20T20:11:57.0436894Z
2026-07-23 – 2026-07-2332026-10-20T20:11:57.0436894Z

Versions 1

Collected releases
VersionPublishedDirect dependenciesOpen version
0.3.117 Feb 202618

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Repository

PENDING
seanbrar/paperweight

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 17:50 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:22b9069dd18f7b71a569537255e7be76118f13f20bed4040f113dc1595c5c5ae