Desktop · Python + Electron

Every swing, cut and timecoded.

Swing Analysis · Desktop Swing Segmentation

Feed in a match video. The two-pass pipeline tracks a single right-wrist signal, cuts each swing into its own clip, and labels ready, windup, contact and follow-through with exact timecodes.

Clip playback preview
Clip playback preview

Built for frame-level review.

Three things it does that scrubbing a timeline cannot.

Two-pass swing segmentation

The v2.1 pipeline reads one right-wrist signal to find swing boundaries, then refines them offline. Every segment carries ready, windup, contact and follow-through phases with timecodes.

Streaming results in pass 1

Segments appear while pass 1 is still running, so you can start reviewing before the full video finishes processing.

Skeleton and bbox overlays

Want to see the body lines on each clip? Two passes to choose from. The **fast pass** paints the skeleton while it cuts — quick and good enough for a first review. The **polish pass** re-renders each clip afterward with a steadier person box and a smoother skeleton — slower, but the kind of cut you'd hand to a student. Both bake straight into the export, no post-processing needed.

Download

Desktop

Runs on Windows, macOS and Linux. A Python backend plus an Electron GUI, with a CLI for terminal use. The models ship inside the repo, so clone and run works offline.

Download installer

GitHub will redirect you to the current latest release.

FAQ

Swing Analysis Related

Does my video get uploaded, and which models actually run on it?

Nothing leaves your machine. The local service binds to 127.0.0.1 only, so the video never reaches a server. Two model families matter here: the wrist tracker that drives swing segmentation (MediaPipe pose, by default, with a MoveNet fallback) and the optional overlay models that paint the skeleton and person box (RTMDet plus RTMPose). The first family is always on, because segmentation depends on it. The overlay family is opt-in and re-renders the clip after segmentation, never influencing where the cuts land.

Do different model choices change the segmentation result?

Yes, but only the segmentation models can. Switching the wrist tracker from MediaPipe pose to MoveNet can shift swing boundaries by a few frames and occasionally split or merge adjacent swings, so the choice matters for fast, jerky matches. Switching the overlay models only changes how each already-cut clip is painted, never where the cuts are.

Are the clip cuts and the overlay effects one step or two?

They are two separate steps. Pass 1 cuts every swing into its own clip using the wrist tracker only, with no overlay drawn. The optional polish pass runs afterwards on the saved clips, re-detecting the person and re-drawing the skeleton and box. Either pass can be skipped, and skipping the polish pass leaves you with cuts but no overlays. Clips are saved to disk between the two passes, so you can also re-run just the polish pass later.

Do I need a GPU, and can I drive the pipeline without the desktop GUI?

No GPU is required, the whole pipeline runs on CPU. The overlay models are the heaviest step and the main reason a GPU helps when you have one, so turn them off for the fastest first pass on weaker machines. The CLI drives the exact same pipeline, and the local REST plus WebSocket service on port 8321 is open to any front end you want to build on top.