RunRazor
Tools for movement analysis from stationary-camera footage.
If you film yourself or someone else repeating a course past a fixed camera -- hill repeats, sprints, drills -- RunRazor turns that raw footage into usable clips. It can use the subject's GPS track to find each pass automatically, or you can mark the cuts by hand. It can crop and follow the subject so they stay framed, and lets you compare runs side by side or export the cuts straight to a video editor.
Demo
| Command | What it does |
|---|---|
runrazor |
The main app: extract clips from a video using GPS or manual cut points, review and tune the cuts, reframe, annotate, compare, and export (see rrdocs runrazor) |
rrreframe |
Crop and follow a moving subject automatically so they stay framed (see rrdocs reframe) |
rrcompare |
Play two runs side by side, lined up in time, to compare them (see rrdocs compare) |
rrtag |
Mark matching points in two runs by hand so rrcompare can line them up (see rrdocs compare) |
rrdocs |
Open the bundled documentation in your browser |
Setup
RunRazor needs Python 3.11+, ffmpeg (with ffprobe) on your PATH, and libmpv for GPU-accelerated video playback.
Windows
Install prerequisites using winget (built into Windows 10/11):
winget install Python.Python.3.12 Gyan.FFmpeg mpv.net
Close and reopen your terminal so the new python and ffmpeg commands are on your PATH, then install RunRazor:
pip install runrazor
To update: pip install --upgrade runrazor
macOS
Install prerequisites using Homebrew:
brew install python ffmpeg mpv pipx
pipx install runrazor
To update: pipx upgrade runrazor
Linux (Debian/Ubuntu)
sudo apt update
sudo apt install python3 ffmpeg libmpv-dev pipx
pipx install runrazor
To update: pipx upgrade runrazor
RunRazor Application
The main application ties all the tools together: load a video (and a GPS track, if you have one), review and tune the cut points against the footage, reframe, compare, and export as an editor timeline (FCPXML/EDL) or a stitched MP4.
runrazor
See rrdocs runrazor for all options, hotkeys, time format, and examples.
Reframe
Automatic subject tracking and reframing pipeline. Crops video from a stationary camera to follow a moving subject. You can use this directly without the RunRazor segmentation.
rrreframe input.mp4
You may get reasonable results without any additional arguments.
See rrdocs reframe for fine-tuning, the neural-network detector, handheld mode, deshake, horizon correction, 360 video input, interactive mode, profile mode, and cache options.
Split-screen comparison
Side-by-side comparison of two ski runs (or one run against its own mirror), phase-locked turn-by-turn. It runs on Reframe outputs: each clip's trajectory sidecar (written by default) drives automatic turn-apex detection, and one clip plays at native speed while the other is retimed per turn segment to stay in sync.
rrreframe runA.mp4 --output a.mp4
rrreframe runB.mp4 --output b.mp4
rrcompare a.mp4 b.mp4 -o compare.mp4
To compare against an external clip that was never reframed (or to fix wrong auto-detected turns), tag its apexes with rrtag clip.mp4. See rrdocs compare for turn pairing, mirroring, pane fit, retiming, manual tagging, and the editable alignment JSON.
Licenses
runrazor is released under the MIT License (see LICENSE). It bundles a default subject detector -- the stock YOLOX-Nano model (Apache-2.0, Copyright (c) Megvii Inc.), used under the COCO "person" class. Full attribution and license text are in THIRD_PARTY_LICENSES. For higher accuracy, the larger permissively-licensed YOLOX-S can be dropped in via --nn-model (see rrdocs reframe and training/README.md).
❄🤗❄
Metadata
Release files for runrazor 0.5.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| runrazor-0.5.8.tar.gz | 4.9 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| runrazor-0.5.8-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 9.8 MB
Release files / runrazor-0.5.8.tar.gz
| Download URL | runrazor-0.5.8.tar.gz |
|---|---|
| Size | 4.9 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
caf1ac50ea1f0c2be826f579d42200076ba5a94bb675a27abaacc12a4652ad7e
|
|
BLAKE2b-256 checksum How to use checksums |
cfc211774782f79ec27f3495cc3fb39bead9aec121b6d74a8389d2ca7352daf8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / runrazor-0.5.8-py3-none-any.whl
| Download URL | runrazor-0.5.8-py3-none-any.whl |
|---|---|
| Size | 4.9 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
43878512cd166721f8b02e3e28cd4285139f02afd46e546894fd3779c40572bc
|
|
BLAKE2b-256 checksum How to use checksums |
0a6930f6d86f4a8fd148f14ccb99e4e1db6d53087db498d5a8b8d65d7929c57c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|