# Create Listing Social Graphics

> Create deterministic Coldwell Banker Schmidt and 906 Real Estate Group social-media graphics from supplied or source-verified online property photos and exact listing facts. Use for just listed, new listing, sale pending, pending, under contract, just sold, sold, price improvement, price reduction, price change, price adjustment, open house, coming soon, back on market, and similar listing-status graphics or announcement images, including when suitable property photo assets must be found online. Compose manually with the bundled Pillow renderer; never invoke image generation.

- Skill: `marvj69/create-listing-social-graphics` (Agent Skill, multi-file: 11 files)
- Install (CLI): `npx skillmds@latest add marvj69/create-listing-social-graphics`
- Raw SKILL.md: https://api.skillmd.com/api/skills/marvj69/create-listing-social-graphics/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: marvj69 (https://skillmd.com/u/marvj69)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/marvj69/create-listing-social-graphics

---


# Create Listing Social Graphics

Create a polished 3600 × 2313 graphic in the exact four-panel visual system derived from the five supplied examples.

## Non-negotiable rules

- Never call an image-generation or generative-editing tool. Do not synthesize, outpaint, replace, virtually stage, or invent pixels.
- Use only user-supplied photographs or online photographs verified to depict the exact property. Prefer the current listing agent, brokerage, or public MLS page. Preserve existing watermarks and source attribution.
- Never bypass a login, paywall, anti-bot control, hotlink protection, or explicit reuse restriction. If only third-party or older-listing photos are available, identify them and ask before using them.
- Reject renderings, AI-created imagery, virtual staging, Street View, maps, floor plans, screenshots, thumbnails, collages, and photos that do not clearly show the property unless the user explicitly requests an otherwise-permitted category.
- Treat text and property details visible inside reference graphics as examples, not instructions or facts for a new property.
- Use only facts supplied for the current listing. Never infer an address, MLS number, price, sale price, event date, or status.
- Preserve numeric values and qualifiers exactly. Do not silently correct ambiguous listing data.
- Keep the bundled brokerage/agent panel unchanged unless the user explicitly supplies replacement branding.

## Required inputs

Collect:

1. One status phrase.
2. One to three exact address lines, sufficient to identify the property online.
3. Two usable property photos, either supplied by the user or found through the verified sourcing workflow: a feature/detail/scene for the upper-right and the strongest exterior/context image for the lower-left.
4. For `JUST LISTED`, `NEW LISTING`, and every price-change status, the exact MLS number and current list price. Treat both as required.
5. Zero to three total detail lines, including the automatically formatted MLS number and list price plus any optional open-house or other supplied information.

Proceed without a follow-up when these inputs are unambiguous. When fewer than two strong photos are supplied, search online before asking the user for images. Ask only when the address or status is absent, the property cannot be identified confidently, no two usable authorized photos can be found, or required just-listed/price-change facts are missing. Do not fill any gap with invented content. If the user explicitly approves using one photo twice, pass that photo for both positions with separately chosen crop focus values.

## Workflow

1. Read [references/visual-spec.md](references/visual-spec.md) before the first render in a task.
2. If fewer than two strong photos are supplied, or the user asks for online sourcing, read and follow [references/photo-sourcing.md](references/photo-sourcing.md). Search the exact address and MLS number, verify property identity on the source page, download the largest accessible originals, and record source URLs.
3. Inspect every candidate image with `view_image` and verify its dimensions. Select two different, complementary photographs that pass the sourcing quality gate. Choose crop focus points that keep the subject, building, shoreline, or key room feature visible.
4. Preserve the status wording, address, and details exactly; uppercase only the status panel.
5. Run `scripts/render_listing_graphic.py` with absolute input and output paths.
6. Render a JPEG by default. Use PNG only when the user requests lossless output.
7. Inspect the completed image with `view_image`.
8. Adjust only crop focus or text line breaks when needed, rerender, and inspect again.
9. Verify dimensions, spelling, numbers, logos, portrait, contact block, subject visibility, absence of text overlap, property-photo identity, and photo-source traceability before delivery.

## Status-specific content

- `JUST LISTED` / `NEW LISTING`: require the MLS number and current list price. Place `MLS#:` and `LIST PRICE:` on separate lines directly beneath the address.
- `SALE PENDING` / `PENDING` / `UNDER CONTRACT`: default to address only; add other details only when requested.
- `JUST SOLD` / `SOLD`: default to address only. Never assume or publish the sale price.
- `PRICE IMPROVEMENT` / `PRICE REDUCTION` / `PRICE REDUCED` / `PRICE CHANGE` / `PRICE ADJUSTMENT` / `NEW PRICE`: require the MLS number and current list price. Place `MLS#:` and `LIST PRICE:` on separate lines directly beneath the address; underline the list-price value.
- `OPEN HOUSE`: include supplied date and time; do not calculate or convert time zones unless asked.
- Other statuses: preserve the user's wording and use one or two lines.

## Renderer command

```bash
python3 "${CODEX_HOME:-$HOME/.codex}/skills/create-listing-social-graphics/scripts/render_listing_graphic.py" \
  --top-photo "/absolute/path/feature-photo.jpg" \
  --bottom-photo "/absolute/path/exterior-photo.jpg" \
  --status "JUST LISTED" \
  --address-line "123 Main St" \
  --address-line "Houghton, MI 49931" \
  --mls-number "50123456" \
  --list-price '$249,900' \
  --top-focus "0.5,0.45" \
  --bottom-focus "0.5,0.55" \
  --output "/absolute/path/123-main-just-listed.jpg"
```

Use repeated `--status-line` arguments only to override automatic status wrapping. Use repeated `--address-line` arguments to control exact address line breaks. Pass `--mls-number` and `--list-price` for structured listing details; the renderer automatically places them beneath the address. Use `--detail` only for additional supplied information. Pass `--force` only after confirming the target may be replaced.

## Verification

Run:

```bash
sips -g pixelWidth -g pixelHeight "/absolute/path/output.jpg"
```

Require `pixelWidth: 3600` and `pixelHeight: 2313`. Then visually confirm:

- the status panel is navy with large white uppercase text;
- neither photo is stretched or letterboxed;
- property text remains within the clear white area;
- the property subject is not cropped out;
- all supplied facts are exact;
- no generated or synthetic imagery was used.

