localPress
Install
Version
v2.9.0
License
MIT licensed
Platforms
macOS · Linux · Win
Cost
$0 / month

// local-first wordpress tooling

Your machine does the work.
WordPress just syncs.

Optimize images, strip backgrounds, generate metadata, audit accessibility, and undo any change. It all runs on your own laptop, then pushes to any WordPress site over the REST API. No cloud SaaS, no per-image credits, no plugin.

$brew install gfargo/tap/localpress
Get started →
fig.01 · interactive media browser
localpress list -i
localPress interactive media browser: navigate items, view details, and configure optimization from the terminal

// why localpress

Plugins charge monthly for what your laptop does for free.

Smush, ShortPixel, and Imagify all ship your images to a remote server and bill you per-image or per-month. localPress processes everything on your own machine and syncs the results back over the REST API. Four reasons that's a better deal.

Your hardware does the work

✗Cloud plugins charge $4–13/month for compute your laptop does for free.

→Run BiRefNet, ISNet, or lightweight U2-Net models locally. localPress pins and checksum-verifies every download, then reuses one loaded session across the whole batch.

Works with any WordPress host

✗EWWW needs exec() and shell access that most shared hosts block.

→localPress talks to WordPress via Application Passwords, built into WP core since 5.6. Works on the cheapest shared host. Your laptop is the runtime.

Round-trip with real editors

✗No plugin lets you open an image in Photoshop, edit, and sync back.

→Open in GIMP, Photoshop, or Preview. Save. It syncs back on its own. This is the workflow designers actually want, and no one else offers it.

Built for AI agents

✗No image optimizer integrates with Claude, Cursor, Kiro, or MCP-native agents.

→First-party MCP server with 52 typed tools. Drop one config block into your agent and it manages your entire media library autonomously.

// see it in action

A full media manager, in your terminal.

fig.02 · interactive browserlive
localpress list -i
localPress interactive media browser — navigate through your WordPress media library, open detail views, and manage images from the terminal

Browse, inspect, and act on your media library without leaving the terminal.

// keyboard-driven overlays · every action one keystroke away

[o] optimize
localPress optimize settings — configure quality, format conversion, and replace-in-place from an inline overlay

Inline optimize · quality, format, replace mode

[/] search
localPress search filter — live filtering narrows your media library as you type

Live search filters as you type

[c] convert
localPress format conversion — pick WebP, AVIF, JPEG, or PNG from a keyboard-driven picker

Format picker · WebP, AVIF, JPEG, PNG

[↵] details
localPress detail view — full metadata including dimensions, alt text, registered sizes, and processing status

Full metadata detail view

// workflows, not screenshots

actions tour
localPress actions tour — cycling through optimize, convert, and resize overlays

Every action one keystroke away · optimize, convert, resize

full workflow
localPress full workflow — doctor check, list media, view stats dashboard

doctor → list → stats · the full localpress loop

// what's inside

38 commands. One binary.

One image or your whole library, the processing stays on your machine. Bulk writes dry-run by default, and shared concurrency keeps batches predictable.

Processing
optimize

Compress without compromise

sharp + jSquash WASM codecs. Set a quality floor, pick a format, use named profiles, preview in the browser with --preview, or process your entire library in one pass.

$ localpress optimize --unoptimized --profile hero --apply
AI
remove-bg

Background removal. No cloud.

Five checksum-verified ONNX models, including BiRefNet, all running on your hardware. Preview first; batch runs reuse one loaded model session.

$ localpress remove-bg 847 --model birefnet-lite --preview
Discovery
audit

Seven health checks, one command

Unoptimized, oversized, missing alt text, display-size mismatch, duplicate images, broken refs, orphaned files. Every check runs in seconds.

$ localpress audit
export / importMigration

Backup, migrate, bulk-load.

Export your entire library as a ZIP with metadata manifest. Import directories or ZIPs with optional optimization on upload.

watchAutomation

Drop files. They appear in WordPress.

Watch a local directory for new or changed images, including atomic editor saves, then optimize and push continuously.

editRound-trip

Open in any editor. Syncs back.

Download → GIMP, Photoshop, or Preview → save → automatically pushed to WordPress.

referencesDiscovery

Find every usage

Scan all posts for an attachment's URL. Rewrite them in-place after a rename or move.

// also included

initInteractive site wizard
sitesManage multiple sites
doctorCapability check + --fix
configProfiles + scalar values
listBrowse media library
showAttachment metadata
statsLibrary health dashboard
captionAI alt-text via Ollama
convertJPEG → WebP → AVIF
resizeResize preserving ratio
regenerateRebuild WP thumbnails
exportBackup as ZIP or dir
importBulk upload with optimize
postsContent CRUD
a11yWCAG accessibility audit
pullDownload to local disk
pushUpload + replace-in-place
updateSelf-update localpress
completionsbash / zsh / fish

// localpress audit

Seven health checks in a single pass.

01 --unoptimizedImages never processed by localPress
02 --largeImages over a size threshold (default 1 MB)
03 --missing-altImages without alt text (accessibility / SEO)
04 --display-sizeImages larger than their biggest registered thumbnail
05 --duplicatesPerceptually identical images via dHash
06 --broken-refsAttachment URLs that return 404
07 --orphansFiles on disk with no DB record (requires WP-CLI)
fig.03 · library health dashboard
localpress stats
localPress stats dashboard — cumulative savings, format breakdown, and recent operations

