AI-Created Software

Last Updated: October 16, 2026

The following is AI-generated (aka vibe-coded) software. The software is specific to my needs and my system and may not work for you or your system. Support is limited, but if you report a bug I'll certainly look into it. All code is provided in a zip file for you to review should you choose.

Show No More

A Chrome extension for Netflix, Prime Video, Disney+, Paramount+, Crave, Apple TV and CBC Gem that lets you:

  • Mark titles as seen. They stay in place, dimmed, with a green check.
  • Hide titles. They’re covered by a plain placeholder card in the same slot, so rows keep their shape and you don’t see the artwork. Clicks on a hidden tile are blocked so you don’t open it by accident.

Marks are shared across services by title name (toggle in the popup), so a show marked on Prime is also marked on every other supported service.

Version: 2.5.4

Install

  1. Unzip this folder somewhere you’ll keep it.
  2. In Chrome, go to chrome://extensions.
  3. Turn on Developer mode (top right).
  4. Click Load unpacked and choose the show-no-more folder (the one containing manifest.json).
  5. Pin the extension from the puzzle-piece menu if you want quick access to the popup.

Reload any streaming-site tabs that were already open.

Using it

On any of the three sites:

  • Hover a tile and use the buttons in its top-right corner: ✓ for seen, ⊘ for hide. Click the same button again to unmark.
  • Keyboard: with the pointer over a tile (or its hover preview), press S for seen or H for hide. Press again to unmark.
  • Right-click a tile → Show No More → Mark as seen / Hide this title / Clear mark.
  • On a hidden tile, hover it to get Peek (reveal it temporarily) and Unhide.

A seen badge with an outline (instead of solid green) means the title was matched from a different service.

Why is (or isn’t) this marked? Hover a tile’s ✓ or ⊘ button, the green check badge, or a Hidden card. The tooltip shows: – the title the extension read from the tile; – its matching name, the cleaned-up form used to match by name (“kim s convenience”), or why it has none (an episode-style name, or no title found); – the service’s ID for that title; – if it’s marked, which saved entry matched: “Marked on Netflix”, or “Matched by name to “…” from Prime Video (ID …)”.

In the popup, hovering a title in the Seen or Hidden list shows the same details for that saved entry. If a tile and a saved entry look alike but don’t match, compare their matching names.

Saved matching names are recalculated whenever the extension loads, so entries saved by older versions pick up improvements to the name cleanup.

Title cleanup (site text around titles). Sites add text to their title labels, such as Disney+’s “New Movie Badge …” before the title and “… Disney+ Original” or “… Select for details on this title.” after it. This text is removed before titles are shown or matched. You control it in the popup under Title cleanup:

  • Remove from the start of titles / Remove from the end of titles: one phrase per line, not case-sensitive. Phrases match whole words only, so a start phrase “Watch” removes it from “Watch Andor” but leaves Watchmen alone. A full stop at the end of a phrase is optional. Both lists come pre-filled with the phrases found so far.
  • Also use built-in rules (on by default): pattern rules a plain list can’t express. They remove “Select/Press/Click/Tap for details…”, age ratings (“Rated TV-14”), studio labels (“… Pixar Original”, “… Hulu Original Series”) and “New … Badge”-style labels made of badge words (New, Movie, Series, Premier Access, Coming Soon…). Real titles like Select, The Badge or New Girl are left alone. Turn this off to use only your own lists.
  • Test a title: paste a label from a tooltip to see what it cleans to, and its matching name.
  • Reset to defaults restores the starting lists.

Changes save automatically. Open streaming pages re-read their tiles straight away, and saved entries are tidied with the new phrases. The lists are included in backups.

Episode names. Some series tiles label an episode (“Pilot”, “Episode 1”, “S1:E3 …”) rather than the show. The extension prefers the show’s name when the tile offers one, and strips “S1:E3 …”-style suffixes. An episode-style name is never used to match by name, because many shows share it. A title marked on such a tile only applies to that exact tile. In the popup, entries with an episode-style name are flagged Episode? so you can remove any that were saved by mistake. Import list skips them.

A show can appear on the same service under more than one link (for example an episode in Continue Watching and the show itself in another row). These match each other by name even with cross-service matching off, and unmarking one unmarks the other.

On Netflix, hovering a tile opens an enlarged preview on top of it, which covers the tile’s buttons. Two things handle this:

  • Buttons on the preview. A moment after you hover, the extension looks for whatever Netflix has drawn over the tile and adds ✓ Seen and ⊘ Hide buttons to its top-right corner. This works by position rather than by Netflix’s class names, so it survives Netflix redesigns. The details window that opens when you click a title gets them too, top-left. The S/H keys and the right-click menu also work in both.
  • Turn off Netflix hover previews (settings page, under Matching). Netflix never sees the pointer over a tile, so tiles stay their normal size and the buttons stay where they are. Clicking a tile still opens it, and the S/H keys still work. (It works by stopping hover events at the top of the page, before Netflix’s own code sees them.)

