Skip to content

About

Chrome video buffer-ahead controls, reversible HLS quality locks, playback diagnostics and a separate-tab viewer.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

BufferLift 0.1.6

Chrome Manifest V3 video buffering and quality controls for compatible exposed HLS.js engines, including supported Video.js and Plyr integrations.

Install or update

  1. Download BufferLift-Chrome.zip and extract it into a permanent folder.
  2. Open chrome://extensions and enable Developer mode.
  3. Click Load unpacked and select the extracted folder containing manifest.json.

Alternatively, download or clone this repository and select its root folder with Load unpacked. No build or dependency installation is needed to run the extension.

After an update, reload the extension and the entire video page. Old page scripts and private hooks from 0.1.5 cannot be removed merely by replacing files on disk.

Quality enforcement

Choose Lock 1080p if available, enable BufferLift, and Apply. On supported HLS engines this installs reversible guards on public quality properties. The next-download level stays at an advertised 1080p level, Auto downswitching is disabled, and conflicting lower-quality requests from the page are blocked. Size and FPS quality caps are disabled while the explicit lock is active and restored when it ends. The same mechanism supports highest/fixed quality choices.

This is stronger than changing the quality menu. The readout shows whether the download lock is active and the actual decoded video dimensions separately. Missing 1080p leaves the player's choice intact. Engines without configurable public quality controls report the lock as unsupported.

An existing queued 480p frame cannot become 1080p without replacing it. The lock affects new downloads; it does not pretend that already-buffered video has higher resolution. It cannot repair an unavailable/corrupt high-quality rendition, guarantee network bandwidth, or make a weak device decode 1080p smoothly. Reset returns to the captured player selection/Auto behavior.

Playback safety and reset

0.1.6 removes the experimental private getNextFragment / getMaxBufferLength overrides and direct private quality-controller manipulation. Video and audio fragment order is left to the engine. These changes reduce potential playback interference; they do not guarantee that a damaged source stream will play correctly.

Keep 1x speed and normal pitch is enabled by default while tuning an on-demand video. It keeps playbackRate and defaultPlaybackRate at 1 and enables preservesPitch, including if the page attempts a slowdown. Turn it off for intentional custom playback speed. Live/MediaStream playback is not subject to this automatic speed guard.

Reset to normal turns off tuning, removes quality guards, restores captured buffer/cap settings, clears this player origin's saved choices, and restores 1x speed and pitch preservation. It does not seek, pause/play, reload, or discard queued media. If earlier hooks or damaged source fragments have already poisoned the decoder/queue, manually reload the video page after resetting.

Diagnostics include playback rate, pitch state, and dropped/total frame counts. Distortion that persists at 1x with preserved pitch may need further decoder/stream diagnostics; the extension does not claim to repair every audio defect.

Buffer controls

Choose 50/60/120/300 seconds and Keep player's byte target or an explicit 32/64/128/256 MB target. Native HLS configuration is used, with no interception of private fragment selection. Whole fragments can overshoot the time goal. The byte value is an HLS buffering hint, not a hard browser memory quota. Player reductions after a full-buffer condition are respected.

While paused without Fill extended buffer while paused, native goals are not raised beyond the captured site values, and the selected time ceiling still bounds those settings. This does not flush existing data. Known VOD playlist metadata takes priority over a temporarily infinite MediaSource duration; this fixes a case that could skip tuning in older Plyr/HLS integrations.

Preferences are remembered but activation is per page. New pages and viewer tabs start off; Apply is required. Manual/optional recovery calls only a compatible stopped loader API, never synthetic arrow keys or a seek.

Viewer and diagnostics

The separate viewer uses the same iframe URL and a tab-scoped, session-only rule to preserve the original HTTP referrer. Sites can still detect a different top-level context or apply cookie/embedding restrictions. Opening a viewer alone does not improve bandwidth. Pause the original player yourself to avoid duplicate streams.

Fragment diagnostics record a bounded last-60-event trace of quality, timings, discontinuities, timeouts, emergency downswitches, full-buffer errors, and FPS caps. Copy diagnostics after a problem. No signed media URLs, raw response bodies, or browsing-history log is retained.

Validation

31 dependency-free tests pass. Chrome integration verifies popup Apply, enforced quality requests, reset, preferences, viewer rules, and restoration.

A real A/V regression uses locally encoded 480p/1080p H.264/AAC clips with a 440 Hz tone and a playlist discontinuity. It has been run locally against Video.js/HLS.js 1.5.7 and Plyr/HLS.js 0.7.6. Both decoded at 1080p, blocked attempted lower/Auto selection, retained 1x/preserved pitch, and produced a spectral peak near 440 Hz with no reported corrupted video frames. It also checks native buffer goals, frame-drop counts, reset without a seek, and no lower-resolution media requests after activation. Outbound requests are blocked in this isolated local fixture.

These clips validate actual decoding, rather than merely changing a menu. They do not prove that every live source is healthy. Custom P2P loaders and real server traffic are not reproduced in the test.

Run npm test with Node.js 20 or newer for the dependency-free unit tests. Optional browser tests need Playwright, Chrome and local fixtures; see testing notes. scripts/build.ps1 packages only runtime files and this README into BufferLift-Chrome.zip beside the repository folder. Local player pages, test libraries, encoded clips, downloaded encoders and browser profiles are excluded from both the repository and install ZIP.

Permissions

Storage remembers local preferences; activeTab helps identify the originating page; optional player-host access and declarativeNetRequestWithHostAccess support the viewer's exact iframe referrer rule. HTTP(S) content-script matches are needed inside cross-origin embeds. There are no analytics, remote runtime scripts, video uploads, proxy changes, or certificate changes.

About

Chrome video buffer-ahead controls, reversible HLS quality locks, playback diagnostics and a separate-tab viewer.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages