Skip to main content

Easily download an academic paper and send it to the reMarkable

Project description


PyPI version

paper2remarkable is a command line program for quickly and easily transferring an academic paper to your reMarkable:

$ p2r

The script can be run through the p2r command line program or via Docker (see below).

paper2remarkable makes it as easy as possible to get a PDF on your reMarkable from any of the following sources:

The program aims to be flexible to the exact source URL, so for many of the sources you can either provide a URL to the abstract page or to the PDF file. If you have an source that you would like to see added to the list, let me know!

paper2remarkable takes the source URL and:

  1. Downloads the pdf if necessary
  2. Removes the arXiv timestamp (for arXiv sources)
  3. Crops the pdf to remove unnecessary borders
  4. Shrinks the pdf file to reduce the filesize
  5. Generates a nice filename based on author/title/year of the paper
  6. Uploads it to your reMarkable using rMapi.

Optionally, you can:

  • Download a paper but not upload to the reMarkable using the -n switch.
  • Insert a blank page after each page using the -b switch (useful for note taking!)
  • Center the pdf on the reMarkable (default is left-aligned)
  • Provide an explicit filename using the --filename parameter
  • Specify the location on the reMarkable to place the file (default /)

Here's the full help of the script:

usage: p2r [-h] [-b] [-c] [-d] [-n] [-p REMARKABLE_DIR] [-v]
           [--filename FILENAME] [--gs GS] [--pdfcrop PDFCROP] [--pdftk PDFTK]
           [--rmapi RMAPI]

Paper2reMarkable version 0.4.0

positional arguments:
  input                 URL to a paper or the path of a local PDF file

optional arguments:
  -h, --help            show this help message and exit
  -b, --blank           Add a blank page after every page of the PDF
  -c, --center          Center the PDF on the page, instead of left align
  -d, --debug           debug mode, doesn't upload to reMarkable
  -n, --no-upload       don't upload to the reMarkable, save the output in
                        current working dir
  -p REMARKABLE_DIR, --remarkable-path REMARKABLE_DIR
                        directory on reMarkable to put the file (created if
                        missing, default: /)
  -v, --verbose         be verbose
  --filename FILENAME   Filename to use for the file on reMarkable
  --gs GS               path to gs executable (default: gs)
  --pdfcrop PDFCROP     path to pdfcrop executable (default: pdfcrop)
  --pdftk PDFTK         path to pdftk executable (default: pdftk)
  --rmapi RMAPI         path to rmapi executable (default: rmapi)

And here's an example with verbose mode enabled that shows everything the script does by default:

$ p2r -v
2019-05-30 00:38:27 - INFO - Starting ArxivProvider
2019-05-30 00:38:27 - INFO - Getting paper info from arXiv
2019-05-30 00:38:27 - INFO - Downloading url:
2019-05-30 00:38:27 - INFO - Generating output filename
2019-05-30 00:38:27 - INFO - Created filename: Burg_Nazabal_Sutton_-_Wrangling_Messy_CSV_Files_by_Detecting_Row_and_Type_Patterns_2018.pdf
2019-05-30 00:38:27 - INFO - Downloading file at url:
2019-05-30 00:38:32 - INFO - Downloading url:
2019-05-30 00:38:32 - INFO - Removing arXiv timestamp
2019-05-30 00:38:34 - INFO - Cropping pdf file
2019-05-30 00:38:37 - INFO - Shrinking pdf file
2019-05-30 00:38:38 - INFO - Starting upload to reMarkable
2019-05-30 00:38:42 - INFO - Upload successful.


The script requires the following external programs to be available:

If these scripts are not available on the PATH variable, you can supply them with the relevant options to the script. Then, you can install paper2remarkable from PyPI:

pip install paper2remarkable

This installs the p2r command line program.


You can also use our Dockerfile to avoid installing dependencies on your machine. You will need git and docker installed.

First clone this repository with git clone and cd inside of it, then build the container:

docker build -t p2r .


If you already have a ~/.rmapi file, you can skip this section. Otherwise we'll use rmapi to create it.

touch ${HOME}/.rmapi
docker run --rm -i -t -v "${HOME}/.rmapi:/home/user/.rmapi:rw" --entrypoint=rmapi p2r version

which should end with output like

ReMarkable Cloud API Shell
rmapi version: 0.0.5


Use the container by replacing p2r with docker run --rm -v "${HOME}/.rmapi:/home/user/.rmapi:rw" p2r, e.g.

# print help and exit
docker run --rm -v "${HOME}/.rmapi:/home/user/.rmapi:rw" p2r --help

# equivalent to above usage
docker run --rm -v "${HOME}/.rmapi:/home/user/.rmapi:rw" p2r -v

You can also create an alias in your ~/.bashrc file to abstract away the Docker commands:

# in ~/.bashrc

alias p2r="docker run --rm -v \"${HOME}/.rmapi:/home/user/.rmapi:rw\" p2r"

Then you can use paper2remarkable from the command line as p2r!


License: MIT

If you find a problem or want to suggest a feature, please let us know! You're helping to make this project better!

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for paper2remarkable, version 0.4.4
Filename, size File type Python version Upload date Hashes
Filename, size paper2remarkable-0.4.4-py3-none-any.whl (26.3 kB) File type Wheel Python version py3 Upload date Hashes View hashes
Filename, size paper2remarkable-0.4.4.tar.gz (22.1 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page