The popup and the settings page

The popup (toolbar icon) has what you use while browsing:

  • the on/off switch for the whole extension;
  • Hide seen titles;
  • Turn off Netflix hover previews (the same setting as on the settings page);
  • Minimum IMDb votes (the same setting as on the settings page; available only while IMDb ratings are on);
  • Filter by IMDb rating, with minimum rating, which kinds of title to show, years, and genres to hide;
  • Check this page: opens a panel on the current streaming page listing every tile (see Page check);
  • All settings, which opens the settings page.

Your Seen and Hidden lists (search, move between lists, remove) and the tips on using tiles are on the settings page.

The settings page (All settings, or right-click the toolbar icon → Options) has everything, including your Seen and Hidden lists and setup you do once: matching options, IMDb ratings, genre and year filters, title cleanup, backups, import/restore, and keyboard shortcuts.

Temporary covers: Hide seen and the IMDb filter

Covers only apply while they’re switched on. Nothing is marked or saved as Hidden, and switching them off brings everything back immediately. A banner at the bottom-left of the page says what’s covering titles, how many tiles are covered, and has an Off button that turns all covers off.

  • Hide seen titles covers Seen titles (green-striped Seen ✓ card) instead of dimming them.
  • Filter by IMDb rating covers titles that don’t pass your rules (yellow-striped Filtered · … card showing the value and the rule it failed: ★ 6.1 < 7.0, 37 votes < 500, not on IMDb, 2001 < 2010, 2024 > 2020, or Horror · hidden genre):
    • Minimum rating (inclusive), for titles with at least your minimum votes;
    • Show few-vote titles (★ 6.2 (37)) and Show titles not on IMDb, each on or off. Few-vote titles that are shown aren’t judged by the minimum rating, since a handful of votes isn’t a meaningful rating. Tiles with no usable title count as not on IMDb;
    • Years from / to (blank = no limit; a series counts from the year it started), in the popup and on the settings page;
    • Hide these genres (IMDb’s genres), with Select all and Select none, in the popup and on the settings page. The heading shows how many are selected.

    A rated title must pass every rule you’ve set; few-vote and not-on-IMDb titles are shown according to their own options.

Your data: back up, restore, import

Data is stored locally in Chrome on this computer only.

  • Automatic backups (on by default): every N days (default 7) a backup of everything, including your settings and the backup schedule itself, is saved to a folder inside your Downloads folder (default Show No More backups; type a sub-folder such as Backups/Show No More, and it’s created if it doesn’t exist). The schedule is checked hourly, so a browser that was closed when a backup fell due catches up within the hour. The first one is made within an hour of installing or updating. Back up now makes one immediately. Each one shows briefly in Chrome’s downloads list.
    • Keep N earlier (default 5, 0 to 365): the latest backup is always kept, plus the newest backup from each of the N most recent earlier days that have one. Several backups on an earlier day count as one (only that day’s newest stays), days with no backup count as nothing, and other backups made on the same day as the latest are replaced by it. For example, with 3: backups on Monday (two), Wednesday, Thursday, Friday and Saturday keep Saturday plus Friday, Thursday and Wednesday; both Monday files go.
    • Old backups are deleted only after the new one has finished saving.
      Backups the extension made in an earlier folder are cleaned up by the same rule.
  • Restore (replace)… replaces everything with the contents of a backup file (automatic or manual): both lists, your IMDb matches and every setting in it, including the backup schedule and folder. It shows what the file contains and asks you to confirm first.
    Settings an older backup doesn’t have stay as they are. Titles are re-normalized on restore. Backups from version 1.0 (the old Export button) restore too.
  • Restore (merge)… adds a backup’s titles to your current lists instead of replacing them, then removes duplicates. Before saving it shows your counts now and after the merge, and asks you to confirm. Your settings aren’t changed; your IMDb matches are added (yours win where both have one).
    • Titles are compared after normalization, so “The Office (U.S.)” and “Office” count as the same title.
    • If a title is Seen in one and Hidden in the other, the more recently marked one wins.
    • The same title marked on two different services keeps both entries, since each matches its own site exactly. An Imported-list entry is dropped if a service entry already covers that title.
    • Merging the same backup twice changes nothing the second time.
  • Import list… adds titles from a file of your own to the Seen or Hidden list. Each title has the extension’s normalization applied, so “The Office (U.S.)”, “Office” and “the office” are all the same entry, and “Severance: Season 2” matches “Severance”.

Chrome closes the toolbar popup whenever a file picker opens, so the two Restore buttons and Import list… open the page in a full tab, where you pick the file.

