Aanish Bhirud.
I test Unreal Engine at Epic Games.
On the Scenegraph team I write C++ tests that catch a Fortnite match falling out of sync, and I look after the tests that check the engine on PC and consoles with no one at the controls. I've also taught engineers across Epic how to work with AI agents.
I'm looking for my next role in QA, test automation, or AI harness engineering.
- QA Engineer, Unreal Engine Scenegraph team at Epic Games
- 4 years at Epic Games, promoted from Tester 1 to QA Engineer in 18 months
- C++, C#, Python, TypeScript, Playwright, Unreal Engine 5, CI/CD, and AI agents
- B.S. Computer Science, NC State University, 2022
- Raleigh, North Carolina
- F1, 3D printing, and games
I write the C++ tests that make sure every player in a Fortnite match sees the same game.
Our visual regression tests started as a prototype. I rebuilt them into a framework the team can maintain, with an LLM judging the renders a pixel diff can't.
I let an AI agent build an aircraft mod on its own for a week, art and sound included, then reworked it into one players want to fly.
About
I've been in QA at Epic Games for 4 years. I started on the Web Frameworks team, bringing Playwright visual tests to Epic's websites, and moved to the Unreal Engine Scenegraph team in 2025. Most of my work there is automated testing for Fortnite multiplayer and for headless runs on PC and consoles.
I've used GitHub Copilot since it only did tab completions, and these days AI agents do a lot of the building on my side projects. Outside work I make tools for that setup and mods for the flight game Nuclear Option, and I design 3D prints for MakerWorld.
The rest of the time I'm playing games, watching anime, or cheering for Leclerc and Ferrari.
Experience
I've worked in QA at Epic Games since December 2022. Before that I was a backend developer at Healiom, a healthcare software company.
I went from Tester 1 to QA Engineer in 18 months, then joined the Unreal Engine Scenegraph team.
Tester 1
Tester 2
QA Engineer
QA Engineer
Epic Games
QA Engineer · UE Scenegraph
I write C++ tests that run several Fortnite clients at once and compare what each one sees, so a desync fails a test instead of a match. I look after the team's headless tests on PC and consoles and the remote calls that drive them, which let the engine be tested on every platform unattended. I turned a visual regression prototype into a framework the team can maintain. When reorganizations left us with a stack of inherited test frameworks, I went through them and kept two, one for integration tests and one for lower-level ones. Now a new test has an obvious place to go. I've also run a training session for engineers across Epic on working with AI agents.
QA Engineer · Web Frameworks
I built a pilot framework in Python and pytest that health-checks internal backend services, so an outage shows up in a test run before it shows up in a bug report. I also brought our visual regression suite to the teams behind the Unreal Engine, games, and esports sites, and ran its CI.
Tester 2 · Web Frameworks
I shipped the first version of our Playwright visual regression suite and grew it across more of Epic's web projects. From then on, a page that rendered wrong failed a test before it went live.
Tester 1 · Web Frameworks
The web test suite didn't check what pages looked like. I pushed to add automated visual testing and built it with Playwright.
Healiom
Software Development Engineer 1
I built an audio pipeline that transcribed Zoom calls while they were still going, by feeding their sound to speech-to-text in real time. I also wrote a parser that read scanned insurance cards straight into database fields, so nobody had to type them in.
Back End Developer Intern
I wrote Python APIs in FastAPI for healthcare data, and a pipeline that reshaped incoming records so they could be searched in Elasticsearch.
Education
B.S. Computer Science
NC State University · May 2022
- NCSU Rainbow Six Siege esports team
- Algorithms, Game AI, Game Engine Foundations, Interactive Game Design, Computer Graphics
Skills
- C++, C#, Python, TypeScript, JavaScript, Rust, SQL
- Playwright, Visual regression, LLM-based image comparison, Multi-client network replication testing, Integration testing, Headless RPC-driven test harnesses, pytest, Cross-platform coverage on PC and consoles
- Unreal Engine 5 (Blueprints, PCG, cinematics), Unity (URP, Shader Graph, VFX Graph), Client-server game networking
- FFmpeg, Multithreading, Text parsing with state machines and regex, Compression codecs
- Agent orchestration, LLM integration, MCP, Embeddings and retrieval, Multi-provider model routing, Reusable agent skills, LLM harness evaluation
- React, Next.js, Node.js, Astro, FastAPI, Flask, REST APIs, SQLite, Elastic Stack
- CI/CD pipelines, GitHub Actions, Docker, Docker Compose, Git, Cloudflare Pages, Linux, Proxmox / LXC
Work
Things I build on my own time, plus pull requests I've landed in other people's projects.
Agents & developer tools
Agent Render (opens in a new tab)
A viewer for the Markdown, code, diffs, and tables my agents produce. It turns their output into a link I can open, edit, and pass on. The content lives in the URL fragment, so the host never sees it, and a compressor I wrote keeps the links short.
Mnemosyne
A memory service for my agents, so a new session can pick up what earlier ones worked out, whichever machine or tool they ran on. It mixes embeddings, keyword search, and a reranker, which ranks results far better than keyword search alone. The repo is private while I clean it up.
Hydra CLI (opens in a new tab)
Give it a research question and several AI agents with different personas argue it out, so the one answer it hands back has already survived some disagreement.
QuickRunner (opens in a new tab)
A Rust CLI for jumping between project folders and keeping an eye on long-running commands. When I can't remember how an old project works,
qr doasks a small, fast model to write the command and shows it to me before it runs.Dispatch (opens in a new tab)
Lets one AI agent hand subtasks to others, so each piece runs on whichever model and tool suits it, on my machine or another one over SSH. It's an early alpha, written in plain Python with no dependencies.
Synthetic Search CLI & MCP (opens in a new tab)
A CLI and MCP server that gives my agents web search with citations through synthetic.new and exa.ai, without the search provider keeping the data.
Local Audiobook Pipeline
Turns ebooks into audiobooks with text-to-speech on my own GPU. A speech recognition pass listens back so I don't have to, and flags any audio that came out garbled.
Livestream Summarizer
Turns a livestream into a feed that reads like someone live-tweeting it. It pulls the stream down in chunks with yt-dlp, and MiMo-V2.6 watches each chunk and writes a short update.
Cyclops (opens in a new tab)
Windows Hello cameras have an infrared sensor that ordinary apps can't open. Cyclops turns it into a regular camera with a live preview and a switch for the IR light, and shares it with other apps as a virtual webcam. Under the hood it's a COM media source that outputs NV12, which keeps older DirectShow apps from hanging.
PPM Converter (opens in a new tab)
Converts the .ppm files from Peter Shirley's "Ray Tracing in One Weekend" to .tiff. GPT-3 wrote the whole script and README, back when that was new.
Nuclear Option mods
MRB-100 Centurion (opens in a new tab)
A heavy bomber and AWACS aircraft with a telescoping wing. It's still a prerelease, and I haven't finished testing it in multiplayer.
The first version came from an AI agent working on its own for about a week, including the art, animations, and sound. I took it from there until it was something players want to fly.
F-204 Icarus II (opens in a new tab)
An interceptor based on a modernized F-104 Starfighter, with its own cockpit and carrier operations. It's an early prerelease, and multiplayer testing isn't done.
I built it with the same agent process as the Centurion, but stayed in the loop this time and art-directed it.
NO Map Overhaul (opens in a new tab)
Adds what you need to line up a landing and plan a mission: runway numbers, approach lines, and a runway callout on the HUD, plus range circles, bearing arrows, and waypoint routes on the map. Map drawings sync over Steam networking, so a team can plan together. The game's developers signed off on how that works, and it held up when players went looking for exploits.
Nuclear Option Detents (opens in a new tab)
Stops the throttle at idle and at full dry thrust, so letting go of a key a moment late doesn't pop the airbrake or light the afterburner. Each aircraft gets its own profile, and the HUD shows when it's holding.
NO Missile Indicators (opens in a new tab)
Shows arrows pointing at incoming missiles you can't see. It only uses what the game's own missile warning already knows, so it reveals nothing the game is hiding. It's off by default in PvP.
Nuclear Option Armory (opens in a new tab)
A weapon pack with three new weapons, including a passive recon missile and a small interceptor for cruise-missile salvos. It's experimental, and I haven't tested it in multiplayer.
Critz OS Mod Loader (opens in a new tab)
A Windows app that switches the game between a clean install and a few saved mod setups, so I can jump between them without reinstalling.
NOMM MP List (opens in a new tab)
Sorts Nuclear Option mods by whether they're safe in multiplayer: client-side, risky, needs the other player to have it too, or single-player only. AI agents rebuild it every week from the mod manifests. The repo is private, but the list is public.
Graphics, games & earlier work
Ray Tracing Renderer
I built a ray tracer in Rust from "Ray Tracing in One Weekend", then rewrote it test-first from "The Ray Tracer Challenge". Profiling it and spreading the work across threads took renders from hours down to minutes.
2D Networked Game Engine
A 2D multiplayer game engine I wrote from scratch in C++ for a class at NC State, with its own physics, its own renderer, and a server that has the final say on game state.
Reaction Impact
A documentation site for Genshin Impact's mechanics, built with Astro. I've rebuilt it a few times.
F1 Strategy Tool
Reads live telemetry from the Codemasters F1 games and suggests when to pit, based on how fast the tires wore in practice.
Level Design (UE5)
An opening cutscene for a custom Unreal Engine 5 level, covering cinematics, lighting, and level scripting.
PCG Forest Scene (UE5)
A forest built with Unreal Engine 5's procedural tools and Quixel Megascans, with plants placed by biome rules.
Unity Fog System & Sparks
A volumetric fog system for Unity URP and a spark effect, both made with a team.
Open source contributions
Fix Synthetic weekly-only quota display (opens in a new tab)
After synthetic.new changed its pricing, CodexBar showed the wrong quota for weekly-only plans. The maintainer folded my fix into this PR with co-author credit.
Fix Crof usage for PAYG credits-only API (opens in a new tab)
CodexBar stopped reading Crof usage once Crof moved to a pay-as-you-go, credits-only API. This got it reading again.
fix(media): keep host-staged images available to native vision (opens in a new tab)
In host mode, staged images weren't reaching native-vision models, so they answered from the text alone. Now the images stay available.
feat(sessions): add Command Code as a tracked source (opens in a new tab)
TokScale now counts usage from Command Code too, by scanning its local transcripts like the other tools it tracks.
[codex] Add Crof provider (opens in a new tab)
CodexBar users on Crof can now see their quota and credit balance in the menu bar.
Support Synthetic pack quota responses (opens in a new tab)
When synthetic.new added a rolling five-hour request cap and a weekly credit quota, this kept CodexBar's readout accurate without breaking accounts on the older format.
Add paste last transcript command to Wispr Flow (opens in a new tab)
Lets you paste your last Wispr Flow dictation from Raycast without opening Wispr Flow.
fix(scanner): include auto-archived subagent transcripts in scan (opens in a new tab)
Subagent usage stopped counting once its transcripts were auto-archived. The scanner now includes them.
Update Console.ReadLine() to convert to lowercase (opens in a new tab)
Console commands in the Kerbal Space Program 2 modding framework no longer fail because of capitalization.
Fog system (opens in a new tab)
Built a volumetric fog system for the Unity URP game project.
Visual tests
A visual test compares a fresh screenshot with one you know is right. The hard part is deciding what counts as different.
Rendering isn't perfectly repeatable. Draw the same scene twice and an edge can anti-alias a little differently, or a soft shadow can land a pixel off, depending on the GPU and the driver. A pixel-by-pixel comparison flags every one of those changes, so the test either fails on noise or gets loosened until it misses real bugs.
An LLM compares the two images more like a person would. It still catches a missing shadow or a broken material, but it doesn't trip over an edge that moved by a fraction of a pixel, so a test can stay strict without failing good builds. Our framework sends the flakiest renders to one, and I helped tune how it prompts the model.
3D printing
Models I design and publish on MakerWorld: desk and printer parts, F1 pieces, and game props.
Other people have printed my 9 models and 15 print profiles 4,751 times, for about 68,370 hours of printing.
| Model | Downloads | Prints | Rating |
|---|---|---|---|
| X3D-v3 Riser | Bambu Lab X1/P1 AMS Stand | 1,444 | 1,300 | 4.8 |
| Simple Behind the Monitor Headphone Hook | 910 | 686 | 4.6 |
| F1 2023 Halo Remix (Color Print) | 620 | 215 | 4.5 |
| Honeycomb Plugs for BambuLab P1S | 417 | 321 | 4.9 |
| F1 2023 Halo Remix (Default Profile) | 277 | 121 | 4.5 |
| Steam Frame Wall Mount | 256 | 140 | 4.1 |
| Command Strip Hanger | 231 | 249 | 5.0 |
| Print in Place Hyundai N Vision 74 | 205 | 99 | 4.3 |
Writing
Posts about AI tools, testing, and the things I build.
Get in touch
I'm looking for my next role in QA, test automation, or AI harness engineering. I'm also happy to talk about AI tools, F1 strategy, or 3D printing.