G1 Football#
Take five penalty shots against a simulated Unitree G1 goalkeeper driven by Metatron. MuJoCo physics, the keeper-mounted camera and ball perception run in your browser. This is a simulation game, not a real-robot controller.
Note
The compiled bundle is a public release (release_status: public-release).
Its evidence is a bounded gameplay audit of 24 paired kicks and Chromium
touch emulation; it is not a general save-rate estimate or a physical
iPhone/Safari qualification. This is a simulation game, not a real-robot
controller.
Playing#
The demo is deployed at demos/g1-football/ beside the
documentation. The page loads the pitch, vision runtime and Metatron in sequence
and warms up the keeper in the background. The opening panel shows progress.
Click Start game to play immediately when ready, or to queue the start while
loading finishes. Readiness alone does not enable aiming or shooting.
The keeper inset is labeled READY · PRESS START while waiting. If loading
fails, Reload to retry restarts the page rather than partially restarting
the runtime.
Use W / S to aim higher or lower and A / D to aim left or right. Hold Space to charge power, then release to shoot. On a touch screen, drag the aim pad and hold/release the charge button. Each round has five shots; use Play again after the round finishes. The keeper-camera panel shows the camera feed used by the ball detector, not a prerecorded animation.
Runtime and download#
Opening the page downloads approximately 403 MB of unchanged FP32 policy weights
from Metatron on Hugging Face.
The immutable revision and SHA256 checks are recorded in
policy/manifest.json. No account or token is needed. Small external-data
graphs ship with the compiled application; the large weights do not.
Verified weights can be reused from browser storage when quota permits. Cached weights are checked again before use. Clearing site data, storage eviction or insufficient quota can require another download. The mobile loading path uses sliced cache verification and Blob URLs to reduce temporary memory copies, but the model and its runtime still require substantial memory.
Automatic provider selection uses a suitable WebGPU adapter when available and
falls back to CPU/WASM. Software GPU adapters are not selected automatically.
Use ?provider=wasm to select CPU inference explicitly. On a static host, a
service worker scoped to this demo adds cross-origin-isolation headers and may
reload the page once. Use HTTPS or localhost, not file://.
Known limits#
Touch controls and mobile memory safeguards are implemented, but an actual iPhone/Safari device has not been qualified. Browser preview CI checks hosting, local perception, isolation and the background-preload request. It explicitly intercepts policy initialization to avoid downloading weights; it does not establish model readiness, mobile compatibility, gameplay quality or hardware WebGPU performance.
The keeper sees only its own camera. Wide low or mid shots (a camera-derived
crossing at least 1.2 m to the side) trigger a goalkeeper dive: the keeper
shuffles and drops toward the ball line as early as its body allows, holds the
low pose until the ball arrives, then hands over to the native recovery. The
dive follows a reference clip derived from one BONES-SEED motion, credited in
the bundle’s NOTICE.txt. Nearer shots keep the native timed save, which
paired camera tests showed is stronger there; high corners (ball above 0.9 m at
the keeper) are not dived at because the keeper has no jumping reference. Over
24 paired kicks with identical camera noise, the dive saved 21 where the native
save made 16: all six 1.5 m medium-pace kicks became saves, two far-post slow
kicks were lost, near kicks were identical. Getting up after a dive is slower
than after the native save.
If the detector finds no plausible ball in its existing search window, it
retries with a smaller image-closing kernel. This avoids merging a small ball
with nearby white pitch markings. The retry uses the same camera pixels,
shape checks and uncertainty thresholds; it does not receive the physical
ball position or bypass trajectory confidence.
The keeper can still miss high or very wide shots and lose balance.
No public hardware-WebGPU speed claim is made. Performance depends on the
browser and device; inference can run slower than real time.
Licensing#
Applicable ProtoMotions-authored software retains Apache-2.0. This does not
relicense supplied game or perception components or grant rights beyond their
supplied notices. NVIDIA-provided exported models and weights are under the
NVIDIA Open Model License; release packages must include the model card, full
license and attribution notice. Runtimes and robot assets retain their own
terms. See the bundle’s NOTICE.txt and licenses/ directory. Compiled
browser assets remain downloadable and inspectable; compilation is not
encryption or DRM.
See demos/g1-football/README.md for local install instructions, the
evidence behind the release status and the dive reference’s provenance.