Streaming region-of-interest JPEG decoder for ESP32 based on tjpgd. Stream JPEG data in from any source, stream decoded pixel rows out to your callback — without loading the full image into RAM, without a seekable source, without a full-frame output buffer. Stream in from a file, a flash blob, an HTTP response body, a UART byte stream, a FreeRTOS queue, a TCP socket, or a DMA ring buffer. If you can hand bytes to a callback, you can decode a JPEG.
Production-ready ESP-IDF component for xAI Grok API - 25+ models, streaming chat, vision, web/X/RSS search, function calling, image generation, and Responses API optimized for ESP32
Progressive (SOF2) JPEG decoder for memory-constrained systems. Decodes at 1/1, 1/2, 1/4 or 1/8 in a single forward pass with no seeking, storing only the low-frequency corner of each block that a reduced-scale IDCT will read. Storage still scales with the SOURCE image and not with the output, but with a much smaller constant than a general-purpose decoder: on a 12 MP 4:2:0 progressive file the peak is 23.0 / 8.9 / 3.6 MB at 1/2 / 1/4 / 1/8, against libjpeg-turbo's ~36 MB coefficient array at every scale. Size the budget from the frame header, not from the output you want; PSRAM is the assumption at megapixel sizes. Portable C99; I/O, row output and allocation are caller callbacks, so the large buffers can be pointed at external RAM while the hot working state stays internal.