Inspiration
Artists have sued AI image companies, alleging their work trained models without consent, and researchers have shown that image-cloaking filters can be stripped off. Blocking is an arms race. I wanted to try the other direction: make saying yes easy. If a buyer, or an AI agent, can ask for a license in plain English and pay in seconds, licensing can beat scraping.
What it does
License Desk is agent-ready licensing for artists, paid through PayPal.
- Artists upload work, set a starting price and a minimum, and choose whether AI-training use is allowed.
- A buyer describes a use in plain English. A licensing agent (an LLM) picks the tier and duration; code computes the price, and the server recomputes it at checkout.
- PayPal creates and captures the order, and a signed, verifiable license is issued.
- An MCP server exposes five tools (search, quote, purchase, complete, verify), and a live buyer agent uses them under a hard budget. A person approves the payment in PayPal.
- Sentinel compares a suspect image, or reverse image search results, with the original using perceptual hashing, writes a plain-English report, and lets the artist invoice a copy through PayPal for a retroactive license. Similar poses or trends get a report but no invoice.
- An AG Grid dashboard shows sales and invoices with paid or awaiting-payment status.
How we built it
Python and FastAPI, SQLite, vanilla JS with AG Grid, the MCP Python SDK, and PayPal Orders v2 and Invoicing v2 in the sandbox. LLM calls use an OpenAI-compatible client with retries, a backup provider and a rule-based fallback. Reverse image search uses SerpApi's Google Lens. Copy detection is a perceptual hash I implemented with Pillow. Hosted on Render.
Challenges we ran into
- My first scan searched by title, so it found images about the words, not the picture. I replaced it with true reverse image search and removed the silent fallback.
- Free-tier LLM rate limits and overload errors led to retries, a backup provider, cached quotes and offline rules.
- Agent models sometimes stopped before finishing a purchase, so the code now detects an unfinished purchase and pushes it to completion.
- PayPal Invoicing needed the feature enabled on the app, so the flow falls back to a payment link.
Accomplishments that we're proud of
- A full sandbox loop: quote, PayPal checkout, signed license, dashboard.
- Guardrails enforced in code, not prompts: a budget cap, artist rules and server-side pricing.
- A detector that is honest about its limits, separating copies from similar compositions and only invoicing real copies.
- Turning detection into payment: a confirmed copy becomes a PayPal invoice tracked in the artist's dashboard.
What we learned
Put guardrails in code, not prompts. A payment step that needs a human is a feature when an AI is spending money. And be clear about what detection can and can't prove.
What's next for License Desk
PayPal webhooks so payments confirm automatically (today a "Check for payments" button polls PayPal), artist payouts, spending limits enforced on the server for any MCP agent, detection of redrawn work, and richer license terms. Everything is sandbox-only today.