BikeControl (SwiftControl)
Use Zwift Click, Zwift Play, Shimano Di2, or any Bluetooth controller with MyWhoosh, Rouvy, Zwift, and more. Free to try on iOS, Android, Windows, and macOS.
Measure jump height from video by stepping through takeoff and landing frames
AI summary · website content
Sports & fitnessGitHub @andresaclanOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Measure jump height from video, frame by frame, in the browser.
Airtime turns a clip of a jump into flight time, contact time and jump height. Open a local video, step to the frame the feet leave the ground and the frame they touch down, and Airtime does the math (h = g·t²/8), including for slow-motion footage.
Airtime has two pages:
/ is a time tool for a clip you just took: mark an in point and an out point and read the time and frame count between them. It saves nothing./alpha is the full app described below: jump marking, analysis, saved sessions and trends. It's still in alpha.Privacy first: videos are loaded from your device into the browser using local object URLs. Airtime does not include an upload API or application backend.
Open the deployed Airtime site in a modern desktop or mobile browser, then choose Open video or drag a video onto the player.
Requirements:
git clone https://github.com/andresaclan/airtime.git
cd airtime
bun install
bun run dev -- --open
The development server starts at http://localhost:5173.
Airtime is built around an approach jump: three marks give contact time, flight time, jump height and RSI. A marking guide under the video shows which step you're on and lights up the button that marks it.
R to slow down) until you're near your last step before the jump, then pause., and . to the first frame your plant foot touches the ground and press Landing (L).T).L). The analysis panel shows the jump.⌘S / Ctrl+S to save. Open the same file later to pick up where you left off.Hide the guide with Hide; bring it back from the keyboard shortcuts dialog (?).
Press ? in the app to see these at any time.
| Shortcut | Action |
|---|---|
Space or K | Play or pause |
, / . | Step one frame backward / forward |
Shift + ← / → | Step one frame backward / forward |
R | Cycle playback speed 1× / ½× / ¼× |
↑ / ↓ | Volume up / down |
M | Mute or unmute |
T | Mark takeoff on this frame |
L | Mark landing on this frame |
[ / ] | Jump to previous / next mark |
Backspace / Delete | Delete the mark at the playhead |
⌘ / Ctrl + Z | Undo a mark change |
⌘ / Ctrl + Shift + Z | Redo a mark change |
A | Show or hide the analysis panel |
⌘ / Ctrl + S | Save the session to this browser |
← / →, Home / End | Scrub the timeline when it has focus |
Airtime accepts common video extensions such as MP4, M4V, MOV, WebM, MKV, AVI, WMV, FLV, MPEG, 3GP, and OGV. Actual playback depends on the codecs supported by the browser and operating system.
Source frame-rate parsing is currently implemented for ISO Base Media File Format containers, including MP4, M4V, and MOV. Other formats can still play when supported by the browser, and their frame rate is measured during playback. If that fails too, Airtime won't mark the video rather than guess its frame rate.
For best results:
requestVideoFrameCallback support for the most accurate runtime playback detection.Airtime is designed for local review:
If you use a hosted deployment, the hosting provider may still collect normal website and infrastructure metadata. See the deployment configuration and hosting provider policies for those details.
Install dependencies with Bun:
bun install
Useful commands:
bun run dev -- --open # Start the Vite development server
bun run check # Run Svelte and TypeScript diagnostics
bun run test # Run unit tests
bun run lint # Check formatting and ESLint rules
bun run format # Format the repository
bun run build # Create the static production build
bun run preview # Preview the production build locally
The project uses:
@sveltejs/adapter-staticBefore opening a pull request, run:
bun run check
bun run test
bun run lint
bun run build
These checks also run in GitHub Actions for pull requests targeting main.
src/
├── lib/
│ ├── components/ # Video viewer, controls, scrubber, analysis panel, dialogs
│ ├── session/ # Saved sessions (IndexedDB), fingerprinting, export/import
│ └── video/ # Frame-rate detection, timecode, marks and jump analysis
└── routes/
├── +page.svelte # The time tool: in and out points, nothing saved
├── alpha/+page.svelte # The full app and its local file lifecycle
└── layout.css # Application theme and shared styles
Airtime is built as a static SvelteKit site:
bun run build