Back to projects

Personal projects2026

BiBoost - Overseas Video Speedup for bilibili

Open source

An open-source extension that makes Bilibili smoother overseas

Overview

An open-source, free-forever browser extension that makes videos and live streams on the web version of Bilibili (www.bilibili.com) play smoother for overseas users. Bilibili's default CDN routing is often suboptimal outside mainland China, causing buffering and slow load times. The extension dynamically rewrites the video and live-stream CDN host to the fastest node for the user's region, and automatically falls back to Bilibili's native backup node when it detects failed segment requests or playback stalls.

It supports every country worldwide: nodes for the listed countries (Taiwan, Singapore, Hong Kong, Japan, Australia, the US and more) are curated from real measurements by local users, and users anywhere else can build their own custom node list with the companion CDNSpeedTest desktop app. A single codebase ships to Chrome / Edge / Firefox / Safari with a five-language UI (Traditional Chinese / Simplified Chinese / English / Japanese / Korean).

Development is driven by community feedback — user input gathered continuously from Bilibili-related forums and communities decides the feature roadmap and fix priorities. Solely designed, built, published, and maintained end-to-end.

Key contributions

  • Independently set the product direction, shipping from zero to launch in just 2 days; ran zero paid advertising — growth came from actively posting and promoting the extension in Bilibili-related forums and communities, driving Weekly Active Users (WAU) past 1,000 within 9 days of launch

  • Weekly active users passed 10,000 within 83 days (under 3 months) of launch (10,706 on Oct 18, 2026), growing 28% week over week on average in the last 4 weeks with ~240 net new users per day. By chrome-stats' store-wide statistics, fewer than 0.1% of extensions reach 10k users within 3 months of launch, and this one already ranks above 97% of all Chrome Web Store extensions by user count

  • Accumulated 163 ratings, 4.9★ average, 98% 5-star (160 of them), including 106 with written feedback, with every rating on Edge and Firefox at 5 stars; I continue gathering feedback from those same forums and communities to prioritize fixes and drive the feature roadmap, forming a self-sustaining promote → collect feedback → iterate loop

