Projects

The research and development behind what we make next. Each project starts with a problem we want solved properly.

  1. 01 HaloXR II Scene capture for law enforcement Prototype
  2. 02 Triaxis Depth Engine LiDAR scans to measured 3D models In development
  3. 03 Blackjack Debugging an iPhone over Lightning Prototype
  4. 04 GTA V on Apple Silicon A Windows engine, native on the Mac Research
  5. 05 Rosetta New control for a knee mill In development
  6. 06 Head Unit Emulator A car’s head unit, booted on a Mac Research
  7. 07 Libra A balancing machine, re-engineered In development
  8. 08 Peripherals A keyboard and mouse, reverse engineered Available on GitHub

HaloXR II

Scene capture for law enforcement, on iPhone. Prototype
A room scanned with HaloXR II, shown as a textured 3D model.

Overview

HaloXR II turns an iPhone into a scene capture system. Officers record a crime or collision scene as a measured, photo-textured 3D model in minutes, and every scan is processed on the iPhone itself, or at full resolution on a computer inside the department.

Each scan becomes a complete evidence package: one offline file with the 3D scene, photos, a CR-3 base plate and a signature from the device. It opens in any browser on a department computer, with nothing to install.

It is designed around the FBI’s Criminal Justice Information Services (CJIS) Security Policy, which sets strict rules for anyone who handles criminal justice information. Because scans are processed on the iPhone or on a computer inside the department, that information is never readable on Deoxy Labs systems: the relay that moves scans and packages between devices holds only encrypted data, and deletes it once delivery is confirmed.

Processing
On the iPhone, or at full resolution on a department PC
Integrity
SHA-256 hash, signed with a key in the Secure Enclave
Exports
Evidence viewer, court packet, CR-3 base plate, OBJ and USDZ
Mesh resolution
2 cm or finer
Requires
iPhone with LiDAR
Pilots
Free for 90 days for pilot departments, then an annual licence per user
Project lead
John McAllister

Capture

Sweep slowly across the walls, floor and ceiling, and the mesh is coloured live to show what is covered and how well. Get close to text or artwork and tap Detail to keep it sharp: detail capture records a gauge cluster or small print at five times the resolution. Photos and points of interest are kept at full resolution.

The reconstruction engine resolves surfaces to 2 cm or finer. Scans are filed by case: drag them into folders, select several at once, or drag a package straight out to Files or OneDrive. Deleted scans wait in Recently Deleted before they are removed for good.

HaloXR II recording a scan, with the captured surfaces coloured by quality.
Live coverage. Gaps are obvious before you leave the scene.
Scan complete: duration, photos, detail captures and triangle count, with texture quality options.
Scan complete. Choose the texture quality and build the model on the iPhone.
The Scans screen, with scans grouped into cases.
Cases. Every scan is filed under its case number.
The evidence viewer screen for a case, with its SHA-256 hash and a key held in the Secure Enclave.
Evidence package. Signed in the Secure Enclave, so the original can always be verified.

Send to Computer

Evidence packages are large, and department networks are strict. Send to Computer moves a package from the iPhone to a computer over any network, with nothing to install on either side.

  1. Open the page. On the computer, open the HaloXR transfer page in Edge or Chrome. It shows a six-digit code.
  2. Pair. Enter the code on the iPhone, then confirm that the words on both screens match. A wrong match stops the transfer.
  3. Send. The package is encrypted on the iPhone and decrypted only in that browser. The server in between never sees its contents, and both sides show the same checksum as a receipt.

HaloXR II Viewer

The viewer runs locally in a browser, and nothing leaves the computer. Notes, distances and points of interest attach to the 3D model itself rather than the screen. Walk mode places the officer in the scene at street level, moving with the W, A, S and D keys, which makes a large scene easy to navigate and mark up. Snapshots and alignment to true north are built in.

