NaNDL Precision Calculator

Read off the precision needed to average a target-time completion — from a frame-window histogram, or from an exact list of timed inputs.
offline-ready

Setup

1 frame = 1/fps seconds
total level time; also used for % positions
precision is solved for this expected time

Input mode

Total inputs: 0  ·  evenly spread across the level

Run / segment — score just a slice of the level as its own run

Calculate a run only inputs between from and to are scored, re-based to start at 0 — like 23.2 - 81.8
Off — the whole level is scored.

Modifiers — off by default; constants are placeholders (the site does not publish them)

Nerveλ = e^(−k·t): later inputs (in seconds) are shakier
FatigueBROKEN?λ = e^(−k·i): later inputs (by index) degrade
CPSBROKEN?λ = (4 / max(1, 2c))^k: fast clicking hurts precision
Required Precision  L*
Enter a level length and at least one input.
How it works & assumptions

Each input i has a window of Nₕ frames, so its duration is wₕ = Nₕ / fps seconds. A player with precision L (bigger = sharper; L = 1/σ of their timing error in seconds) clears that input if their timing lands inside the half-window, giving pₕ = erf( (½·wₕ·L) / √2 ).

Level metrics

Completion probability P(C) = ∏ pₕ. Reach probability rₕ = ∏₃₂ₓₖ p₋. Expected time per attempt E[T₉] = tₙ·P(C) + ∑ tₕ·rₕ·qₕ (qₕ=1−pₕ, tₙ = level length), and expected time to complete E[T╕] = E[T₉] / P(C). The tool bisects on L for L*, where E[T╕] equals your target time. It also shows σ = 1/L* in milliseconds.

Two input modes

Histogram — you give counts per frame-window size; the tool assumes inputs are evenly spaced across the level and evenly interleaved by difficulty (no clustering). With modifiers off, the result depends only on the histogram, level length and target.

Manual list — you give each input's exact time and window, so ordering, gaps and per-input positions are taken directly from your data (nothing is scattered evenly). The Seconds / % switch reads times either as seconds or as a percentage of the level length, where % grows evenly across the level (50% = halfway in time).

Run / segment

Turn on Calculate a run and give a range like 23.2 - 81.8 to score only the inputs inside it. The slice is treated as its own level: its inputs are re-based so the run starts at 0 and its length becomes to − from. The range is read in whatever the Seconds / % switch is set to.

Modifiers

Each enabled modifier multiplies an input's effective window before the probability is taken: Nerve e^(−k·tₕ), Fatigue e^(−k·i), CPS (4/max(1,2c))^k where c is the local clicks/sec from the gap to the previous input. Fatigue and CPS are marked BROKEN? and all three are off by default; the constants are tunable placeholders because the NaNDL site does not publish its calibrated values.