Highlights

  1. 01

    Vibe Coding in a Single Weekend

    Entirely built with Claude Code as the coding agent — from architecture and implementation to store listing assets — designed, developed, and published within one weekend

  2. 02

    MAIN-world Injection Hooking fetch/XHR and JSON Property Setters

    Injects a Manifest V3 content script into the page's MAIN world to hook fetch/XMLHttpRequest and the setter of the playinfo object, rewriting the CDN host inside the playurl/DASH manifest in real time without disturbing the page's native behavior; adapted to how the web player actually behaves — rewriting playurl alone has no effect on a video that is already playing, so the extension rewrites the host of the segment (.m4s) requests directly

  3. 03

    Dual-World Bridge Architecture with a Message Trust Boundary

    Since the MAIN world has no access to extension APIs like chrome.storage/chrome.i18n, a bridge script running in the ISOLATED world communicates with the MAIN world via postMessage/localStorage to sync settings and localized strings; because any script on the page can forge a postMessage, messages that would persist settings (auto-test results, node switches) only accept CDN hosts from the current test run or the allowlist, preventing third-party scripts from permanently changing the user's node

  4. 04

    Automatic Fallback & Fault Tolerance

    Continuously monitors segment request status (403/404/5xx/timeout) and playback progress; on failure or stall (no progress and no network activity for 8 seconds) it silently switches to Bilibili's native backup node first, and only surfaces a prompt for the user to manually switch to a backup URL if that also fails

  5. 05

    Real-time Per-node Speed Test Tool

    A dedicated speed-test page that benchmarks download speed of each CDN node against the actual segment of the "current video, current quality" (capped at 8MB or 5 seconds, whichever comes first), without affecting the CDN currently in use; results are labeled by throughput as good for 8K / 4K / 1080P / 720P or likely to stutter, and the speed-test limits can be set with one-click Fast / Balanced / Accurate presets

  6. 06

    Live-stream Route Switching

    Intercepts FLV / m3u8 / fMP4 stream requests under /live-bvc/, parses the ov|cn-gotcha<cluster> host with a regex, and rewrites it to the user's preferred route (international / mainland China / their backups), then calls livePlayer.reload() to re-pull the stream inside the player without a full page reload; caches getRoomPlayInfo (including the SSR-injected roomInitRes) so a live room stays pinned to one node set, and falls back in place to the international route when a route is missing, failing, or stalled

  7. 07

    Live-stream Speed Test Model

    FLV is pushed at the stream bitrate, so throughput ≈ bitrate and reveals no headroom; instead the test measures two independent metrics — "channel-switch delay" (time from request to the first playable A/V tag / startup segments, averaged over N runs) and "sustained-viewing lag", computed with a playback-buffer model as the running max of max(0, wall-clock seconds − received media seconds) (Skorokhod reflection), using FLV tag timestamps or fMP4 #EXTINF durations; all probes use the native fetch to bypass the extension's own hook and leave the active route untouched

  8. 08

    Region-aware Routing & Auto Speed Switching

    Expanded the node list to ~300 nodes across 67 CDN pools; detects the user's country from the dial code returned by Bilibili's zone API and applies that country's top-10 nodes, diversified by CDN pool; after install or a country switch, the first video is benchmarked once in the background and the fastest node applied; an optional "auto-switch to fastest node" benchmarks in the background for each video and switches to the winner, using sessionStorage to skip already-tested videos and a generation counter so a manual test can preempt an in-flight auto test

  9. 09

    Crowdsourced Speed Test Desktop App (CDNSpeedTest) & Data-driven Node Curation

    A Python (tkinter + PyInstaller) Windows exe that lets overseas users benchmark nodes on their local network: concurrency is sized dynamically as "total bandwidth × 0.5 ÷ Bilibili per-connection speed" and used to estimate run time; when the system DNS isn't local it switches to Google DoH with the egress IP's /24 as ECS; detects VPNs via multiple signals (ip-api / proxycheck, the default-route network adapter, timezone mismatch); the Bilibili QR-login cookie is kept in memory only. Reports are collected via Google Apps Script into Google Sheets and Neon (Postgres); each country's default node and suggested list are then picked by an ISP-market-share-weighted "coverage" score over the accumulated reports, and an in-extension, per-country announcement board with speed-test giveaways keeps recruiting samples for under-covered ISPs

  10. 10

    Secure Cross-process Node Import

    Since browsers don't let external programs write to an extension's storage, I designed a #cdnsw-import= URL-hash deep link — the desktop app reads Chrome/Edge Preferences and Firefox extensions.json to find which browser profile has the extension installed, opens the deep link in that profile, and the extension writes the "Custom node list" itself; the background script only accepts nodes from a built-in allowlist so no arbitrary site can redirect video traffic to its own domain; the suggested list caps each CDN pool at 2 nodes so a single pool outage still leaves alternatives

  11. 11

    One-click Bug Report & Diagnostics Pipeline

    The in-extension report dialog automatically attaches the version, settings and the last 10 minutes of diagnostic events (node, speed, stalls and auto-switch history); a Cloudflare Worker (KV-based per-IP rate limiting) stores the full log in a private GitHub repo, opens a public issue so the user can track progress, and sends a confirmation email through Google Apps Script; the debug overlay shows buffer seconds, stall timer and the latest events in real time

  12. 12

    Reproducible Builds

    Pure Node.js build scripts (jszip + sharp + puppeteer) package the same source tree into Chrome/Edge/Firefox-specific zips; as long as the source is unchanged, the packaged zip bytes are byte-for-byte identical across builds and platforms

  13. 13

    Automated Store Asset Generation

    Uses Puppeteer to open a live Bilibili video page and the extension UI, cycles through the five locales to capture real raw shots, then uses sharp to compose four sets of store screenshots (Chrome / Edge / Firefox, Mac, iPhone, iPad) plus overview images

  14. 14

    Release Pipeline Automation

    A five-language changelog.json tracks both unreleased and per-version entries, and packaging strips unreleased items so unshipped features never leak; after an update the popup shows a one-time "What's new" notice; a git pre-push hook blocks pushes that don't update the changelog; Node.js scripts upload version drafts through the Chrome / Edge / Firefox store APIs, and a Claude Code skill orchestrates the full flow from version bump and release branch to five-language store copy updates and merge back to main

  15. 15

    Safari Web Extension (iOS + macOS)

    Built an Xcode project that references the same src/ manifest, JS, HTML, and locale files via relative paths instead of copying them, so all four browser platforms share a single codebase; submitted to the Mac App Store

  16. 16

    Forum-Driven Iteration & Growth Tracking

    Actively monitored user feedback and discussions across Bilibili-related forums and communities, synthesizing recurring pain points to prioritize fixes and drive the extension's feature roadmap; an automated growth report aggregates the three store dashboards, GA and speed-test samples to decide the next target market and which ISPs still need samples

Images

User Growth Chart (10,706 weekly users as of Oct 18, 2026; 1k / 5k / 10k reached on day 9 / 62 / 83 after launch)
User Ratings & Feedback (163 ratings, 4.9★ average, 98% 5-star, 106 with written reviews)
Before CDN switching
After CDN switching
Speed test page
Promo cover