尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 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.