Back to all writing
Project Log

Bilibili-oversea: Browser 2.5.1 and Mobile 0.5.5 Candidate

GitHub

A local Bilibili CDN routing tool: browser v2.5.1 is available in the Chrome Web Store for Chrome and Edge, with a ZIP fallback. Mobile v0.5.5 remains a candidate awaiting physical-device validation.

Install / Browser 2.5.1 · Mobile 0.5.5 Candidate

Choose your device.

The browser and mobile editions are separate implementations. Measurement, routing, and state handling all happen on your device.

Some videos may still start slowly. This delivery has limited validation and cannot guarantee smooth playback for every video.

01 / Browser · v2.5.1

Chrome / Edge

Version 2.5.1 is publicly available in the Chrome Web Store for Chrome and Edge. No Developer mode, proxy, or certificate is required. The ZIP remains a fallback.

02 / iPhone · iPad · v0.5.5 Candidate

Network-tool modules

Version 0.5.5 is a mobile-media candidate awaiting physical-device validation. The first ordinary bilivideo, exact Akamai, and MCDN video or audio request now directly prefers 08ct, with bounded fallback retained. Choose one existing client and import one module only. The project provides no proxy nodes or subscriptions.

Read the mobile setup and certificate notes
03 / Optional automation

Connect when Bilibili opens

The signed shortcut only calls the native iOS “Connect VPN” action. It is optional, and you still create the personal automation yourself.

Download signed shortcut
04 / Mobile local controls

Control and recovery

The v0.5.5 local script intercepts these dedicated paths. A 404 from the real website means the local control script did not match the request and is not a success.

Guide / Chrome · Edge · v2.5.1

Browser edition: install from the store.

Version 2.5.1 is publicly listed, but is not a fully accepted stable release. It prefers a recent trusted cache, otherwise starts from the commonly used 08CT route, keeps a healthy route, rotates through a bounded set after real failures, and performs conditional light checks only after safe buffering.

01

Open Bilibili-oversea in the store

Open the link below in desktop Chrome or Edge and check the name Bilibili-oversea. Edge uses the same Chrome Web Store listing; a separate Edge Add-ons listing is not available yet.

02

Keep only one version enabled

If you use an unpacked ZIP or an older candidate, disable it in the extension manager before installing the store edition. Keep the old folder for rollback. Also disable other Bilibili CDN-switching extensions to avoid duplicate handling. First-time users can continue to the next step.

03

Confirm installation in your browser

Google Chrome

  1. Select “Add to Chrome”.
  2. Review the permissions, then select “Add extension” to confirm.

Microsoft Edge

  1. If prompted, allow extensions from other stores.
  2. Select the store's install button, review the permissions, and choose “Add extension”. Developer mode is not needed.

If the store is unavailable, use the ZIP fallback below.

04

Refresh the video page and check v2.5.1

Refresh any open Bilibili video page, then select the toolbar icon. Confirm version 2.5.1 and inspect playback and actual-route status. The extension does not open its panel automatically after installation; this is expected.

ZIP fallback installation and SHA-256

Use this only when you need a manual installation. Fully extract the download into a stable folder containing manifest.json, src, and assets. Do not load the ZIP itself.

Enter chrome://extensions or edge://extensions in the address bar, enable Developer mode, select “Load unpacked”, and choose the folder containing manifest.json. Keep only one version enabled and refresh the video page.

Chrome · Load unpacked · Edge · Sideload an extension

FAQ

Four common questions

How do I update or roll back?

The browser manages updates for the store edition. To return to a retained ZIP, disable the store edition first, load the old folder using the fallback instructions, and refresh the video page. Never enable both copies; v2.2.0 remains only as a historical record.

Why is 08CT commonly used?

Automatic mode prefers a recent trusted cache; otherwise it starts from 08CT. A healthy route is retained, while a disabled or evidenced-failing 08CT may fall back to the original route. It is not claimed to be the fastest result of a benchmark on every play.

