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.
This is a client for dynamic DNS services, aimed at ESP (ESP32, etc) devices. Your node can use such a service to make its IP address known as a public DNS name, so you can find it, and use it from applications.