inspector-playwright
SkillWeb & browsingScreenshot the real Timestamps analysis view (UnifiedDisplay) for any reciter:surah:verse straight from shards, fast, drift-free, no SPA/audio/OAuth.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the inspector-playwright skill
What this skill tells your AI
The instructions your AI receives, as published by qud-technologies/quranic-universal-audio in .claude/skills/inspector-playwright/SKILL.md and read by ahel’s review.
Screenshot the real Timestamps analysis view (UnifiedDisplay) for a
reciter : surah:verse straight from shards. No SPA navigation, no audio, no
OAuth, no progress-bar pixel math — and drift-free: the harness
(inspector/frontend/harness/analysis.{html,ts}) imports the production
component + the real ts-source assembly (assembleVerseFromShard), so a
prop/assembly change fails the build rather than silently diverging. Far faster
and more reliable than driving the live SPA or a local Flask (which dies
silently in long sessions).
Run
From inspector/frontend (so vite + playwright resolve from its node_modules):
node ../../.claude/skills/inspector-playwright/scripts/shoot.mjs \
--reciter <slug> --ref 45:32 [--ref 11:57 …] \
[--words 1-3] [--out DIR] [--api https://…hf.space] [--port 5199]
--reciter— slug, e.g.nasser_al_qatami_mp3quran(find it from the manifest / the Timestamps surah-picker search).--ref—surah:verse[@occasion], repeatable; one PNG per ref →<out>/<slug>_<s>-<v>[_occN].png. A verse the reciter broke mid-way has one occasion per run, and a stop sign lives on an occasion's last boundary —--ref 2:26@3shoots the third run at that verse (default the first).--words a-b— optional 1-based inclusive word range, for a narrow crop of a long verse.--api— backend the harness fetches shards from. Default is the dev Space (https://hetchyy-quranic-inspector-dev.hf.space): its shard endpoint is public (no auth) andno-store(always fresh after a re-stamp), so no local Flask is needed. Point athttp://127.0.0.1:5000only when a local backend is up.--out— output dir (default cwd).--port— Vite port (default 5199).
How it works
shoot.mjs boots Vite programmatically with INSPECTOR_API_TARGET=<api> (which
the Vite config turns into an /api proxy at that origin), drives headless
Chromium to …/harness/analysis.html?reciter&ref, waits for body[data-ready],
and screenshots #app. The harness fetches manifest/shard/qpc/dk via the real
loaders, builds TsVerseData with assembleVerseFromShard, sets the real
loadedVerse store, and mounts UnifiedDisplay — the exact app render path.
It also mirrors the tab's edition plumbing: wordProfile / deliveryRiwayah
off the shard's _meta, --font-quran + ensureEditionFont for the face, and
WordTimedRow instead of TimedAnalysisRow for a word-profile (non-Hafs)
shard — so a projected edition renders in its own script, not DigitalKhatt.
Show the result in chat
After the PNG is written, display it inline in chat by Read-ing the PNG path
(the Read tool renders images) — don't just report the path. One Read per shot.
Notes
- Both tiers render by default (the app defaults the phoneme row OFF; the harness turns it ON since the letter↔phoneme alignment is the point). Opt out with
&letters=0/&phonemes=0on the harness URL. - After a re-stamp the shot is immediately fresh (shard endpoint is
no-store); there is no browser/CDN cache to bust. → [[shard-browser-cache-stale]] - The dev-only perf-A/B HUD is hidden by the harness CSS.
- The screenshot is the analysis (letter ↔ phoneme cell) view only — to verify tajweed underlines / merger badges / silent greys after a phonemizer or qua-sdk change, this is the tool.
Signals
- GitHub stars
- 33
- Forks
- 4
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
inspector-playwright- Source
- github.com/qud-technologies/quranic-universal-audio