Spaces:
Running on Zero
Running on Zero
Commit History
-
fix analytics source enum for UI callbacks Running
1713247 -
fix: make HF analytics writes durable
ddbc782 -
fix: disable gradio experimental ssr
9ff3b93 -
revert: restore previous hf space behavior
d3d263b -
fix: disable gradio experimental ssr
4d82052 -
fix analytics event delivery reliability
68fe3ae
-
fix(fit): restore gradio arg alignment + stop masking wiring errors as payload_too_long
- 61aae8d inserted link_lifetime mid-signature; gradio passes UI values positionally, shifting every arg after use_temporary_short_link by one: image_size got border (4px), error_correction got module_size int, so the EC-label dict KeyError'd and _safe_compute masked it as overflow — a 100% payload_too_long wall on the space UI since 2026-08-04. - Move link_lifetime to keyword-only in generate_standard_qr and generate_artistic_qr; gradio's 26/43 positional inputs align again. Modal/gateway path (build_generation_kwargs, by-name) unaffected. - qr_fit._safe_compute now converts only true capacity overflows (DataOverflowError / qrcode 'Invalid version' ValueError) to None; anything else is logged and re-raised so broken wiring surfaces as the real error instead of a fake payload_too_long.97791f6
-
feat(shortener): honor gateway-injected link_lifetime for permanent paid-tier links
- GenerateRequest.link_lifetime (server-set by qr-gateway from install entitlement) - build_generation_kwargs passes it through - generate_standard_qr/generate_artistic_qr accept and forward to shortener - _maybe_shorten_url_for_qr sends permanent:true when link_lifetime=permanent Paired with qrcut-shortener key-gated permanent flag + qr-gateway credit-aware injection.61aae8d
-
fix(modal): add gradio[oauth] — dashboard LoginButton needs authlib deps
9159846 -
feat: auto-fit QR geometry instead of hard-failing on dimension overflow
Production analytics showed users hitting 'QR dimensions of N exceed max size of M' errors (iOS sends fixed geometry presets; payload length was an unrecoverable error with no size controls in the app). New qr_fit.py (pure, locally tested): canvas bump -> module floor -> border floor -> EC notch (never below Medium) -> structured payload_too_long error. Both public wrappers (standard/artistic) resolve-then-adjust, record auto_adjusted + steps in settings_json, and log [qr-auto-fit]. Fast path is byte-identical for payloads that already fit. payload_too_long added to the analytics error-bucket classifier. Also adds .modalignore so deploys stop uploading .git/.env/.agent etc.7e1de46
-
fix(storage): make KVM /storage-write/ the primary path, not the optional dual-write fallback
Verified signatureSince the 2026-07-08 cutover, the Supabase qr-generations bucket has been deleted. The dashboard was still trying it as the primary write and only falling back to KVM when QRCUT_* env vars were set -- but those secrets were never added to the Space, so every user generation since 2026-07-08 has produced a broken image (public_url points at the dead Supabase URL). Changes: - Try qrcut.co /storage-write/ FIRST. On HTTP 201, return the KVM URL as public_url and skip the dead Supabase write entirely. - Only fall back to the Supabase legacy path if KVM write fails or env is missing. The legacy path will 404 in prod; that's logged. - All other behaviour (presign, scans, OAuth, list_my_generations, retention) unchanged.952e1fe
-
fix: set qrcut upload User-Agent for Cloudflare
ac3032e -
chore: add qrcut dual-write diagnostics
d8a05c7 -
feat: optional dual-write to kvm9276 (qrcut.co) when QRCUT_* env vars are set
When the new env vars (QRCUT_STORAGE_URL, QRCUT_STORAGE_PUBLIC_URL, QRCUT_WRITE_API_KEY) are set on the HF Space, _upload_public_png also uploads the generated PNG to qrcut.co and returns the kvm9276 public URL. When the env vars are NOT set, behavior is identical to today (Supabase-only). No existing env vars are changed, no existing secrets are read differently. The kvm9276 write is best-effort: any failure (network, auth, timeout) is logged to stdout but does not break the Supabase write. Supabase remains the source of truth until the bucket is explicitly deleted. This is the storage prep work for moving QR images off Supabase (qrcut.co now has 662/662 of the qr-generations files mirrored).a32c29b
-
fix(dashboard): show 'QR preview unavailable' placeholder for records missing image
HermesDay-1 image-upload bug (2026-05-31 → 2026-06-13) left ~966 generations with no completed_image_url. Until now, the My QR Codes detail panel rendered a blank cell for these entries — making it look like the entry was broken or had not loaded. Now we show a structured placeholder that explains the situation and surfaces the metadata that IS preserved (mode, created_at, destination, short URL, prompt). - _render_dashboard_image_html now takes an optional record - when image_url is null/empty, render a styled placeholder with the record's qr_mode, created_at, destination, short_url, and prompt - all user-supplied content is HTML-escaped - CSS classes added to DASHBOARD_CSS for the placeholder layout09552dd
-
fix(shortener): set explicit User-Agent to bypass Cloudflare WAF
Hermes AgentThe AI QR Space's outgoing POST to URL_SHORTENER_API_URL was being blocked by Cloudflare WAF (Error 1010) because Python's urllib defaults to User-Agent 'Python-urllib/3.x', which Cloudflare classifies as a bot/script. Symptom (visible in the Space UI): 'short link unavailable: HTTP Error 403. Using normalized URL instead.' The shortener (qrcut.co) and its API key were both healthy. The block happens at the Cloudflare edge before the request reaches the upstream kvm9276 VPS. Same WAF error reproduced from this VM with curl and User-Agent 'Python-urllib/3.10' (Cloudflare ray-id a0a8299b1ed5d0d1, Error 1010). With any other UA, the same request returns 200. Fix: set an explicit User-Agent on the urllib request, shaped like a real operator/client, so Cloudflare does not flag it. Regression test: tests/inference/test_shortener_ua.py parses app.py textually and asserts (1) the request_headers dict is present, (2) it contains a User-Agent entry, (3) the UA is not the urllib default. Te…428df42
-
feat: add pagination to My QR Codes dashboard
9ade7f9 -
fix: refresh dashboard destination from short links
e434cff -
copy: update my qr dashboard wording
b291db8 -
improve: redesign my qr dashboard ux
288eb75 -
feat: retarget saved QR short links from dashboard
bab8504 -
revert: remove featured example load buttons
9dec9fa -
fix: use explicit featured example loaders
e3f45ae
-
Simplify QR scan breakdown table
9eacc4e -
Revert "Add hourly scan chart and Safari auth hint"
This reverts commit 38ba9dbcde4f482150137a52c51331ce5213fe8b.e825e4b -
Add hourly scan chart and Safari auth hint
38ba9db -
Use dropdown for My QR selection
26207c8 -
Fix My QR selection callback arg order
36f0bbe -
Revert dashboard JS hint hooks
b7e799f -
Revert "Attach username hint to QR generation saves"
This reverts commit a3df8329e67a539771f2f2f90f15b86551df8aba.183d5e5 -
Revert "Fix Gradio username hint JS return shape"
This reverts commit 9a320924dbce2db6fc4c9ea632c3aa711e339f48.b322066 -
Fix Gradio username hint JS return shape
9a32092 -
Attach username hint to QR generation saves
a3df832 -
Harden dashboard auth hint sync
2b9a80c -
Fix My QR dashboard auth fallback and sizing
293dd62 -
Filter QR analytics to post-creation scans
cc65da2 -
Tighten QR dashboard session merge and image sizing
e32bdbe -
Improve session fallback dashboard UX
4633074 -
Fix pending dashboard query parsing
c8ac052 -
Improve pending QR recovery and dashboard sizing
22ffdaa -
Show and claim same-session pending QR saves
488d7d2 -
Claim same-session anonymous QR saves after sign-in
7e0b9c3 -
Support HF username fallback for dashboard saves
a932375 -
Fix Supabase server auth user agent
95aa415 -
Enable HF OAuth in Space metadata
973546b -
Add HF auth QR dashboard and saved generation backend
3574fa8
-
docs: add HF dashboard schema draft
8fc048d
-
fix: include shortener toggle in artistic import validation
210455a
-
Skip ZeroGPU startup AOT warmup on HF Space
b21bafe -
Fix Gradio download telemetry state propagation
cbf99b8