Find TUF matches from YouTube and Bilibili videos,
inspect level and pass details in an injected drawer,
and open Web ADOFAI directly from TUF level pages to view levels.
This repository contains the source tree for TUFExtension.
TUFExtension is an unofficial browser extension for viewing The Universal Forums data directly inside video pages.
- Resolve TUF levels from YouTube / Bilibili video URLs
- Resolve TUF passes / clear videos
- Render an injected drawer UI isolated with Shadow DOM
- View TUF levels in Web ADOFAI from TUF level pages
- Use the current TUF login session for level likes
- Build and package Chrome / Firefox releases
| Feature | Description |
|---|---|
| Video matching | Searches TUF levels and passes from the current YouTube / Bilibili video ID. |
| Injected drawer | Renders an in-page drawer instead of relying on Chrome's side panel API. |
| Level detail | Shows difficulty, PP, tags, curation, stats, and leaderboard in a TUF-like UI. |
| Pass detail | Shows player, score, accuracy, speed, judgements, and spoiler reveal controls. |
| Web ADOFAI viewer | Adds a floating button on TUF level pages that opens the level in Web ADOFAI. |
| Likes | Reads and toggles level likes through the current TUF login session. |
| Pin mode | Keeps the drawer open across navigation and updates results live. |
| Chrome / Firefox package | Builds and packages browser-specific extension zips with WXT. |
.
├── src/
│ ├── entrypoints/
│ │ ├── background/ # WXT background service worker entrypoint
│ │ └── content/ # WXT content script entrypoint
│ ├── platform/
│ │ ├── chrome/ # Runtime messaging and extension context helpers
│ │ └── content-script/ # Host-page integration, URL watching, button anchors
│ ├── domain/
│ │ ├── tuf/ # TUF API clients, mappers, filters, domain types
│ │ └── video/ # YouTube / Bilibili video reference parsing
│ ├── features/
│ │ ├── drawer/ # Drawer state and data-loading hooks
│ │ └── tuf-button/ # Injected TUF button rendering
│ ├── drawer/
│ │ ├── components/ # Drawer-level controls
│ │ ├── features/
│ │ │ ├── level-page/ # Level detail UI and leaderboard
│ │ │ └── pass-page/ # Pass detail UI and spoiler controls
│ │ └── shared/ # Drawer visual helpers, icons, formatters
│ ├── shared/ # Cross-runtime utilities
│ └── styles/ # Tailwind entrypoint
├── public/ # Extension icons, fonts, static assets
├── .github/workflows/ # CI and release workflows
├── wxt.config.ts
└── package.json
bun install
bun run devAfter starting the dev server, load the WXT-generated development extension from your browser's extension management page.
.output/chrome-mv3
Use the Firefox dev mode when working against Firefox:
bun run dev:firefox| Command | Description |
|---|---|
bun run dev |
Run Chrome MV3 dev mode |
bun run dev:firefox |
Run Firefox dev mode |
bun run build |
Build Chrome MV3 production |
bun run build:firefox |
Build Firefox production |
bun run zip |
Create a Chrome release zip |
bun run zip:firefox |
Create a Firefox release zip |
bun run typecheck |
Run TypeScript noEmit check |
bun run format |
Format files with Prettier |
bun run format:check |
Check formatting with Prettier |
Run the same baseline checks used by PR CI:
bun run format:check
bun run typecheck
bun run buildBranch naming and commit message conventions are documented in CONTRIBUTING.md.
All code in this repository is licensed under GNU GPL. Please refer to LICENSE.
This repository distributes Pretendard by Kil Hyung-jin, licensed under the SIL Open Font License. Please refer to public/fonts/LICENSE.txt.
This repository includes optimized Twemoji SVG flag assets from @twemoji/svg, licensed under the MIT License. Please refer to public/twemoji/LICENSE.txt.