What does “not measured” mean?

It only means there is no matching measurement evidence; it does not mean unusable or never attempted. The 500-plus catalog entries are neither all tested on every play nor all guaranteed available. Route selection, a real media response, and sustained playback are distinct states.

What should I do if playback stalls?

On the affected video page, open the panel and use “Copy diagnostics”; keep the version, quality, and symptoms. Then compare with the original route or with the extension disabled. Copying does not upload anything, and you do not need repeated retests or seeking to prove success.

Status, manual controls, and verification meanings

Panel and manual controls

Automatic mode restores automatic routing; a manual retest is an extra comparison you explicitly request; Original route removes redirection for the current tab. A manual choice, the actual current route, and availability evidence are separate states.

How to read actual state

Use the panel's actual media route, real responses, and playback state. Anonymous preconnect performs only DNS/connection setup without a media path, signature, or cookie; it is not a successful measurement. Pre-first-frame fault recovery itself does not add a benchmark or rebuild the player.

Release notes and validation scope

Version 2.5.1 freezes the r19 runtime. In the limited rerun, two own short videos completed at their highest available AVC 1080P60 tier without a recorded target stall; first displayed frames were 6.385 / 11.139 seconds. The sample is too small for a universal speed claim. Full acceptance still did not pass, and long videos, close-and-reopen behavior, the final native panel/BFCache, and physical iPhone testing were not covered.

Permissions, traffic, and privacy

Browser permissions and data boundaries

  • Permissions are activeTab, declarativeNetRequestWithHostAccess, storage, and webRequest. Host access is limited to Bilibili pages, media hosts, and the exact upos-hz-mirrorakam.akamaized.net host; it does not request proxy, cookie, browsing-history, or all-sites access.
  • Settings and time-bounded measurement summaries stay locally. Full media URLs and signatures are handled temporarily in the current tab and background, never persisted. “Copy diagnostics” is redacted and does not upload automatically.
  • Normal playback, measurements, and fallback attempts still expose the ordinary IP, media path, and request signature to the media CDN. Conditional checks after safe buffering and manual retests may add traffic. “No upload to the developer” does not mean “no network access.”
Help and diagnostics

Preserve facts, then compare

Record the version, video, quality, time, and symptoms, then copy one redacted diagnostic. Compare with the original route or the extension disabled. For store-installation issues, check the browser and store messages first. If a ZIP fallback reports a damaged extension, fully extract it again and load the directory containing manifest.json. Do not replace real playback observation with repeated seeking or constant retesting.

Guide / iPhone · iPad · v0.5.5 Candidate

Mobile-media candidate: install and complete one five-step check.

Version 0.5.5 uses desktop-like-passive-first: the first ordinary bilivideo, exact Akamai, and MCDN video or audio request directly prefers 08ct while respecting a custom route, without waiting for a benchmark or original-route reference before playback. The delivery reports 63 local Node/VM mobile regression checks and a final 8 control rechecks passing. This is delivery automation evidence, not physical-device playback acceptance. playbackHealthObservable: false, inFlightRecoverySupported: false, and physicalIPhoneAcceptancePassed: false, so this does not establish that real-phone stalls improved.

01

Disable the old copy and import the v0.5.5 candidate

Use only one client you already have: Surge, Loon, Shadowrocket, Stash, or Quantumult X. Disable the old module and retain it for rollback, then import v0.5.5 with the matching button above. Enable only v0.5.5 and never enable multiple versions together. Quantumult X still requires a manual merge.

02

Reapply the profile and confirm your own CA

In Shadowrocket, open Config → the currently checked profile → Use Config, then confirm that all four scripts actually referenced by the module come from mobile-0.5.5. If your own CA is already installed and fully trusted, do not reinstall it; keep HTTPS Decryption/MITM enabled. All HTTPS traffic for the exact limitedrush.online hostname is decrypted locally, while only dedicated /bili-cdn-auto/ paths execute controls.

