CLI uploader tool for chevereto
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Firq 3eab19ae95
All checks were successful
/ Prepare / CI Environment (push) Successful in 3s
/ Validate / pylint (push) Successful in 20s
/ Validate / mypy (push) Successful in 27s
/ Validate (push) Successful in 0s
/ Build / package (push) Successful in 7s
/ Publish / pypi (push) Successful in 2s
/ Publish / forgejo (push) Has been skipped
move to src layout
2026-10-28 10:30:16 +01:00
.forgejo/workflows move to src layout 2026-10-28 10:30:16 +01:00
src/chevereto_bulk_uploader move to src layout 2026-10-28 10:30:16 +01:00
.gitignore move to src layout 2026-10-28 10:30:16 +01:00
.python-version Initial version for tracking 2026-10-17 22:57:24 +02:00
MANIFEST.in added readme, added test deps 2026-10-22 21:50:57 +02:00
pyproject.toml move to src layout 2026-10-28 10:30:16 +01:00
README.md added readme, added test deps 2026-10-22 21:50:57 +02:00
uv.lock added readme, added test deps 2026-10-22 21:50:57 +02:00

Chevereto Bulk Uploader

cli tool for uploading folders to chevereto

Installation

pip install chevereto-bulk-uploader --extra-index-url https://forgejo.neshweb.net/api/packages/Firq/pypi/simple/

Remotes and Credentials

bulk-upload configure images --remote https://chevereto.example --apikey REPLACE_WITH_API_KEY --default
bulk-upload upload --config upload.yaml

--remote is a URL or a name of a configuration. If not given, the default remote is used.

List all remotes:

bulk-upload remote list

* marks the default

Configs are stored in chevereto-bulk-uploader/config.yaml at $XDG_CONFIG_HOME (linux) / %APPDATA% (windows) / ~/Library/Application Support (macos)

API keys are stored in plaintext. Make sure that no unauthorized access is posssible.

Environment Credentials

Credentials can also come from CHEVERETO_BASE_URL and CHEVERETO_API_KEY, either via the environment or a specific .env file:

bulk-upload upload --config upload.yaml --env .env

Upload Configuration

- folder: ./images
  nsfw: false
  tags: [ example, upload ]
  album: { id: abc }
key functionality
folder path to upload dir (absolute or relative to shell)
nsfw boolean, default false.
tags list of strings to apply to each uploaded image
album settings for album mapping / creation
  • Using an existing album: album: {id: YOUR_ALBUM_ID}
  • Creating a new album: album: {name: "New album", state: public}
  • Accepted files in folder: .jpg, .jpeg, .png, .gif, and .webp, scan is not recursive

History migration

Duplicate detection uses SHA-256 of files. Identical content is skipped within a remote. Each named remote has a separate database in /history.

Existing json/sqlite3 histories can be migrated

bulk-upload import-history history.json --remote production
bulk-upload import-history previous.sqlite3 --remote production

Checking file hashes

Check if certain files have already been uploaded (are present in history)

bulk-upload check ./images/photo.jpg --remote production
bulk-upload check ./images --remote production

check prints [FOUND] or [MISSING] for each regular file, including non-image files. Folder checks are nonrecursive.

View history

bulk-upload history status --remote production

The default limit is 100; use --offset to inspect later pages.

Development

uv sync --frozen

Usisng mypy, pylint and ruff