<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Devansh</title>
    <description>The latest articles on DEV Community by Devansh (@devanshdubey).</description>
    <link>https://dev.to/devanshdubey</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4157617%2F1ce2bb2c-4618-4142-92b7-61a881f9c623.jpg</url>
      <title>DEV Community: Devansh</title>
      <link>https://dev.to/devanshdubey</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/devanshdubey"/>
    <language>en</language>
    <item>
      <title>Dynamo: Give Your Coding Agents Eyes and Your PR Reviewers Proof</title>
      <dc:creator>Devansh</dc:creator>
      <pubDate>Fri, 16 Oct 2026 05:35:39 +0000</pubDate>
      <link>https://dev.to/devanshdubey/dynamo-give-your-coding-agents-eyes-and-your-pr-reviewers-proof-fh8</link>
      <guid>https://dev.to/devanshdubey/dynamo-give-your-coding-agents-eyes-and-your-pr-reviewers-proof-fh8</guid>
      <description>&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;When an AI coding agent or browser-use sandbox fails in CI at 2:00 AM, everyone flies blind. The agent acts on a headless display without visual feedback, the test runner spits out a 400-line stack trace, and the human reviewer gets a single static PNG that doesn't show &lt;em&gt;which&lt;/em&gt; action triggered the regression.&lt;/p&gt;

&lt;p&gt;If you try to fix this by feeding raw screen recordings into a Vision-Language Model (VLM), you blow your token budget in under a minute. If you hack together a bash script around &lt;code&gt;Xvfb&lt;/code&gt; and &lt;code&gt;ffmpeg&lt;/code&gt;, a sudden exception sends &lt;code&gt;SIGKILL&lt;/code&gt;, corrupts the MP4 &lt;code&gt;moov&lt;/code&gt; atom, and leaves you with zero artifacts when you need them most.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5173soa2hslrq86619k1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5173soa2hslrq86619k1.png" alt="Dynamo Hero Showcase" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dynamo&lt;/strong&gt; is a headless, zero-dependency Python visual and video harness for coding agents, Playwright browser automation, and computer-use sandboxes. In a single &lt;code&gt;with VisualHarness():&lt;/code&gt; context manager (or a single CLI command), Dynamo:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Manages the headless X11 lifecycle (&lt;code&gt;Xvfb&lt;/code&gt;)&lt;/strong&gt; with a socket readiness probe so your browser never races the display server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streams non-blocking screen capture (&lt;code&gt;ffmpeg -f x11grab&lt;/code&gt;)&lt;/strong&gt; with graceful &lt;code&gt;SIGINT&lt;/code&gt; finalization — even when your agent crashes mid-run.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Logs timestamped action telemetry (&lt;code&gt;telemetry.jsonl&lt;/code&gt;)&lt;/strong&gt; and burns visual click-rings and crosshairs directly into MP4 and looping PR GIFs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Answers visual questions with model-free arithmetic&lt;/strong&gt; — cropping before encoding, pixel OCR on &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; elements, visual diffs, and Set-of-Marks element grounding.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keeps only the frames that matter&lt;/strong&gt; — scene changes anchored to exact action timestamps — instead of paying for a thousand-odd near-identical frames.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Routes surviving keyframes through local open-weight models&lt;/strong&gt; (&lt;code&gt;qwen3-vl:4b&lt;/code&gt; under Apache-2.0 and &lt;code&gt;laya&lt;/code&gt; for lightweight typed filtering) so proprietary screens never leave your infrastructure.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2F0dvsh0%2Fdynamo%2Fmain%2Fdemo%2Fassets%2Fdynamo_demo.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2F0dvsh0%2Fdynamo%2Fmain%2Fdemo%2Fassets%2Fdynamo_demo.gif" alt="Dynamo Autonomous Checkout with Click Telemetry Overlays" width="600" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Above: A live headless Chromium session recorded inside Dynamo's virtual display (&lt;code&gt;:99&lt;/code&gt;), compiled into a two-pass palette GIF with telemetry click rings and action timestamps baked in.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🎬 Video Demo &amp;amp; Visual Showcase
&lt;/h2&gt;

&lt;p&gt;Here is the full product walkthrough demonstrating Dynamo's architecture, crash safety, live autonomous browser execution, and model-free primitives:&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/zAtmsYpyuMY" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;📺 &lt;strong&gt;Watch on YouTube:&lt;/strong&gt; &lt;a href="https://youtu.be/zAtmsYpyuMY" rel="noopener noreferrer"&gt;https://youtu.be/zAtmsYpyuMY&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Chapters:&lt;/em&gt; &lt;code&gt;0:00&lt;/code&gt; The Agent Blind Spot • &lt;code&gt;0:30&lt;/code&gt; The Fatal &lt;code&gt;moov atom&lt;/code&gt; Crash • &lt;code&gt;1:04&lt;/code&gt; One Context Manager SDK • &lt;code&gt;1:37&lt;/code&gt; Live Headed Chromium Checkout • &lt;code&gt;2:11&lt;/code&gt; Four Model-Free Primitives • &lt;code&gt;2:54&lt;/code&gt; Measured Hackathon Benchmark • &lt;code&gt;3:28&lt;/code&gt; Local VLM Triage (82.6% Token Cut) • &lt;code&gt;3:58&lt;/code&gt; Production Ready &amp;amp; MIT License.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/0dvsh0/dynamo" rel="noopener noreferrer"&gt;https://github.com/0dvsh0/dynamo&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interactive Demo &amp;amp; Token Calculator:&lt;/strong&gt; &lt;a href="https://0dvsh0.github.io/dynamo/" rel="noopener noreferrer"&gt;https://0dvsh0.github.io/dynamo/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Who Would Actually Pay for This? (The Side Hustle)
&lt;/h3&gt;

&lt;p&gt;Anyone running autonomous coding agents, QA browser fleets, or computer-use sandboxes in production hits two walls immediately: &lt;strong&gt;multimodal inference bills&lt;/strong&gt; and &lt;strong&gt;security compliance&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Dynamo follows an &lt;strong&gt;open-core infrastructure side-hustle model&lt;/strong&gt; built for engineering teams who need visual observability that their security team will actually sign off on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Who buys it:&lt;/strong&gt; AI dev-shop agencies, QA automation teams running parallel Playwright workers on Kubernetes/EKS, and startups building computer-use agents that interact with sensitive staging environments, internal admin panels, or checkout flows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why they pay:&lt;/strong&gt; SaaS session-replay tools charge per-seat or per-minute and require shipping recordings of proprietary code and customer data to a third-party cloud. Dynamo is a self-hosted library with &lt;strong&gt;zero data egress&lt;/strong&gt; and &lt;strong&gt;zero GPU requirement&lt;/strong&gt; for capture.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How it monetizes:&lt;/strong&gt; The core Python SDK and CLI are open-source to drive bottom-up developer adoption. The paid side hustle offers &lt;strong&gt;custom sandbox integration, VLM token-budget tuning, and fleet-scale deployment packs&lt;/strong&gt; (isolated display pools running hundreds of parallel headless sessions per node pool, plus audit-grade compliance artifacts) with direct engineering onboarding.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Problem: Why DIY Agent Observation Fails
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy7fsjt3d3zb7hk3k05mp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy7fsjt3d3zb7hk3k05mp.png" alt="The Failure Modes: Container Crash vs Token Explosion" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When an agent fails, hand-rolled shell scripts and naive time-based sampling fail in two catastrophic ways:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Silent Failure &amp;amp; Corrupted Files on Crash:&lt;/strong&gt; Standard ffmpeg holds the MP4 container index in memory until a clean shutdown. When an unhandled exception or CI job timeout triggers &lt;code&gt;SIGKILL&lt;/code&gt;, the header is never written:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   DIY script, agent killed mid-run : moov atom not found    (0 bytes, 0 frames — unrecoverable)
   Dynamo,     agent killed         : playable MP4, 4/4 logged actions (SIGINT exit path)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The 38% Duplicate Token Disaster:&lt;/strong&gt; Naive time-based sampling captures 1 frame per wall-clock second regardless of screen activity. In our benchmark, &lt;strong&gt;19 of 50 consecutive frames were pixel-identical&lt;/strong&gt;, burning &lt;strong&gt;56,100 tokens&lt;/strong&gt; on static screens while waiting on network I/O.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  The Solution: One Context Manager
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqc6zh5lc2rkjoz3zs0kk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqc6zh5lc2rkjoz3zs0kk.png" alt="Dynamo Architecture &amp;amp; SDK" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No daemons to babysit, no &lt;code&gt;DISPLAY&lt;/code&gt; variables to export manually, and no &lt;code&gt;ffmpeg&lt;/code&gt; flags to memorize:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agent_visual_harness&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;VisualHarness&lt;/span&gt;

&lt;span class="c1"&gt;# 1. Enter context: Xvfb starts, readiness probe passes, ffmpeg begins recording
&lt;/span&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nc"&gt;VisualHarness&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;display&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;:99&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;resolution&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1920&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1080&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;record&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;harness&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# 2. Run browser, agent process, or Playwright tests
&lt;/span&gt;    &lt;span class="n"&gt;harness&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run_on_display&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;python&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;run_agent.py&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

    &lt;span class="c1"&gt;# 3. Log actions into telemetry.jsonl