Import list file formats

Plain text (.txt) — one title per line.
Blank lines and lines starting with # are ignored.

# Already watched
Stranger Things
The Office (U.S.)
Severance: Season 2

CSV (.csv or .tsv) — titles in the first column, or in a column headed title / name / show / movie. An optional state (or status / list) column sets each row individually: seen / watched / done, or hidden / hide / skip. Rows without a state go to the list you chose.

title,year,state
"Love, Death & Robots",2019,hidden
Dune: Part Two,2024,seen
Bluey,2018,

JSON (.json) — an array of titles, or of { "title": ..., "state": ... } objects.

["Andor", { "title": "Loki", "state": "hidden" }]

After an import, the popup reports how many titles were added, moved from the other list, already there, duplicates within the file, or unreadable.

How imported titles match. An imported title isn’t tied to one service, so it’s shown as Imported in the lists and matches by name on every supported service, even with cross-service matching turned off. Un-marking a tile that was matched from your list removes it from the list.

IMDb ratings

Turn on Show IMDb ratings on tiles (settings page) to put a small badge on each title. Hover it for the vote count, year, genres and which IMDb title it matched; click it to choose a different match or open the title on IMDb.

Each tile gets one of three badges:

Badge Meaning
★ 7.8 On IMDb, with at least your minimum votes
★ 6.2 (37) (muted) On IMDb, but rated by fewer people than your minimum; the number in brackets is the vote count
Not on IMDb (muted) No IMDb movie or series with that name has any ratings, or you set it as not on IMDb

Tiles with no usable title (for example, only an episode name) get no badge, since there’s nothing to look up.

  • Minimum votes (settings page, default 500): ratings from fewer votes are shown muted and count as “few-vote” in the filter.
    Change it any time; it applies straight away, with no download, because every rated title is kept locally.
  • Where the data comes from. IMDb’s free non-commercial datasets, offered for personal, non-commercial use. Don’t share or republish the downloaded data.
  • Off by default. Nothing is downloaded until you turn it on.
  • Update every N days. Set how often the data is refreshed (1 to 365 days, default 7). The extension checks hourly whether an update is due, so a computer that was asleep or off catches up soon after it wakes. Update now runs one immediately. Data from an older version is refreshed once automatically when its layout changes.
  • Polite. Before downloading, it asks IMDb (headers only) whether the files have changed. If they haven’t, nothing is downloaded. After a failed update it waits a few hours before trying again, and keeps showing the ratings it already has.
  • What it downloads and keeps. Each update downloads two files from IMDb, roughly 200 MB in total. They’re processed as they arrive, a chunk at a time, and never saved. What’s kept is a lookup of every rated IMDb movie and series (about 600,000): around 75–90 MB of disk, shown on the settings page. An update builds a fresh copy alongside the current one and switches over when it’s complete, so ratings keep working during an update and disk use briefly doubles. Measured on a dataset of IMDb’s size: about 75 seconds of processing per 4 million title rows (so roughly 2–3 minutes for IMDb’s ~11 million), using about 115 MB of memory at peak (memory stays about the same whatever the data size, because titles are written to disk in small batches as they’re found). Delete downloaded ratings removes the lookup.
  • Which IMDb types are kept. Only these four: movie, TV movie (both treated as movies), TV series and TV mini-series (both treated as series). Everything else in IMDb’s data is dropped while processing: short (anything IMDb lists under about 45 minutes, e.g. The Wonderful Story of Henry Sugar), TV special (most stand-up comedy specials and concert films), video (direct-to-video films), TV short, TV episode, video game, and anything marked adult. A title of a dropped type shows as Not on IMDb. To link one anyway, click its badge and paste its IMDb link. It’s then linked by IMDb ID, but has no rating in your local data, so its badge reads “IMDb (0)” and the filter counts it as few-vote. The list is KINDS in offscreen/offscreen.js.
  • How titles are matched. By name, using the same matching names as Seen/Hide. IMDb’s original titles are included, so La Casa de Papel and Money Heist both match. Where the site’s link says whether it’s a movie or a series (Apple TV, Disney+, Paramount+, Crave, CBC Gem), that’s used to pick the right one.
    Otherwise the most-voted title with that name wins.
  • “?” after a rating means another title shares the name and has a real following, for example The Office (US and UK). The tooltip lists the alternatives.
  • Never-rated titles. IMDb’s ratings file only lists titles someone has rated, so a title that’s on IMDb but has never been rated shows as Not on IMDb. If you know it’s there, click the badge and paste its IMDb link.

Choosing the IMDb match yourself