Redaction works two ways: in 2D on the texture, to black out a list of personal details, and in 3D on the scanned geometry, to obscure a body or a sensitive object permanently. Edits are saved as a separate, unsigned file, so the original package keeps its Secure Enclave signature and can always be verified as captured. When the work is done, export a court packet with the original and the edited model, or a CR-3 base plate to trace in Texas Department of Transportation CR-3 software.

The HaloXR II Viewer in walk mode, with a measurement, two notes and two points of interest attached to a scanned room.
Walk mode, with a measurement, notes and points of interest attached to the model.
A CR-3 scene plan exported from a scan: a top-down view of the room with a north arrow and a scale in feet.
A CR-3 base plate exported from a scan.

HaloXR II is not intended for forensic analysis. All distances are approximate.

Triaxis Depth Engine

The engine that turns a LiDAR scan into a measured 3D model. In development
On the iPhone, 30 to 60 seconds Capture Clean Unwrap Bake Export Full resolution, on a department PC 1 to 3 minutes, through the encrypted relay On the iPhone, 30 to 60 seconds Capture Clean Unwrap Bake Export Full resolution,department PC1 to 3 minutes

Overview

Triaxis is the 3D reconstruction engine inside HaloXR II. It turns a walk-through LiDAR scan from an iPhone into a textured, measurable 3D model: on the iPhone in under a minute, or at full resolution on a computer inside the department.

It is built for crash and crime scene documentation, where a model has to be complete, accurate and provably unaltered. The geometry core is written in portable C and compiles identically for iOS, macOS, Windows and Linux, so both paths build the model the same way.

On the iPhone
30 to 60 seconds, with a 4096 × 4096 texture
On a department PC
1 to 3 minutes, at full photo resolution, with an 8192 × 8192 texture
Exports
USDZ, OBJ and GLB, with the texture embedded
Requires
iPhone 12 Pro or later, with LiDAR
Used in
HaloXR II
Project lead
John McAllister

Capture

While the officer walks the scene, ARKit fuses the LiDAR readings into a mesh in real time and labels every face as wall, floor, ceiling, table, seat, window or door. Triaxis copies each piece of that mesh as it arrives, and keeps the scan consistent as ARKit refines it.

Photos are taken automatically, up to four a second, and only when they are worth keeping: the camera has moved at least 10 cm or turned 8 degrees, the picture is sharp, and it shows at least 40 parts of the surface better than any photo so far. Each photo carries the camera’s position, lens and exposure. A coverage grid of 12 cm cells tracks the best view of every part of the scene and drives the overlay the officer sees, green where the surface is covered and amber where it needs another pass.

RapidClean

Raw LiDAR meshes have seams, holes, stray fragments and stair-step noise. RapidClean fixes all of it in seven steps, in under half a second on an iPhone 18 Pro for a typical room of 80,000 triangles.

  1. Weld. Joins the edges of neighbouring mesh pieces within 12 mm. Only open edges move, so the surface never folds.
  2. Remove degenerates. Drops triangles with no area and exact duplicates.
  3. Remove fragments. Drops floating specks smaller than 0.02 m² that don’t touch the main surface, without losing thin walls.
  4. Trim the fringe. Removes the saw-tooth edge every scan leaves at its boundary.
  5. Fill holes. Closes LiDAR dropouts in walls, floors and furniture, up to 1.5 m around, and checks each one first so a real doorway or window is never capped.
  6. Smooth. Removes LiDAR noise without shrinking the mesh, while the crease between a wall and the floor stays sharp.
  7. Simplify. Reduces the mesh to about 80,000 triangles, keeping corners and edges.

Texture

The photos are then painted onto the model. On the iPhone this runs entirely on the GPU, in Metal.

  • UnwrappingThe surface is laid flat into a texture, with walls, floors and ceilings as separate pieces. Unwrapping uses the open-source xatlas library.
  • Choosing photosEvery triangle scores every photo on angle, distance and sharpness, and keeps its best twelve. Views through windows count for less.
  • Nothing in the wayEach candidate photo is checked against a depth render from its camera, so a wall is never painted with a photo taken from the other side of a table.
  • Even patchesNeighbouring triangles prefer the same photo, so the texture is made of large, consistent patches rather than a scatter of single triangles.
  • Matched exposurePhotos of the same surface are balanced against each other, over up to 60,000 shared triangles, so differences in exposure and white balance disappear before they are blended.
  • Clean edgesSeams between pieces are feathered, and colour is spread into the gaps between them so nothing dark bleeds in when the model is viewed from far away.

