Process a folder of shot put or discus throws
Coaches can do this entirely in the browser. There is no script to install or command to type.
- Open Process a folder from the shot put and discus app in desktop Chrome or Edge.
- Choose a folder of throw videos, one throw per video, and allow the browser to read and write it.
- Choose the event (shot put or discus) and the throwing arm, and confirm the capture FPS. Override the FPS for individual videos if needed.
- Choose the pose and implement models and the highlight layout, then 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 throw.mp4, the app creates results_throw.mp4, results_throw.pdf and results_throw.md. A results_throw.json receipt records the settings, actual frame rates, analyzed range and output sizes. The MP4 is a metric highlight reel, with 30 FPS output. The PDF has an annotated snapshot for every phase of the throw.
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 throw.mp4 and throw.mov, must be renamed first. Files beginning results_ or reslts_ are excluded. Subfolders are not processed.
Recording settings that matter
- Event: shot put or discus. The event changes the phase rules, targets and coaching, so put each event in its own folder (or run a separate batch).
- Camera: a slightly open side or rear-quarter ring view, with the whole athlete and the implement in frame from setup through recovery. The whole clip is analyzed, so trim each video to one throw. A clip with no complete throw fails with that message, and the rest of the folder continues.
- Capture FPS: Auto reads the encoded file rate. Slow motion filmed at 120 FPS may be saved at 30 FPS; enter 120 in that case. Auto fails if the file rate cannot be read, so you can choose a rate explicitly. Every frame of the file is analyzed, so high-rate clips take longer.
- Throwing arm: right- or left-handed. Use separate batches for athletes with different arms.
- Models: Thunder is the default pose model; BlazePose and the YOLO26 sizes match Advanced mode. Implement detection defaults to the fastest YOLO26 size; larger sizes can find the shot or discus more reliably and take longer.
- Phases: entry, drive, power position, release and reverse are detected automatically, as in Basic mode. To set phase frames by hand, open the video in the single-video app’s Advanced mode.
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 app’s individual-video workflow.
For AI agents and developers: browser interface
Everything runs in the browser at https://apopt.com/ring/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/ring/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 "ring", options, defaults, outputs (no view option)
const id = api.start({
throwType: "discus", athleteSide: "right", captureFps: 120
});
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 |
|---|---|
| throwType | shot (shot put) or discus |
| athleteSide | right or left |
| captureFps | "auto" or the recorded FPS, 1–2000 |
| model | movenet_thunder, blazepose, or yolo26n_pose, yolo26s_pose, yolo26m_pose, yolo26l_pose, yolo26x_pose |
| implementModel | YOLO26 implement-detection size: n, s, m, l or x; default n |
| outputFormat | vertical or person-crop; metricCycleSeconds 2–10 |
The app uses one ring view, so there is no view option. 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 shot put and discus automation page, analyze throw.mp4 as a right-handed discus throw at 120 capture FPS, save the three outputs and read the Markdown.”