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
pytest --cov --cov-report=term-missing
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.2.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.2-py3-none-any.whl (27.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: markforge-0.1.2.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.2.tar.gz
Algorithm Hash digest
SHA256 17b6b05414416c7fe892ab19780c68d3629009d5475ff2fcbee05c544b3cbeeb
MD5 05961c7aba729e1c48d644904d241573
BLAKE2b-256 a3e5c63687dbb05728a00c61576c273ad0fa38afac01545fae73144b7f4068d2

See more details on using hashes here.

Provenance

The following attestation bundles were made for markforge-0.1.2.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.2-py3-none-any.whl.

File metadata

  • Download URL: markforge-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 27.8 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 391662c748e901d95cfa48adc5e6f109b575a9e3e8e1cd621197f3a94679d1ee
MD5 0d8baf1271847e1c45b8d96b174243fd
BLAKE2b-256 595d3615291482a3c56d7fc9f8056b29c59f7c5e3c6e484d3ba5a13b2ad2b8f9

See more details on using hashes here.

Provenance

The following attestation bundles were made for markforge-0.1.2-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