03

Reconnect and check local status

Disconnect and reconnect the client. Only if it was previously in a fixed or original mode, open “Automatic mode” above once, then return to the read-only “View status” page. Automatic mode resets state and must not be repeatedly used as a status page. “Retest” only schedules an explicit review on the next video request; the control request itself does not measure. A successful local JSON response must contain ok: true, local: true, service: "bili-cdn-auto", and controlVersion: "0.5.5" together. A real-site 404 is not success, and successful local control still does not prove the media script ran.

04

Play a not-fully-cached video for 30–60 seconds

You may play the user-reported BV1HrHC6SEEc or another previously stalling, not-fully-cached video for 30–60 seconds, and observe speed and recovery after buffered content is exhausted; extensive repetition is unnecessary. The first media request directly prefers 08ct without waiting for a benchmark or original-route reference before playback; this is only URL-routing behavior. The mobile script cannot observe app buffer or frame progress and cannot cancel or directly recover an in-flight download that is already stuck.

05

Refresh status and save track-specific diagnostics

Refresh the read-only “View status” page; it neither writes cache nor starts a measurement. Video and audio remain separate in videoDiagnostics and audioDiagnostics, so a later audio request does not overwrite the video record. A track that has not run in the new version or cannot be attributed remains null; use videoDiagnostics.streamCode to check video classification. Confirm that the new request has videoDiagnostics.mediaVersion set to 0.5.5, then inspect videoDiagnostics.routingPolicy, videoDiagnostics.reason, videoDiagnostics.routeProvisional, videoDiagnostics.verificationBasis, videoDiagnostics.referenceVerified, videoDiagnostics.probeRangeStart, videoDiagnostics.nextReviewAt, and videoDiagnostics.decisionCompletedAt within that track. These track-specific fields describe URL decisions, not media-transfer completion or real-time buffering. Then consider the top-level scores fields resourceTag, stage, sampledAt, rangeStart, rangeValidated, capacityKnown, and verified; the list does not automatically belong to the latest video. Top-level media fields still describe the latest request, so the latest audio request cannot replace the video assessment. A lastResponseStatus of 200 or 206 does not prove sustained-speed recovery or stall-free playback.

Optional: personal automation and shortcut

Install the signed shortcut

The shortcut only uses the native iOS “Connect VPN” action. On first run, choose the correct existing profile yourself; verify the selection when multiple VPNs exist.

Create an “App is opened” personal automation

In Shortcuts, create a personal automation triggered when Bilibili opens, run the shortcut above, and choose immediate execution if your iOS version offers it. Menu wording may vary by system version.

Candidate mechanics, privacy, troubleshooting, and rollback

How media candidates are verified

desktop-like-passive-first makes the first ordinary bilivideo, exact Akamai, and MCDN video or audio request directly prefer 08ct while respecting a custom route; it does not wait for a benchmark or original-route reference before playback. The first route is provisional and does not fabricate verified state or scores. A stable route is retained for the same resource. The video cache holds at most 8 resources for 5 minutes; expiry reviews the current route first rather than forcing 08ct, and failed resources remain isolated.

An HTTP 403, 404, 416, or 429 sends a later request into the bounded fallback queue immediately. A 5xx response requires two consecutive failures within 30 seconds by default, while 200/206 clears the count; exhaustion returns to the original route. Audio does not benchmark, race video, or run timed review. Video review is triggered by the next request after 15 seconds. A qualified route remains valid for 45 seconds, while a slow or tail sample remains valid for 15 seconds. Review samples the current route with 512 KiB without requesting an original Akamai reference and tests at most two fallbacks after a slow or failed sample. A hedge may start at 750 ms, but validation still waits until the current route completes or the shared 1950 ms budget expires.