Full resolution

When there is time, the scan can be rebuilt at full quality on a Windows PC inside the department. It travels there encrypted through the HaloXfer relay, is decrypted only in that computer’s memory, and comes back the same way. The department’s computer has none of the iPhone’s limits on memory or time, and blends seams by solving for the colour across each one, so differences between photos leave no visible line at all.

SettingiPhoneDepartment PC
Time30 to 60 seconds1 to 3 minutes
Photos3072 pixels on the long edgeFull resolution, 4032 pixels
Texture4096 × 40968192 × 8192
Smoothing4 passes8 passes
Photo choice4 passes12 passes
Exposure matching30 passes100 passes
SeamsFeatheredBlended, with no visible line

Evidence chain

Scan data is criminal justice information under the FBI CJIS Security Policy, and Triaxis handles it that way from the first frame to the finished package.

  • Encrypted at restScans are stored with iOS Data Protection Complete, unreadable while the iPhone is locked, and are kept out of iCloud and device backups.
  • Signed at the sourceA key in the iPhone’s Secure Enclave signs a manifest of SHA-256 hashes, binding the model to the device that captured it. Departments record each device’s key when it is set up.
  • Encrypted in transitEach transfer agrees its own AES-256-GCM key. The relay holds only ciphertext, deletes it once delivery is confirmed, and never sees keys, file names or case numbers. A short number on both screens rules out anyone in the middle.
  • Processed on premisesFull-resolution processing runs inside the agency’s own CJIS perimeter, and its logs record times and sizes, never file names or case content.
  • Chain of custodyEvery photo, depth frame and derived file is logged in an append-only chain, each entry’s hash linked to the one before. The start and seal of every scan record the officer’s badge number, the device, the software versions, the location and the time.
  • Offline viewerThe finished package is a single HTML file that makes no network requests at all, enforced by its Content Security Policy.

HaloXR II and Triaxis are not intended for forensic analysis. All distances are approximate. ARKit and Metal are trademarks of Apple Inc.

Blackjack

Debug an iPhone from a Mac, through its Lightning port. Prototype

Overview

Blackjack plugs into an iPhone or iPad through its Lightning port and gives a Mac direct access to the chip inside. Halt and step the processor, read and write memory, follow the serial console and move the device between recovery and DFU, all from one USB-C cable. It is an alternative to Kanzi and Koba, the debug probes Apple uses internally.

It works with the debugging tools you already use. To the Mac, Blackjack is a standard debug probe, so existing scripts and workflows carry over unchanged.

Alternative to
Apple’s Kanzi and Koba probes
Debugging
SWD access to the application processor
Console
The device’s serial console, live
Device USB
Passed through, including recovery and DFU
Power
Switched and measured by Blackjack

Read the full write-up

How it works

  1. Opens the port. Lightning keeps its debug lines closed until an accessory asks for them. Blackjack performs that handshake itself, the same way Kanzi and Koba do.
  2. Reaches the chip. With the port open, Blackjack drives the processor’s SWD debug interface directly over the Lightning pins.
  3. Stays connected. The device’s own USB runs through Blackjack, so when it restarts into recovery or DFU, the session carries on.

Specifications

Connector to Mac
USB-C
Connector to device
Lightning, via 10-pin cable
Controller
RP2350
Board
55 × 24 mm, 8 layers
Part number
810-26830-01
Circuit and software
Ky Young
Enclosure
John McAllister

GTA V on Apple Silicon

A Windows game engine, running natively on the Mac and iPhone. Research
Game and engine Compiled for ARM64 Win32 layer Native implementation Direct3D 11 The engine's own renderer DXMT Direct3D on Metal Apple silicon Mac and iPhone

