Core Ingest Engine & Play-Simulations Console โ Featured in the Google I/O Hackathon Gallery
Selected as a Top 6 Finalist out of 150+ project submissions at the live event hosted at SHACK15 inside the historic San Francisco Ferry Building.
Note
Hackathon Delivery Story: This entire repositoryโfrom low-level zero-dependency ADB control layers to the premium glassmorphism web console, dual-resolution image pipeline, and the autonomous Google Antigravity visual play-loopโwas designed, implemented, and fully optimized entirely today (May 23, 2026). It represents an intensive, high-speed collaboration between a human developer and Antigravity, a state-of-the-art agentic coding assistant designed by Google DeepMind, demonstrating the frontier of AI-assisted engineering.
๐ฅ Google I/O Hackathon 2026 Video Demo Walkthrough
Standard Android UI testing frameworks (such as Appium, Espresso, or UI Automator) rely entirely on parsing accessibility layout trees (UIHierarchy) to locate buttons, inputs, and text fields. However, modern Unity 3D mobile games, custom engines, and canvas-rendered applications render as a single flat graphics canvas. They expose zero layout nodes, rendering traditional testing tools completely blind.
Our Autonomous Player Fleet & Telemetry Ingest engine solves this canvas-blindness barrier by mimicking how humans play. It uses eyes (high-speed visual screenshot frame grabs), reasoning (autonomous agents powered by the Google Antigravity SDK and Gemini 3.5 Flash), and hands (normalized relative coordinate tapping/swiping translated dynamically to device-specific absolute pixels).
The ultimate goal of this system is to generate massive, high-fidelity multimodal timeseries gameplay records. These sequential datasets (visual state changes, step-by-step inputs, reasoning traces, and concurrent system logs) serve as the foundation to train next-generation ML foundation models, specifically Joint-Embedding Predictive Architecture (JEPA-2) models capable of modeling complex human gameplay behaviors and agent actions.
Our codebase is structured into four core decoupled layers:
- Frontend Client (Visual Console): A premium, single-page, glassmorphic dashboard built using modern semantic HTML5 and pure Vanilla CSS. It connects via Server-Sent Events (SSE) to stream gameplay replays, visual tap vector overlays, and live reasoning in real-time.
- Local Backend (FastAPI Orchestrator): An asynchronous FastAPI server that manages file ingestion (APK uploads), controls emulator lifecycles, maps and routes play sessions, and brokers real-time SSE streams.
- Execution & Devices Layer (ADB & Antigravity): Low-level control wrappers that interface with the
adbCLI to check dimensions, manage device wakefulness, clear/dump logcat buffers, and drive active play loops. It boots up autonomous agents powered by the Google Antigravity SDK. - Telemetry Ingestion Pipelines: Dual-mode export pipelines that write timeseries event logs locally (currently holding a rich dataset of over 640MB in
data/gameplay_events.jsonl!) or stream them directly into a production-grade Google Cloud Pub/Sub + BigQuery ingestion warehouse.
flowchart TD
%% Node Definitions
UI["Web Dashboard UI<br>(Real-time SSE & telemetry view)"]
FastAPI["FastAPI Local Server"]
AGY["Google Antigravity Agent<br>(Gemini Multimodal API)"]
Fleet["ADB Fleet Manager<br>(Local Emulators & Devices)"]
LocalFile[("Local JSONL Timeseries<br>(gameplay_events.jsonl)")]
CloudRun["Cloud Run Ingestion API"]
PubSub["GCP Pub/Sub Topic"]
BigQuery[("GCP BigQuery Subscribers")]
%% Subgraphs for Structural Grouping
subgraph Client["Frontend / Client"]
UI
end
subgraph LocalBackend["Local Orchestrator Backend"]
FastAPI
end
subgraph Execution["Execution & Devices"]
AGY
Fleet
end
subgraph Ingestion["Telemetry Pipelines"]
subgraph LocalMode["Local Fallback Mode"]
LocalFile
end
subgraph GCPMode["GCP Production Mode"]
CloudRun
PubSub
BigQuery
end
end
%% Relations & Data Flows
UI <-->|HTTP / SSE Stream| FastAPI
FastAPI <-->|Orchestrates| Fleet
FastAPI <-->|Runs / Manages| AGY
AGY <-->|Visual Play Loop and ADB Input| Fleet
Fleet -->|Capture Logs and Event Data| FastAPI
FastAPI -->|Write events| LocalFile
FastAPI -->|Stream events| CloudRun
CloudRun -->|Publish| PubSub
PubSub -->|Subscribe / Stream| BigQuery
%% Styling & Colors (Premium theme)
classDef client fill:#e0f2fe,stroke:#0284c7,stroke-width:2px,color:#0369a1;
classDef server fill:#dcfce7,stroke:#16a34a,stroke-width:2px,color:#15803d;
classDef device fill:#fef3c7,stroke:#d97706,stroke-width:2px,color:#b45309;
classDef local fill:#f3f4f6,stroke:#4b5563,stroke-width:2px,color:#1f2937;
classDef gcp fill:#ede9fe,stroke:#7c3aed,stroke-width:2px,color:#6d28d9;
class UI client;
class FastAPI server;
class AGY,Fleet device;
class LocalFile local;
class CloudRun,PubSub,BigQuery gcp;
To ensure maximum performance, fleet autonomy, and a stellar user experience, the following features were designed and implemented from scratch today:
To operate independently of differing physical device and emulator configurations (resolutions, aspect ratios, densities), our agent bypasses hardcoded pixels. The Antigravity agent decides taps and swipes on a normalized relative float coordinate scale [0.0 to 1.0].
Upon action execution, the FleetManager queries the active device's real boundary dimensions and dynamically maps relative coordinates to absolute screen pixels:
def execute_tap(self, device_id: str, rel_x: float, rel_y: float) -> str:
res = self.get_device_resolution(device_id)
abs_x = int(rel_x * res["width"])
abs_y = int(rel_y * res["height"])
cmd = ["adb", "-s", device_id, "shell", "input", "tap", str(abs_x), str(abs_y)]
self.run_cmd(cmd)To optimize both visual quality and processing speed:
- Timeline Replays: The fleet manager captures full-fidelity screenshots (e.g.
step_X.png) and saves them locally to enable high-resolution player playthrough reviews in the dashboard. - Gemini Vision Inputs: The system processes screenshots through a concurrent optimization pipeline, resizing them down to lightweight
384pxthumbnails (e.g.step_X_llm.png). This maintains a minimal visual token payload for the Gemini 3.5 Flash API, dropping visual token consumption, cutting API costs, and unlocking blazing-fast turn latency underThinkingLevel.MINIMAL!
Connected emulators and physical devices can dynamically switch orientations depending on the targeted package. Our system handles this gracefully:
- Dynamic Resolution Tracking: The backend caches and monitors the dimensions of captured screenshots at every step. If the width exceeds the height, the system automatically detects a rotated landscape orientation.
- Responsive Web Dashboard Layouts: The frontend UI instantly adapts CSS styles and viewports to scale screenshot aspects seamlessly, ensuring horizontal games (like Clash of Clans) and vertical games (like Royal Match) are displayed in full scale with accurate, real-time tap coordinate overlay vectors!
Rather than forcing a costly model round-trip for every single tap or short transition wait, our agent leverages a custom macro-action sequencing tool. It can formulate and submit a serialized chain of actions in a single reasoning step:
[
{"type": "tap", "x": 0.5, "y": 0.8},
{"type": "wait", "seconds": 2.0},
{"type": "swipe", "x1": 0.9, "y1": 0.5, "x2": 0.1, "y2": 0.5},
{"type": "tap", "x": 0.1, "y": 0.4}
]The backend processes these macro chains back-to-back synchronously, cutting visual loop latencies by up to 75% on menu screens and loading gates!
No-touch autonomous testing can be halted if a device goes to sleep or gets locked. Our FleetManager implements zero-touch wakefulness at start-up via low-level ADB scripts:
- Dispatches
svc power stayon trueto keep devices awake indefinitely. - Sends keyevent
224(wakes up screen if asleep). - Dispatches
wm dismiss-keyguardto automatically unlock lockscreens and keyguards.
To minimize startup overhead, our backend integrates a smart APK ingestion pipeline using pyaxmlparser:
- Parses the manifest package name,
versionName, andversionCodedirectly from uploaded APKs. - Queries the targeted emulator using
dumpsys packageto check for active installations. - Skipping Inefficiencies: If the target package exists with identical version metadata, it skips the costly
adb installstep entirely, dropping startup latency from 30 seconds to under 2 seconds!
Important
Reviewer Convenience: To ensure hackathon judges can immediately play with, audit, and evaluate our dashboard without needing an Android emulator configured or Android SDK command-line tools installed, we built a complete local mock device simulator! When the dashboard is loaded, you can toggle "Enable Simulated Fallback Devices" in the drawer. Reviewers can provision simulated emulators (e.g. Google Pixel 8 Pro, Samsung, Nexus), boot them, launch autonomous runs, watch real-time coordinate taps overlays, scrub through steps, and inspect compiled mock logcats with zero environment setup!
The visual replay column features advanced playthrough controls:
- Interactive Scrubber Slider: Drag the slider to scrub through active or historic gameplay frames.
- Quick Timeline Steps: Single-click
โandโถbuttons let you step through visual events frame-by-frame. - Viewport Toggles: Instantly toggle between
๐ฌ REPLAY (FULL)(high-resolution screenshots with real-time tap vectors overlay) and๐ง LLM VISION (SCALED)(scaled-down 384px frame to see exactly what visual information the Gemini model is receiving).
- Startup Flush: Clears the system log buffer (
adb logcat -c) on session startup. - Background Log Streamer: Streams logcat logs concurrently in background tasks during active gameplay.
- Terminal Viewport: A dedicated browser tab acts as a monospace console, displaying the complete device and Unity engine logs immediately upon session completion to locate game engine exceptions or crashes!
| Component | Technology | Rationale |
|---|---|---|
| Agent AI Core | Google Antigravity SDK | Harnesses model hooks, tool policies, and LLM orchestration. |
| Multimodal Model | Gemini 3.5 Flash | Delivers ultra-low latency, outstanding visual recognition, and robust structured tools usage. |
| Local Server | FastAPI (Python 3.13+) | Supports high-concurrency async operations, background tasks, and lightweight JSON routing. |
| Real-time Pipeline | SSE (Server-Sent Events) | Offers extremely light, unidirectional visual and log streams to the client browser. |
| Dashboard UI | Vanilla CSS & Semantic HTML5 | Replaces heavy front-end node build steps (no React/Webpack compile overhead) with custom violet/cyberpunk glassmorphism aesthetics. |
| Low-Level Controls | Android ADB CLI & Popen | Interfaces with local device hardware with zero bloat or heavy wrappers. |
| Data Pipelines | GCP Pub/Sub & Cloud Run | Streams telemetry directly into Google Cloud BigQuery for high-volume timeseries ingestion. |
โโโ Makefile # Interactive workspace console and workflow automation
โโโ README.md # This hackathon reviewer guide
โโโ run.sh # Automated virtualenv setup and server launcher script
โโโ backend/
โ โโโ app.py # FastAPI routes, file uploading, and SSE connection brokers
โ โโโ fleet_manager.py # Low-level ADB wrappers, resolution detectors, and mock emulators database
โ โโโ agent_runner.py # Visual play loops, coordinate mapping, and Antigravity integrations
โ โโโ ingestion.py # Telemetry writer (Local JSONL fallback + GCP Pub/Sub publisher)
โ โโโ requirements.txt # Python dependencies (fastapi, pyaxmlparser, pillow, etc.)
โ โโโ google_antigravity-*.whl # Local Google Antigravity SDK wheel package
โโโ frontend/
โ โโโ index.html # Responsive three-column visual console structure
โ โโโ style.css # Custom neon cyberpunk/glassmorphic stylesheet
โ โโโ app.js # SSE listeners, coordinate mapping overlays, and timeline scrubber
โโโ data/
โ โโโ gameplay_events.jsonl # Local timeseries database (rich visual dataset of 640MB+)
โโโ dev-milestones/
โ โโโ implementation_plan.md # Milestone blueprints and design structures
โ โโโ walkthrough.md # Original development progress walkthroughs
โโโ builds/ # Destination for ingested game APK files
โโโ runs/ # Session telemetry archives (screenshots, logcats, summaries)- Python 3.13+ installed locally.
- Node.js (optional).
- Homebrew (on macOS) for native Android Tools:
brew install --cask android-platform-tools
Simply execute our automated shell script in the root directory:
./run.shThis script handles the heavy lifting:
- Creates a Python virtual environment (
.venv). - Upgrades
pipand installs all backend requirements. - Automatically installs the local Google Antigravity SDK wheel file (
backend/google_antigravity-*.whl). - Launches the FastAPI Uvicorn developer server on
http://localhost:8000with hot reloading enabled!
Open http://localhost:8000 in your browser to experience the beautiful glassmorphic console!
We created a gorgeous, color-coded interactive Makefile to simplify all development workflows. Type make in your terminal to see the help menu:
$ make=====================================================================
โก Android Player Fleet & Telemetry Ingest - Workflow Console โก
=====================================================================
Usage: make <target>
Available Targets:
clean Clear temporary python builds, run artifacts, logs, and python bytecode caches
distclean Reset repository completely by purging virtual environment and telemetry database files
format Format all Python code files automatically according to pep8 styles
help Display this gorgeous interactive help menu
lint Analyze and lint Python code quality using Ruff or Flake8
run Launch the FastAPI local backend server with automatic live reload on port 8000
setup Set up Python virtual environment, install requirements, and resolve local SDK dependencies
status Run dynamic system diagnostics, verify ADB connections, and check GCP telemetry configs
test Execute modular import and path integration verification checks on backend controllers
=====================================================================
Verify your environment, active Android emulators, and active GCP connections in one command:
make statusKeep the codebase clean:
make format
make lintVerify FastAPI imports, Pydantic readiness, and local Antigravity module load dynamics instantly:
make testTo test the visual playthrough capabilities of our autonomous agent immediately:
- Open http://localhost:8000.
- Click "Device Manager" (top right button).
- In the slide-out drawer, verify that "Enable Simulated Fallback Devices" is checked.
- Click "Refresh" inside the drawerโyou will see
emulator-5554-mock (online)under your Virtual Device Fleet. Close the drawer. - In the left panel, choose the "Create Run" tab (Step 1B).
- Drag and drop any dummy file named with
.apkextension (e.g. create a blank filedummy.apk), or select it. - Set Target Android Device to
Simulated Pixel 6 Pro (mock). - Click "Launch Autonomous Player"!
- Under "Live Gameplay Replay" (middle panel), watch the real-time gameplay simulation initialize. Taps and swipes will begin execution, and dynamic tap coordinate indicator dots will flash on screen corresponding to coordinates chosen by the agent!
- Use the Timeline Scrubber to step through previous actions, browse between the
๐ง Agent Reasoning,๐ Step Telemetry, and๐ Device logcattabs in the right-hand panel, and hit "Stop Run" to cleanly close active operations.
To stream timeseries event logs directly to Google Cloud Run, Cloud Pub/Sub, and Cloud BigQuery in production, export these environment variables in your terminal shell before starting the server:
export GEMINI_API_KEY="your-gemini-api-key"
export GCP_PROJECT_ID="your-gcp-project-id"
export GCP_PUBSUB_TOPIC="your-pubsub-topic-name"
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/service-account-key.json"If these credentials are not present, the orchestrator defaults to Local Fallback Mode, appending telemetry sequences to data/gameplay_events.jsonl (and storing local screenshots under runs/).
You can immediately load the telemetry data generated by our players into a Jupyter notebook for exploratory data analysis or ML preprocessing:
import pandas as pd
import json
# Load the local telemetry timeseries events
df = pd.read_json('data/gameplay_events.jsonl', lines=True)
# Inspect player actions, screenshots, and reasoning sequences
print(df.head())- Unity OpenGL Vision Navigation: Solved the Unity black-box canvas problem using standard visual feedback combined with normalized float mappings, opening game-testing automation to any engine.
- Ultra-Low Latency visual Loops: Combined lightweight
384pxthumbnail pipelines with Gemini Flash'sThinkingLevel.MINIMALparameters to achieve super-responsive interactive action frames. - Responsive Dual Viewports: Built full-fidelity capture timeline scrubbers side-by-side with LLM scaled vision viewports, giving developers complete clarity on what the model sees.
- Resilient Fleet Recovery: Integrated automatic
startuproutines to scan runs directories and safely repair/reset any playing runs crashed or orphaned due to process restarts.
Thank you for reviewing our Google I/O Hackathon 2026 project!