A complete 512 KiB sample, at least 3200 kbps, a fallback at least 1.5 times faster, and a 30-second cooldown are only heuristics for this decision round, not the video's bitrate, sustained bandwidth, or a guarantee of smooth physical-device playback. Review may still add about two seconds of waiting and traffic. When both the current route and a fallback have samples, their returned range, total length, and reference bytes must match; a known mismatch is rejected. If the current route has no sample, a fallback that passes HTTP 206/Range validation and the capacity threshold may be selected provisionally, but cannot be marked verified. Review no longer requires an original Akamai reference.

How to read media state

videoDiagnostics.routingPolicy should be desktop-like-passive-first in this release. Primary videoDiagnostics.reason values include preferred-route-direct, stable-resource-route, http-failure-priority-fallback, current-route-reviewed, and range-qualified-fallback. videoDiagnostics.routeProvisional marks a route whose compatibility validation is incomplete. videoDiagnostics.verificationBasis may be none, range-only, or current-route-byte-match. videoDiagnostics.referenceVerified now describes compatibility between the current-route and fallback samples, not an original-route Akamai reference.

videoDiagnostics.probeRangeStart is the sample start, videoDiagnostics.nextReviewAt is the earliest time a later request may review the route, and videoDiagnostics.decisionCompletedAt only marks completion of the URL decision; none means media transfer completed. Top-level scores is the most recent sample list. Interpret resourceTag, stage, sampledAt, rangeStart, rangeValidated, capacityKnown, and verified together; it does not automatically belong to the latest video. A lastResponseStatus of 200 or 206 records only HTTP status and does not prove sustained speed or stall-free playback. The three false flags state that the script cannot observe app buffering, cannot directly recover an in-flight download, and has not passed physical-device acceptance. If there is no v0.5.5 video record, confirm the new module, active profile, HTTPS decryption, and your own trusted certificate.

Media-probe and local-diagnostic boundaries

Version 0.5.2 added the template-listed upos-*-mirror*.bilivideo.com, upos-tf-all-hw, and upos-tf-all-tx families to media-candidate decryption while retaining the original Akamai, mcdn, cn-hk, and exact website host. Version 0.5.5 does not expand this scope or add account or playback API domains. All HTTPS traffic for the exact limitedrush.online hostname is decrypted locally, while only dedicated /bili-cdn-auto/ paths execute controls. Diagnostics remain local, do not retain the original signed URL, query, or sample bytes, and are not uploaded. Probes send the original media path and signed query, copy only necessary User-Agent, Referer, Origin, and Accept headers, and omit the original Cookie, Authorization, or Proxy-Authorization. Actual cross-host rewrites also strip these three authentication headers. This does not mean every request is cookieless, and no global cookieless claim is made for the original route.

Return to the original route or older version

If the experience worsens, use “Original CDN” above once if needed, exit the video, and reopen it; switching does not cancel a download already in progress. You can also disable v0.5.5, enable a retained v0.5.4, v0.5.3, v0.5.2, v0.5.1, or v0.5.0 module, and reapply the profile. The v0.5.0 status address may still be limited by .invalid resolution.

Remove completely

Delete the personal automation and shortcut, and remove the module from the client. If no HTTPS decryption feature still needs it, remove the certificate profile and stop the VPN.

Current versions

Bilibili-oversea addresses cases where the same video behaves very differently across Bilibili media CDNs. Route observation, selection, and switching happen locally on the device. The current browser edition is v2.5.1 with its r19 runtime frozen for this delivery. The separate iPhone / iPad edition is the v0.5.5 media candidate. Ordinary bilivideo, exact Akamai, and MCDN video and audio now use unified direct preferred routing with bounded later review (playbackPolicyChanged: true).

Browser installation updated October 19, 2026; the mobile candidate notes remain from October 7, 2026. Some videos may still start slowly. This delivery has limited validation and cannot guarantee smooth playback for every video.

Install the browser edition from the store

