Cover images,
from the terminal,
exactly as you script them.

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.

Install View source
autocover — zsh
autocover \
  --title "NOMADA DIGITAL" \
  --subtitle "LLEVA TU HOME A TODAS PARTES" \
  --gradient "#111111,#ff7f00" \
  --box --box-border "#ff7f00" \
  --output cover.webp
Rendering 1280x720 cover…
✓ Written to cover.webp

// features

Everything a cover image needs, one command

No design tool, no browser. autoCover renders a finished PNG/WebP/JPG straight from your shell or CI pipeline.

Flexible backgrounds

Solid color, linear gradient (vertical or horizontal), or a background image with an adjustable color overlay.

Rounded text boxes

Optional boxes behind title/subtitle/footer with fill, border color, border width, padding, and corner radius, all configurable.

Logo placement

Drop a logo in any of the four corners with configurable size via --logo-position and --logo-size.

Custom fonts

Point --font at any TTF/OTF file. Falls back to a system font when omitted, with auto-sized or fixed title/subtitle/footer sizes.

Text wrapping and shadow

Configurable max lines per field before wrapping, plus an automatic text shadow you can disable with --no-shadow.

Scriptable output

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.

MCP server

Run autocover-mcp to expose cover generation as a generate_cover_image tool for MCP clients like Claude Desktop.


// installation

Install from source

autoCover isn't published on PyPI yet — install it straight from the GitHub repository.

01

Clone the repository

Requires Python 3.9+.

bash terminal
git clone https://github.com/4DRIAN0RTIZ/autoCover.git
cd autoCover
02

Install in editable mode

Pulls in Pillow and registers the autocover command on your PATH.

bash terminal
pip install -e .
03

Generate your first cover

Run it with a title, subtitle, and footer.

bash terminal
autocover \
  --title "TITLE" \
  --subtitle "Subtitle" \
  --footer "myblog.com" \
  --output cover.webp
04

Optional: MCP server

Pulls in the MCP SDK and registers the autocover-mcp command.

bash terminal
pip install -e ".[mcp]"

A PyPI package (pip install autocover) is planned; until then, editable install from source is the supported path.


// usage

From solid backgrounds to full compositions

Every example below produces a finished cover image in one command.

bash Solid background
autocover \
  --title "DOMINA TUS COMMITS" \
  --subtitle "METODOLOGÍA CONVENTIONAL COMMITS" \
  --footer "myblog.com" \
  --output cover.png
bash Gradient background
autocover \
  --title "Mi Título" \
  --subtitle "Mi Subtítulo" \
  --footer "myblog.com" \
  --gradient "#111111,#ff7f00" \
  --gradient-direction vertical \
  --text-color "#ffffff" \
  --output cover.png
bash Background image + overlay
autocover \
  --title "Mi Título" \
  --background assets/backgrounds/bg.png \
  --overlay 0.6 \
  --output cover.png
Full example: boxes, logo, custom font
autocover \
  --title "NOMADA DIGITAL" \
  --subtitle "LLEVA TU HOME A TODAS PARTES" \
  --footer "myblog.com" \
  --background assets/backgrounds/bg.png \
  --logo assets/logos/logo.png \
  --logo-position bottom-left \
  --font assets/fonts/MyFont.ttf \
  --text-color "#ff7f00" \
  --box \
  --box-fill "#00000080" \
  --box-border "#ff7f00" \
  --box-border-width 4 \
  --box-radius 55 \
  --output cover.webp
Reusable shell alias
# ~/.bashrc or ~/.zshrc
alias blogcover='autocover \
  --background ~/autoCover/assets/backgrounds/default_bg.png \
  --logo ~/autoCover/assets/logos/my_logo.png \
  --logo-position bottom-left \
  --text-color "#ff7f00" \
  --box --box-fill "#00000080" \
  --box-border "#ff7f00" --box-border-width 4 \
  --footer "myblog.com"'

# then just
blogcover --title "My New Post" --subtitle "Post description"
Logo positioning
--logo-position top-right # default
--logo-position top-left
--logo-position bottom-right
--logo-position bottom-left
MCP server (for LLM clients)
# run standalone
autocover-mcp

# claude_desktop_config.json
{
  "mcpServers": {
    "autocover": {
      "command": "autocover-mcp"
    }
  }
}
# exposes one tool: generate_cover_image(title, subtitle, footer, output, ...)
# same parameters as the CLI flags above
Color format reference
# Opaque colors: #RRGGBB
#ff7f00 # orange

# --box-fill accepts alpha: #RRGGBBAA
#00000080 # black, 50% transparent
#ff7f0040 # orange, 25% transparent

# alpha reference: FF=100% · BF=75% · 80=50% · 40=25%

// reference

CLI options

Every flag accepted by autocover, grouped by what it controls.

Text

OptionDefaultDescription
--titleMain title (top)
--subtitleSubtitle (center)
--footerFooter text (bottom)
--text-color#ff7f00Text color (hex)
--fontsystem fontPath to TTF/OTF font file
--font-size-titleautoTitle font size
--font-size-subtitleautoSubtitle font size
--font-size-footerautoFooter font size
--title-max-lines1Max lines before wrapping title
--subtitle-max-lines3Max lines before wrapping subtitle
--no-shadowoffDisable text shadow

Background

OptionDefaultDescription
--bg-color#111111Solid background color (hex)
--gradientGradient start,end (e.g. "#111111,#ff7f00")
--gradient-directionverticalvertical or horizontal
--backgroundPath to background image
--overlayOverlay opacity 0.0–1.0 (requires --background)
--overlay-color#000000Overlay color (hex)

Text boxes

OptionDefaultDescription
--boxoffEnable rounded text boxes
--box-fillBox background color with alpha (#RRGGBBAA)
--box-border#ff7f00Box border color (hex)
--box-border-width3Border width in pixels
--box-padding30Padding in pixels
--box-radius20Corner radius in pixels

Logo

OptionDefaultDescription
--logoPath to logo image
--logo-size100Logo size in pixels
--logo-positiontop-righttop-right, top-left, bottom-right, bottom-left

Output

OptionDefaultDescription
--output, -ocover.pngOutput path (.png, .webp, .jpg)
--width1280Image width in pixels
--height720Image 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%.


// changelog

Version history

Loading changelog…

Full history: CHANGELOG.md