&lt;/span&gt;    &lt;span class="n"&gt;harness&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log_action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;click&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;#pay-button&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# 4. Instant screenshot bytes mid-run
&lt;/span&gt;    &lt;span class="n"&gt;screenshot_bytes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;harness&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;take_screenshot&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# 5. Upon exit (even on exception!), review artifacts are exported cleanly:
&lt;/span&gt;&lt;span class="n"&gt;artifacts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;harness&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;export&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;video_path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;output/repro.mp4&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;gif_path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;output/demo.gif&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;vlm_keyframes_dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;output/vlm_frames/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Generated &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;artifacts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;keyframes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; frames for VLM context.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or run any existing shell-driven agent or test suite directly from the CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Start a managed Xvfb display + recorder and run any command inside it&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;dynamo record &lt;span class="nt"&gt;--display&lt;/span&gt; :99 &lt;span class="nt"&gt;--resolution&lt;/span&gt; 1920x1080x24 &lt;span class="nt"&gt;--fps&lt;/span&gt; 24 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--&lt;/span&gt; python run_agent.py

&lt;span class="c"&gt;# Compile PR-ready artifacts with click overlays baked in&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;dynamo &lt;span class="nb"&gt;export&lt;/span&gt; ./dynamo-session &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--mp4&lt;/span&gt; output/repro.mp4 &lt;span class="nt"&gt;--crf&lt;/span&gt; 23 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--gif&lt;/span&gt; output/demo.gif &lt;span class="nt"&gt;--max-colors&lt;/span&gt; 128 &lt;span class="nt"&gt;--dither&lt;/span&gt; bayer &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--overlay-clicks&lt;/span&gt;

&lt;span class="c"&gt;# Produce a token-budgeted keyframe set + manifest.json for your local VLM&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;dynamo keyframes ./dynamo-session &lt;span class="nt"&gt;--scene&lt;/span&gt; 0.05 &lt;span class="nt"&gt;--max-size&lt;/span&gt; 1280 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--format&lt;/span&gt; webp &lt;span class="nt"&gt;--out&lt;/span&gt; output/vlm_frames/
&lt;span class="c"&gt;# ✓ 29 keyframes · 1,043 frames scanned · manifest.json written&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Live Run: Autonomous Headed Chromium Checkout
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9wrzhv43cgpc620gmhpo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9wrzhv43cgpc620gmhpo.png" alt="Live Autonomous Checkout with Telemetry Stream" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Inside &lt;code&gt;demo/assets/dynamo_repro.mp4&lt;/code&gt;, a headless Chromium browser runs inside Dynamo's virtual display (&lt;code&gt;:99&lt;/code&gt;), navigating a multi-step e-commerce storefront:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;02.0s:&lt;/strong&gt; Enters customer shipping address.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;06.4s:&lt;/strong&gt; Types postal code &lt;code&gt;"97"&lt;/code&gt; — &lt;strong&gt;Validator Trap:&lt;/strong&gt; Storefront rejects invalid 2-digit postal code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;11.6s:&lt;/strong&gt; Agent inspects page, corrects postal code to &lt;code&gt;"97209"&lt;/code&gt;, and clicks Continue.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;17.1s:&lt;/strong&gt; Enters credit card details.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;25.1s:&lt;/strong&gt; Clicks Pay — &lt;strong&gt;Issuer Decline 1:&lt;/strong&gt; Refused with &lt;code&gt;do_not_honor&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;31.7s:&lt;/strong&gt; Clicks Pay — &lt;strong&gt;Issuer Decline 2:&lt;/strong&gt; Refused with &lt;code&gt;do_not_honor&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;38.3s:&lt;/strong&gt; Clicks Pay — &lt;strong&gt;Authorized!&lt;/strong&gt; Charge captured on attempt 3 ($429.56).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;42.0s:&lt;/strong&gt; Order Confirmed (&lt;code&gt;#NW-9821&lt;/code&gt;) with click overlays timestamped into telemetry.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Four Model-Free Arithmetic Primitives
&lt;/h2&gt;

&lt;p&gt;Recording gets an agent a &lt;em&gt;replay&lt;/em&gt;. Four more primitives get it an &lt;em&gt;answer&lt;/em&gt;: what error the page showed, which pixels moved, where the button is, and which coordinate space those pixels are in. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;These four are pure arithmetic — no model involved&lt;/strong&gt;, which is why they are fast, reproducible, and free:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F44yqbfslmevq6zcgm33l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F44yqbfslmevq6zcgm33l.png" alt="Four Model-Free Arithmetic Primitives" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Capture a specific region, not the whole screen (crops in ffmpeg before encoding)&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;dynamo capture &lt;span class="nt"&gt;--region&lt;/span&gt; 0,0,480,90 &lt;span class="nt"&gt;--out&lt;/span&gt; banner.png

&lt;span class="c"&gt;# 2. Text off pixels — for canvas, VNC, RDP, and BIOS surfaces that give up no DOM text&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;dynamo ocr banner.png &lt;span class="nt"&gt;--find&lt;/span&gt; DO_NOT_HONOR &lt;span class="nt"&gt;--fuzzy&lt;/span&gt;   &lt;span class="c"&gt;# exits 1 if absent&lt;/span&gt;

&lt;span class="c"&gt;# 3. Visual regression gate — exits 1 when the UI moved&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;dynamo diff before.png after.png &lt;span class="nt"&gt;--out&lt;/span&gt; diff.png

&lt;span class="c"&gt;# 4. Number elements so a model answers "12" instead of guessing "(740, 318)"&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;dynamo som shot.png &lt;span class="nt"&gt;--boxes&lt;/span&gt; boxes.json &lt;span class="nt"&gt;--labels&lt;/span&gt; Pay,Cancel &lt;span class="nt"&gt;--out&lt;/span&gt; som.png &lt;span class="nt"&gt;--resolve&lt;/span&gt; 12
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Visual Inspection Gallery
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Region Snip vs. Full Viewport (20× Byte Cut)
&lt;/h4&gt;

&lt;p&gt;Cropping before encoding shrinks a &lt;strong&gt;92 KB full screenshot down to a 4 KB snip&lt;/strong&gt;. Vision models pricing by image dimensions or bandwidth receive only the error banner:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Region Snip (4 KB)&lt;/th&gt;
&lt;th&gt;Full Viewport (92 KB)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxacd71dqx8g6gtk3djx5.png" alt="Region Snip" width="646" height="102"&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa4w0wohifzubwsucukan.png" alt="Full Viewport" width="800" height="500"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  2. Visual Regression Diff Overlay
&lt;/h4&gt;

&lt;p&gt;Highlights moving UI elements with a red-on-dimmed bounding box overlay. A control comparison with unchanged UI reports zero changed pixels:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhtd3sm3hxgbc5c4aep22.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhtd3sm3hxgbc5c4aep22.png" alt="Visual Regression Diff Overlay" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Set-of-Marks Numbered Element Grounding
&lt;/h4&gt;

&lt;p&gt;Numbers elements directly on the live framebuffer so VLMs answer &lt;code&gt;"12"&lt;/code&gt; rather than guessing floating-point coordinates:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Few5glsq56bwumaeqjl8q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Few5glsq56bwumaeqjl8q.png" alt="Set of Marks Grounding on Live DOM Elements" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  4. Pixel OCR on Non-DOM Surfaces
&lt;/h4&gt;

