Process a folder of jump and squat videos
Coaches can do this entirely in the browser. There is no script to install or command to type.
- Open Process a folder from the Jump + Squat Field Test in desktop Chrome or Edge.
- Choose a folder and allow the browser to read and write it.
- Choose the movement (double-leg jump, single-leg hop, double-leg squat or single-leg squat), the capture FPS and the athlete’s height. Override the FPS for individual videos if needed.
- Press Process videos and keep this tab open.
- Find the MP4 highlight, PDF report and Markdown text beside each original. Review each row for warnings or failures.
What gets saved
For jump.mp4, the app creates results_jump.mp4, results_jump.pdf and results_jump.md. A results_jump.json receipt records the settings, actual frame rates, analyzed range and output sizes. The MP4 is a metric highlight reel, with 30 FPS output.
Originals are not changed. Existing result files are skipped, including incomplete sets. Move old or partial results before retrying. Videos with the same base name, such as jump.mp4 and jump.mov, must be renamed first. Files beginning results_ or reslts_ are excluded. Subfolders are not processed.
Recording settings that matter
- Capture FPS: Auto reads the encoded file rate. If the file does not say, that video fails with a message so you can enter the recorded rate. Slow motion filmed at 120 FPS is often saved at 30 FPS; enter 120 in that case, or flight time and jump height come out several times too large. The app refuses a flight no person can produce and the row then shows a warning suggesting the likely recorded rate.
- Movement: one movement applies to the whole batch. Put jumps and squats, or double-leg and single-leg clips, in separate batches. Single-leg modes find the working side by themselves.
- Height: 1.8 m is a starting estimate; enter the athlete’s height (1.0–2.5 m). It scales every distance, such as jump height from the center-of-mass rise and squat depth. Use separate batches for different athlete heights.
- Camera: the view is detected from each clip. Use a tripod at about waist height with the whole body in frame from start to finish; a straight-on front view suits squats.
- Clip: the whole clip is analyzed at every file frame, so trim long recordings to the rep before processing.
Local processing and recovery
Video analysis and export happen in your browser. Static app code and model files may download from the internet. Folder permissions are granted by you in the browser, and you may need to grant them again after reopening the page.
One video runs at a time. A failure does not stop the rest. Stop batch cancels the active analysis/export; a save already in progress finishes before the queue stops. Closing the browser can leave partial results. Move these before retrying. Avoid concurrent programs writing to the same folder.
If the folder picker is unavailable, use a supported desktop browser such as Chrome or Edge, or return to the single-video app. MP4 export requires H.264 WebCodecs support; an unsupported encoder produces an error. Results are the same estimates and coaching guidance offered by the Jump + Squat Field Test’s individual-video workflow.
For AI agents and developers: browser interface
Everything runs in the browser at https://apopt.com/squat/automation.html. There is nothing to download or install. An AI agent or script that controls a browser (for example a browser-automation tool) can use the page’s versioned interface, window.apoptAutomation, instead of the folder picker.
- Open
https://apopt.com/squat/automation.htmland wait untilwindow.apoptAutomation.version === 1. - Put one local video on the file input
#automation-video; the browser reads it locally. - Start the job, poll until it finishes, then read the Markdown or download the outputs.
const api = window.apoptAutomation;
api.capabilities(); // app "squat", options, defaults, outputs (no view option)
const id = api.start({
movementType: "double_leg_jump", captureFps: 120, heightMeters: 1.82
});
api.getJob(id); // state: running → succeeded / failed / cancelled
// After state === "succeeded":
await api.markdown(id); // the text results
api.download(id, "mp4"); // also "pdf" and "md"
api.cancel(id); // stops a running job
| Option | Values |
|---|---|
| captureFps | "auto" or the recorded FPS, 1–2000 |
| movementType | double_leg_jump, single_leg_hop, double_leg_squat or single_leg_squat; default double_leg_jump |
| heightMeters | 1.0–2.5; default 1.8 |
| model | movenet_thunder, blazepose, or yolo26n_pose to yolo26x_pose |
| outputFormat | vertical or person-crop; metricCycleSeconds 2–10 |
One job runs at a time, and only the latest job’s outputs are kept, so save every output before starting another. Unknown options and out-of-range values are rejected before processing. Video stays in the browser; an agent that reads the Markdown receives that derived text.
Example agent request: “Open the Jump + Squat automation page, analyze jump.mp4 as a double-leg jump at 120 capture FPS with height 1.82 meters, save the three outputs and read the Markdown.”