Local browser workflow

Local YouTube Tap Observation Surface

Focus the surface, tap one chosen pulse, then stop and review.

An amber pulse lantern with aqua and lavender tap constellations.

YouTube tap BPM finder

Enter a value. The result updates while you type.

capture and calculation stay in ephemeral page memory; no URL, embed, fetch, YouTube API, player read, video or audio download/parsing, microphone, upload, account, database, analytics-value event, or persistent history No sign-in or ads.

Result

Start entering values to see the result.

Place this surface beside playback you control

This YouTube tap BPM finder listens only to your taps. Open a video you are authorized to watch in another window or device, select a pulse, focus the tap surface, and press Space or Enter in time. A mouse click or touch can also create an event. The page has no media input and never knows the video identity.

Before starting, record the actual external playback speed if it is not 1×. Add a short pulse label only when helpful. “Main kick” or “clap pulse” is enough. Choose how many recent intervals should form the recent-window summary; eight is a practical default.

How events become intervals

The first activation records a performance.now() value. Every later activation records another monotonic page-time value, and the difference creates an interval in milliseconds. Eight taps produce seven intervals. Keyboard auto-repeat is ignored so holding Space cannot manufacture a stream.

The surface should capture keys only while focused, expose a visible focus ring, prevent the Space key from scrolling, and announce tap count without moving focus. Pointer and touch events use the same capture path, avoiding double registration from overlapping click handlers.

Read each summary by its recipe

Overall observed BPM covers the whole run. If 16 intervals span 8,000 milliseconds, it is 60,000 × 16 ÷ 8,000 = 120. Median interval BPM converts the middle interval duration after sorting; a 498 ms median yields about 120.48. That statistic is resistant to one extreme gap but can still reflect inconsistent pulse choice.

Trimmed BPM appears with at least ten intervals. For twenty intervals, floor(10% × 20) equals two, so the two shortest and two longest interval durations are removed; the mean of the remaining sixteen is converted to BPM. The result must state the removed count. It is not allowed to conceal discarded taps.

Recent BPM uses only the last selected interval count. If the setting is six but the session has four intervals, the panel uses four and says so. Stability range is the fastest interval-equivalent BPM minus the slowest inside that recent group. It describes spread; no green “good” or red “bad” grade is attached.

Playback-speed correction

Taps occur in wall time beside altered playback. If overall observed BPM is 90 at 0.75×, source-time BPM is 90 ÷ 0.75 = 120. At 1.25×, 150 observed also corrects to 120. The page cannot read the external setting, so a wrong manual speed produces a wrong correction.

Half, base, and double source candidates for 120 are 60, 120, and 240. They invite the observer to reconsider pulse level. They do not prove meter, identify the downbeat, or choose a musically preferred candidate.

Review suspicious intervals rather than erasing them

Intervals under 100 ms or above 4,000 ms receive visible warnings because they may reflect a double tap, pause, lost focus, or deliberately slow pulse. They remain part of the raw ledger until Undo removes the latest tap or a new session begins. Silent cleanup would make the card impossible to audit.

The separate outlier-review tool can inspect a pasted interval list with a declared median-deviation threshold. The stability checker reports descriptive spread. Neither changes this live session automatically.

A complete observation example

Suppose thirteen taps create twelve intervals totaling 6,060 ms. Overall observed BPM is about 118.81. The median interval is 500 ms, giving 120 BPM. The most recent six intervals total 2,970 ms, giving about 121.21. A recent interval range from 490 to 510 ms corresponds to roughly 122.45 down to 117.65, a 4.80-BPM spread.

At 0.8× playback, the overall source estimate is 118.81 ÷ 0.8, or about 148.51 BPM. The card retains every basis: counts, elapsed time, summaries, recent-window size, speed, source estimate, candidates, warnings, and label.

Limits of human and browser timing

The page cannot hear accents, detect subdivisions, distinguish a missed tap from expressive timing, or decide that one summary is “correct.” performance.now() is monotonic, but browsers can reduce clock resolution and busy devices can delay event handling. Background tabs may be throttled. Keep this page visible and avoid heavy work during a session.

No URL, player, audio, video, microphone, API, account, library, database, or saved history is involved. Stop freezes only current memory. Reload or Reset removes the defined session.

Frequently asked questions

Why do I need four taps?

Three intervals provide a minimum provisional pattern. More taps usually reveal stability and outliers more clearly.

Can I alternate Space and mouse clicks?

Yes, but one consistent physical action may reduce input-device timing differences.

What does Undo remove?

It removes the latest tap and the interval that ended at that tap, then recomputes all summaries.

Does Stop save my session?

No. It freezes the current page state for review. Copy deliberately if you need a record.

## Tap, stop, and read the basis

Collect at least eight deliberate taps, stop before the section changes, and compare the summaries. Copy the card only after checking the speed, pulse label, interval warnings, and candidate level.

Continue on this site