Skip to main content

adclip

Ad creative generation — copy and static images — from a single JSON brief. Runs as an MCP server (zero-config under Claude Code) or as a CLI.

Keyless by default. adclip shells out to the claude CLI for LLM calls using your subscription auth, so no ANTHROPIC_API_KEY is needed. Paid third-party APIs (Anthropic direct, fal.ai) are gated behind an explicit opt-in (ADCLIP_ALLOW_LIVE_APIS=1) so a key in your environment doesn't silently bill you.

Install

pipx install adclip

For the optional direct-Anthropic-API provider:

pipx install "adclip[anthropic]"

Requires Python 3.11+ and the claude CLI on $PATH (for the default keyless LLM path).

From source (for contributors)

git clone https://github.com/dreliq9/adclip.git
cd adclip
python3.11 -m venv .venv
.venv/bin/pip install -e ".[dev]"

Two usage paths

1. MCP server (recommended under Claude Code)

Add to your project's .mcp.json (or ~/.claude.json):

{
  "mcpServers": {
    "adclip": {
      "command": "adclip-mcp"
    }
  }
}

Then ask Claude: "Generate ad variants for examples/taichi_brief.json"

Tools exposed:

Brief + inspection

  • adclip_brief_validate — schema check
  • adclip_estimate_cost — LLM + fal cost estimate
  • adclip_list_formats — format catalog
  • adclip_policy_check — policy dry-run on arbitrary copy
  • adclip_campaign_status — manifest, variants, costs, missing-file audit for a campaign dir

Generation

  • adclip_generate_copy — copy pool only (preview/iterate before spending on images)
  • adclip_generate_visuals — given a list of winner copies, produce images + composites
  • adclip_generate_variants — full pipeline (copy → policy → image → compose → render)

Iteration on an existing campaign

  • adclip_render_variant — re-composite one variant (cheap; no LLM, no fal)
  • adclip_regenerate — redo one variant's copy, visual, or both
  • adclip_score_variants — re-rank variants against (possibly edited) brief; heuristic or LLM judge
  • adclip_export_dco — emit Meta DCO modular components (deduped headlines/bodies/ctas + per-aspect images)

2. CLI

adclip formats                              # list format specs
adclip estimate examples/taichi_brief.json  # cost preview
adclip copy examples/taichi_brief.json      # copy only (no images)
adclip run  examples/taichi_brief.json --image fake  # full pipeline, stub images

The CLI also uses claude-cli by default — no key setup needed.

Brief schema

See src/adclip/schema.py for the full AdBrief. Minimal example:

{
  "product": "Taichi crypto trading bot",
  "value_prop": "Paper-trade our signals before risking real cash.",
  "audience": "Skeptical retail crypto traders.",
  "angles": ["credibility", "curiosity"],
  "tone": "confident, dry, no hype",
  "cta": "Start paper trading",
  "formats": ["meta_feed_4x5", "google_rsa"],
  "variants": 2,
  "pool_size": 3,
  "policy_profile": "crypto",
  "must_avoid": ["guaranteed returns"],
  "use_judge": true,
  "heal_violations": 2,
  "output_dir": "/tmp/adclip_out"
}

Formats

Name Aspect Size Kind
meta_feed_1x1 1:1 1080x1080 static
meta_feed_4x5 4:5 1080x1350 static
google_display_square 1:1 1200x1200 static
google_display_landscape 1.91:1 1200x628 static
linkedin_single 1.91:1 1200x627 static
x_promoted 16:9 1200x675 static
google_rsa text text
stories_reels_9x16 9:16 1080x1920 video¹
tiktok_9x16 9:16 1080x1920 video¹
youtube_shorts_9x16 9:16 1080x1920 video¹

¹ Video formats are declared in the schema but the pipeline does not yet produce video assets (v0.1 is static + text only). They land with a "video formats not yet implemented in pipeline" note in the manifest.

LLM provider modes

Mode Key? Where it runs
default / claude-cli none Subprocess to the claude CLI; uses your subscription auth.
sampling none MCP sampling — asks the calling MCP client to run the LLM. Only works under clients that implement sampling (Claude Code does not today).
anthropic adclip[anthropic] extra + key + ADCLIP_ALLOW_LIVE_APIS=1 Direct Anthropic API. ~3x faster per call.
fake none Deterministic scripted responses for tests.

Live-API opt-in

ADCLIP_ALLOW_LIVE_APIS=1 must be set to use any paid third-party API. This applies to anthropic and fal.ai (image + video). If a key happens to be in your env but the gate is closed, the provider refuses with a clear error instead of billing you.

For local dev and most MCP work you should never need to set this — the default paths are all keyless.

Self-review loops

  • Judge (use_judge: true): after policy-filtering, an LLM scores each survivor on brand fit, angle fit, and copy quality; top-N by blended score wins. judge_score, judge_rationale, judge_flags land in the manifest.
  • Heal (heal_violations: N): policy-violating candidates are sent back to the LLM with the specific violations and asked to rewrite. Successful heals gain a heal_attempts count and a healed_from snapshot of the original copy.
  • Semantic policy (use_semantic_policy: true): an LLM second-pass flags paraphrases that slip past the literal blocklist (e.g. "printing money" when must_avoid contains "guaranteed returns"). Feeds the same heal loop. Adds one LLM call per candidate — opt-in.

Tests

.venv/bin/python -m pytest

Status

v0.1 (current): static images + text ads, policy + heal + semantic policy loops, full MCP tool surface (12 tools), CLI, claude-cli / sampling / anthropic / fake LLM providers. Meta DCO modular-component export via adclip_export_dco.

Deferred: video pipeline (stories_reels_9x16, tiktok_9x16, youtube_shorts_9x16 are declared but not produced), adversarial critic — see v0.x plan notes in the repo.

Release files for adclip 0.1.1

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

Source distribution (sdist)

Source distribution for adclip 0.1.1
File Size Uploaded
adclip-0.1.1.tar.gz 75.6 kB Details

Built distribution (wheel)

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

Total release size: 142.2 kB

Release files / adclip-0.1.1.tar.gz

Download URL adclip-0.1.1.tar.gz
Size 75.6 kB
Tags Source
SHA-256 checksum
How to use checksums
b7a48a47953289a97f52fbe4f531ab3891310071a17b1c8abc6bfa3d5265fb17
BLAKE2b-256 checksum
How to use checksums
529265922ed0b3e98a8b67ec64d2af9dcc331ea308dfcf9e74476cc3697483d5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.3

Release files / adclip-0.1.1-py3-none-any.whl

Download URL adclip-0.1.1-py3-none-any.whl
Size 66.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2e86f125aa518a9fba83e593cb09838c0ce4d3b56178d6e7b0e8526a0613a361
BLAKE2b-256 checksum
How to use checksums
ece6c7745d344b6fd0a4c2a092bb4631a8aa928c2991383560d85a47181b5e60
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.3

Release history Release notifications | RSS feed

This release

0.1.1 This release

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