Click a rating badge to open the match chooser. It lists every IMDb movie and series in your local data that shares the tile’s name (with year, type, rating, votes and genres), with the current match outlined.

  • Click one to use it. Your choice applies to every tile with that name, on every service, and the badge gets a thin yellow ring.
  • IMDb ↗ opens that title on IMDb.
  • Paste an IMDb link or ID (e.g. https://www.imdb.com/title/tt0290978/) to use a title that isn’t listed.
  • Not on IMDb: the name counts as unrated (badge shows “IMDb –”).
  • Automatic forgets your choice.

Your matches are listed (and can all be forgotten) on the settings page, and are included in backups.

IMDb titles as identity

When a tile is confidently linked to an IMDb title (an unambiguous match, or one you chose), marking it stores that IMDb ID with the mark.
A mark with an IMDb ID matches the same title everywhere, even under a different name: mark Money Heist on Netflix and La Casa de Papel on Disney+ shows as seen (the tooltip says “Matched by IMDb title”). Unmarking either unmarks both. Two different titles that share a name no longer get mixed up once either is linked.

Marks you saved before this get their IMDb IDs filled in automatically: after each ratings update, and as you browse past them.

Page check

Check this page in the popup opens a panel listing every tile on the current page: the title read, its matching name, any mark (and why it matched), the IMDb match and rating, and whether it’s covered and why. Only problems narrows it to tiles with no matching name, no IMDb match, or an ambiguous one. Hover a row to highlight the tile; click to scroll to it. Copy puts the table on the clipboard to paste into a message or spreadsheet.

Keyboard shortcuts

  • Alt+Shift+F: IMDb rating filter on/off
  • Alt+Shift+S: Hide seen on/off
  • Alt+Shift+O: the whole extension on/off
  • On a tile: S = seen, H = hide

A short message on the page confirms each change. Change them at chrome://extensions/shortcuts (the settings page has a link). Chrome leaves a shortcut unset if another extension already uses it.

Supported sites

  • netflix.com
  • primevideo.com, plus Prime Video on amazon.com/gp/video and amazon.ca/gp/video
  • disneyplus.com
  • paramountplus.com (including /ca/)
  • crave.ca (English and French)
  • tv.apple.com
  • gem.cbc.ca

How titles are identified on the newer sites:

  • Apple TV uses its own title IDs (umc.cmc.…) from each title’s link. On Top 10 shelves, where the link text includes the rank and genre, the title is taken from the link’s address instead.
  • Paramount+ uses the show’s page name (/shows/yellowstone/) or the movie’s ID. Genre and category pages are ignored.
  • Crave reads the title from the data-media-title attribute on each tile’s link, and uses the title’s page address, ignoring the /en/ or /fr/ prefix, so English and French pages count as the same title.
  • CBC Gem reads the title from each tile’s heading and uses the title’s page address (/beirut) as its ID; season links (/steal/s01) count as the show. The tile’s hidden description (“110 min”, “5 seasons” or “Season 20”) says whether it’s a movie or a series.

Paramount+ and Crave were built from their link formats without seeing their live pages, so they’re the most likely to need adjusting.
If tiles on either site don’t get buttons, the fix goes in src/adapters.js.

Troubleshooting

Backups land in the downloads folder as download.json Another extension that renames downloads is overriding the backup’s name. Chrome forgets the name an extension asks for whenever any extension renames downloads, so that extension has to put it back. Download Router does this; for others, turn them off or check their settings.

Limitations

  • Site changes can break detection. Each service has its own small adapter in src/adapters.js (link patterns, tile containers, where to read the title). If a site redesign stops tiles from being recognized, that file is where to fix it.
  • Cross-service matching is by name. Different shows with the same name (e.g. The Office US vs. UK) will match each other. Turn matching off in the popup if that becomes annoying, or remove the wrong entry from the list.
  • Different IDs within one service. Some “Continue watching” rows link to an episode rather than the show. Title matching usually still catches these.
  • Browser only. It doesn’t change the services’ recommendations or anything in their TV/phone apps.

Files

manifest.json      Extension definition (Manifest V3)
background.js      Right-click menu; IMDb ratings schedule and lookups; IMDb IDs on marks;
                   automatic backups; keyboard shortcuts
src/normalize.js   Title cleanup + normalization for cross-service matching
src/imdb-match.js  Choosing the IMDb title for a tile (automatic or your choice)
src/store.js       Storage and mark logic
src/adapters.js    Per-service tile detection (edit here when a site changes)
src/content.js     Finds tiles, adds controls, applies Seen/Hidden
src/content.css    Dimmed / covered tile styling, rating badges
src/ratings-db.js  Local IMDb ratings lookup (IndexedDB)
offscreen/         Hidden page that downloads and processes IMDb's files
popup/             Toolbar popup
icons/             Extension icons
Download Release:
⬇️ Show No More.zip
(1 votes, average: 5.00 out of 5)

Leave a Reply

Your email address will not be published. Required fields are marked *

Notify me of followup comments via e-mail.