Commit History
-
Run detection on Modal so the Space works on free CPU hardware
Verified signatureThe ZeroGPU grant ended, so this Space runs on cpu-basic and every analyse call died on @spaces.GPU / .to('cuda'). Detection is the only GPU step in the analyse path and now runs on a Modal A10G (modal_detect.py); goal physics, pose, speed and render are numpy and opencv and stay here. Measured through Modal on the six shipped examples: 6/6 goal, 6/6 shooting foot. requirements.txt drops torch, rfdetr, torchvision, supervision, accelerate and spaces. The on-device MiniCPM-V coach needed this Space's GPU, so it is gone.9c9b96f
-
Add YouTube demo video link to README
2f5aba7 -
Link shared Codex agent trace (Sharing is Caring badge)
329c9bf -
Submission README: add hackathon tags + sponsor/badge evidence (Modal, Nemotron, MiniCPM, llama.cpp, Codex, gr.Server)
8466d23 -
Add Twitter/X thread link to README
389cdc3 -
Point to renamed Kicky AI model/dataset repos
cec6d52 -
Rename app to Kicky AI + add Substack blog link to README
2ca883e
-
Offline coach: instruct affirmation TONE (model writes its own), not a fixed phrase
Describe the tone (celebrate goal / encourage miss) with a light example instead of mandating exact words, so the Verdict is model-generated and varied. Keep bullets, drop the 90-word cap.c29c6aa -
Offline coach prompt: state goal/no-goal result explicitly, lead with it
The 1.3B local VLM ignored the goal result buried in the OUTCOME json and guessed 'NO GOAL' from the image. State the result as plain text ('DO NOT contradict it') and have the Verdict restate it first -> model now respects goal/no-goal + affirms.c0665e5 -
Fix spinner-forever: stop sending removed 'mode' arg to /analyse
The async split removed 'mode' from /analyse (moved to /coach), but the frontend still passed mode:coachMode to /analyse -> gradio rejected the call -> spinner hung forever with no video. Also: cycling football phrases on the coach loading state.9a3eeb4 -
Build detector once at import (fix per-call model rebuild) + faststart mp4
- the @spaces.GPU fork was losing the cached _MODEL global -> RF-DETR rebuilt on EVERY analyse call (~20-30s). Build it at module import so the spaces lib reuses+moves it. - render: +faststart so the browser plays the mp4 immediately (moov atom up front)25a548e -
render: stream raw frames into ffmpeg (fast) instead of per-frame JPEGs
The JPEG-files approach was reliable but slow (~hundreds of file writes per clip, made /analyse ~2-3x slower). Pipe annotated BGR frames straight to ffmpeg stdin: fast AND thread-robust. /analyse back to ~6s.2d07a9f -
Prefetch detector + MiniCPM weights at import (fix ZeroGPU timeout)
Downloading weights inside a @spaces.GPU window made ZeroGPU time out on first run ('release' ReadTimeout). Move all weight downloads to import time (CPU) so GPU windows only run compute.b8cfdc9 -
Async coach (results-first) + GPU offline coach + robust render
- /analyse returns video+pose+stats fast; /coach streams the AI coach in separately so the coach never blocks the analysis (keyed reuse, no re-detect) - offline coach = MiniCPM-V-4.6 bf16 on the Space's own ZeroGPU (~6s), online = Nemotron - render: write frames -> ffmpeg instead of cv2.VideoWriter (which doesn't finalize off the main thread -> previously fell back to the raw clip with no segmentation) - UI: coach panel shows a pulsing 'Coaching your shot…' until it streams in865898a -
Offline coach = MiniCPM-V-4.6 Q4_K_M (4-bit) via llama.cpp + 3-zone UI
- offline mode now runs the 4-bit GGUF VLM + vision projector through llama.cpp's multimodal CLI on-device (CPU) — no GPU, no API; binary auto-downloaded & cached - online stays Nemotron-Nano-VL on Modal; dynamic coach-model header - UI: 3-zone layout (sidebar | video+coach | pose+speed+table), equal side widths, coach as centered bullets, football phrase spinner, catchier header - drop transformers MiniCPM deps (llama.cpp path needs none)70694ee -
drop example spf_008_1056-1060s (incorrect prediction)
Verified signature050d4ed -
drop example spf_007_808-812s (incorrect prediction)
Verified signature06ee41e -
drop example spf_006_726-735s (incorrect prediction)
Verified signature7cfb6a7 -
drop example spf_004_988-993s (incorrect prediction)
Verified signature0c351a6 -
drop example spf_002_916-921s (incorrect prediction)
Verified signature29fe8d0 -
drop example spf_001_895-899s (incorrect prediction)
Verified signature0bdc2ed -
Custom gr.Server stadium frontend + online/offline AI coach
- bespoke HTML/JS frontend (index.html) on gradio.Server: stadium pitch, fit-to-height video with segmentation, top-right pose card, actual-vs-predicted table, shot speed, auto-fitting coach panel; full-viewport, resize-proof - AI coach modes: online = Nemotron-Nano-VL (Modal), offline = MiniCPM-V (OpenBMB) on the Space's own ZeroGPU; UI toggle + dynamic coach header - serve render/pose via allowed_paths; build file URLs client-side - render.py: MJPG/.avi intermediate so it finalizes off the main thread; sharper pose card5c65a0c -
ui: fix clipped upload control — taller video box (300) + upload-only source
ffcaf46 -
ui: center the title via elem_id + CSS !important (version-robust); gradient heading
5b87e23 -
app: cool World-Cup styling — centered gradient title, pitch-green/gold theme, gradient bg + button, centered heading
b09b6e6 -
app: FUT World Cup Coach rename + flag/ball edge strips + goal confetti (js= callback)
Feature designed/authored via OpenAI Codex (codex exec) in the source repo (rename, World-Cup flag edge strips, canvas-confetti goal celebration); ported here with the confetti switched to a reliable js= event callback (gr.HTML sanitizes inline handlers). Co-authored-by: Codex <codex@openai.com>0d3f962 -
Add coach client module
Verified signature8ebea2a -
Add progressive AI-coach card (Nemotron-VL via Modal) below the table
Verified signature5b84d39 -
Restore ZeroGPU app (examples/labels paths, World Cup Heros title) + goal-row verdict coloring
Verified signature66b0db5 -
Fix: goal row colors on verdict (green when pred matches truth), not on the timestamped display string
Verified signature70faeb4 -
Fix: inline self-contained MediaPipe pose (drop futheros.adapters dependency)
Verified signatureff490fa -
Rename to World Cup Heros
Verified signature441a3a0 -
Rename to World Cup Heros
Verified signatureb581e92 -
Replace match-mode with finalized shot-analysis app (slim pipeline, P# labels, 12 live examples)
Verified signature89b75b4
-
Use fine-tuned ball detector (SAM3 auto-labeled, 7/8 goals) from build-small-hackathon/futheros-ball-rfdetr
91d7123 -
Fix Space startup: GL system deps via packages.txt, lazy pose init
42749e1 -
FUT-HEROS match mode: SAM3 goal detection + RF-DETR ball tracking + goal events + per-strike coaching (ZeroGPU)
0ec4e3c -
initial commit
Verified signature90a33c5