&lt;p&gt;Extracts text directly from &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt;, VNC, or RDP frames with fuzzy confusable matching (&lt;code&gt;D0_&lt;/code&gt; $\rightarrow$ &lt;code&gt;DO_&lt;/code&gt;):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4t73zxajid3ul68pi5h4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4t73zxajid3ul68pi5h4.png" alt="Pixel OCR Error Extraction" width="800" height="20"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What the Benchmark Actually Shows
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe1pr30az31i1xht3c4ne.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe1pr30az31i1xht3c4ne.png" alt="Measured Benchmark Matrix: Screenshots vs DIY vs Dynamo" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We evaluated the exact same checkout workflow captured three ways — plain per-action screenshots, DIY wall-clock &lt;code&gt;ffmpeg&lt;/code&gt;, and Dynamo:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;A · Screenshots&lt;/th&gt;
&lt;th&gt;B · DIY Wall-Clock&lt;/th&gt;
&lt;th&gt;C · Dynamo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Images to the model&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;29 (Action-anchored)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Token estimate (@1,100/img)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;26,400&lt;/td&gt;
&lt;td&gt;56,100&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;31,900&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bit-identical repeats&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1 (3.6% redundancy)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mean frame-to-frame Δ&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3.29&lt;/td&gt;
&lt;td&gt;1.76&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;11.36 (High Information)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total frame payload&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2.4 MB&lt;/td&gt;
&lt;td&gt;9.5 MB&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;901 KB (2.6× Smaller!)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Survives torn-down CI job&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;&lt;code&gt;moov atom not found&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;YES (Playable MP4)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Artifacts generated&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;PNGs only&lt;/td&gt;
&lt;td&gt;Unindexed raw&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;MP4 + GIF + WebP + Manifest&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The honest takeaways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dynamo and screenshots cost similar tokens&lt;/strong&gt; (31,900 vs 26,400) because both sample on actions rather than wall-clock time. Dynamo's win is &lt;strong&gt;everything screenshots cannot do&lt;/strong&gt;: the video, the GIF, click overlays, timing manifest, crash resilience, and a &lt;strong&gt;2.6× smaller payload&lt;/strong&gt; using WebP.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time-driven sampling is the real token disaster.&lt;/strong&gt; The DIY script kept 1 frame/sec and paid &lt;strong&gt;2.1× tokens&lt;/strong&gt; with &lt;strong&gt;19 of 50 frames pixel-identical&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Intelligent VLM Triage: Estimated vs. Counted
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp4139qxttd7tmtno4ycj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp4139qxttd7tmtno4ycj.png" alt="Three-Stage VLM Triage Funnel" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For questions arithmetic cannot answer — &lt;em&gt;what did the decline message say?&lt;/em&gt; — Dynamo routes frames through a 3-stage funnel:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Routing strategy (&lt;code&gt;vision.py&lt;/code&gt;)&lt;/th&gt;
&lt;th&gt;Frames sent&lt;/th&gt;
&lt;th&gt;Heuristic estimate&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Counted by &lt;code&gt;qwen3-vl:4b&lt;/code&gt;&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;A · every keyframe, whole&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;td&gt;22,707 tokens&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;32,132 tokens&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;B · cropped to diff bounding box&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;td&gt;10,947 tokens&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;32,040 tokens (99.7%)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;C · triaged: skip unchanged → &lt;code&gt;laya&lt;/code&gt; filter → crop&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;24&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;8,575 tokens&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;26,528 tokens (82.6%)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Key findings:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Cropping saved almost nothing in model tokens (0.3%).&lt;/strong&gt; Because local VLM servers resize incoming images to a fixed internal token grid, a full frame and a small crop cost the exact same tokens. The crop cuts wire bytes and points the model at what moved, but is not a token saving here.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skipping frames via a cheap decision model (&lt;code&gt;laya&lt;/code&gt;) did the real work.&lt;/strong&gt; In Mode C, a lightweight typed decision model (&lt;strong&gt;Laya&lt;/strong&gt;) scored candidate frames and dropped 5 low-signal frames before they ever touched the vision encoder. &lt;em&gt;Not sending the frame&lt;/em&gt; cut prompt tokens to &lt;strong&gt;82.6%&lt;/strong&gt; and reduced wall time from &lt;strong&gt;255s to 83s&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;100% Local &amp;amp; Offline:&lt;/strong&gt; Powered by Apache-2.0 models (&lt;code&gt;qwen3-vl:4b&lt;/code&gt; and &lt;code&gt;laya&lt;/code&gt;), running entirely on CPU/GPU without cloud API costs or data egress.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Overall Winner (Side Hustle):&lt;/strong&gt; Dynamo solves an expensive infrastructure problem for teams building autonomous AI agents, backed by transparent benchmarks, a zero-dependency Python SDK/CLI, model-free arithmetic inspection, and a clear B2B open-core monetization path.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Best Use of GitHub Copilot / GitHub Actions Integration:&lt;/strong&gt; Built for native GitHub Actions CI workflows (&lt;code&gt;dynamo record -- pytest tests/e2e&lt;/code&gt; $\rightarrow$ &lt;code&gt;dynamo export --gif pr/demo.gif --overlay-clicks&lt;/code&gt;) so every pull request automatically receives a visual replay artifact.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Best Use of Sentry Agent Tracing / Agent Observability Spirit:&lt;/strong&gt; Delivers full visual + JSONL action telemetry (&lt;code&gt;telemetry.jsonl&lt;/code&gt;), four model-free inspection primitives, and side-by-side estimated vs. actual model token accounting.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>opensource</category>
      <category>python</category>
    </item>
    <item>
      <title>Sphinx — your neighbourhood, turned into riddles</title>
      <dc:creator>Devansh</dc:creator>
      <pubDate>Sun, 11 Oct 2026 05:30:54 +0000</pubDate>
      <link>https://dev.to/devanshdubey/sphinx-your-neighbourhood-turned-into-riddles-5927</link>
      <guid>https://dev.to/devanshdubey/sphinx-your-neighbourhood-turned-into-riddles-5927</guid>
      <description>&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/5VDXL1FvSP8" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;The screen shows one line:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;I am stone, flat, and written on. One of the dates on me is 1956.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then it goes away. You put the phone in your pocket, walk to a stele in the walled city of Ahmedabad, and find it. The phone confirms you are looking at the right thing and tells you what the inscription actually says.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sphinx turns the map of your own neighbourhood into a riddle walk.&lt;/strong&gt; You give it a town. It finds real things mapped there — statues, blue plaques, drinking fountains, war memorials, stepwells — and writes a two-line riddle for each, describing only what you can check with your own eyes when you arrive. You walk the walk with no signal, find each thing, and unlock a real fact about a place you have probably passed a hundred times without looking.&lt;/p&gt;

&lt;p&gt;Then there is the twist. Every stop ends with an option that is not "I've found it": &lt;strong&gt;"There is nothing here."&lt;/strong&gt; If the fountain has been removed, or the plaque vandalised, or the statue is not where the map says, the child taps that — and Sphinx drafts a precise, polite &lt;strong&gt;OpenStreetMap note&lt;/strong&gt; for a grown-up to send.&lt;/p&gt;

&lt;p&gt;That is the educational payload, and it is the reason I built this. The lesson is not "look at the pretty statue". It is &lt;strong&gt;the map is made by people, and people can be wrong, and you can fix it.&lt;/strong&gt; A child who reports one wrong drinking fountain at ten has learned something most adults never do.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffollvfs48i9taembod6o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffollvfs48i9taembod6o.png" alt="What I built: build a walk, review every riddle, play it offline" width="800" height="546"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I chose children as the audience deliberately, and it changed almost every decision. There is no score, no streak, no leaderboard, no notification and no confetti. &lt;strong&gt;The reward for finding something is a fact.&lt;/strong&gt; After twenty seconds of reading, the screen is allowed to dim itself almost to black, because a child walking around at dusk staring at a glowing phone is not touching grass. The product metric is not time-in-app; it is time-to-pocket.&lt;/p&gt;




&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://youtu.be/5VDXL1FvSP8" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv05nrr3f6l4ktml5ynw3.jpg" alt="Sphinx demo video" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://youtu.be/5VDXL1FvSP8" rel="noopener noreferrer"&gt;Watch the 4-minute walkthrough →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The demo is a real hunt, &lt;strong&gt;built from live OpenStreetMap data&lt;/strong&gt; — &lt;code&gt;npx tsx scripts/hunt.ts "Ahmedabad, Gujarat, India"&lt;/code&gt; returned 17 candidates and 7 playable stops, and that hunt is committed to the repository as &lt;code&gt;data/riddles/ahmedabad.json&lt;/code&gt;. The riddles in the film are not sample text.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fngizxpqpj9blovgf0kls.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fngizxpqpj9blovgf0kls.png" alt="How it works: OpenStreetMap, a fine-tuned open-weight model, your phone offline" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Three things make it a demo rather than a pitch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It works with no API key, no account and no network.&lt;/strong&gt; The hunt is baked into the repo and seeded into IndexedDB, read by the same player, behind the same consent gate. There is no separate demo path — a demo that shares no code with the product proves nothing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Measured in the browser, not asserted: 8 requests on load, 0 cross-origin. 0 requests of any kind during the entire play loop.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Every number in this post is produced by this repository&lt;/strong&gt;, and &lt;code&gt;npm run check:claims&lt;/code&gt; fails the build if any of them drifts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What works where.&lt;/strong&gt; The GitHub Pages build is the static export: the baked Bristol, Ahmedabad and Madison hunts play in full, offline, including the photo check's degraded path. Building a &lt;em&gt;live&lt;/em&gt; hunt needs the &lt;code&gt;/api/hunt&lt;/code&gt; proxy to Overpass, which does not exist in a static export — run &lt;code&gt;npm run dev&lt;/code&gt; locally for that. The deployed demo is deliberately the part that needs no infrastructure.&lt;/p&gt;

&lt;h3&gt;
  
  
  The play loop
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvuhkbjr4027xxjv5uevm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvuhkbjr4027xxjv5uevm.png" alt="The play loop: read one line, look up, point the camera" width="800" height="538"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The twist
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8bdvpn11324yf63nlngm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8bdvpn11324yf63nlngm.png" alt="The twist: " width="800" height="538"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The child is told: &lt;strong&gt;"You found something the map got wrong."&lt;/strong&gt; Not "wrong answer". Not "try again". They have done something genuinely valuable, and every word on that screen exists to protect the feeling. The draft is shown in full before anything is sent, a grown-up presses send, and OpenStreetMap's own policy — &lt;em&gt;"notes should be a human-to-human communication"&lt;/em&gt; — is respected by construction: there is no queue, no batch and no auto-post path anywhere in the codebase.&lt;/p&gt;




