Doop
Doop is an open-source multiplayer design canvas and design MCP for Claude Code, Codex, and any AI agent. Design side by side with agents — free in beta.
Create AI‑enhanced jewellery images and blend designs to generate new pieces
AI summary · website content
DesignHTML · PythonGitHub @Rajgupta26OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗AI studio for jewellery businesses: product photo clean-up, try-on photos and a credit-based billing system.
models/ (Maya, Meera, Zara); rings and bracelets use a hand photo. For earrings, rings and bracelets the AI works on a close-up of the ear, fingers or wrist, which is blended back into the full photocatalog//s/<id> on any phone without signing in: a gallery of the pieces with their details (never prices), a full-size view, and an "Enquire on WhatsApp" button when a phone number is set in Profile settings. "Stop sharing" turns a link off for everyonepython3 server/app.py
Then open http://localhost:5173. The server serves the app and the billing API (Python 3.11+, standard library only; gradio_client is needed for Show on Model / Mannequin). It only hands out the app's own pages and images, never its code, database or other folders.
The pages use styles.css, built with Tailwind from the classes in index.html and share.html. After changing classes, rebuild it:
npx [email protected] -i styles.src.css -o styles.css --minify
server/data/jewelrex.db); balances cannot go negative and concurrent requests cannot overspend.| Plan | Credits |
|---|---|
| Free Trial | 10, one time |
| Starter | 80 / month |
| Growth | 220 / month |
| Professional | 500 / month |
| Studio | 1,100 / month |
| Enterprise | from 3,000 / month, configurable per account |
Prices are not set yet (price_inr: null); an administrator sets them with the config API.
| Variable | Purpose |
|---|---|
PORT | default 5173 |
JEWELREX_DB | SQLite file, default server/data/jewelrex.db |
WEBHOOK_SECRET | HMAC-SHA256 secret for payment webhooks |
ADMIN_KEY | enables /api/admin/* (send as X-Admin-Key) |
HF_TOKEN | Hugging Face token for generation (otherwise the browser's saved token is forwarded) |
DEMO_PAYMENTS | 1 (default) lets Buy credits / Upgrade complete without a payment gateway; set 0 in production |
Customer (account from X-Account-Id until real sign-in exists):
GET /api/account balances, warning level, plans, packs, recent ledgerPOST /api/generate Show on Model / Mannequin: reserves 1 credit, calls the provider, charges only if an image is deliveredPOST /api/jobs + /api/jobs/{id}/complete|fail browser-side tools (Enhance, Blend)POST /api/checkout buy a pack or change plan (demo mode only until a gateway is connected)Shared catalog links (no account needed; served by server/app.py locally and api/share.mjs on Vercel):
POST /api/share/image upload one photo {"data": "data:image/jpeg;base64,..."}; photos are stored once, under the SHA-256 of their bytesPOST /api/share create a link from uploaded photos: returns {id, key, url}; the key is needed to stop sharingGET /api/share/{id} the link's details, DELETE /api/share/{id} with header X-Share-Key stops sharingGET /s/{id} the client's page (share.html, with WhatsApp / social preview tags), GET /api/share/img/{name} a photoGET /api/share/status whether sharing is switched on ({"on": true, ...})Payment gateway: POST /api/webhooks/payment, header X-Jewelrex-Signature = hex HMAC-SHA256 of the raw body. Each event id is processed once; renewals grant credits once per cycle_id, top-ups once per payment_id.
{"id": "evt_1", "type": "subscription.renewed", "data": {"account_id": "...", "plan": "growth", "cycle_id": "sub_123-2026-11", "period_start": "...", "period_end": "..."}}
{"id": "evt_2", "type": "topup.paid", "data": {"account_id": "...", "credits": 200, "payment_id": "pay_456"}}
Admin (X-Admin-Key): GET/PUT /api/admin/config (plans, packs, warning thresholds, provider rates, limits), PUT /api/admin/accounts/{id} (plan, Enterprise allowance), GET /api/admin/provider-usage, PUT /api/admin/provider-calls/{id} (record the actual cost).
Show on Model / Mannequin call the Hugging Face Space prithivMLmods/Qwen-Image-Edit-2511-LoRAs-Fast on ZeroGPU. It is billed in GPU time against the token owner's daily ZeroGPU quota (beyond that, $1 per 10 GPU-minutes of prepaid Hugging Face credit), and the Space's xlarge GPU counts double. Each call is stored with its measured duration (an upper bound for GPU seconds) and an estimated cost; the actual cost is filled in from the Hugging Face bill. Customer credits and provider costs are tracked separately.
Links made on localhost only open on that computer. On the live site, links are stored in Vercel Blob:
Links always point at the project's production address (VERCEL_PROJECT_PRODUCTION_URL), even when made from a preview or branch address such as plugin-git-main-….vercel.app: Vercel asks visitors of those addresses to log in. Work from the production address too, since the catalog is saved per address in the browser.
Until then, Create link shows "Sharing isn't switched on for this site yet". To check, open /api/share/status on the live site: it says "on": true once the store is connected and the site redeployed. .vercelignore keeps the Python server and other non-site files out of the deployment. Free (Hobby) limits per month: 1 GB stored, 2,000 uploads (each new photo and each link is one), 10,000 reads (each time a client opens a link is one), 10 GB downloads. If a limit is passed, Vercel pauses Blob for 30 days instead of charging.
cd server && python3 -m unittest discover -s tests -v
Covers successful generation, multi-image requests, failed jobs, top-ups, exhausted limits, prepaid order, warnings, renewals, duplicate webhooks, signatures, admin limits, the append-only ledger and concurrent requests, plus shared links (photo checks, link details, the client page, stopping a link).
server/app.py (or an equivalent) deployed with the items below.DEMO_PAYMENTS simulates payments. Connect e.g. Razorpay and point its webhook at /api/webhooks/payment.visualizer-v1.html is the earlier single-tool version.