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

This site is designed to explore signal propagation of 20m via analog SSTV. Automated signal quality characterization can be performed via image analysis and multiple samples from the same station (over time and assuming consistent power/antenna orientation) can indicate propagation trends. This site classifies images as P5-P0 by evaulating both JPEG image compressibility and the number/frequency of discrete colors. Noisy images typically don't compress as well as clean images and tend to contain a significant number of infrequently used colors. While this algorithm produces decent results for its simplicity, it favors images with single color backgrounds and a semi-noisy P2 with a solid backround may be classified as P3 due to better JPEG compressibility of the background).

To mirror images to your own site, there are there static names 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-auth.jpg: last P3-P5 for 10 mins, then last anything

The receiving pipeline is an IC-7410 via built-in USB Audio device to a customized SSTVENG sample app that stores images as lossless PNGs with metadata added for:

  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 the shared network drive of a Linux server. The server uses incrond (cronjob for inode/directory change) to trigger the processing pipeline. The file is converted from PNG to JPG at 85% quality and the P5-P0 analysis performed. The attributes above are re-encoded into the JPG as a single comment via comma separated key=value pairs. If you extract the comments from an images, it will look like:


After processing, lftp mirrors any changed files to qsl.net. The image browser is entirely javascript so all files are static from a qsl.net perspective. When a new image is received, that single image plus an updated JSON data file is uploaded. The Javascript periodically polls the JSON data file timestamp to determine when to reload and update the page. Since its Javascript, the code can be inspected by View Page Source.

FSKID works great when used. Have experimented with optical character recognition (OCR) to identify callsigns with limited results. Will likely include as a "callsign guess" in some future version. Eventual goal is capturing enough callsigns to use as a proxy for location to perform more sophisticated propagation trend analysis.

Lots of folks have strong feelings regarding auto-slant. Seems the general concern is that enabling auto-slant means those transmitting wont realize their frequency calibration is off. In reality, calibration issues occur on both the transmit and receive sides to some degree and no calibration is perfect. Thus, seems like a slanted image conveys limited actionable data on its own. Instead, this site displays all images auto-slant enabled along with the calibration data of my receiver/software (via WWV @ 10Mhz) and the auto-slant adjustment (in PPM) that was applied to each 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.