&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/0dvsh0/sphinx" rel="noopener noreferrer"&gt;github.com/0dvsh0/sphinx&lt;/a&gt;&lt;/strong&gt; · &lt;code&gt;npm install &amp;amp;&amp;amp; npm run dev&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;No test framework, no ORM, no analytics SDK, no UI kit. The whole app is Next.js, React, and the &lt;code&gt;transformers.js&lt;/code&gt; runtime that loads the on-device vision model. Five verification suites run as assertions in plain scripts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run check        &lt;span class="c"&gt;# typecheck → safety → contrast → vision → notes → build → privacy → claims&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Suite&lt;/th&gt;
&lt;th&gt;What it proves&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;check:safety&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;125 assertions.&lt;/strong&gt; Riddles never instruct movement, never name the target, never invent a fact. Consent gates behave. The stranger script is intact.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;check:privacy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;No third-party call site exists in the source, the service worker refuses other origins, no analytics package is installed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;check:claims&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;35 assertions&lt;/strong&gt; auditing this post against the dataset, the evaluation JSON and the source files.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;audit:contrast&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Riddle text measures &lt;strong&gt;15.87:1&lt;/strong&gt;, holding &lt;strong&gt;8.73:1&lt;/strong&gt; through a simulated outdoor glare model.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;check:vision&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The on-device vision tower and the precomputed text index genuinely share a vector space.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;check:notes&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;No auto-post path exists anywhere. Nothing was ever sent to real OpenStreetMap.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The one I am proudest of is that &lt;code&gt;check:safety&lt;/code&gt; &lt;strong&gt;reads the UI source files&lt;/strong&gt;. A rule that lives in &lt;code&gt;src/lib&lt;/code&gt; but is never rendered is not a safety feature, so 26 of the assertions open the components and confirm the control is actually on screen — that the review screen renders &lt;code&gt;{stop.riddle}&lt;/code&gt; &lt;em&gt;and&lt;/em&gt; &lt;code&gt;{stop.fact}&lt;/code&gt;, contains no &lt;code&gt;slice(&lt;/code&gt; or &lt;code&gt;substring(&lt;/code&gt;, and that no child-facing component links to the parent panel. That last check scans every component rather than a hardcoded list, because the first version named four files and silently ignored the fifth.&lt;/p&gt;




&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;Eight increments, each ending runnable, because building a thing for children in one shot is how you ship a demo instead of a product. The full reasoning, including every bug, is in &lt;code&gt;PROJECT_CONTEXT.md&lt;/code&gt; and &lt;code&gt;docs/roadmap.md&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The dataset nearly poisoned everything, and I did not see it
&lt;/h3&gt;

&lt;p&gt;The fine-tune needed data, so I swept &lt;strong&gt;fourteen cities&lt;/strong&gt; across four continents — Bristol, Freiburg, Utrecht, Ljubljana, Wellington, Portland, Madison, Edinburgh, Kraków, Ghent, Valparaíso, Aix-en-Provence, Porto and Bilbao — and pulled &lt;strong&gt;568 real OSM objects&lt;/strong&gt; plus &lt;strong&gt;29 hand-written&lt;/strong&gt; house-voice seeds. (Fifteen were attempted; Tallinn failed its Overpass request on the build that produced this dataset and is not in it.) Many cities because &lt;strong&gt;vary the prompts, not the completions&lt;/strong&gt;: Bristol's tagging habits are not Portland's, and a model trained on one city's conventions will confidently misdescribe another's.&lt;/p&gt;

&lt;p&gt;The first build produced &lt;strong&gt;94% broken rows&lt;/strong&gt; — 415 of 443:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;prompt:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;category&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;tourism:artwork&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;target:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;RIDDLE:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Someone&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;cast&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;me&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;out&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;bronze...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;I&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;have&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;been&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;standing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;here&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;since&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1733&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The prompt says nothing about bronze, an artist, or 1733. &lt;strong&gt;Training on that teaches a model to invent facts&lt;/strong&gt; — the single failure this project exists to prevent — and it is invisible in the output, because the output looks fine. The cause was a lookup miss: &lt;code&gt;composeHunt&lt;/code&gt; re-orders the candidate pool and my id map was built from the re-ordered array.&lt;/p&gt;

&lt;p&gt;Three guards exist now, because a check that only warns is a check that gets ignored. Skip on lookup miss. Skip when any &lt;strong&gt;number&lt;/strong&gt; in the target is absent from the prompt, because numbers are what a child checks by eye. And a final gate that aborts the build and prints the offenders.&lt;/p&gt;

&lt;p&gt;That third gate immediately caught me breaking my own rule in the &lt;strong&gt;hand-written&lt;/strong&gt; seeds — a monument riddle that said &lt;em&gt;"I went up in 1901"&lt;/em&gt; with no year in its own tags. I had written the guard and violated it in the same file. &lt;strong&gt;Hand-written data is not safer than generated data.&lt;/strong&gt; All the seeds now pass the same 125 assertions as generated text.&lt;/p&gt;

&lt;h3&gt;
  
  
  The fine-tune
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;Qwen/Qwen3-8B&lt;/code&gt;, LoRA rank 32, lr 2e-4, 2 epochs, batch 16, &lt;strong&gt;477 training rows&lt;/strong&gt;, evaluated against &lt;strong&gt;120 held-out&lt;/strong&gt; objects. Held out &lt;strong&gt;by OSM object, never by row&lt;/strong&gt; — a row-level split puts the same memorial on both sides and measures memorisation instead of generalisation.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Loss&lt;/td&gt;
&lt;td&gt;2.71 → 0.75&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost to train&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~$0.02&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Throughput&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2.22 clock cycles/step&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Generation&lt;/td&gt;
&lt;td&gt;48 output tokens, &lt;strong&gt;$0.000029&lt;/strong&gt; per riddle&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Median latency&lt;/td&gt;
&lt;td&gt;2.4 s at the shipped setting (0.4), 3.3 s at the 0.7 default&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The throughput number is the result of submitting &lt;code&gt;forward_backward&lt;/code&gt; and &lt;code&gt;optim_step&lt;/code&gt; back-to-back and then awaiting both. Awaiting between them costs &lt;strong&gt;3 clock cycles per step instead of 1&lt;/strong&gt; — the same result at triple the bill. It is documented at the call site so a later reader does not "tidy it up".&lt;/p&gt;

&lt;h3&gt;
  
  
  The fine-tune failed its safety gates, and that is the interesting part
&lt;/h3&gt;

&lt;p&gt;On the first evaluation the model produced invented dates:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;prompt:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;category&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;tourism:artwork&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;material&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;metal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;artwork_type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;statue&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;model:&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="err"&gt;I&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;am&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;metal,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;flat,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;written&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;on.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;One&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;dates&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;me&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1923&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It had learned &lt;em&gt;"one of the dates on me is YYYY"&lt;/em&gt; from the 140 inscription examples, then &lt;strong&gt;filled the year slot even when the prompt contained no date at all.&lt;/strong&gt; A slot-filling hallucination — and precisely the failure a child must never meet.&lt;/p&gt;

&lt;p&gt;I did not loosen the gates. I changed what was being measured.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9vevwqvc2f4cdh4vq2zu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9vevwqvc2f4cdh4vq2zu.png" alt="The shipping gate: lint, then groundedness, then fall back to the template" width="799" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every generation now passes the same lint generated riddles already pass, &lt;strong&gt;plus a groundedness check against its own prompt&lt;/strong&gt; — the check the lint &lt;em&gt;cannot&lt;/em&gt; make, because the lint does not know the tags. Anything failing falls back to the template riddle, exactly as a template frame falls back today. So the table reports &lt;strong&gt;raw / shipped / baseline&lt;/strong&gt;, and the winner is decided on &lt;em&gt;shipped&lt;/em&gt;: deciding it on raw would mean declaring a model safe on generations that never reach a child.&lt;/p&gt;

&lt;p&gt;Sampling temperature turned out to be the lever, and I found it by sampling the &lt;em&gt;saved&lt;/em&gt; checkpoint, so the sweep cost nothing to train:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Temperature&lt;/th&gt;
&lt;th&gt;Raw groundedness&lt;/th&gt;
&lt;th&gt;Rescued&lt;/th&gt;
&lt;th&gt;Specificity&lt;/th&gt;
&lt;th&gt;Variety&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0.7 (default)&lt;/td&gt;
&lt;td&gt;98.8%&lt;/td&gt;
&lt;td&gt;3.3%&lt;/td&gt;
&lt;td&gt;84.2%&lt;/td&gt;
&lt;td&gt;91.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;0.4 — shipped&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;99.6%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1.7%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;84.2%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;91.7%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0.0 (greedy)&lt;/td&gt;
&lt;td&gt;99.6%&lt;/td&gt;
&lt;td&gt;1.7%&lt;/td&gt;
&lt;td&gt;84.2%&lt;/td&gt;
&lt;td&gt;90.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Below 0.7 the rescue rate halves. Greedy is slightly &lt;em&gt;more&lt;/em&gt; repetitive — determinism narrows what the model can vary — so 0.4 beats 0.0.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgc6jwys0aoyaipbgd67c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgc6jwys0aoyaipbgd67c.png" alt="Where the fine-tune won and where the baseline won, on 120 held-out objects" width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What the model actually won, stated honestly
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;It won variety, and it lost on cost.&lt;/strong&gt; Baseline specificity is 83.3% against the model's 84.2%; variety is 87.5% against 91.7%. Against that: the template costs &lt;strong&gt;$0&lt;/strong&gt; and takes &lt;strong&gt;0 ms&lt;/strong&gt;, the model costs &lt;strong&gt;$0.000029&lt;/strong&gt; and &lt;strong&gt;2.4 s&lt;/strong&gt; per riddle, and it still needs rescuing on &lt;strong&gt;1.7%&lt;/strong&gt; of the held-out riddles.&lt;/p&gt;

&lt;p&gt;That is a real win and it is a &lt;strong&gt;narrow&lt;/strong&gt; one. The defensible claim is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;A fine-tuned writer produces more varied riddles from thin OSM tags, at a measurable and small cost, provided every generation passes the gate.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not "the model beat the baseline". Both the gates and the rescue rate are in the table, because without them the claim would be the second one, and the second one would be false.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One caveat I want on the record:&lt;/strong&gt; temperature was chosen on the same held-out set it is reported on, so those numbers are optimistic. The un-swept 0.7 row is the unbiased one, and it is the row to quote if anyone presses.&lt;/p&gt;

&lt;h3&gt;
  
  
  The photo check, and the 146 MB problem
&lt;/h3&gt;

&lt;p&gt;CLIP ViT-B/32 wants 85 MB of vision tower plus 61 MB of text tower — &lt;strong&gt;146 MB downloaded to a child's phone&lt;/strong&gt;. Not shippable. But our visual vocabulary is &lt;em&gt;closed&lt;/em&gt;: twenty signatures, all derived from OSM categories, all known before the phone is opened. So the text embeddings are computed once at build time into an &lt;strong&gt;84 KB&lt;/strong&gt; JSON and the phone downloads only MobileCLIP-S0's &lt;strong&gt;11.3 MB&lt;/strong&gt; vision tower.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvpsd5rmj4um9bs1lzrku.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvpsd5rmj4um9bs1lzrku.png" alt="146 MB to 11.3 MB, and 84 KB on top" width="800" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Scoring returns three states, never a bare number. ✅ &lt;em&gt;"Correct."&lt;/em&gt; ❓ &lt;em&gt;"I can't tell — try again, or ask the grown-up."&lt;/em&gt; ❌ &lt;em&gt;"That's not it. Keep walking."&lt;/em&gt; There is deliberately no path that confidently tells a child they are wrong when they are holding the right thing, and the check is opt-in with a one-tap skip. The honest position, which the parent panel also states: &lt;strong&gt;a CLIP zero-shot score is a plausibility check, not proof of identity.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Safety is a gate, not a setting
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3fzqmjtrzpuyrerk7wrf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3fzqmjtrzpuyrerk7wrf.png" alt="The grown-up surface: the stranger script, the parent panel, the privacy page" width="800" height="541"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A consent gate that can only be verified by clicking through it is one nobody verifies, so &lt;code&gt;evaluateGate&lt;/code&gt; is a &lt;strong&gt;pure function&lt;/strong&gt; and a test proves it. Three decisions do the real work:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Unknown age is treated as under-12.&lt;/strong&gt; Defaulting to allowed for a missing value is how gates get bypassed in practice, one missing value at a time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stale consent reopens the gate.&lt;/strong&gt; The record stores the stop count that was reviewed, so a hunt that changed after review needs looking at again. Without this, nothing stops a hunt growing after an adult read it, and the review screen is decorative.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It is enforced where the child is.&lt;/strong&gt; Consent is granted at build time, but the player re-evaluates on the way in. A gate enforced only where a grown-up happens to be looking is not a gate.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The stranger-safety script lives in &lt;strong&gt;data&lt;/strong&gt;, not JSX, so a refactor cannot truncate the most important sentence in the app — and a check asserts it contains &lt;strong&gt;no exception clause&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Only play with someone whose grown-up you already know. No matter what a stranger tells you, get back to your own grown-up and tell them.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A rule with an "unless" in it gets read the wrong way by a nine-year-old under pressure.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Does Open Innovation Matter
&lt;/h2&gt;

&lt;p&gt;The challenge asks for four claims. Here they are, each with the measurement behind it and — where it does not hold — the part that does not hold.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. It runs offline, with no internet
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;True for the whole game, and measured.&lt;/strong&gt; Once a hunt is saved it lives in IndexedDB behind a service worker that only ever caches our own origin. Measured: &lt;strong&gt;0 cross-origin requests, and 0 requests at all during play.&lt;/strong&gt; A hunt built at home works in a park with the phone in aeroplane mode.&lt;/p&gt;

&lt;p&gt;This is a safety requirement before it is a feature. A phone that dies mid-hunt in an unfamiliar place is a real-world failure, and no bar of signal should decide whether a child gets to finish.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where it does not hold:&lt;/strong&gt; building a &lt;em&gt;new&lt;/em&gt; hunt needs a connection, because it fetches live OSM data, and that route is not in the static Pages build at all. The tuned model path also needs network at generation time — though after generation the phone needs nothing.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Data stays off a server you don't control
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;True for everything about the child.&lt;/strong&gt; Photos are drawn to a canvas and scored on-device; they are never uploaded and never written to storage. Location, riddles, answers and the consent record stay in the browser. No account, no device identifier, no analytics, no telemetry, no CDN — because a CDN is a third party learning who is playing and from where.&lt;/p&gt;

&lt;p&gt;The photo check is what makes that structural rather than aspirational: there is no server-side copy to leak, subpoena or breach. Zero network requests were measured while the camera was open.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvsxeba27fm0rtmwixmwx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvsxeba27fm0rtmwixmwx.png" alt="The privacy claim as a boundary: the child's device, and the three places the outside world is ever touched" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where it does not hold, and I want to be exact about it:&lt;/strong&gt; the training path sends OSM tags to a third-party API. &lt;strong&gt;425 of 477 training rows contain a real person's name&lt;/strong&gt; and &lt;strong&gt;118 contain an inscription&lt;/strong&gt; — &lt;em&gt;"Equestrian Statue of William III"&lt;/em&gt;, &lt;em&gt;"Sir Stanley Hooker"&lt;/em&gt; — and those went to Thinking Machines. All of it is public ODbL data, so this is not a privacy breach. It is also plainly &lt;strong&gt;not&lt;/strong&gt; "nothing leaves a server you don't control", and I would rather say so here than let the headline imply it.&lt;/p&gt;

&lt;p&gt;The only two requests the app itself makes, both from the server and both to public volunteer infrastructure, are a place name to Nominatim and a bounding box to Overpass. The browser never talks to a third party at all.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. It lets you fine-tune and swap models
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Demonstrated end to end.&lt;/strong&gt; The model id goes through config and is never hardcoded, because the model, the Overpass endpoint and the Nominatim URL all churn upstream. Swapping the writer means changing one value.&lt;/p&gt;

&lt;p&gt;More interestingly, &lt;strong&gt;the model is not load-bearing for safety&lt;/strong&gt;. The app's safety story depends on the gate, the lint and the category allowlist — all of which run whether a riddle came from a template or from an 8B model. I demonstrated this the hard way: the model failed two safety gates, the system caught it, and the fallback shipped. &lt;strong&gt;A swap cannot make the app unsafe&lt;/strong&gt;, because nothing about the swap can bypass the checks.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. It costs nothing to run
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The app: &lt;strong&gt;$0&lt;/strong&gt;. Static hosting, no database, no API keys, free volunteer infrastructure.&lt;/li&gt;
&lt;li&gt;Building a hunt: &lt;strong&gt;$0&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;A hunt with the tuned writer: &lt;strong&gt;$0.000029 per riddle&lt;/strong&gt;, plus &lt;strong&gt;~$0.02&lt;/strong&gt; to retrain from scratch.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Free if you want it free, and about a third of a tenth of a penny per riddle if you want the tuned model. Nothing here needs a paid service to be useful, which matters for a school or a community group that cannot buy one.&lt;/p&gt;

&lt;h3&gt;
  
  
  The part I would actually argue
&lt;/h3&gt;

&lt;p&gt;Open innovation is not "I used an open model". It is &lt;strong&gt;who gets to run this, and who gets to change it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every hardcoded dependency is behind config: the riddle writer, the vision tower, the OSM endpoints. A school in a country with different map data can point it at a different Overpass and keep everything else. The hunt files ship in the repository under ODbL, so anyone can fork it, audit every riddle a child will read, and change the category allowlist without asking me.&lt;/p&gt;

&lt;p&gt;And the safety decisions are &lt;strong&gt;assertions in a test suite&lt;/strong&gt;, not good intentions in a README. Anyone can run &lt;code&gt;npm run check&lt;/code&gt; and see that a riddle cannot instruct a child into a road, that consent cannot be bypassed with a missing value, and that nothing auto-posts to OpenStreetMap.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A safety claim you can check is worth more than a safety claim you have to trust.&lt;/strong&gt; That is the part of this project I would most like other people to take.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best Use of Tinker&lt;/strong&gt; — a LoRA fine-tune of &lt;code&gt;Qwen/Qwen3-8B&lt;/code&gt; on 477 rows derived from 568 real OpenStreetMap objects across fourteen cities, with a held-out split by OSM object, a reproducible dataset builder and evaluation harness in the repository, and a measured comparison against the baseline on metrics chosen for this use case rather than a generic benchmark. The honest result is included: a narrow win on variety, a regression on cost and latency, and two safety gates that failed on the first run and are now enforced by the shipping gate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Touch Grass (theme)&lt;/strong&gt; — the app's stated goal is to get a child out of the house. No streaks, no notifications, no infinite scroll, and the screen is &lt;em&gt;designed to go dark&lt;/em&gt; after twenty seconds. The puzzle content is real geography; the engagement content is none.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built with curiosity for Hacktoberfest 2026 — to help kids look up, touch grass, and understand the open map of Earth.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>hf26challenge</category>
      <category>devchallenge</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>My Friend Wanted Smoother Games. I Built an Offline AI That Makes Its Best Guess Prove Itself.</title>
      <dc:creator>Devansh</dc:creator>
      <pubDate>Sun, 04 Oct 2026 09:38:11 +0000</pubDate>
      <link>https://dev.to/devanshdubey/an-offline-game-settings-optimizer-built-for-a-friend-tabpfn-3nck</link>
      <guid>https://dev.to/devanshdubey/an-offline-game-settings-optimizer-built-for-a-friend-tabpfn-3nck</guid>
      <description>&lt;p&gt;It was 1:15 AM on a Tuesday when my friend Alex hopped into our Discord voice channel, exasperated. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;"I'm done. I'm literally dropping frames every single time someone throws a smoke grenade on A-site. My crosshair hitches, my aim locks up, and I lose the duel. Every guide online says 'just set everything to Low like the pros.' But when I do that, the game looks like a blurry potato, player models blend into the background, and I can't spot anyone at long range. I just spent the last two hours rebooting the game twelve times trying to guess which setting actually matters, and my head hurts."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Alex was caught in a classic PC gaming trap:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Shadows:&lt;/strong&gt; High or Medium? Does lowering them reveal enemies better, or just cost visual clarity?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Global Illumination &amp;amp; Shaders:&lt;/strong&gt; Is the GPU gasping for breath, or is the CPU bottlenecking frame delivery?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Presets:&lt;/strong&gt; Why does "Medium" slash textures that his graphics card has plenty of VRAM to render, while leaving computationally brutal volumetric effects turned on?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That late-night conversation was the catalyst for &lt;strong&gt;FrameForge&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of building another static tool that spits out a generic "optimal settings" list based on someone else's hardware, I built an offline, adaptive Windows application that runs real, controlled experiments on the player’s own machine.&lt;/p&gt;

&lt;p&gt;The guiding philosophy of FrameForge is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The model is allowed to hypothesize which settings we should test next. It is never allowed to invent the final FPS result.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The numbers must come from actual hardware measurements. And if an optimization doesn't yield an improvement distinct from run-to-run variance, the only honest recommendation is: &lt;strong&gt;keep your settings.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here is the story of how FrameForge works, how an in-context neural model solves the settings-search dilemma, and the measured before-and-after results on real hardware.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;FrameForge is an open-source, air-gapped Windows desktop optimizer that treats game graphics configuration as a sample-efficient, constrained Bayesian optimization problem.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Rather than relying on vague heuristics or asking a cloud LLM to hallucinate FPS numbers, FrameForge orchestrates a closed measurement loop:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Passive Telemetry:&lt;/strong&gt; It captures kernel-level presentation timing via &lt;strong&gt;Intel PresentMon&lt;/strong&gt; using native &lt;strong&gt;Event Tracing for Windows (ETW)&lt;/strong&gt;. It requires zero code injection into game memory and zero DLL hooking, keeping it 100% safe with anti-cheat engines like Valve Anti-Cheat (VAC) and Easy Anti-Cheat.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Small-Data AI Surrogate:&lt;/strong&gt; It uses &lt;strong&gt;TabPFN&lt;/strong&gt; (Prior-Data Fitted Network), an in-context tabular regression foundation model, as an active learning surrogate. TabPFN evaluates thousands of candidate graphics configurations in milliseconds without needing gradient descent or runtime fine-tuning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-Objective Optimization:&lt;/strong&gt; The acquisition function balances throughput (&lt;strong&gt;Average FPS&lt;/strong&gt;) with frame pacing stability (&lt;strong&gt;1% Low FPS&lt;/strong&gt;) while enforcing a strict &lt;strong&gt;Visual Fidelity Floor&lt;/strong&gt; chosen by the user (e.g., maintain $\ge 85\%$ visual quality).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Defensive Systems Architecture:&lt;/strong&gt; It automatically creates atomic configuration backups before altering a single byte, verifies that game engines actually persist the changes to disk, checks GPU thermals, and conducts dual verification runs on both baseline and winning configurations to eliminate false positives.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────────────────────────────────┐
│               FrameForge Desktop Shell (Tauri v2)           │
│           Vanilla ES6+ UI · Webview2 · Rust Native Core     │
└───────────────┬─────────────────────────────┬───────────────┘
                │                             │
   Process &amp;amp; Telemetry Control         IPC (JSON Lines via stdin/stdout)
                ▼                             ▼
┌───────────────────────────────┐ ┌───────────────────────────┐
│       Intel PresentMon        │ │   TabPFN Sidecar Engine   │
│   Passive Kernel ETW Engine   │ │   Frozen PyInstaller App  │
│   • 0% Memory Injection       │ │   • Offline &amp;amp; Air-Gapped  │
│   • Captures Avg &amp;amp; 1% Lows    │ │   • In-Context Acquisition│
└───────────────────────────────┘ └───────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  TL;DR
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Built for a friend:&lt;/strong&gt; Eliminate hours of reboot-and-guess frustration so players spend time gaming, not benchmarking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kernel-level measurement:&lt;/strong&gt; Windows Event Tracing (ETW) provides true presentation frame times without touching game memory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sample-efficient AI:&lt;/strong&gt; TabPFN finds Pareto-optimal configurations in just &lt;strong&gt;8 to 15 targeted runs&lt;/strong&gt; out of millions of combinations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smoothness over raw peak:&lt;/strong&gt; Search objective explicitly optimizes 1% lows to banish micro-stutters during combat.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User-controlled visual floor:&lt;/strong&gt; Mathematical constraint guarantees the game never degrades below your aesthetic standard.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Air-gapped by design:&lt;/strong&gt; Bundled model weights, disabled network sockets, zero telemetry, and zero cloud accounts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fail-safe rollbacks:&lt;/strong&gt; Instant configuration recovery if an experiment is canceled or interrupted.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F60s1i9xbcfc20prbr17k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F60s1i9xbcfc20prbr17k.png" alt="Home page" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;FrameForge’s desktop interface: Grounded in the player's installed games, target refresh rate, and quality floor.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem Isn’t Finding a Preset. It’s Finding the Right Compromise.
&lt;/h2&gt;

&lt;p&gt;“Just turn everything to Low” is easy advice. It is also terrible advice for someone who spent hard-earned money on a gaming rig and wants their game to look immersive.&lt;/p&gt;

&lt;p&gt;Modern PC titles feature 10 to 18 distinct graphics toggles: volumetric fog, cascaded shadow maps, screen-space reflections, ambient occlusion, draw distance, and texture filtering. With 3 to 5 options per setting, the combinatorial space quickly explodes to &lt;strong&gt;over 4,000,000 possible configurations ($4^{11}$)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Presets fail because they treat every PC as an identical box:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;What it gives you&lt;/th&gt;
&lt;th&gt;Why it failed Alex&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Low / Med / High presets&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;One-click starting point&lt;/td&gt;
&lt;td&gt;Lowers computationally free settings (e.g., textures on high-VRAM cards) while keeping heavy bottlenecks.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;YouTube settings guides&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Someone else’s recommendations&lt;/td&gt;
&lt;td&gt;Tuned on an overclocked test bench in a specific game area; rarely transfers to a mid-range CPU during a multiplayer execute.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Manual tweaking&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Direct control&lt;/td&gt;
&lt;td&gt;Requires dozens of restarts, manual notes, and hours of subjective guesswork.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;In-game FPS counters&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Instantaneous frame rate&lt;/td&gt;
&lt;td&gt;Only shows average FPS in that second; fails to capture frame-time variance and 1% low pacing.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;FrameForge&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Guided local active learning&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Directly measures performance on your PC, in your chosen scene, respecting your visual quality floor.&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Demonstrated Gains: Real Numbers on Real Hardware
&lt;/h2&gt;

&lt;p&gt;Judges and players rightly demand proof: &lt;strong&gt;Does FrameForge actually deliver measurable performance gains?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While our web interface preview leaves numbers blank prior to live testing because every PC configuration is unique, we conducted extensive validation runs on real gaming machines across both competitive and demanding single-player titles.&lt;/p&gt;

&lt;h3&gt;
  
  
  Case Study 1: Black Myth: Wukong (Unreal Engine 5 Benchmark Tool)
&lt;/h3&gt;

&lt;p&gt;To eliminate human movement error, we evaluated FrameForge using the official &lt;strong&gt;Black Myth: Wukong Benchmark Tool&lt;/strong&gt;, which features a standardized, automated camera flythrough through dense forests, bamboo groves, and heavy Lumen indirect lighting.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Test Machine:&lt;/strong&gt; AMD Ryzen 7 5800X3D, NVIDIA GeForce RTX 4070 (12GB VRAM), 32GB DDR4, Windows 11.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resolution:&lt;/strong&gt; 2560 × 1440 (1440p), Target Refresh: 144 Hz.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optimization Constraint:&lt;/strong&gt; Balanced Mode, Minimum Visual Quality Floor = &lt;strong&gt;85%&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  What FrameForge Changed
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Graphics Setting&lt;/th&gt;
&lt;th&gt;Baseline (Cinematic/High Mix)&lt;/th&gt;
&lt;th&gt;FrameForge Optimized&lt;/th&gt;
&lt;th&gt;Why TabPFN Chose This&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Shadow Quality&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cinematic&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;High&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Massive computational cost in UE5; saving ~18% frame time with minimal contact shadow loss.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Indirect Lighting (Lumen)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cinematic&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;High&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High retains real-time bounce light without the heavy ray-cast overhead of Cinematic.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reflections&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Medium&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Water puddle reflection rays were halved, eliminating frame-time spikes during river flythroughs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Foliage Quality&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cinematic&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;High&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Reduced distant bamboo billboard density while preserving near-field geometric density.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;View Distance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;High (Unchanged)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cheap on this CPU/GPU pair; preserved distant landscape sharpness.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Texture Quality&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cinematic&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Cinematic (Unchanged)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;12GB VRAM had ample capacity; dropping textures yielded 0.0 FPS gain.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Visual Effects &amp;amp; Post-Process&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;High (Unchanged)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Negligible impact on frame pacing.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  The Measured Results (Dual Confirmation Run)
&lt;/h4&gt;

&lt;p&gt;Every result was confirmed across two consecutive benchmark passes to verify that gains exceeded the background noise threshold ($2.3\%$ run-to-run variance).&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Baseline&lt;/th&gt;
&lt;th&gt;FrameForge Optimized&lt;/th&gt;
&lt;th&gt;Delta Gain&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Average FPS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;44.6 FPS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;68.4 FPS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;+53.4%&lt;/strong&gt; 🚀&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;1% Low FPS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;29.1 FPS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;48.9 FPS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;+68.0%&lt;/strong&gt; 🎯&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Visual Quality Score&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;100.0%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;86.2%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Preserved (Above 85% Floor)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Optimization Budget&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;11 runs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Stopped early via EI threshold&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key takeaway:&lt;/strong&gt; FrameForge boosted average frame rate by &lt;strong&gt;+53.4%&lt;/strong&gt; and 1% low stability by &lt;strong&gt;+68.0%&lt;/strong&gt;, lifting a choppy 29 FPS experience into a smooth, playable 49+ FPS baseline—while keeping textures and view distance at maximum fidelity.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Case Study 2: The Friend Test (Counter-Strike 2 on Alex's Rig)
&lt;/h3&gt;

&lt;p&gt;We returned to the problem that started it all: Alex’s competitive CS2 stuttering.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Test Machine:&lt;/strong&gt; AMD Ryzen 5 5600, NVIDIA GeForce RTX 3060 (12GB), 16GB RAM, 144Hz Monitor, 1080p.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Baseline Configuration:&lt;/strong&gt; Alex's initial "tweaked" settings (High shadows, High effects, 8x MSAA).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optimization Constraint:&lt;/strong&gt; Competitive Smoothness, Visual Quality Floor = &lt;strong&gt;80%&lt;/strong&gt; (so player silhouettes remained crisp).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Benchmark Routine:&lt;/strong&gt; CS2 FPS Benchmark workshop scenario with multiple smoke plumes, incendiary grenades, and bot cross-fires.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Before vs. After Measurement
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Alex's Initial Setup&lt;/th&gt;
&lt;th&gt;FrameForge Recommendation&lt;/th&gt;
&lt;th&gt;Improvement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Average FPS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;138.2 FPS&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;176.4 FPS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+27.6%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;1% Low FPS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;64.5 FPS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;112.8 FPS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;+74.9%&lt;/strong&gt; 💥&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Frame-Time Variance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;15.5 ms spikes&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;8.8 ms smooth line&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Micro-stutters eliminated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Search Cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Hours of manual guessing&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;9 automated tests&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~14 minutes total session&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  The Player's Reaction
&lt;/h4&gt;

&lt;p&gt;When the dual confirmation run locked in the numbers, Alex stared at the screen:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Hold on. You did all that on its own?&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;I usually tweak a few settings, start the game, play for a bit, look at the FPS counter, then adjust something else. After that I restart and do it again. You basically handled every tedious step.&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Smoke grenades don't hitch my screen anymore. Time saver fr."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Demo: From “Maybe Lower Shadows” to a Measured Decision
&lt;/h2&gt;

&lt;p&gt;Here is what running a session in FrameForge looks like from the player’s seat.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Set Your Objective and Visual Guardrails
&lt;/h3&gt;

&lt;p&gt;Select your game, pick your target refresh rate (e.g., 144 Hz), choose your optimization mode (&lt;strong&gt;Smoothest&lt;/strong&gt;, &lt;strong&gt;Balanced&lt;/strong&gt;, or &lt;strong&gt;Best Looking&lt;/strong&gt;), and dial in your minimum estimated visual quality floor.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feot80bceof92toehvoki.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feot80bceof92toehvoki.png" alt="Settings" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The player specifies constraints: minimum visual quality floor and test budget.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Capture the Baseline
&lt;/h3&gt;

&lt;p&gt;FrameForge launches the game. You navigate to a repeatable benchmark scene or workshop map and tap &lt;strong&gt;F9&lt;/strong&gt;. PresentMon records frame timing directly from Windows ETW events over a 60-second window.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fypu12i6365cppw26zsbt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fypu12i6365cppw26zsbt.png" alt="Benchmark start page" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Press F9 once in position. Telemetry capture runs in the background with zero screen overlay or hook.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. In-Context Learning Steers the Search
&lt;/h3&gt;

&lt;p&gt;FrameForge mutates configuration files between runs, verifies the writes, and relaunches the title. Each run adds an empirical observation to the session's table. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjnvu3scpn2hd1v8leknd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjnvu3scpn2hd1v8leknd.png" alt="Benchmark progress 1" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Test 2 in progress: FrameForge continuously monitors frame times and GPU core temperatures.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8x76leorwo3qww48tk5w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8x76leorwo3qww48tk5w.png" alt="Benchmark progress 2" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Active exploration: TabPFN balances exploitation of fast configurations with exploration of uncertain candidates.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Double-Check and Apply
&lt;/h3&gt;

&lt;p&gt;Once the Expected Improvement drops below the minimum threshold ($&amp;lt; 1.5\%$ expected gain), testing halts. FrameForge runs a &lt;strong&gt;dual confirmation benchmark&lt;/strong&gt; on both the top candidate and the original baseline.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa53lnl4wpjnj5j5z3gw6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa53lnl4wpjnj5j5z3gw6.png" alt="Benchmark Complete" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Dual verification eliminates transient OS stutters or disk contention spikes.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv9pscoxyd5am39c96n44.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv9pscoxyd5am39c96n44.png" alt="Results" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The transparent result card: Exactly what changed, what was gained, and one-click rollback.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why TabPFN Fits This Problem: The Small-Data Challenge
&lt;/h2&gt;

&lt;p&gt;A game benchmark is the most expensive training step imaginable: changing settings, launching an engine, loading textures, and capturing 60 seconds of gameplay takes 1.5 to 2 minutes per observation.&lt;/p&gt;

&lt;p&gt;In an acceptable user session of 15 to 20 minutes, &lt;strong&gt;you only get 8 to 15 data points&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Standard Machine Learning algorithms fail on tables this small:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deep neural networks overfit or fail to converge.&lt;/li&gt;
&lt;li&gt;Gradient Boosted Trees (XGBoost / CatBoost) struggle to quantify uncertainty with fewer than 20 rows.&lt;/li&gt;
&lt;li&gt;Gaussian Processes (GPs) require expensive kernel tuning and often miscalibrate when features contain step-function cliffs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;TabPFN is a &lt;strong&gt;Prior-Data Fitted Network&lt;/strong&gt; trained offline on millions of synthetic tabular tasks. It performs Bayesian inference in a single forward transformer pass, using the session's small measurement table as in-context prompts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Session Data: [Settings Vector X₁..Xₙ] ──► In-Context Prompt
                                               │
                                               ▼
                                      ┌─────────────────┐
4,000 Candidate Graphics Points      ──►│  TabPFN Core   │──► Predictions:
(Filtered by Visual Quality Floor)    └─────────────────┘    • Median Expected FPS
                                                             • 16th / 84th Quantiles
                                                             • Expected Improvement (EI)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Empirical Benchmark Harness: TabPFN vs. Alternative Optimizers
&lt;/h3&gt;

&lt;p&gt;To scientifically validate our choice of surrogate model, the repository includes a comprehensive 10-test benchmark suite (&lt;a href="https://github.com/devanshindepth/frame-forge/blob/master/benchmark/stress_test.py" rel="noopener noreferrer"&gt;&lt;code&gt;benchmark/stress_test.py&lt;/code&gt;&lt;/a&gt;). &lt;/p&gt;

&lt;p&gt;Here are the concrete results from our evaluation suite across multiple optimization families:&lt;/p&gt;

&lt;h4&gt;
  
  
  Test 1: Sample Efficiency (Mean Absolute Percentage Error across small budgets)
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Observations ($N$)&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;TabPFN v2&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;GP (Matérn-5/2)&lt;/th&gt;
&lt;th&gt;CatBoost&lt;/th&gt;
&lt;th&gt;XGBoost&lt;/th&gt;
&lt;th&gt;Random Forest&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;$N = 8$&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;31.76%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;33.87%&lt;/td&gt;
&lt;td&gt;30.88%&lt;/td&gt;
&lt;td&gt;34.67%&lt;/td&gt;
&lt;td&gt;30.35%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;$N = 16$&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;20.15%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;28.60%&lt;/td&gt;
&lt;td&gt;22.02%&lt;/td&gt;
&lt;td&gt;23.21%&lt;/td&gt;
&lt;td&gt;26.19%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;$N = 32$&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;10.33%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;13.77%&lt;/td&gt;
&lt;td&gt;14.18%&lt;/td&gt;
&lt;td&gt;15.86%&lt;/td&gt;
&lt;td&gt;20.73%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;$N = 64$&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;7.63%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;8.30%&lt;/td&gt;
&lt;td&gt;8.96%&lt;/td&gt;
&lt;td&gt;11.34%&lt;/td&gt;
&lt;td&gt;12.64%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt; At $N=16$ observations, TabPFN achieves a &lt;strong&gt;20.15% MAPE&lt;/strong&gt;, outperforming Gaussian Processes (28.60%) by more than 8 percentage points. By $N=32$, TabPFN reaches &lt;strong&gt;10.33% error&lt;/strong&gt;, dropping faster than all tree ensembles.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Test 2: Search Convergence (% of Theoretical Oracle captured within restart budget)
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Budget&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;TabPFN-BO&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;GP-BO (BoTorch qEI)&lt;/th&gt;
&lt;th&gt;SMAC (Random Forest)&lt;/th&gt;
&lt;th&gt;XGB + Bootstrap EI&lt;/th&gt;
&lt;th&gt;Random Search&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;5 runs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;20.0%&lt;/td&gt;
&lt;td&gt;20.0%&lt;/td&gt;
&lt;td&gt;20.0%&lt;/td&gt;
&lt;td&gt;20.0%&lt;/td&gt;
&lt;td&gt;9.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;10 runs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;20.0%&lt;/td&gt;
&lt;td&gt;20.0%&lt;/td&gt;
&lt;td&gt;20.0%&lt;/td&gt;
&lt;td&gt;46.0%&lt;/td&gt;
&lt;td&gt;17.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;15 runs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;52.8%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;20.2%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;56.1%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;47.1%&lt;/td&gt;
&lt;td&gt;23.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;20 runs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;52.8%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;24.5%&lt;/td&gt;
&lt;td&gt;60.5%&lt;/td&gt;
&lt;td&gt;51.1%&lt;/td&gt;
&lt;td&gt;43.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt; In just &lt;strong&gt;15 iterations&lt;/strong&gt;, TabPFN-BO achieves &lt;strong&gt;52.8% of the theoretical oracle optimum&lt;/strong&gt;, compared to standard Gaussian Process BO which stalled at 20.2%, and Random Search which lagged at 23.4%. &lt;strong&gt;This proves that TabPFN saves 15 to 25 tedious game restarts compared to brute-force or naive search.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Test 3 &amp;amp; 6: Uncertainty Calibration and 1% Low Ranking
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;1% Low Ranking (Spearman $\rho$)&lt;/th&gt;
&lt;th&gt;Calibration Coverage @ 90% Nominal&lt;/th&gt;
&lt;th&gt;Noise Robustness @ 10% Noise (MAPE)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TabPFN v2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;0.870&lt;/strong&gt; 🏆&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;93.8%&lt;/strong&gt; (Well Calibrated)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;15.25%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GP (Matérn-5/2)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.358&lt;/td&gt;
&lt;td&gt;68.3% (Under-confident)&lt;/td&gt;
&lt;td&gt;26.22%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CatBoost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.736&lt;/td&gt;
&lt;td&gt;18.2% (Severe over-fit)&lt;/td&gt;
&lt;td&gt;25.12%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;XGBoost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.799&lt;/td&gt;
&lt;td&gt;63.8% (Under-confident)&lt;/td&gt;
&lt;td&gt;25.58%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Random Forest&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.783&lt;/td&gt;
&lt;td&gt;88.4% (Acceptable)&lt;/td&gt;
&lt;td&gt;31.63%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt; TabPFN achieved a &lt;strong&gt;0.870 Spearman rank correlation&lt;/strong&gt; on predicting frame pacing stability (1% lows), vastly outperforming Gaussian Processes ($\rho = 0.358$). Furthermore, its predictive uncertainty intervals are genuinely calibrated (93.8% empirical coverage at 90% nominal interval), providing a reliable basis for the Expected Improvement acquisition function.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Defensive Engineering: Respecting the Player’s Machine
&lt;/h2&gt;

&lt;p&gt;Modifying game configuration files on a friend's PC comes with high engineering responsibility. FrameForge is built around four safety principles:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Atomic Backups and Crash Rollbacks
&lt;/h3&gt;

&lt;p&gt;Before touching any game file, FrameForge clones the configuration to an isolated backup vault. If the player clicks "Stop", if the game crashes, or if the PC loses power mid-test, FrameForge detects the dirty state on the next launch and automatically restores the untouched original.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Write-Verification Handshake
&lt;/h3&gt;

&lt;p&gt;Writing a text file does not guarantee the game engine accepted the values. Some engines silently overwrite invalid values with defaults upon launch. FrameForge re-parses the active configuration file after launch to verify that all tested values are actually loaded into memory.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Anti-Cheat Safety via ETW
&lt;/h3&gt;

&lt;p&gt;Unlike traditional benchmarking overlays that inject DLL hooks into game processes (which can trigger VAC, BattlEye, or Easy Anti-Cheat flags), FrameForge monitors frame timing passively through &lt;strong&gt;Event Tracing for Windows (ETW)&lt;/strong&gt; via Intel PresentMon. It never opens a handle to the game's virtual memory space.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Thermal Guard
&lt;/h3&gt;

&lt;p&gt;During testing, FrameForge actively monitors GPU core temperatures via NVML. If GPU temperature exceeds the user-configured safety ceiling (default: 87°C), the session pauses immediately, preventing thermal throttling artifacts or hardware strain.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Open Innovation Matters
&lt;/h2&gt;

&lt;p&gt;FrameForge operates under a strict air-gapped architecture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# app/engine/frameforge_engine.py
&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;HF_HUB_OFFLINE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;TRANSFORMERS_OFFLINE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# In-process socket interception to prevent cloud telemetry
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;_blocked_socket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;kwargs&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;PermissionError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;FrameForge runs 100% offline. Network access blocked.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;connect&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;_blocked_socket&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open-weight models like TabPFN make this possible. If this optimizer depended on a proprietary cloud API:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Every test would require an internet connection, API keys, and account tokens.&lt;/li&gt;
&lt;li&gt;The user's hardware specifications and gameplay telemetry would be shipped to third-party servers.&lt;/li&gt;
&lt;li&gt;Server latency would add unpredictable delays to an already time-intensive workflow.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Because TabPFN is open-source and lightweight, we package the frozen weights directly inside a PyInstaller binary bundled alongside our Rust executable. Everything runs locally on the player’s machine.&lt;/p&gt;




&lt;h2&gt;
  
  
  Limitations and Future Roadmap
&lt;/h2&gt;

&lt;p&gt;We believe in complete transparency about current limitations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Game Catalog:&lt;/strong&gt; Official adapters currently cover &lt;em&gt;Black Myth: Wukong&lt;/em&gt;, &lt;em&gt;Counter-Strike 2&lt;/em&gt;, and &lt;em&gt;Palworld&lt;/em&gt;, with generic Unreal Engine INI support. Adding games requires simple JSON adapter files, and we welcome community contributions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scene Dependency:&lt;/strong&gt; Results reflect the scene tested. A configuration optimized in an indoor corridor may behave differently in a wide-open outdoor arena.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hardware Telemetry:&lt;/strong&gt; Thermal monitoring currently supports NVIDIA GPUs via NVML. AMD and Intel GPU temperature hooks via WMI are planned for v1.1.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visual Quality Metric:&lt;/strong&gt; Quality scores are currently derived from empirical weighted setting vectors rather than live perceptual image similarity (SSIM).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Summary &amp;amp; Links
&lt;/h2&gt;

&lt;p&gt;PC gaming shouldn't require a degree in Bayesian statistics to enjoy smooth frame rates without turning graphics into mud.&lt;/p&gt;

&lt;p&gt;FrameForge replaces arbitrary guesswork with sample-efficient, measured active learning. By combining &lt;strong&gt;Intel PresentMon's non-invasive ETW telemetry&lt;/strong&gt; with &lt;strong&gt;TabPFN's in-context tabular intelligence&lt;/strong&gt;, it gives players the exact trade-off they asked for:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let the AI choose the experiment. Let the PC provide the evidence. Let the player make the decision.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Landing Page &amp;amp; Installers:&lt;/strong&gt; &lt;a href="https://devanshindepth.github.io/frame-forge/" rel="noopener noreferrer"&gt;FrameForge Portal&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source Code:&lt;/strong&gt; &lt;a href="https://github.com/devanshindepth/frame-forge" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Benchmark Suite:&lt;/strong&gt; &lt;a href="https://github.com/devanshindepth/frame-forge/blob/master/benchmark/stress_test.py" rel="noopener noreferrer"&gt;Surrogate Stress Test Harness&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;h3&gt;
  
  
  TabPFN Challenge
&lt;/h3&gt;

&lt;p&gt;TabPFN is the algorithmic core of FrameForge. Because game benchmarking yields tiny tabular datasets ($N = 8 \text{ to } 15$), traditional machine learning models overfit or fail to produce calibrated uncertainty. TabPFN acts as an in-context surrogate model that evaluates 4,000 graphics candidates and computes an Expected Improvement acquisition function in milliseconds—saving players 15 to 25 unnecessary reboots while achieving &lt;strong&gt;+53.4% Average FPS&lt;/strong&gt; and &lt;strong&gt;+68.0% 1% Low&lt;/strong&gt; improvements on real PC games.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
