Skip to main content

Text watermark/stamp tool (CLI-first, GUI-ready).

Project description

Markforge banner

CI PyPI Python

Markforge

Markforge is a small, sharp tool for stamping images with text watermarks. It is CLI-first and ships with a local GUI for batch workflows.

Features

  • Tiled or centered marks
  • Opacity, angle, padding, offset, and blend modes
  • Auto-scale text to the image or set a fixed font size
  • Local GUI with live preview, system fonts, and batch export
  • Output format inferred from extension (PNG/JPEG/WEBP/TIFF/BMP)

Requirements

  • Python 3.10+ (tested on 3.10-3.13)

Install

pip install markforge

For development:

pip install -e ".[dev]"

Quickstart (CLI)

Stamp a tiled watermark:

markforge watermark input.jpg output.jpg --text "DRAFT" --opacity 0.15 --angle -30 --tile

Or a single centered mark:

markforge watermark input.jpg output.jpg --text "DRAFT" --center --no-tile --scale 0.35

Show full help:

markforge --help
markforge watermark --help

Common options:

  • --text/-t watermark text (required for useful output)
  • --opacity in the 0..1 range
  • --angle rotation in degrees
  • --fill color (hex or named, via Pillow ImageColor)
  • --font path to a .ttf/.otf font
  • --font-size fixed point size
  • --scale auto size as a fraction of the smaller image dimension (overrides --font-size)
  • --tile/--no-tile and --padding spacing between tiles
  • --center center a single watermark (use with --no-tile)
  • --offset pixel offset as x,y
  • --blend one of normal, multiply, overlay, soft_light
  • --antialias/--no-antialias for rotated text smoothing

Notes:

  • Output format is inferred from the output extension. Unknown extensions default to PNG.
  • JPEG output is flattened to white because JPEG does not support alpha.
  • If no font is provided, Markforge tries DejaVuSans.ttf and falls back to Pillow's default.

GUI

Launch the local GUI (opens a browser tab by default):

markforge gui

Details:

  • Binds to 127.0.0.1 by default and chooses a free port.
  • Exports default to ./exports unless you pick a folder or type a path.
  • You can serve a custom UI with --html path/to/index.html.
  • The "Pick" buttons use Tkinter; on minimal Linux installs you may need to add it, or use the built-in file picker and manual paths instead.

Development

pytest
ruff check .

License

Markforge is free to use and redistribute in unmodified form only. Modification, forking, and derivative works are not permitted. This is a source-available license. See LICENSE for full terms.

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

markforge-0.1.0.tar.gz (6.7 MB view details)

Uploaded Source

Built Distribution

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

markforge-0.1.0-py3-none-any.whl (26.1 kB view details)

Uploaded Python 3

File details

Details for the file markforge-0.1.0.tar.gz.

File metadata

  • Download URL: markforge-0.1.0.tar.gz
  • Upload date:
  • Size: 6.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for markforge-0.1.0.tar.gz
Algorithm Hash digest
SHA256 d1d4fe69365ec5d79349a11ca734d62a715cdf7c92bcc4a92806d2a8eb4dd929
MD5 3643fd33a188af991c1c15df5a716dfc
BLAKE2b-256 65e520cfd9ddc5f262d78c6479e9bd6ff92e7fe5a81fffca530bc75eabf929d1

See more details on using hashes here.

Provenance

The following attestation bundles were made for markforge-0.1.0.tar.gz:

Publisher: publish.yml on Remgrandt/markforge

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

File details

Details for the file markforge-0.1.0-py3-none-any.whl.

File metadata

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

File hashes

Hashes for markforge-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7975382d8451ce60cca63d79d1a21b92dd9dd7fdce0d27941115f359ca7674b7
MD5 31ae38150e1ed66351fd6639ce66a1f5
BLAKE2b-256 d6cb3874da47b8cdc7c19816c7c2228af4c170f188959a0d663a9299585a10b8

See more details on using hashes here.

Provenance

The following attestation bundles were made for markforge-0.1.0-py3-none-any.whl:

Publisher: publish.yml on Remgrandt/markforge

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