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.1.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.1-py3-none-any.whl (26.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: markforge-0.1.1.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.1.tar.gz
Algorithm Hash digest
SHA256 c4a86f72d1bb0a6117820fb9ab4da214923f6c673d9a15dab55764fcbaf74fc5
MD5 5cee006da32a88ac7098331c134c765e
BLAKE2b-256 cdfb74f6aef3db661908c19444d4a90b081a9ef39fec7720870bcaacc718a494

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: markforge-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 26.4 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9274ce1d9851cf3cb11d5b43cf8034470f0277ee97efd89d3c2938f2f92ebf38
MD5 ce18f1e48089e2afa552425c70c2014c
BLAKE2b-256 8d0908cdf596c655d7928f8f98f665e6ce8304e4361755ea9bd5ba99cf45d213

See more details on using hashes here.

Provenance

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