Open Bilibili-oversea in the Chrome Web Store in desktop Chrome or Edge and confirm installation. If Edge asks, allow extensions from other stores; Developer mode is not needed. A separate Edge Add-ons listing is not available yet. Disable an existing unpacked ZIP or older candidate first, keep only one version enabled, then refresh Bilibili and check v2.5.1.

If the store is unavailable, the detail page retains the original package, checksum, and manual steps under ZIP fallback installation and SHA-256. Store review does not establish full playback-performance acceptance.

How browser v2.5.1 works

Automatic mode prefers a recent trusted network cache. Without one, it starts from the commonly used 08CT route. A healthy route is retained instead of benchmarking the 500-plus catalog entries for every video. Real media failures provide evidence for bounded rotation, with the original route available when needed. Conditional light review can run after the player has safe buffer; manual measurement remains an explicit user action.

A selected route, a real media response, and sustained successful playback are distinct states. “Not measured” only means there is no matching measurement evidence; it does not mean unusable or never attempted. Anonymous preconnect is not a benchmark either: it can set up DNS and a connection without a media path, signature, or cookie.

In the limited rerun, two own short videos completed at their highest available AVC 1080P60 tier without a recorded target stall; first displayed frames were 6.385 / 11.139 seconds. The sample is small and full acceptance still did not pass, so it does not support claims that every node is fastest, every video is smooth, or performance is universally better.

Mobile v0.5.5 candidate boundaries

Mobile works through the local scripting capabilities of Surge, Loon, Shadowrocket, Stash, or Quantumult X. desktop-like-passive-first makes the first ordinary bilivideo, exact Akamai, and MCDN video or audio request directly prefer 08ct while respecting a custom route; it does not wait for a benchmark or original-route reference before playback. The first route is provisional and does not fabricate verified state or scores. A stable route is retained for the same resource. The video cache holds at most 8 resources for 5 minutes; expiry reviews the current route first rather than forcing 08ct, and failed resources remain isolated.

An HTTP 403, 404, 416, or 429 sends a later request into the bounded fallback queue immediately. A 5xx response requires two consecutive failures within 30 seconds by default, while 200/206 clears the count; exhaustion returns to the original route. Audio does not benchmark, race video, or run timed review. Video review is triggered by the next request after 15 seconds. A qualified route remains valid for 45 seconds, while a slow or tail sample remains valid for 15 seconds. Review samples the current route with 512 KiB without requesting an original Akamai reference and tests at most two fallbacks after a slow or failed sample. A hedge may start at 750 ms, but validation still waits until the current route completes or the shared 1950 ms budget expires.

A complete 512 KiB sample, at least 3200 kbps, a fallback at least 1.5 times faster, and a 30-second cooldown are only heuristics for this decision round, not the video's bitrate, sustained bandwidth, or a guarantee of smooth physical-device playback. Review may still add about two seconds of waiting and traffic. When both the current route and a fallback have samples, their returned range, total length, and reference bytes must match; a known mismatch is rejected. If the current route has no sample, a fallback that passes HTTP 206/Range validation and the capacity threshold may be selected provisionally, but cannot be marked verified. Review no longer requires an original Akamai reference.

The delivery reports 63 local Node/VM mobile regression checks and a final 8 control rechecks passing. This is delivery automation evidence, not physical-device playback acceptance. playbackHealthObservable: false, inFlightRecoverySupported: false, and physicalIPhoneAcceptancePassed: false, so this does not establish that real-phone stalls improved.

A short check has five steps: disable the old module and retain it for rollback, import one v0.5.5 candidate, and enable only v0.5.5; reapply the current profile and confirm that all four scripts actually referenced by Shadowrocket come from mobile-0.5.5—an already fully trusted CA does not need reinstallation; disconnect and reconnect, use Automatic mode once only if the client was previously in a fixed or original mode, then refresh read-only status and confirm that local JSON contains ok: true, local: true, service: "bili-cdn-auto", and controlVersion: "0.5.5" together; play a previously stalling or not-fully-cached video for 30–60 seconds and observe speed and recovery after buffered content is exhausted without extensive repetition; finally refresh read-only status again and save its JSON. Automatic mode resets state and must not be repeatedly used as a status page. “Retest” only schedules explicit review on the next video request; the control request itself does not measure. Quantumult X still requires a manual merge.