This project studies how a large Windows game engine can run natively on Apple silicon, without Wine, Rosetta or a virtual machine. The engine is compiled for ARM64. A native implementation of the Windows interfaces it needs takes the place of Windows itself, and DXMT translates its Direct3D 11 rendering to Metal.

The game now runs natively on a MacBook Pro and on an iPhone 17 Pro Max, built from the same source, with every frame rendered through Metal.

Read the full write-up

How it runs

  1. Compiled for ARM64. The game and its engine are built as a native Apple silicon app, so no instruction is translated at run time.
  2. A native Win32 layer. Windows, files, threads, timers and input are implemented directly on macOS and iOS. The game draws into a native view on each.
  3. Direct3D 11 on Metal. The renderer is left as it is. DXMT turns each Direct3D 11 call into Metal, on the GPU built into the chip.
  4. Upscaling and frame generation. Our own upscaler draws fewer pixels and scales them up, and our own frame generation shows a new frame between every two the game renders.

On the Mac

Captured on a MacBook Pro with M1 Pro, running natively. The Metal performance HUD, where shown, reports the frame rate and the MetalFX upscaling.

On iPhone

The same game on an iPhone 17 Pro Max, at or near 60 fps in the prologue, with touch controls made for it, a frame rate that steps down evenly when the phone gets warm, and a HUD that keeps clear of the Dynamic Island.

Performance

MacBook Pro, M1 Pro
About 85 fps at 2560 × 1440 with Quality upscaling, and 160 shown with frame generation
iPhone 17 Pro Max
At or near 60 fps in the prologue, rendering 1912 × 880

This is independent research. It is not affiliated with or endorsed by Rockstar Games or Take-Two Interactive. No game code or assets are distributed.

Rosetta

Our own control for the ProtoTRAK SMX knee mill. In development
Rosetta running a program: the X, Y and Z position on the left and the tool path drawn live on the right.

Overview

Rosetta is control software for the ProtoTRAK SMX knee mill, written from the ground up. It runs on the machine’s own control computer and speaks directly to its servo board, so the motors, drives and wiring stay exactly as they are. Only the software changes.

The name comes from the work behind it. Before Rosetta could move a single axis, we had to read the language the control and the servo board use to talk to each other, and write it down.

Machine
ProtoTRAK SMX knee mill
Programs
ProtoTRAK PT4 conversational programs and standard G-code
Runs on
The machine’s existing control computer, with no new hardware
Probing
Bore, boss, corner, width and surface cycles, for a wired touch probe
Status
Tested end to end against a model of the servo board. Bring-up on the machine is next.

On the control

The layout keeps the machine’s eight function keys and the modes an operator already knows, then gives each screen more room: a large position readout, the program listing with the current line highlighted, and the tool path drawn as it cuts.

Safety first

  1. Every move is checked. Travel and feed limits are checked before a move is sent to the machine, and a move that breaks them is never sent.
  2. Faults stop the program. A servo fault, a lost connection or a stop latches, and the program halts at that move until the operator resets it.
  3. The original stays. The factory software remains installed as the fallback, and the two never run at the same time.

Rosetta is independent work. It is not affiliated with or endorsed by Southwestern Industries. ProtoTRAK is a trademark of Southwestern Industries, Inc. BMW and iDrive are trademarks of BMW AG.

Head Unit Emulator

A car’s infotainment system, running on a Mac. Research
The iDrive 6 home screen, with Media, Navigation and My Vehicle tiles, rendered by the head unit's own software inside the emulator.

Overview

The NBT Evo is the head unit behind iDrive 6: the screen, navigation, media and vehicle settings in BMWs from 2016 on. Inside is a Texas Instruments OMAP5 processor running QNX, a real-time operating system built for cars.

This emulator recreates that board in software. It boots the head unit’s own system from a copy of its storage, brings up its services and its display server, and draws the iDrive interface on a Mac. With the unit on a desk instead of in a dashboard, its software can be studied, tested and changed safely, which is what retrofit work needs.

