Doop
Doop: 오픈소스 멀티플레이어 디자인 캔버스 및 AI 에이전트용 MCP
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
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.