Skip to main content
knives on strings
Home The Stuff The Lab The Team About
X Gumroad KVR Audio Ko-fi
Home The Stuff The Lab The Team About
X Gumroad KVR Audio Ko-fi
The Stuff / LaterLens

LaterLens

LaterLens — YOUTUBE WATCH LATER SEARCH SHIPPED

Released — live on Chrome Web Store

PlatformsChrome
Version1.4.0
CHROME WEB STORE → Privacy Policy
LaterLens screenshot

YouTube's Watch Later playlist has no search. LaterLens fixes that — instant search by title or channel, sorting, and cached results. Uses DOM scraping with programmatic scrolling to index videos (YouTube's API doesn't expose Watch Later). Vanilla JavaScript, no build step, no dependencies.

Free. No paywall. No IAP. No subscription. No ads. No data gathering. Use this extension if it'll be helpful to you.

Published to the Chrome Web Store — March 10, 2026.

Changelog

v1.4.0 — August 24, 2026

Added

  • Search results are ordered by how well they match — whole words in the title first, then partial words, then videos found only through their channel name. Addresses "includes unrelated videos when searching for a specific word": a search for music no longer leads with every video from a channel called "Lofi Music Radio"
  • Channel-only matches are labelled with a small "channel match" tag, so a result whose title has nothing to do with the search explains itself
  • Titles only toggle — ignore channel names entirely when searching
  • Quick refresh — scanning again stops once it reaches videos already cached and keeps the rest, so a routine refresh reads only what you have added since the last scan. Status reports e.g. "Updated: 12 new videos (1,190 kept from cache)". A Full rescan toggle re-indexes everything. Quick refresh needs YouTube's own Date added (newest) order so the new videos are at the top: LaterLens reads the playlist's sort control, and if you keep the playlist in another order it switches over for the scan and puts your order back afterwards — including if you stop the scan. If it can't drive the sort menu it runs a full scan instead, and if it ever can't restore your order it says which one to set back
  • Filter by length — a length dropdown (under 10 min / 10–30 min / over 30 min), plus search syntax: <10:00, >1:00:00, or a bare number for minutes (<20). Works on its own or with text, e.g. rust <20:00
  • The playlist count is checked against your cache — if YouTube shows more or fewer videos than were cached, the status says so instead of leaving you to guess from the scan timestamp
  • The toolbar remembers itself — Filter list, Regex, Titles only, the length filter and sort are restored the next time you open Watch Later

Changed

  • Sorting no longer moves videos in the page; it positions them with flexbox order instead. This keeps the playlist in the order YouTube expects, which is what broke removing a video from a sorted list
  • Scanning continues as soon as new videos appear rather than pausing a fixed 600–1200ms per scroll — noticeably faster on large playlists
  • Sorting before a scan now says how many videos it actually sorted, instead of implying the whole playlist was sorted
  • The Chrome Web Store link in the popup is driven by STORE_URL in popup.js (still blank — the link stays hidden until it is filled in)

Fixed

  • The toolbar no longer breaks when a video is playing in the miniplayer. YouTube keeps the page you came from mounted while the miniplayer runs, so the document holds more than one playlist page; LaterLens was querying the whole document and could inject into — and count rows from — a page that was not on screen. Everything now scopes to the playlist you are looking at, and a toolbar left behind in a stale page moves itself across
  • The toolbar no longer covers the playlist. On YouTube's current two-column layout it was injected as a sibling of the video list, which made it a flex child that stretched to the full column height and painted its background over everything behind it. It now sits inside the list, above the rows, and is styled so it can't stretch whatever the surrounding layout does
  • The playlist's video count is read from more of YouTube's layouts, so the "cache has drifted" warning actually appears (it also no longer reads our own status line back as the playlist count)
  • The toolbar now appears when you reach Watch Later from inside YouTube (sidebar, homepage, a video). Previously the extension only loaded if the playlist URL was opened directly or reloaded, because browsers load extension scripts on page load and YouTube navigates without one — so arriving from elsewhere left no toolbar at all
  • Filtering now hides unavailable videos (deleted/private) instead of leaving them in the list
  • Sorting or filtering could use a previous video's title/duration after YouTube recycled a row
  • Help modal: focus now moves into the dialog, stays inside it, and returns to the help button on close; its key handler no longer lingers after the modal is dismissed by navigation
  • The results dropdown described itself to screen readers as a list of options while containing a heading and a button; it is now a labelled region of links
  • Ctrl+F no longer hijacks typing in YouTube's own search box, and a second press reaches the browser's own find
  • A saved sort no longer triggers the "you only sorted the loaded videos" warning every time you open the playlist — that warning is for sorts you choose
  • Leaving the playlist no longer leaves LaterLens' sort styling applied to YouTube's list
  • A cache that fails to save (browser storage full) now says so instead of reporting the videos as cached
  • Stopping a scan early now caches everything loaded up to that point instead of discarding it — a partial index survives the stop
  • "Scan stopped early" status now reports the number of videos actually scanned; it previously showed the count from the *previous* cache (often 0, or an unrelated number)
  • Chrome Web Store link in the popup now works — it read manifest.store_url, which is not a valid MV3 manifest key, so the button was never shown (set STORE_URL in popup.js to enable it)