Unit
BMW NBT Evo, iDrive 6
Processor
Texas Instruments OMAP5, ARM
System
QNX 6.5
Emulator
QEMU, with a board model written by Deoxy Labs
Graphics
2D graphics emulated; 3D passed through to the Mac’s GPU

From first pixels to iDrive

  1. Boot. The emulated board starts the unit’s own bootloader and QNX, then its services, from a copy of the unit’s storage.
  2. Display. The display controller and the 2D graphics processor are modelled closely enough for the unit’s own display server to start and drive the screen. The first frame through that path was a test pattern.
  3. Interface. The iDrive interface draws in 3D. Its graphics calls are carried out of the emulator and drawn on the Mac’s own GPU, and the result is the real iDrive home screen.

Next

Touch and the iDrive controller, so the interface can be used rather than only shown, and the rest of the menus beyond the home screen.

This is independent research. It is not affiliated with or endorsed by BMW. No BMW software is distributed. BMW and iDrive are trademarks of BMW AG.

Libra

A new interface for a dynamic balancing machine, built by reverse engineering its software. In development
Libra's main screen: speed, run status and job details across the top, a dial for each correction plane, and the correction mass and angle for each plane in large type.

Overview

A two-plane dynamic balancing machine spins a rotor and reports how much mass to add, and where, to make it run true. The software that came with this one had no documentation and no source. Libra replaces its interface while keeping its measurements, its calibration and its years of job records exactly as they are.

That meant reverse engineering the original software first: how it talks to the machine’s measuring hardware, how it turns those signals into a correction, and how it stores every result. The figures Libra shows were checked against the machine’s own past results before anything changed on the floor.

Original
Undocumented Windows software, no source available
Worked out
Its link to the measuring hardware, its calculations, calibration and record format
Verified
Against the machine’s own historical results
Fallback
The original stays installed and shares the same records

Before and after

The same machine and the same job. The readings come from the same measurement; what changes is how readable they are from the rotor, and that every action now sits on one labelled key.

How it was done

  1. Listen. The traffic between the software and the measuring hardware was recorded and decoded, until every message could be read.
  2. Reproduce. The software’s calculations and calibration were rebuilt from what it does, then checked against the machine’s past jobs.
  3. Replace the surface. The new interface sits on top of the same measurement and the same records, so nothing the workshop already had is lost.

Peripherals

Reverse engineering a keyboard and mouse to drive them natively from the Mac. Available on GitHub
The keyboard's built-in display playing a start-up animation: a turning double helix that settles into the deoxy lockup.

Overview

Peripherals is a menu bar app that controls a Razer keyboard and mouse on the Mac: their lighting, the small display built into the keyboard, and battery levels, with no manufacturer software installed.

None of this is documented. The protocols were worked out from the devices, their firmware and the official software, then written down in full, and the app is built on that record. Its tests hold it to the exact bytes the hardware was seen to accept.

Devices
A Razer keyboard with a built-in display, and a Razer mouse
Worked out
Lighting, display and battery protocols, from the devices, their firmware and the official software
Built with
Swift, on device protocol documentation written by Deoxy Labs

Reading the display

To learn how the keyboard’s display stores an image, known test patterns were sent to it and the panel was photographed. Comparing the two showed how pixels are packed and in what order; a pattern drawn twice, with the order swapped, settled it.

Now playing, on the keyboard

Once the display’s format was known, the app could draw its own screens. Whatever is playing in Music appears on the keyboard: album art, title, artist and album, rendered for a sixteen-level greyscale panel, with an equaliser that moves with the music.

What it does

  1. Lighting. A quiet default, and lighting that can follow what is playing.
  2. The keyboard’s display. Shows what is playing, then the time, and plays its own start-up animation.
  3. Batteries. Charge and charging state for each device, in the menu bar.
  4. Dark with the Mac. Keys, mouse and display all go dark when the Mac’s displays sleep.

Peripherals is independent work. It is not affiliated with or endorsed by Razer. Razer is a trademark of Razer Inc. Album artwork and song titles belong to their respective owners.