Skip to content

Repository files navigation

Contentsy

AI-powered Etsy listing studio. Upload a product photo, get SEO-tuned copy (title, description, 13 tags, materials, alt text), then optionally create a draft listing in your Etsy shop via the Open API.

No deploy required — run it locally on your machine with your own OpenAI API key.

Try the hosted demo: contentsy.onrender.com

Contentsy demo — upload a product photo, generate Etsy listing copy, review and publish a draft

The term Etsy is a trademark of Etsy, Inc. This application uses the Etsy API but is not endorsed or certified by Etsy, Inc.

How it works

product image
    │
    ▼
Vision Analyst      → niche, style, materials, audience
    │
    ▼
SEO Strategist      → high-intent Etsy search keywords
    │
    ▼
Copywriter          → title, description, tags, materials, category
    │
    ▼
You review & edit
    │
    ▼
Etsy Open API       → draft listing + image upload (optional, OAuth per seller)

Features

  • Category playbooks (jewelry, digital, home decor, …) with real Etsy taxonomy paths
  • Keyword scoring (Google Autocomplete when available)
  • OAuth 2.0 + PKCE shop connection (listings_r, listings_w, shops_r)
  • Terms & Privacy acceptance before Etsy connect
  • Web UI and CLI — copy generation works without Etsy credentials

Quick start (local)

What you need

Required Optional
Python 3.12+ Etsy app credentials — only for draft publish
Your own OpenAI API key

API usage is billed to your OpenAI account. Etsy setup is not needed to generate listing copy.

Install & run

git clone https://github.com/eisenheiim/contentsy.git
cd contentsy
python3 -m venv .venv
source .venv/bin/activate   # Windows: .venv\Scripts\activate
pip install -r requirements.txt
cp .env.example .env

Edit .env — minimum:

OPENAI_API_KEY=sk-your-key-here
CLIPCHEF_WEB_DEBUG=1

CLIPCHEF_WEB_DEBUG=1 disables the free-trial gate so you can generate without limits locally.

Start the web UI:

python -m clipchef.web
# → http://127.0.0.1:5050

Upload a product photo, pick a category template, and click Generate copy.

CLI (copy only)

python main.py --image ./product.jpg --context "handmade ceramic mug"
python main.py --image ./product.jpg --no-fill   # skip Etsy publish

Etsy draft publish (optional)

Only needed if you want Create Etsy draft in the UI.

  1. Create an app at developers.etsy.com
  2. Add this redirect URL (must match exactly):
 http://127.0.0.1:5050/etsy/callback
  1. Scopes: listings_r listings_w shops_r
  2. Add to .env:
 ETSY_API_KEY=your-keystring
 ETSY_SHARED_SECRET=your-shared-secret
 ETSY_REDIRECT_URI=http://127.0.0.1:5050/etsy/callback
  1. Restart the app, click Connect Etsy, then publish a draft.

Configuration

Variable Required Default Notes
OPENAI_API_KEY yes Your OpenAI API key
CLIPCHEF_WEB_DEBUG no 0 Set 1 locally to skip trial limit
ETSY_API_KEY publish Etsy app keystring
ETSY_SHARED_SECRET publish Etsy app shared secret
ETSY_REDIRECT_URI publish http://127.0.0.1:5050/etsy/callback Must match Etsy app exactly
CLIPCHEF_MODEL no gpt-4o-mini SEO + Copywriter
CLIPCHEF_VISION_MODEL no gpt-4o-mini Image analysis
CLIPCHEF_PUBLISH_MODE no api Etsy API publish (default)

See [.env.example](.env.example) for the full list.

Project layout

clipchef/
  agent.py          # Vision → SEO → Copywriter pipeline
  web.py            # Flask app + OAuth routes
  etsy_api.py       # Etsy Open API v3 client
  taxonomy.py       # Etsy seller taxonomy (24h cache)
  templates/        # Web UI + legal pages
main.py             # CLI entry
.env.example        # Env template (safe to commit)

License

MIT — see LICENSE.

About

AI-powered Etsy listing studio. Upload a product photo, get SEO-tuned title, description, tags & category, then publish.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages