Polymorph

September 20, 2026 · View on GitHub

All projects · Browser extensions

Chrome extension that collapses posts matching English rules you wrote, replacing them with your own images or GIFs. TypeSafe Jev (via OpenRouter Decisions, typesafe/jev-1.13) is the judge; nothing is deleted—Show original restores the post.

At a glanceDetails
SourceSource
TagsOpen source · Free source build · BYOK
Product homepageProject homepage
Pricing and accessBuild and load unpacked; no app purchase fee. Bring an OpenRouter API key; each judged post can incur provider charges. Not on the Chrome Web Store. Reviewed 2026-09-20.
Jev evidencesrc/jev/client.ts and src/defaults.ts POST Choice questions to https://openrouter.ai/api/alpha/decisions with model typesafe/jev-1.13; gate thresholds in code.
DisclosureAI-assisted catalog review; no affiliation with the maintainer. Listing is not an endorsement. Source inspected; Chrome installation and live feed judging were not tested.
Maintainermoomooskycow. Independently curated.
FormatTypeScript Manifest V3 Chrome extension (0.3.0), Vite build, Vitest suite.
Platform and availabilitySource-built Chromium extension (Developer mode → Load unpacked → dist/). Default allowlist: X, Reddit, Hacker News, YouTube.
Jev's roleJudges whether a post's visible text matches an enabled English rule; extension UI hides/replaces matches. Fail-open on errors.
RequirementsChromium; Node/pnpm to build; OpenRouter API key in extension Options.
LicenseMIT.

When to use

Use it as a personal filter that turns matching posts into your media while keeping one-click restore. Prefer Unclutter for broader page-clutter hide rules, or TypeSafe Fun AdBlocker for experimental ad-shaped DOM judgments. Example rules ship off.

How it works

  1. Content script observes allowlisted feeds and extracts visible post text (capped; no author ids/HTML/cookies in the default state builder).
  2. Background worker calls OpenRouter Decisions with typesafe/jev-1.13 Choice questions per enabled rule (src/jev/).
  3. On a match above gate probability/confidence, the extension swaps in a replacement card (your IndexedDB media library or a compact collapse card). Failures leave the post visible.

Get started

git clone https://github.com/moomooskycow/polymorph.git
cd polymorph
git checkout 3290af04a0aadca0c8841bd27cdaeb92e8c837fa
pnpm install
pnpm build
pnpm test

Chrome → chrome://extensions → Developer mode → Load unpacked → dist/. Options: paste OpenRouter key, enable a rule, optional media. Live judging sends post text to OpenRouter and can incur charges. This listing did not load the extension in Chrome or call live Decisions.

Examples and demos

  • Three example rules in Options (disabled by default).
  • Offline Vitest coverage under src/jev/*.test.ts and pnpm test.

Limits and data handling

Visible post text (bounded) goes to OpenRouter for Jev judgments; the key stays in chrome.storage.local and is used only against openrouter.ai per upstream. Replacement media stays in IndexedDB locally. Not a store-listed product; personal daily-driver framing. Upstream accuracy claims were not reproduced here.

Review and maintenance

Reviewed on 2026-09-20 at commit 3290af0: 0.3.0, MIT. AI-assisted source review of README, src/defaults.ts, src/jev/client.ts, package metadata, and license. pnpm test / Chrome load / live OpenRouter were not executed on the review host.

Related: Unclutter, TypeSafe Fun AdBlocker, Xtags.