A real-site 404 means the local script did not match. Video and audio remain separate in videoDiagnostics and audioDiagnostics, so a later audio request does not overwrite the video record. A track that has not run in the new version or cannot be attributed remains null; use videoDiagnostics.streamCode to check video classification. videoDiagnostics.routingPolicy should be desktop-like-passive-first; primary videoDiagnostics.reason values include preferred-route-direct, stable-resource-route, http-failure-priority-fallback, current-route-reviewed, and range-qualified-fallback. videoDiagnostics.routeProvisional marks a route whose compatibility validation is incomplete; videoDiagnostics.verificationBasis may be none, range-only, or current-route-byte-match; videoDiagnostics.referenceVerified now describes compatibility between the current-route and fallback samples, not an original-route Akamai reference. videoDiagnostics.probeRangeStart, videoDiagnostics.nextReviewAt, and videoDiagnostics.decisionCompletedAt describe URL decisions rather than media-transfer completion. Top-level scores is the most recent sample list. Interpret resourceTag, stage, sampledAt, rangeStart, rangeValidated, capacityKnown, and verified together; it does not automatically belong to the latest video. Top-level media fields still describe the latest request, so the latest audio request cannot replace the video assessment. A lastResponseStatus of 200 or 206 records only HTTP status and does not prove sustained-speed recovery or stall-free playback. Status is read-only: it neither writes cache nor starts a measurement. These diagnostics are not real-time player buffering.

Security and privacy boundaries

  • Browser permissions are limited to activeTab, declarativeNetRequestWithHostAccess, storage, webRequest, and the necessary Bilibili media hosts. It does not request proxy, cookie, browsing-history, or all-sites access.
  • Settings, caches, and status remain locally. Full media URLs and signatures are handled temporarily in the current tab and background. “Copy diagnostics” is redacted and does not upload automatically.
  • Normal playback, measurements, and fallback attempts still expose the ordinary IP, media path, and request signature to the media CDN. Conditional review and manual retests may add traffic.
  • On iOS, use only a CA generated by your own client. All HTTPS traffic for the exact limitedrush.online hostname is decrypted locally, while only dedicated /bili-cdn-auto/ paths execute controls. The template-listed media-candidate decryption families were added in v0.5.2; v0.5.5 does not expand that scope or add account or playback API domains.
  • Mobile diagnostics stay locally, retain no original signed URL, query, or sample bytes, and are not uploaded. Candidate probes send the original media path and signed query and copy only necessary User-Agent, Referer, Origin, and Accept headers; they omit the original Cookie, Authorization, and Proxy-Authorization. Actual cross-host rewrites also strip these three authentication headers. This does not mean every request is cookieless, and no global cookieless claim is made for the original route.
  • The tool does not bypass copyright, regional, login, membership, or platform-signature restrictions.

Maintenance and recovery

The browser manages updates for the store edition. To return to a retained ZIP, disable the store edition first, load the old folder using the fallback instructions, and refresh the video page. Keep only one version enabled. For a stall, copy one redacted diagnostic before comparing with the original route or the extension disabled. If the mobile experience worsens, use Original CDN once if needed and exit and reopen the video, or disable v0.5.5, enable the retained v0.5.4, v0.5.3, v0.5.2, v0.5.1, or v0.5.0 module, and reapply the profile. Switching does not cancel an in-progress download, and the v0.5.0 status address may still fail because of .invalid resolution. The detail page keeps the complete setup, release, privacy, and diagnostic references.