Process a folder of tennis serve videos

Coaches can do this entirely in the browser. There is no script to install or command to type.

  1. Open Process a folder from AI Tennis Serve Analysis in desktop Chrome or Edge.
  2. Choose a folder and allow the browser to read and write it. Each video should hold one serve, filmed from a true side view with the full server and the ball in frame through contact.
  3. Confirm capture FPS and serve type (flat, slice or kick). Override FPS for individual videos if needed.
  4. Press Process videos and keep this tab open. The whole clip is analyzed, as in the single-video app.
  5. Find the MP4 highlight, PDF report and Markdown text beside each original. Review each row for warnings or failures.
Process a folder

What gets saved

For serve.mp4, the app creates results_serve.mp4, results_serve.pdf and results_serve.md. A results_serve.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 serve.mp4 and serve.mov, must be renamed first. Files beginning results_ or reslts_ are excluded. Subfolders are not processed.

Recording settings that matter

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 individual-video workflow.

For AI agents and developers: browser interface

Everything runs in the browser at https://apopt.com/tennis/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.

  1. Open https://apopt.com/tennis/automation.html and wait until window.apoptAutomation.version === 1.
  2. Put one local video on the file input #automation-video; the browser reads it locally.
  3. Start the job, poll until it finishes, then read the Markdown or download the outputs.
const api = window.apoptAutomation;
api.capabilities();   // app "tennis", views, options, defaults, outputs
const id = api.start({
  captureFps: 120, serveType: "kick", detectionModelSize: "s"
});
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
OptionValues
captureFps"auto" or the recorded FPS, 1–2000
serveTypeflat, slice or kick
modelmovenet_thunder, yolo26s_pose or blazepose
detectionModelSizeball / racket detector size: n (fastest), s, m, l or x (most accurate)
outputFormatvertical 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. This app has no camera-view option. A video in which no serve is detected fails with advice. Video stays in the browser; an agent that reads the Markdown receives that derived text.

Example agent request: “Open the Tennis automation page, analyze serve.mp4 as a kick serve at 120 capture FPS, save the three outputs and read the Markdown.”