Most people know the ESP32-S3 as a WiFi and Bluetooth LE microcontroller that also handles a camera. Developer shraiwi has now used it to run FAST corner detection in real time. FAST stands for Features from Accelerated Segment Test, a long-established feature detector in machine vision. According to the project's GitHub repository, the SIMD-accelerated detector processes about 11.2 megapixels per second on an ESP32-S3 clocked at 240 MHz. That is enough for VGA (640x480) at 30 fps and roughly double the speed of a naive implementation. Hackaday covered the project on October 27, 2026.

The interesting part is how the speed was reached, more than the headline number. The S3's vector instructions have very little public documentation or worked examples. The developer ended up hand-writing assembly, working around gaps in the instruction set, and writing a custom register allocator. The questions below follow the sources.

What hardware is this running on?

The target is Espressif's ESP32-S3. In the creator's write-up it is a dual-core part running at up to 240 MHz with WiFi and BLE. Hackaday identifies the cores as Xtensa LX7. The write-up's title calls the chip a "$2 microcontroller". That is the creator's own figure, and none of the sources gives a dated price, distributor or quantity for it.

For a reference board, the repository includes an sdkconfig for the Seeed XIAO ESP32-S3. The sources do not cover the board's own specs, camera module or price, so check those with Seeed directly.

Where does the SIMD come in?

The ESP32-S3 has 128-bit SIMD instructions. As the write-up explains, one vector register holds sixteen 8-bit pixels, so a single instruction can work on sixteen grayscale pixels at once. Corner detection on 8-bit images is mostly repeated per-pixel comparisons against nearby pixels, which suits this kind of data-parallel hardware well.

In practice, using the vector unit was harder than that sounds. The developer says the only existing SIMD examples they found were Larry Bank's blog and Espressif's own esp-dsp and esp-dl libraries. Anyone trying to use the S3's vector extensions outside those libraries has little to start from.

What made it hard?

Both Hackaday and the creator point to gaps in the instruction set that needed workarounds:

  • No unsigned byte comparisons. Hackaday lists missing instructions such as unsigned byte compares among the obstacles, and the write-up says the S3 implements comparisons only for signed 8-bit values. This matters for a detector that compares 8-bit pixel intensities.
  • No direct misaligned reads. The ISA cannot load a vector directly from an unaligned address. Corner detection needs to read pixels at arbitrary offsets from the pixel under test, so this is a real constraint. The creator says they worked around it with the S3's slice-extract instruction.

The developer also wrote basm, their own basic register allocator, to manage the assembly code. Keeping track of vector registers by hand in an inner loop with many neighbourhood loads is error-prone, and a register allocator takes over that bookkeeping. The write-up describes basm as a product of the project, and the repository includes it as basm.py.

How fast is it, exactly?

The sources give three related figures, each with a different source:

  • About 11.2 MP/s at 240 MHz, described in the repository as enough for VGA (640x480) at 30 fps. The write-up gives this as measured by the creator, up from 5.1 MP/s.
  • About 6 ms per QVGA (320x240) frame, from the creator's write-up.
  • Roughly 2x a non-SIMD implementation. The repository and Hackaday compare against a "naive" implementation, and the write-up says "the reference implementation".

The numbers agree with each other. VGA at 30 fps works out to about 9.2 million pixels per second, which leaves some headroom under the quoted 11.2 MP/s. A 320x240 frame has 76,800 pixels, so 6 ms per frame lands in the same throughput range. That arithmetic is ours, not the developer's. None of the sources says whether the throughput figures use one core or both, or whether they include camera capture and frame transfer or only the detection pass. Treat them as detector benchmarks, not as end-to-end camera pipeline numbers.

A 2x gain is real but not dramatic for 16-wide vectors. The sources do not break down where the remaining time goes. Given the workarounds above, emulating missing comparisons and splicing unaligned data with extract operations both cost instructions that a more complete SIMD instruction set would not need.

What It Means for Makers

The project is aimed at people already building camera projects on the ESP32-S3 who want more than streaming JPEGs to a phone. Corner features are the starting point for visual odometry, motion tracking, image stabilisation and simple object tracking. Getting VGA-rate FAST detection on the microcontroller means those first stages could run on the device instead of sending frames to a Raspberry Pi or a laptop. The sources do not mention any downstream pipeline built on the detector yet, so that is a possibility, not a shipped feature.

The project also works as documentation. With the creator naming Larry Bank's blog, esp-dsp and esp-dl as the only SIMD examples they could find, an open, worked example of hand-tuned S3 vector code is useful even to readers who never need corner detection. The write-up covers the slice-extract workaround for unaligned reads and the gaps in comparison instructions in detail. Embedded engineers looking at the S3 for other 8-bit image or signal workloads can use it to estimate how much speedup to expect, and how much work it will take.

On availability: this is an open-source hobby project, not a product. There is nothing to pre-order and no kit. The code is a PlatformIO project on GitHub, configured for the Seeed XIAO ESP32-S3, and at the time of reading the repository had 56 stars and 6 commits, so expect it to be early-stage. The sources do not state a software licence; check the repository before reusing the code. The only price in any source is the creator's "$2 microcontroller" description of the ESP32-S3 chip itself. It comes with no date or vendor, and board-level pricing is not given.

The bottom line

Hand-written SIMD on the ESP32-S3 roughly doubles FAST corner detection speed, to about 11.2 MP/s at 240 MHz, and puts real-time VGA feature detection on a WiFi microcontroller. Despite the thin documentation of the S3's vector unit, it pays off with enough effort: assembly, a custom register allocator, and workarounds for missing unsigned compares and unaligned loads.

Sources