kfj001andClaude 0030d031f1 fix(scan): recover simple <video> detection site-agnostically
The no-mention-of-pornhub branch stopped finding plain <video> elements on
pages like thisvid.com. Two site-agnostic causes, both fixed without any
site-specific references:

1. Predicate over-rejection: isValidManifestUrl (and the nested isManifestUrl
   in m3u8DeepProbeFn) ran the placeholder/`%`/trailing-slash rejections
   BEFORE the concrete media signals. thisvid serves its direct MP4 WITH a
   trailing slash (.../14644093.mp4/?rnd=...), so `path.endsWith('/')`
   rejected a real, fetchable source. Concrete media signals (.mp4/.webm/.ogv/
   .mpd/.m4s/.m3u8/.hlsvod//hls/) now win outright, so a coincidental '%' or
   trailing slash never sinks a real source — while genuine route templates
   (/playlists/, /playlist/%1%/, /videos/{id}/) are still rejected.

2. Runtime cause on ad-iframe-heavy pages: scrapeTab ran only a MAIN-world
   scrape. A MAIN-world + allFrames injection can reject on pages with
   sandboxed/opaque-origin ad iframes, returning 0 videos even when a <video>
   is visible. scrapeTab now falls back to an isolated-world scrape (no `world`
   key — always permitted) when the MAIN-world run finds nothing. The per-frame
   reduction was extracted into a shared reduceScrapeFrames helper.

Adds __tests__/simple_video.test.mjs: a thisvid isValidManifestUrl battery
(trailing-slash MP4 accepted, templates still rejected, %2B/%2F tokens
preserved) plus a structural guard that scrapeTab keeps both a MAIN-world
primary and an isolated-world fallback.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-28 01:17:35 -07:00
2026-08-16 23:00:47 -07:00
2026-08-24 22:43:05 +00:00
2026-08-16 23:00:47 -07:00
2026-06-08 20:13:51 +00:00
2026-08-24 22:43:05 +00:00
2026-08-24 22:43:05 +00:00
2026-08-24 22:43:05 +00:00
2026-05-30 18:51:10 +00:00
2026-08-16 23:00:47 -07:00

VidPlex

A Chrome extension (Manifest V3) that finds videos on the current page and displays them in a 2x2 grid.

Features

  • Click the extension icon → "Find Videos" to scan the current tab for all <video> elements
  • Videos are listed in the popup for reference (clickable links, "Copy All URLs" button)
  • Click "Open Viewer" to open a new window with videos in a 2x2 grid (autoplay muted)
  • Click "Clear" to reset the stored video list

Getting started

# 1. Install deps
npm i

# 2. Run in watch mode
npm run dev

# 3. Build for distribution
npm run build

Loading in Chrome

  1. Open chrome://extensions/
  2. Enable Developer mode (top-right)
  3. Click Load unpacked → select the project root folder (where manifest.json is located)

Project structure

manifest.json       — Extension manifest (MV3)
package.json        — Dev tooling (Vite + Vitest + TS)
vite.config.ts      — Build config
src/
  background/       — Service worker (MV3 background)
  content/          — Content script
  viewer/           — Popup UI + video viewer
    index.html      — Popup (Find Videos, Open Viewer buttons)
    index.js        — Popup logic (scans current tab for videos)
    index.css       — Popup styles
    viewer.html     — Viewer page (2x2 video grid in new window)
    viewer.js       — Viewer logic (renders video panels)
    viewer.css      — Viewer grid styles
  icons/            — Extension icons (place .png files here)
  • Chrome Extension Developer (extension-list-viewer)
  • ESLint
  • Prettier

VS Code workspace

Open vidplex.code-workspace to get the project with recommended extensions pre-installed.

S
Description
No description provided
Readme
1.4 MiB
0 Stars 2 Watchers 0 Forks
v0.2.0
Latest
2026-10-07 17:07:24 -07:00
Languages
JavaScript 96.9%
TypeScript 1.2%
CSS 1.1%
HTML 0.7%
Dockerfile 0.1%