Skip to content

fix(amispoof): correct analyzer/axis counts + un-break opt-in microphone#89

Closed
ahmetabdullahgultekin wants to merge 1 commit into
mainfrom
fix/amispoof-accuracy-2026-06-01
Closed

fix(amispoof): correct analyzer/axis counts + un-break opt-in microphone#89
ahmetabdullahgultekin wants to merge 1 commit into
mainfrom
fix/amispoof-accuracy-2026-06-01

Conversation

@ahmetabdullahgultekin

Copy link
Copy Markdown
Contributor

Two verified accuracy fixes for the amispoof.fivucsas.com browser tester. Doc/markup only — no TypeScript source touched.

CHANGE 1 — Reconcile analyzer / liveness-axis counts

The marketing/SEO copy said "19 analyzers" and "15-axis passive liveness-proof scorer". Both are wrong. Verified against source on this branch:

Claim Stale value Source of truth Real value
Analyzers 19 ANALYZER_ORDER in web/amispoof/app.js (5 image-track + 18 video-track) 23
Active by default minus 3 opt-in: hand_tracking (?hand=1), voice_activity + audio_mouth_sync (?audio=1/🎤) 20
Liveness axes 15 PROOF_AXES in app.js (17 passive + 1 active challenge axis) 18
Gates 3 web/src/gates/*.ts 3 (already correct)

The "19" did not map to "active by default" either — active-by-default is 20, not 19 (background_motion is on by default via enableBackgroundSegmentation: true; only hand + voice/audio are off by default). So "19/15" were simply stale.

New honest framing applied everywhere:

23 analyzers (20 active by default; hand & voice/audio are opt-in) · 18-axis passive liveness-proof scorer · 3 gates

Fixed in:

  • web/amispoof/index.html — meta description, OG description, og:image:alt, twitter:description, JSON-LD FAQ answer
  • README.md (root) — live-tester blurb (also corrected its opt-in list: background motion is default-on)
  • ROADMAP.md — Browser bundle status row
  • web/amispoof/README.md — "What it shows" section (still said "Twelve analyzers", even more stale; now points at ANALYZER_ORDER as canonical)

CHANGE 2 — Un-break the dead opt-in microphone

web/amispoof/.htaccess sent a Permissions-Policy header with microphone=(), hard-disabling the mic at the HTTP layer — but the UI ships an opt-in 🎤 / ?audio=1 voice + audio-mouth-sync analyzer that asks users to grant mic permission. The feature was silently dead in prod.

- Header always set Permissions-Policy 'camera=(self), microphone=()'
+ Header always set Permissions-Policy 'camera=(self), microphone=(self)'

camera=(self) and everything else unchanged.

Validation

  • npm run typecheck → green (no source touched)
  • Both JSON-LD blocks in index.html parse cleanly
  • Repo-wide scan confirms zero remaining 19 analyzers / 15-axis strings

No prod deploy performed.

🤖 Generated with Claude Code

Two verified accuracy fixes for the amispoof.fivucsas.com browser tester.

1. Reconcile analyzer / liveness-axis counts in marketing copy.
   Verified against source:
   - ANALYZER_ORDER in web/amispoof/app.js = 23 entries
     (5 image-track + 18 video-track). 3 are opt-in (off by default):
     hand_tracking (?hand=1), voice_activity + audio_mouth_sync
     (?audio=1 / 🎤) → 20 active by default.
   - PROOF_AXES = 18 entries (17 passive + 1 active challenge axis).
   - web/src/gates/*.ts = 3 gates (correct as stated).
   Replaced the stale "19 analyzers" / "15-axis" strings across
   index.html (meta description, OG description, og:image:alt,
   twitter:description, JSON-LD FAQ), plus README.md, ROADMAP.md and
   web/amispoof/README.md (which also still said "Twelve analyzers").
   New framing: "23 analyzers (20 active by default; hand & voice/audio
   are opt-in) · 18-axis passive liveness-proof scorer · 3 gates".
   Also corrected README's opt-in list — background motion is on by
   default (enableBackgroundSegmentation: true), only the 3 above are
   opt-in.

2. Un-break the opt-in microphone feature.
   web/amispoof/.htaccess sent Permissions-Policy with microphone=(),
   which hard-disabled the mic at the HTTP layer, silently killing the
   opt-in 🎤 / ?audio=1 voice + audio-mouth-sync analyzers in prod.
   Changed to microphone=(self); camera=(self) unchanged.

Doc/markup only — no TypeScript source touched. typecheck green,
JSON-LD blocks parse.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings June 1, 2026 08:17

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates the amispoof browser tester’s public-facing copy to match the current analyzer/axis inventory, and fixes the production mic opt-in flow by allowing microphone access via Permissions-Policy.

Changes:

  • Corrects analyzer / liveness-axis counts across SEO metadata and documentation (23 analyzers / 18 axes, with opt-in clarifications).
  • Enables opt-in microphone-based analyzers by changing .htaccess Permissions-Policy from microphone=() to microphone=(self).
  • Refreshes roadmap/status text to reflect the corrected counts.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
web/amispoof/README.md Updates the “What it shows” analyzer description and points to ANALYZER_ORDER as canonical.
web/amispoof/index.html Updates SEO/OG/Twitter/JSON-LD text to reflect corrected analyzer/axis counts and opt-in behavior.
web/amispoof/.htaccess Allows microphone access for same-origin so the opt-in audio analyzers can function.
ROADMAP.md Updates browser bundle “Production” status row to corrected analyzer/axis counts.
README.md Updates the root live-tester blurb to corrected analyzer/axis counts and opt-in list.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread web/amispoof/index.html
<meta
name="description"
content="Am I spoof? amispoof answers the question in the browser. Open face anti-spoof + liveness tester — 19 analyzers (MiniFASNet, blink, rPPG, gaze, blendshapes, 3D pose, audio-mouth sync, ...) + 15-axis passive liveness-proof scorer running entirely client-side. No server, no upload. Point your camera at a printed photo or another screen and watch the LIVE / SPOOF verdict flip in seconds."
content="Am I spoof? amispoof answers the question in the browser. Open face anti-spoof + liveness tester — 23 analyzers (20 active by default; hand & voice/audio are opt-in) like MiniFASNet, blink, rPPG, gaze, blendshapes, 3D pose, audio-mouth sync, plus an 18-axis passive liveness-proof scorer and 3 gates running entirely client-side. No server, no upload. Point your camera at a printed photo or another screen and watch the LIVE / SPOOF verdict flip in seconds."
Comment thread web/amispoof/index.html
<meta
property="og:description"
content="Am I spoof? amispoof answers it in the browser. 19 analyzers, 3 gates, and a 15-axis passive liveness-proof scorer via onnxruntime-web + MediaPipe. Test printed-photo, phone-screen replay, deepfake, occlusion and dark-room attacks against a live LIVE/SPOOF verdict in seconds. No server, no upload."
content="Am I spoof? amispoof answers it in the browser. 23 analyzers (20 active by default; hand & voice/audio are opt-in), 3 gates, and an 18-axis passive liveness-proof scorer via onnxruntime-web + MediaPipe. Test printed-photo, phone-screen replay, deepfake, occlusion and dark-room attacks against a live LIVE/SPOOF verdict in seconds. No server, no upload."
Comment thread web/amispoof/index.html
<meta
name="twitter:description"
content="19-analyzer face anti-spoof + 15-axis liveness-proof pipeline running entirely in the browser. No server, no GPU, no upload. Open the page, point your camera at a photo, watch the verdict flip."
content="23-analyzer (20 active by default; hand & voice/audio opt-in) face anti-spoof + 18-axis liveness-proof pipeline with 3 gates running entirely in the browser. No server, no GPU, no upload. Open the page, point your camera at a photo, watch the verdict flip."
Comment thread web/amispoof/index.html
<meta
name="description"
content="Am I spoof? amispoof answers the question in the browser. Open face anti-spoof + liveness tester — 19 analyzers (MiniFASNet, blink, rPPG, gaze, blendshapes, 3D pose, audio-mouth sync, ...) + 15-axis passive liveness-proof scorer running entirely client-side. No server, no upload. Point your camera at a printed photo or another screen and watch the LIVE / SPOOF verdict flip in seconds."
content="Am I spoof? amispoof answers the question in the browser. Open face anti-spoof + liveness tester — 23 analyzers (20 active by default; hand & voice/audio are opt-in) like MiniFASNet, blink, rPPG, gaze, blendshapes, 3D pose, audio-mouth sync, plus an 18-axis passive liveness-proof scorer and 3 gates running entirely client-side. No server, no upload. Point your camera at a printed photo or another screen and watch the LIVE / SPOOF verdict flip in seconds."
Comment thread web/amispoof/index.html
<meta
property="og:description"
content="Am I spoof? amispoof answers it in the browser. 19 analyzers, 3 gates, and a 15-axis passive liveness-proof scorer via onnxruntime-web + MediaPipe. Test printed-photo, phone-screen replay, deepfake, occlusion and dark-room attacks against a live LIVE/SPOOF verdict in seconds. No server, no upload."
content="Am I spoof? amispoof answers it in the browser. 23 analyzers (20 active by default; hand & voice/audio are opt-in), 3 gates, and an 18-axis passive liveness-proof scorer via onnxruntime-web + MediaPipe. Test printed-photo, phone-screen replay, deepfake, occlusion and dark-room attacks against a live LIVE/SPOOF verdict in seconds. No server, no upload."
Comment thread web/amispoof/index.html
<meta
name="twitter:description"
content="19-analyzer face anti-spoof + 15-axis liveness-proof pipeline running entirely in the browser. No server, no GPU, no upload. Open the page, point your camera at a photo, watch the verdict flip."
content="23-analyzer (20 active by default; hand & voice/audio opt-in) face anti-spoof + 18-axis liveness-proof pipeline with 3 gates running entirely in the browser. No server, no GPU, no upload. Open the page, point your camera at a photo, watch the verdict flip."
ahmetabdullahgultekin added a commit that referenced this pull request Jun 1, 2026
…in mic (#91)

Re-applied on top of #90 (the prior #89 conflicted). Source-verified counts: 23 analyzers (20 active by default; hand + voice/audio opt-in), 18 liveness-proof axes, 3 gates. Fixed across index.html meta/OG/Twitter/JSON-LD + README/ROADMAP/web README. Also microphone=() -> microphone=(self) so the opt-in voice/audio analyzers can actually request mic permission in prod.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@ahmetabdullahgultekin

Copy link
Copy Markdown
Contributor Author

Superseded by the re-applied fix on top of #90 (this branch conflicted after #90 merged).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants