Inspiration

When we started experimenting with autonomous agents to control desktop applications and complex media software, we immediately hit the same bottleneck that plagues every current system: AI agents are still trapped taking heavy raster screenshots.

Every agent today works by capturing full-resolution PNGs (often 1.5MB to 3MB each) and sending them across HTTP to a cloud vision model. This introduces 1,200ms to 2,000ms of network and inference latency per single action, costs a fortune in vision tokens, and constantly hallucinates exact coordinates when trying to click small controls, adjust color wheels, or trim audio on video timelines. The alternative, OS Accessibility APIs, fails completely because creative desktop software (DaVinci Resolve, Blender, Unreal Engine, Premiere Pro) does not expose standard accessibility trees.

Then we realized the root cause of why this problem still exists: Cloud AI engineers write high-level Python and interact with REST APIs, but rarely touch low-level GPU compute shaders or DirectX pipelines. On the other side, GPU and game engine engineers write fast DirectX, Vulkan, and HLSL shaders, but do not work on AI agent protocols.

Because these two engineering domains never talk to each other, desktop AI agents remained slow and primitive. We decided to bridge this exact gap by building VACT (Vector Agent Context Transport): a hardware-accelerated, mathematical protocol that computes vector scene graphs directly on the GPU at 60 FPS, completely replacing raster screenshots.

What it does

VACT replaces raster screenshot pipelines with a real-time vector scene graph calculated on the GPU.

Instead of sending images, VACT uses DirectX DXGI desktop duplication to capture frames with zero CPU copy, runs a hardware bilateral filter compute shader to isolate UI elements from video backgrounds, extracts interactive nodes with Connected Component Labeling (CCL), and processes text via hardware WinRT OCR.

The daemon packages the desktop state into a differential Directed Acyclic Graph (DAG) and streams <2KB JSON deltas over a local named pipe (\\.\pipe\vact-ipc) at continuous 60 FPS.

Google Cloud Vertex AI with Google Gemini receives this lightweight vector stream, understands the user's cinema and editing instructions, and issues sub-pixel coordinates that VACT dispatches to the OS at microsecond latency.

It also includes a zero-overhead Win32 transparent overlay (inspired by the Minecraft F3 debug screen) that renders live pipeline telemetry, shader execution times, and target locks directly on screen.

Mathematical Foundation

VACT formulates operating system visual perception as a continuous geometric manifold rather than a grid of RGB pixels.

1. GPU Bilateral Saliency Operator

To keep UI borders, timeline playheads, and text sharp while filtering out video background noise, the compute shader applies a spatial-range bilateral filter:

$$ I_{\text{filtered}}(p) = \frac{1}{W_p} \sum_{q \in \Omega} I(q) \cdot \exp\left(-\frac{|p - q|^2}{2\sigma_s^2}\right) \cdot \exp\left(-\frac{|I(p) - I(q)|^2}{2\sigma_r^2}\right) $$

where $\sigma_s = 2.5$ is the spatial Gaussian domain, $\sigma_r = 0.15$ is the photometric intensity tolerance, and $W_p$ is the normalizing factor:

$$ W_p = \sum_{q \in \Omega} \exp\left(-\frac{|p - q|^2}{2\sigma_s^2}\right) \exp\left(-\frac{|I(p) - I(q)|^2}{2\sigma_r^2}\right) $$

2. Normalized Device Coordinate (NDC) Projector

Pixel coordinates $(x, y) \in [0, W] \times [0, H]$ are transformed into resolution-invariant coordinates so the agent works across different monitor resolutions and DPI scaling:

$$ \begin{bmatrix} x_{\text{ndc}} \ y_{\text{ndc}} \ z_{\text{ndc}} \end{bmatrix} = \begin{bmatrix} \frac{2x}{W} - 1.0 \ 1.0 - \frac{2y}{H} \ \frac{\text{depth}}{d_{\text{max}}} \end{bmatrix} \in [-1.0, 1.0]^2 \times [0.0, 1.0] $$

3. Differential Scene Graph DAG

Between frame $t-1$ and frame $t$, VACT computes temporal state changes algebraically:

$$ \Delta \mathcal{S}t = \mathcal{G}_t - \mathcal{G}{t-1} = { \mu_{\text{insert}}, \mu_{\text{update}}, \mu_{\text{delete}} } $$

Only mutated nodes are serialized and streamed, reducing transmission payload by 99.8% compared to screenshot transmission.

How we built it

  • Backend Daemon (Rust): Built using windows-rs, DirectX DXGI desktop duplication, DirectML/wgpu compute shaders for bilateral filtering, and multi-threaded WinRT OCR.
  • AI Orchestrator (TypeScript/Node.js): Communicates with Google Cloud Vertex AI using enterprise Application Default Credentials (ADC) and Google AI Studio. Gemini models parse the vector DAG, structure multi-step cinema commands, and resolve coordinates.
  • Cinema Grounding (Parallel Search API): Integrated parallel-web to pull real-world cinematography lighting setups, color temperature references, and lens profiles at runtime.
  • Hardware I/O Dispatcher: Injects sub-pixel mouse and keyboard events directly via native Win32 input pipelines.

Benchmarks

  • Perception Latency: 4.8ms (compared to 1,250ms for cloud screenshot VLMs)
  • Payload Size per Step: < 2KB JSON (compared to 1.5MB PNG)
  • Continuous Frame Rate: 60.0 FPS real-time
  • Vision Token API Cost: $0.00 (Zero raster vision tokens consumed)

Challenges we ran into

  • Writing the bilateral filter compute shader in wgpu so that it runs in under 1.2ms without causing frame drops on the Windows desktop window manager.
  • Converting continuous floating-point NDC coordinates into exact sub-pixel screen space on multi-monitor setups with different DPI scaling factors.
  • Formatting complex 3D viewports and dense NLE timelines into clean, compact text graphs that Gemini can reason over with zero spatial confusion.

Accomplishments that we're proud of

  • Proving that GPU compute shaders can eliminate the need for screenshots in AI agents entirely.
  • Achieving a full 60 FPS continuous vector pipeline with sub-5ms local latency.
  • Successfully driving native creative software that has no APIs using Google Cloud Vertex AI.

What we learned

Language models reason significantly better and faster over structured spatial DAGs than over raw pixel arrays. When you give the model structured mathematical coordinates and clean labels instead of a compressed PNG, spatial hallucinations drop to zero.

What's next for VACT

  • Writing direct C++ and Python bindings so VACT can run as an internal plugin inside Blender and DaVinci Resolve.
  • Adding GPU audio waveform saliency so the agent can analyze multi-track audio timelines and perform automated dialogue silence removal.
  • Connecting VACT with Weavetab (our CDP-based automation engine with 44 tools for Chromium and Electron) to form a complete dual-engine system covering both browser-based media tools and heavy native desktop suites.

Built With

Share this project:

Updates