Copy/paste scripts
If you want to reproduce the monitoring + alert + optional autocapture setup, the scripts are published here:
youtube-pass-checks/tools/youtube_playability (GitLab)
Raw README: README.md
Example receipts (NOT-PASS)
Concrete example from a logged-out/incognito capture:
m.youtube.com shows “Video unavailable” (qq15at0yfYM) (screenshots + SHA-256)
What you’re likely seeing
- A YouTube watch page loads, but playback is blocked while logged out.
- The UI may say: “Sign in to confirm you’re not a bot”.
- In JSON, this commonly corresponds to
playabilityStatus=LOGIN_REQUIRED.
Related pages: evidence + workarounds (v2) · receipt bundles · Soft‑404 Survival Kit.
How to confirm (fast)
- Run the reproducible curl probe and record the result as a receipt:
- If you can reproduce it in a browser, capture evidence as two OS-level screenshots (URL bar visible) taken ~15+ seconds apart, with player time/progress clearly advancing (or clearly not advancing).
www and m in a fresh logged‑out profile.
Viewer checklist (no bypass; just sanity checks)
- Try the same link later (gates sometimes change over time).
- Try another network (home vs mobile hotspot) to see if behavior is network/edge dependent.
- Try another device or browser profile (fresh logged‑out profile is the cleanest test).
- If a companion hub page is unreachable, use raw fallbacks from the Soft‑404 Survival Kit.
If the video is yours, prioritize the “creator/engineer checklist” below — it produces higher-quality receipts.
Creator / engineer checklist (useful for debugging)
- Capture the status: record
playabilityStatus+reasonvia the probe. - Compare endpoints: test both:
https://www.youtube.com/watch?v=VIDEO_IDhttps://m.youtube.com/watch?v=VIDEO_ID
- Record OS-level playback proof: two screenshots ≥15s apart showing the URL bar and the player time/progress changing (or not changing).
- Bundle receipts: if you’re collecting multiple artifacts, use receipt bundles (hashes + verification commands).
- Don’t over-interpret HTTP 200: the page can return 200 while playback is gated; rely on
playabilityStatusand UI evidence.