Skip to main content

gppt: get-pixivpy-token

PyPI ghcr ci

[!IMPORTANT] v5 is a rewrite: the CLI is now just gppt configure and gppt login, and GetPixivToken / PixivAuth are replaced by gppt.login() and gppt.get_token(). See UPGRADE-v5.md if you are coming from v4.

Install

pip install gppt

Usage

gppt has two commands: configure stores an account in a profile, login gets you a token.

1. Configure a profile

# Configure a profile (writes to: ~/.config/gppt/<profile>.json by default)
gppt configure

# Log in (writes to: ~/.config/gppt/<profile>.token.json by default)
gppt login

~/.config/gppt/<profile>.json:

{
  "username": "<plain username or op:// link>",
  "password": "<plain password or op:// link>",
  "totp_secret": "<base32 secret, otpauth:// URI, or op:// link>"
}

~/.config/gppt/<profile>.token.json:

{
  "access_token": "***",
  "refresh_token": "***",
  "expires_in": 3600,
  "expires_at": "2026-08-08T16:34:57.776005+00:00",
  "user_id": "***",
  "user_name": "***",
  "user_account": "***"
}

Two-factor authentication

If your account has 2FA enabled, pixiv asks for a verification code after the password. gppt fills it in from totp_secret — the base32 secret pixiv shows you when you set up an authenticator app, the otpauth:// URI behind its QR code, or an op:// reference to either. This is what makes an unattended headless login possible on a 2FA account.

Leave totp_secret blank and gppt login prompts for a code on stdin instead, only when pixiv actually asks for one. Accounts without 2FA are unaffected.

Environment variables

Variable Effect
GPPT_USERNAME, GPPT_PASSWORD, GPPT_TOTP_SECRET Override the profile's credentials — lets a container or CI job log in with no config file
GPPT_CONFIG_DIR Directory holding profiles and cached tokens (default: $XDG_CONFIG_HOME/gppt)
ALL_PROXY, HTTPS_PROXY, HTTP_PROXY Proxy used by both the browser and the token requests

From Python

gppt.get_token() is the library form of gppt login: it reuses the cached token, refreshes it, or opens the browser if needed.

import gppt
from pixivpy3 import AppPixivAPI

token = gppt.get_token()  # profile "default", configured with `gppt configure`

aapi = AppPixivAPI()
aapi.auth(refresh_token=token.refresh_token)

It is silent by default; pass notify=print to see the same progress messages the CLI writes.

For a one-off login that reads and writes nothing on disk, use gppt.login():

token = gppt.login(username="...", password="...")
token.access_token, token.refresh_token, token.expires_in

For a 2FA account, pass the TOTP secret — or a totp_prompt callable that is invoked only if pixiv asks for a code:

token = gppt.login("...", "...", "JBSWY3DPEHPK3PXP")
token = gppt.login("...", "...", totp_prompt=lambda: input("code: "))

And gppt.refresh() exchanges a refresh token you are storing yourself:

token = gppt.refresh("...")
Name Purpose
gppt.get_token(profile="default", *, headless=True, force=False, save=True, notify=None, totp_prompt=None) A valid token for a stored profile, logging in only if needed
gppt.login(username="", password="", totp_secret="", *, headless=None, totp_prompt=None) One browser login; no files touched
gppt.refresh(refresh_token) Refresh token → new token
gppt.Token Result dataclass: access_token, refresh_token, expires_in, expires_at, is_expired, user_id, user_name, user_account
gppt.LoginError, gppt.TokenError Raised when the browser login fails / pixiv rejects the request

Download files

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

Source Distribution

gppt-5.0.0.tar.gz (16.3 kB view details)

Uploaded Source

Built Distribution

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

gppt-5.0.0-py3-none-any.whl (19.7 kB view details)

Uploaded Python 3

File details

Details for the file gppt-5.0.0.tar.gz.

File metadata

  • Download URL: gppt-5.0.0.tar.gz
  • Upload date:
  • Size: 16.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.2 {"installer":{"name":"uv","version":"0.12.2","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}

File hashes

Hashes for gppt-5.0.0.tar.gz
Algorithm Hash digest
SHA256 dda826ba701d0343754ff41a51f252571ef43cc14e584ec833718ea8d3b96b25
MD5 3552156f35fba80b0fc5b072949fc4fa
BLAKE2b-256 550e13f06d15e693e1f1c2decba492e4907dd31084e83c54adc9e2da74e211d7

See more details on using hashes here.

File details

Details for the file gppt-5.0.0-py3-none-any.whl.

File metadata

  • Download URL: gppt-5.0.0-py3-none-any.whl
  • Upload date:
  • Size: 19.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.2 {"installer":{"name":"uv","version":"0.12.2","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}

File hashes

Hashes for gppt-5.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e2aa2051f380a86449f59e09f390f982b397cb0dfaf284eb240b5309558e337e
MD5 0f2875993238b1eaaef67f58997645cf
BLAKE2b-256 88cbfaa8fd7fc73ba8e3cff64119316d06364349166a39771f26c034dd41000a

See more details on using hashes here.

Release history Release notifications | RSS feed

5.1.0

2 files

This release

5.0.0 This release

2 files

4.3.1

2 files

4.3.0

2 files

4.2.0

2 files

4.1.1

2 files

4.1.0

2 files

4.0.1

2 files

4.0.0

2 files

3.1.2

2 files

3.1.1

2 files

3.1.0

2 files

3.0.0

2 files

2.2.1

2 files

2.2.0

2 files

2.1.2

2 files

2.1.1

2 files

2.1.0

2 files

2.0.0

2 files

1.9

2 files

1.8

2 files

1.7

2 files

1.6

2 files

1.5

2 files

1.4

2 files

1.3

2 files

1.2

2 files

1.1

2 files

1.0

2 files

0.5

2 files

0.4

2 files

0.3

2 files

0.2

2 files

0.1

2 files

Supported by

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