Skip to main content

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.

Release files for markforge 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for markforge 0.1.2
File Size Uploaded
markforge-0.1.2.tar.gz 6.7 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for markforge 0.1.2
File Interpreter ABI Platform
markforge-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 6.8 MB

Release files / markforge-0.1.2.tar.gz

Download URL markforge-0.1.2.tar.gz
Size 6.7 MB
Tags Source
SHA-256 checksum
How to use checksums
17b6b05414416c7fe892ab19780c68d3629009d5475ff2fcbee05c544b3cbeeb
BLAKE2b-256 checksum
How to use checksums
a3e5c63687dbb05728a00c61576c273ad0fa38afac01545fae73144b7f4068d2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 20, 2026.

Transparency log

Release files / markforge-0.1.2-py3-none-any.whl

Download URL markforge-0.1.2-py3-none-any.whl
Size 27.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
391662c748e901d95cfa48adc5e6f109b575a9e3e8e1cd621197f3a94679d1ee
BLAKE2b-256 checksum
How to use checksums
595d3615291482a3c56d7fc9f8056b29c59f7c5e3c6e484d3ba5a13b2ad2b8f9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 20, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page