autoCover is a Python CLI that generates blog cover (OG) images from the command line — solid, gradient, or image backgrounds, rounded text boxes, logo placement, and custom fonts, without opening a design tool.
No design tool, no browser. autoCover renders a finished PNG/WebP/JPG straight from your shell or CI pipeline.
Solid color, linear gradient (vertical or horizontal), or a background image with an adjustable color overlay.
Optional boxes behind title/subtitle/footer with fill, border color, border width, padding, and corner radius, all configurable.
Drop a logo in any of the four corners with configurable size via --logo-position and
--logo-size.
Point --font at any TTF/OTF file. Falls back to a system font when omitted, with
auto-sized or fixed title/subtitle/footer sizes.
Configurable max lines per field before wrapping, plus an automatic text shadow you can disable
with --no-shadow.
Every option is a CLI flag — export PNG, WebP, or JPG at any resolution, and wire it into build scripts or CI to generate covers automatically.
Run autocover-mcp to expose cover generation as a generate_cover_image
tool for MCP clients like Claude Desktop.
autoCover isn't published on PyPI yet — install it straight from the GitHub repository.
Requires Python 3.9+.
Pulls in Pillow and
registers the autocover command on your PATH.
Run it with a title, subtitle, and footer.
Pulls in the MCP
SDK and registers the autocover-mcp command.
A PyPI package (pip install autocover) is planned; until then, editable install from
source is the supported path.
Every example below produces a finished cover image in one command.
Every flag accepted by autocover, grouped by what it controls.
| Option | Default | Description |
|---|---|---|
--title | — | Main title (top) |
--subtitle | — | Subtitle (center) |
--footer | — | Footer text (bottom) |
--text-color | #ff7f00 | Text color (hex) |
--font | system font | Path to TTF/OTF font file |
--font-size-title | auto | Title font size |
--font-size-subtitle | auto | Subtitle font size |
--font-size-footer | auto | Footer font size |
--title-max-lines | 1 | Max lines before wrapping title |
--subtitle-max-lines | 3 | Max lines before wrapping subtitle |
--no-shadow | off | Disable text shadow |
| Option | Default | Description |
|---|---|---|
--bg-color | #111111 | Solid background color (hex) |
--gradient | — | Gradient start,end (e.g. "#111111,#ff7f00") |
--gradient-direction | vertical | vertical or horizontal |
--background | — | Path to background image |
--overlay | — | Overlay opacity 0.0–1.0 (requires --background) |
--overlay-color | #000000 | Overlay color (hex) |
| Option | Default | Description |
|---|---|---|
--box | off | Enable rounded text boxes |
--box-fill | — | Box background color with alpha (#RRGGBBAA) |
--box-border | #ff7f00 | Box border color (hex) |
--box-border-width | 3 | Border width in pixels |
--box-padding | 30 | Padding in pixels |
--box-radius | 20 | Corner radius in pixels |
| Option | Default | Description |
|---|---|---|
--logo | — | Path to logo image |
--logo-size | 100 | Logo size in pixels |
--logo-position | top-right | top-right, top-left, bottom-right, bottom-left |
| Option | Default | Description |
|---|---|---|
--output, -o | cover.png | Output path (.png, .webp, .jpg) |
--width | 1280 | Image width in pixels |
--height | 720 | Image height in pixels |
Colors are hex: opaque as #RRGGBB (e.g. #ff7f00), with alpha only for
--box-fill as #RRGGBBAA (e.g. #00000080 = 50% transparent
black). Alpha reference: FF=100% · BF=75% · 80=50% ·
40=25%.
Loading changelog…
Full history: CHANGELOG.md