KD0OFN (Stillwater, MN): SSTV Image Capture on 14.230Mhz
Equipment: DX-EE Multi-Dipole @ 25', Icom IC-7410, MMSSTV.lib (Win7)

This site explores 20m signal propagation via analog SSTV. Automated signal quality characterization is performed via image analysis. Multiple images from the same station (assuming consistent power/antenna orientation) can provide a propagation indicator. This site classifies images as P5-P0 by evaulating JPEG image compressibility and discrete color distribution. Clean images typically compress better than noisy ones and noisy images generally contain large numbers of infrequently used colors. The algorithm provides reasonable results given its simplicity, but favors images with single color backgrounds. A semi-noisy solid backround P2 may classify P3 due to better JPEG compressibility of the background.

To mirror images on your site, static names are available:

  kd0ofn.qsl.net/last-any.jpg: the last image received, regardless of quality
  kd0ofn.qsl.net/last-good.jpg: the last P3-P5 image received
  kd0ofn.qsl.net/last-auto.jpg: last P3-P5 for 10 mins, then most recent

The receive pipeline is a IC-7410 w/integrated USB Audio feeding a custom SSTVENG app which saves the images as lossless PNG with added metadata:

  Start Time (epoch seconds)
  Duration (seconds)
  SSTV Mode
  Callsign (FSKID encoded)
  USB Sampling Rate (hz)
  Correction to Sampling Rate (PPM)
  Auto-Slant Correction Applied (PPM)
The PNGs are stored on a shared Linux network drive. The server uses incrond (cronjob for inode/directory change) to trigger the processing pipeline. The PNGs are converted JPGs at 85% quality and P5-P0 analysis performed. The metadata is re-encoded into the JPG as comma-separated key=value pairs. Extracting the JPG comment will look like:

t=1485706068,tl=110,m=Scottie-1,tp=0,rp=-226,cs=kd0ofn,fr=14230000,rt=11025

Prior to Oct 2018, the files were mirroed to qsl.net and served from there. This worked fine except for the external linking images due to qsl.net/cloudflare caching policy. Currently, this site is served directly from a linux origin server through cloudflare. The image browser is entirely javascript so all images as static from a cloudflare perspective. When the last-*.jpg images change, the site performs an explicit cloudflare cache flush for real-time updating. The Javascript periodically polls the JSON data file timestamp to determine when to reload and update the page. The Javascript code can be inspected by View Page Source.

FSKID works great when used. Experiments optical character recognition (OCR) of callsigns yielded limited results. Eventual goal is capturing enough callsigns for use as a location proxy to automate propagation trend analysis.

Lots of folks have strong feelings about auto-slant. Appears the most common concern is that frequency issues can go uncorrected over time. This site displays images with auto-slant enabled but also slows my receiver/software calibration (from WWV @ 10Mhz) and the applied auto-slant adjustment in PPM applied to the image.

As an experiment in including metadata with an sstv image, I have added QR codes to my QSO images. The QR code decodes via any standard reader to a URL that redirects here. The format is HTTP://SSTV.ME%23abcdef encoded with H-level ECC (up to 30% errors). SSTV.ME is an alias for kd0ofn.qsl.net, %23 is the hash-sign (HTML anchor) and ABCDEF is a 32-bit (base32) image reference. Following the QR link displays the original image in full PNG fidelity allowing comparison against remotely received images.

First successful validation of QR took place Feb 20 @ ~2p Central during a 50W QSO to K01E (Rhode Island) also received by VE6PW (Calgary, ON) and uploaded to World SSTV Cam. The QSO included two images each with the QR on the first being unreadible but the second being readable. Was using free iOS app Quick Scan (general QR reader) on an iPhone 6S.