v1.3.8 — March 10, 2026

  • Keyboard shortcut: Ctrl+F (Cmd+F on Mac) focuses the search box and intercepts the browser's native find dialog
  • Help modal shortcuts table updated to list Ctrl+F

v1.3.7 — March 10, 2026

  • Fixed: UI now re-injects automatically after YouTube theme switch (dark↔light) without requiring a page reload

v1.3.6 — March 10, 2026

  • Scan progress banner: fixed to bottom of screen during scanning, always visible regardless of scroll position
  • Banner shows live video count and a Stop button
  • Stopping early shows amber warning in status bar: "Scan stopped early — N videos cached (results may be incomplete)"

v1.3.5 — March 10, 2026

  • Toolbar is now sticky — stays visible as the page scrolls during scanning
  • Stopping a scan early shows an amber warning: "Scan stopped early — N videos cached (results may be incomplete)"
  • Warning clears automatically when a full scan completes

v1.3.4 — March 10, 2026

  • Flipped toggle logic: "Filter list" is now opt-in (default off); overlay search is the default behaviour
  • Updated help modal text to match new terminology

v1.3.3 — March 10, 2026

  • Replaced checkboxes with toggle switches matching YouTube's aesthetic
  • Renamed "Cache" → "Search" and kept "Regex" for clarity

v1.3.2 — March 10, 2026

  • Improved manifest description

v1.3.1 — March 10, 2026

New

  • Extension popup — click the toolbar icon to open Watch Later, visit the Chrome Web Store, or support on Ko-fi
  • Ko-fi support link added to the help modal (? button)

Improved

  • Cache mode result links now navigate in the same tab, using YouTube's SPA router for fast navigation (was opening a new tab)

Security

  • el() helper now blocks dangerous property names (innerHTML, outerHTML, srcdoc, event handlers)
  • rel=noopener noreferrer on all external result links
  • Content script matches tightened to playlist* only
  • Explicit content_security_policy declaration in manifest

v1.3.0 — February 11, 2026

Performance

  • Extract video data once before sorting/filtering instead of per-comparison DOM queries
  • Batch DOM reordering via DocumentFragment for a single reflow on sort
  • Lighter escapeHtml using string replacement instead of DOM element creation
  • Shorter debounce (100ms) for cached search; 200ms retained for DOM filtering

Reliability

  • Fisher-Yates shuffle for unbiased randomization
  • Retry limit (20 attempts) on UI injection to prevent infinite loops
  • Reset original order on rescan so "Original Order" sort stays accurate
  • Precise Watch Later URL check using URL parser instead of string.includes
  • URL sanitization in results overlay to prevent XSS from corrupted cache data
  • Event listener cleanup on UI removal prevents accumulation across navigations

Compatibility

  • MutationObserver replaces fixed-interval polling for DOM readiness detection
  • Improved element visibility check handles position: fixed elements
  • Proper readyState handling covers both interactive and complete states

v1.2.3 — January 18, 2026

  • Added sorting status spinner for better UX
  • Fixed missing 16px and 48px icons
  • Optimized sorting logic (async) to prevent UI freezing

v1.2.2 — January 18, 2026

  • Fixed duration sorting issue
  • Updated selectors to support modern YouTube badge-shape element

v1.2.1 — January 18, 2026

  • Fixed "Extension context invalidated" error on reload
  • Added safe storage access with error handling

v1.2.0 — January 18, 2026

  • Cache search mode: search cached data instantly without rescanning
  • Results shown in clickable overlay with video links
  • Cache toggle enabled by default for faster UX

v1.1.1 — January 18, 2026

  • Added quoted search for whole-word/phrase matching
  • "AI" matches only "AI", not "again"

v1.1.0 — January 18, 2026

  • Added sorting: Channel, Title, Duration, Shuffle
  • Added regex search toggle
  • Two-row UI layout

v1.0.2 — January 18, 2026

  • Improved scanning for large playlists (switched to instant scroll)
  • Increased retry iterations and wait times

v1.0.1 — January 18, 2026

  • Fixed header selector - YouTube hides ytd-playlist-header-renderer
knives on strings

© 2026 Knives on Strings

X Gumroad KVR Audio Ko-fi
Legal Terms Privacy