Skip to main content

Pull-only Overleaf project sync using PyOverleaf

Project description

Overleaf Pull-Only Sync CLI

PyPI - Version

Quick Start (users)

# Install with Qt login support
pip install 'overleaf-pull[qt]'

# Guided setup and background install
overleaf-pull init --install

Overview

  • Pull-only tool that periodically clones/pulls your latest Overleaf projects into a local directory.
  • Discovers projects via cookies captured during setup (Qt login recommended) or manual paste; Firefox cookies can be read automatically.
  • Lists projects via PyOverleaf; syncs using Git.
  • Runs in the background as a macOS LaunchAgent or Linux systemd user timer.

Requirements

  • macOS or Linux with Git installed.
  • Python 3.10+.
  • Dependencies are installed automatically via pip. Optional extras: [qt] for PySide6 (Qt login).
  • Overleaf Git integration enabled on your account to allow cloning/pulling via git.overleaf.com.

Install (pip)

pip install overleaf-pull
# Optional Qt login support:
pip install 'overleaf-pull[qt]'

Quick Setup

overleaf-pull init --install
  • Prompts for the base directory, interval (1h/12h/24h), count (default 10), browser/profile, and host (default www.overleaf.com).
  • Offers a Qt browser login to capture cookies automatically (default Yes if PySide6 is installed). Falls back to optional manual cookie paste.
  • Prompts for your Overleaf Git authentication token (required for cloning/pulling and background runs). It will offer to open Overleaf in your browser to fetch it.
  • Installs a background job (LaunchAgent on macOS, systemd user timer on Linux).
  • Runs a validation sync before installing the scheduler, to confirm access.

Manual Commands Run once now:

overleaf-pull run-once
  • Manual sync (with optional overrides):
overleaf-pull sync --count 5 --base-dir ~/Overleaf --browser firefox
  • Store or clear cookies in config:
  • Folder naming preference:
overleaf-pull set-name-suffix off   # Use display name only
overleaf-pull set-name-suffix on    # Default: append a short ID to avoid collisions

This affects the local folder names only; project display names on Overleaf remain unchanged.

overleaf-pull set-cookie "name=value; other=value2"
overleaf-pull clear-cookie
  • Browser-assisted cookie capture (like olbrowserlogin):
overleaf-pull browser-login
# This opens Overleaf in your browser and guides you to copy document.cookie.

Required cookies

  • At minimum: overleaf_session2 and GCLB must be present in your Cookie header for authenticated requests.
  • document.cookie cannot see HttpOnly cookies; copy the full Cookie header from the Network tab for a request to your Overleaf host.

Qt browser login (optional)

  • Use a built-in Qt browser to log in and auto-capture cookies.
pip install 'overleaf-pull[qt]'
overleaf-pull browser-login-qt

During setup, if PySide6 is present, the tool offers the Qt login flow by default.

Git authentication token

  • Overleaf requires a Git auth token for git clone/git pull.
  • Generate a token in your Overleaf account (see the Git integration/authentication tokens page or the Git instructions shown in your project UI), then set it:
overleaf-pull set-git-token
# Paste your token when prompted

# Clear it if needed
overleaf-pull clear-git-token
  • With a token set, the tool will use URLs like https://git:<TOKEN>@git.overleaf.com/<PROJECT_ID> automatically.
  • Status from logs:
overleaf-pull status
  • Install or remove background job:
overleaf-pull install-scheduler
overleaf-pull uninstall-scheduler

Installing the scheduler is idempotent: it uninstalls any existing instance first, then reinstalls to ensure only one scheduler is active. Publish to PyPI (CI)

  • This repo includes a GitHub Actions workflow that publishes on tags v* using PyPI Trusted Publishers (OIDC).
  • Trigger a release:
git tag v0.1.0
git push origin v0.1.0
  • The workflow builds sdist/wheel and publishes without storing secrets.
  • Adjust interval or latest count:
overleaf-pull set-interval 12h
overleaf-pull set-count 20
  • Change base directory:
overleaf-pull set-base-dir /path/to/Overleaf

macOS Logs

  • Logs: ~/Library/Logs/overleaf_sync/runner.log

Linux Logs

  • journalctl --user -u overleaf-sync.timer -u overleaf-sync.service
  • And ~/.local/state/overleaf_sync/logs/ if configured.

Notes

  • This tool is pull-only; it never pushes to Overleaf.
  • Safari cookie access may require permissions; Firefox is often more reliable for unattended use.
  • If Safari access fails, paste Overleaf cookies once via set-cookie to avoid elevated access.
  • Use Git credential helpers for smooth pulls:
git config --global credential.helper osxkeychain   # macOS
git config --global credential.helper libsecret     # Linux

Background runs

  • To avoid interactive Git prompts in schedulers, set an Overleaf Git token once:
overleaf-pull set-git-token
  • Without a token, new clones will fail with 403; existing repos may also fail if their remotes lack the token. Prompts are disabled in background.

Development

  • Create a local environment and install from source:
python3 -m venv .venv
. .venv/bin/activate
pip install -e .
# Optional Qt support
pip install PySide6
  • Conda alternative:
conda env create -f environment.yml
conda activate overleaf-sync
pip install -e .

Project details


Download files

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

Source Distribution

overleaf_pull-0.2.0.tar.gz (15.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

overleaf_pull-0.2.0-py3-none-any.whl (19.5 kB view details)

Uploaded Python 3

File details

Details for the file overleaf_pull-0.2.0.tar.gz.

File metadata

  • Download URL: overleaf_pull-0.2.0.tar.gz
  • Upload date:
  • Size: 15.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for overleaf_pull-0.2.0.tar.gz
Algorithm Hash digest
SHA256 d275938a5344d1e26c697311154d4643994f854fd981c9ed5a23b99f0308a46f
MD5 6608a815bfb409fe90c2194a36cf1142
BLAKE2b-256 276bc634408df6f78c8900b6e2c4e9eae446d33d4b1ad368b867f303b91934f1

See more details on using hashes here.

Provenance

The following attestation bundles were made for overleaf_pull-0.2.0.tar.gz:

Publisher: publish.yml on LeanderK/overleaf_sync

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file overleaf_pull-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: overleaf_pull-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 19.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for overleaf_pull-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bbe66eb5392a2cc6de336e4361c48fbf11fa6871f5fd56e2c91812179ab2458e
MD5 907c4500133fff1ba5cca70240b0e6ef
BLAKE2b-256 eb80952bf2c6005f57e8c8b5b5359f6c2a79c57581fd240ed205bd6d904c0bbd

See more details on using hashes here.

Provenance

The following attestation bundles were made for overleaf_pull-0.2.0-py3-none-any.whl:

Publisher: publish.yml on LeanderK/overleaf_sync

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page