// vision ai

Six fields, one vision model.

The same local Ollama vision model that powers caption now generates titles, descriptions, tags, image-type classifications, and AI-renamed slugs. Each is its own command, or run them all at once with vision.

what it generates
localpress alt

Alt text

Concise single-sentence description for accessibility. Writes to alt_text.

localpress title

Title

3-7 word noun phrase. Auto-detects machine-generated names (Screenshot-…, IMG_…) for bulk cleanup.

localpress describe

Description

2-3 sentence description for galleries and attachment-page SEO. Writes to the description field.

localpress tag

Tags

3-6 short tags appended to the caption as a [tags: …] block. Works everywhere, no taxonomy plugin needed.

localpress classify

Type

Detects screenshot/photo/illustration/diagram. Cached locally so optimize picks PNG vs WebP automatically.

localpress rename

Slug

AI-generated permalink slug (with --smart) or explicit (--to). Straight talk on the file URL: slug only for v1.

// or · all at once

The vision workflow

localpress vision <id> runs all five generators in one pass. Print-only by default so you can review before writing. Pair with --apply to commit everything to WordPress in a single composed update.

localPress caches the classification locally, so later optimize calls on the same attachment pick PNG for screenshots and WebP for photos on their own.

terminal
# Print all five fields for review
localpress vision 2202

# Or write them all back at once
localpress vision 2202 --apply

# Or pick a subset
localpress vision 2202 --fields alt,title --apply

// time-machine

Reversible by design.

Source and metadata changes write a snapshot before WordPress mutates. Explicit keep-original runs skip needless snapshots; automatic REST fallbacks retain recovery history. Wrong bulk optimize or bad cutout? Walk it back.

01

Run anything

Optimize, convert, resize, remove-bg, caption, in bulk or one at a time. Before any source or metadata write, localpress captures the state needed to recover it.

localpress optimize --unoptimized --apply
02

Browse history

Every command creates a session. Inspect snapshots with history, or drop into the interactive TUI to walk through them.

localpress history -i
03

Undo the bad one

Dry-run first, apply when ready. Single attachment, whole session, or step back op-by-op. Works the same when an MCP agent drives it.

localpress undo --apply
Safe by default

Bulk undos dry-run unless you pass --apply, matching the rest of the CLI.

Bounded disk

Default 2 GB cap per site. Auto-prune on every op. Configurable via history.maxSizeBytes.

Idempotent-aware

Skipped ops (source unchanged) don't create snapshots. Re-running unchanged ops costs nothing.

MCP-first

Agents get undo, history_list, history_show, and history_prune as typed tools.

// agent-native

Built for AI agents.

Drop one config block into Claude Desktop, Cursor, Kiro, or any MCP client. 52 typed tools cover every operation, including bulk optimization and accessibility audits. Same binary, new entrypoint. Now an agent can run your whole media library on its own.

claude_desktop_config.json
{
  "mcpServers": {
    "localpress": {
      "command": "localpress",
      "args": ["mcp"]
    }
  }
}
fig.04 · agent driving localpress
claude · localpress MCP
AI agent using localpress MCP tools — lists unoptimized images and compresses them to WebP automatically

An AI agent finds unoptimized images and compresses them, no manual commands needed.

52 tools · 4 resources
Setup
  • sites_list
  • sites_use
  • sites_add
  • sites_remove
  • doctor
  • health_check
  • config_*
Discovery
  • list
  • show
  • stats
  • audit
  • references
  • search_by_url
  • site_briefing
  • watch_status
Content
  • posts_list
  • posts_show
  • posts_create
  • posts_update
  • posts_delete
Accessibility
  • a11y_audit
Vision AI
  • caption
  • generate_title
  • generate_description
  • tag
  • classify
  • vision
Processing
  • optimize
  • convert
  • resize
  • remove_bg
  • update_metadata
Library
  • pull
  • push
  • delete
  • rename
  • regenerate
  • export
  • import
Time-machine
  • history_list
  • history_show
  • history_prune
  • undo
resources
localpress://siteslocalpress://statslocalpress://capabilitieslocalpress://history

// the full picture

How localPress stacks up.

Feature by feature against five WordPress image optimization plugins you already know.

FeaturelocalPressEWWWShortPixelSmushImagify
Processing locationYour laptopWP serverCloudCloudCloud
Recurring cost$0$0 – $25/mo$4 – $10/mo$3 – $13/mo$6 – $12/mo
Works on shared host✓Needs exec()✓✓✓
AI background removal✓ local✗✓ paid✗✗
Desktop editor round-trip✓✗✗✗✗
AI agent skill✓✗✗✗✗
LicenseMITGPLv3ProprietaryMixedProprietary

§ 09 / Installation

Three ways in.

One binary. No runtime to babysit, no daemon in the background. Pick a lane and ship.

Homebrew · recommended
View tap ↗
$brew install gfargo/tap/localpress

Archive download

Pre-built tarballs for macOS (arm64, x64), Linux (arm64, x64), Windows (x64). Requires Bun ≥ 1.1.

Releases ↗
From source · requires Bun ≥ 1.1
1git clone https://github.com/gfargo/localpress.git
2cd localpress && bun install
3bun run build