{
  "schemaVersion": 1,
  "generator": "SSTV 2.0 protocol samples",
  "libraryRevision": "de358741cb785d86f917c4bf4ffca13874a8cae0",
  "generatedUtc": "2026-09-28T05:39:53.839Z",
  "imageSHA256": "135577124bdab194ec49889a5fb667848204cdd60a599026d29ee31b7cf47330",
  "samples": [
    {
      "callsign": "N0CALL",
      "channels": 1,
      "id": "ssdv-normal",
      "imageID": 2,
      "packetCount": 63,
      "packetLength": 256,
      "sampleRate": 48000,
      "validation": "All AX.25/SSDV packets recovered from generated WAV; JPEG reconstructed.",
      "imagePath": "/samples/protocols/test-card.png",
      "wavPath": "/samples/protocols/ssdv-normal/sample.wav",
      "flacPath": "/samples/protocols/ssdv-normal/sample.flac",
      "wavSHA256": "52d8500145f3f447e3c001cf04ef633faf14fb65f1635980f730f83952b949bf",
      "flacSHA256": "c48faa98f51d38f78f6c96adc637f091fa9b9db3552b7927d926c294785da619",
      "flacBytes": 6916378,
      "durationSeconds": 126.6675,
      "decodedPath": "/samples/protocols/ssdv-normal/decoded.jpg",
      "packetPath": "/samples/protocols/ssdv-normal/packets.ssdv",
      "packetSHA256": "cb4662bf3deefb66f0606e75751ec6d7a207cd49f9b0ec89ab7e0ddfcd9d463c"
    },
    {
      "callsign": "N0CALL",
      "channels": 1,
      "id": "ssdv-nofec",
      "imageID": 2,
      "packetCount": 54,
      "packetLength": 256,
      "sampleRate": 48000,
      "validation": "All AX.25/SSDV packets recovered from generated WAV; JPEG reconstructed.",
      "imagePath": "/samples/protocols/test-card.png",
      "wavPath": "/samples/protocols/ssdv-nofec/sample.wav",
      "flacPath": "/samples/protocols/ssdv-nofec/sample.flac",
      "wavSHA256": "f49208ea5fc6d839c5a329004d13cd91b24f2235bc8f604929aed97675c463cf",
      "flacSHA256": "c07725600fda4546686ec252f446870e51d7af5f4f1d0b07cdd99ac9fd911552",
      "flacBytes": 5922495,
      "durationSeconds": 108.8,
      "decodedPath": "/samples/protocols/ssdv-nofec/decoded.jpg",
      "packetPath": "/samples/protocols/ssdv-nofec/packets.ssdv",
      "packetSHA256": "59f47b6a7e9ae4841f268142d52af296a4314e74eeff5dbedb2c72a4ed54d1b3"
    },
    {
      "centerFrequencyHz": 12000,
      "channels": 1,
      "durationSeconds": 24,
      "id": "drm-a",
      "mode": "A",
      "payloadSHA256": "135577124bdab194ec49889a5fb667848204cdd60a599026d29ee31b7cf47330",
      "sampleRate": 48000,
      "signalDomain": "realIF",
      "spectrumOccupancy": 3,
      "validation": "Generated by the SSTV 2.0 pinned transmitter library; PCM16 WAV verified by its writer.",
      "waveformSHA256": "ca8ff142bab62d2dcf5c58a1ef6bf29795181a2bf68b474abca0ef1223a50edd",
      "imagePath": "/samples/protocols/test-card.png",
      "wavPath": "/samples/protocols/drm-a/sample.wav",
      "flacPath": "/samples/protocols/drm-a/sample.flac",
      "wavSHA256": "ca8ff142bab62d2dcf5c58a1ef6bf29795181a2bf68b474abca0ef1223a50edd",
      "flacSHA256": "5bcfdf6f2d9f225e6f80a28e35f0c009da971d77d3e7fb5847f9df390776cf6f",
      "flacBytes": 1635978
    },
    {
      "centerFrequencyHz": 12000,
      "channels": 1,
      "durationSeconds": 24,
      "id": "drm-b",
      "mode": "B",
      "payloadSHA256": "135577124bdab194ec49889a5fb667848204cdd60a599026d29ee31b7cf47330",
      "sampleRate": 48000,
      "signalDomain": "realIF",
      "spectrumOccupancy": 3,
      "validation": "Generated by the SSTV 2.0 pinned transmitter library; PCM16 WAV verified by its writer.",
      "waveformSHA256": "442d06c92fa72b5cf45facfe353579a63d29db5c911540c95dfc3c2201fbd73a",
      "imagePath": "/samples/protocols/test-card.png",
      "wavPath": "/samples/protocols/drm-b/sample.wav",
      "flacPath": "/samples/protocols/drm-b/sample.flac",
      "wavSHA256": "442d06c92fa72b5cf45facfe353579a63d29db5c911540c95dfc3c2201fbd73a",
      "flacSHA256": "6fc7121cca98d195e2f0a6e989a8d40fb4f0ca14dba0292227bb2ff155e92f41",
      "flacBytes": 1654838
    },
    {
      "centerFrequencyHz": 12000,
      "channels": 1,
      "durationSeconds": 51.6,
      "id": "drm-c",
      "mode": "C",
      "payloadSHA256": "135577124bdab194ec49889a5fb667848204cdd60a599026d29ee31b7cf47330",
      "sampleRate": 48000,
      "signalDomain": "realIF",
      "spectrumOccupancy": 3,
      "validation": "Generated by the SSTV 2.0 pinned transmitter library; PCM16 WAV verified by its writer.",
      "waveformSHA256": "c0baf34736a06874a9fc15cbb0d54b3033ce6caf0b49132840d352780d36a96a",
      "imagePath": "/samples/protocols/test-card.png",
      "wavPath": "/samples/protocols/drm-c/sample.wav",
      "flacPath": "/samples/protocols/drm-c/sample.flac",
      "wavSHA256": "c0baf34736a06874a9fc15cbb0d54b3033ce6caf0b49132840d352780d36a96a",
      "flacSHA256": "8aa3f6d4c57d44199ebd88143699a2cdecc32e08962ba6add0c6abcaaa33cb9d",
      "flacBytes": 3531136
    },
    {
      "centerFrequencyHz": 12000,
      "channels": 1,
      "durationSeconds": 51.6,
      "id": "drm-d",
      "mode": "D",
      "payloadSHA256": "135577124bdab194ec49889a5fb667848204cdd60a599026d29ee31b7cf47330",
      "sampleRate": 48000,
      "signalDomain": "realIF",
      "spectrumOccupancy": 3,
      "validation": "Generated by the SSTV 2.0 pinned transmitter library; PCM16 WAV verified by its writer.",
      "waveformSHA256": "48fbbbd14fccc665f26f216b9b3a4af49697d447a3af6ccaef5d547b738f82f4",
      "imagePath": "/samples/protocols/test-card.png",
      "wavPath": "/samples/protocols/drm-d/sample.wav",
      "flacPath": "/samples/protocols/drm-d/sample.flac",
      "wavSHA256": "48fbbbd14fccc665f26f216b9b3a4af49697d447a3af6ccaef5d547b738f82f4",
      "flacSHA256": "42d8ac9055b4f4edcbe8e382e9849c14482e5a71f4321377237994fa52a706df",
      "flacBytes": 3735061
    },
    {
      "centerFrequencyHz": 0,
      "channels": 2,
      "durationSeconds": 24,
      "id": "drm-e",
      "mode": "E",
      "payloadSHA256": "135577124bdab194ec49889a5fb667848204cdd60a599026d29ee31b7cf47330",
      "sampleRate": 192000,
      "signalDomain": "complexIQ",
      "spectrumOccupancy": 0,
      "validation": "Generated by the SSTV 2.0 pinned transmitter library; PCM16 WAV verified by its writer.",
      "waveformSHA256": "a783efb02d2b6cc7797a187928c00e9fc325548cdcce2f1608b44116c0f01421",
      "imagePath": "/samples/protocols/test-card.png",
      "wavPath": "/samples/protocols/drm-e/sample.wav",
      "flacPath": "/samples/protocols/drm-e/sample.flac",
      "wavSHA256": "a783efb02d2b6cc7797a187928c00e9fc325548cdcce2f1608b44116c0f01421",
      "flacSHA256": "eb25ca49daa24c4d59c2e8cf1695528dfd39fe119d3f48c8824c0afdbbd55db6",
      "flacBytes": 13921801
    },
    {
      "id": "ssdv-g3ruh-9600",
      "label": "G3RUH 9600 FSK",
      "directory": "ssdv-transports",
      "wavFile": "g3ruh-9600.wav",
      "flacFile": "g3ruh-9600.flac",
      "sampleRate": 48000,
      "channels": 1,
      "signalDomain": "transport",
      "contents": "AX.25 test frame carrying NATIVE9K6FIXTURE; no image payload.",
      "validation": "Generated by the pinned library's native transport fixture generator.",
      "imagePath": "/samples/protocols/test-card.png",
      "wavPath": "/samples/protocols/ssdv-transports/g3ruh-9600.wav",
      "flacPath": "/samples/protocols/ssdv-transports/g3ruh-9600.flac",
      "wavSHA256": "20d7451d4fdb858138fcfaf12b7574cec107d96f3803a415a068ea6fffdba013",
      "flacSHA256": "f2f9a141b640815f87255227b01e96514153bd1c80b0d6bb23d56060b168cde2",
      "flacBytes": 11504,
      "durationSeconds": 0.037604
    },
    {
      "id": "ssdv-ao40-bpsk1200",
      "label": "AO-40 1200 BPSK",
      "directory": "ssdv-transports",
      "wavFile": "ao40-bpsk1200.wav",
      "flacFile": "ao40-bpsk1200.flac",
      "sampleRate": 48000,
      "channels": 1,
      "signalDomain": "transport",
      "contents": "A coded 256-byte test telemetry frame; no image payload.",
      "validation": "Generated by the pinned library's native transport fixture generator.",
      "imagePath": "/samples/protocols/test-card.png",
      "wavPath": "/samples/protocols/ssdv-transports/ao40-bpsk1200.wav",
      "flacPath": "/samples/protocols/ssdv-transports/ao40-bpsk1200.flac",
      "wavSHA256": "b154a7d44b7f842522a6be6b4ba048327a35a198ef0ad88154fdc24afaa05c7c",
      "flacSHA256": "7632bbc408df96d55266ec33dd4ab2b292b8a4bd6af663945db80f4071869c69",
      "flacBytes": 337946,
      "durationSeconds": 4.333333
    },
    {
      "id": "ssdv-il2p-bell202",
      "label": "IL2P over 1200 AFSK",
      "directory": "ssdv-transports",
      "wavFile": "il2p-bell202.wav",
      "flacFile": "il2p-bell202.flac",
      "sampleRate": 48000,
      "channels": 1,
      "signalDomain": "transport",
      "contents": "An IL2P frame carrying TEMP=21.4,V=8.1 telemetry; no image payload.",
      "validation": "Generated by the pinned library's native transport fixture generator.",
      "imagePath": "/samples/protocols/test-card.png",
      "wavPath": "/samples/protocols/ssdv-transports/il2p-bell202.wav",
      "flacPath": "/samples/protocols/ssdv-transports/il2p-bell202.flac",
      "wavSHA256": "f02a4f1422c8e9118aa08bdb8984b8d000c34789e0c4d9364f52d6b4ca745b6b",
      "flacSHA256": "b3974831685947c33220063de395d8c238c103270f403e80050a2541595e18ed",
      "flacBytes": 21347,
      "durationSeconds": 0.233333
    },
    {
      "id": "ssdv-slow-fsk-telemetry-ssdv",
      "label": "Slow FSK / SSDV",
      "directory": "ssdv-transports",
      "wavFile": "slow-fsk-telemetry-ssdv.wav",
      "flacFile": "slow-fsk-telemetry-ssdv.flac",
      "sampleRate": 48000,
      "channels": 1,
      "signalDomain": "transport",
      "contents": "Telemetry plus the first SSDV packet only; an incomplete image example.",
      "validation": "Generated by the pinned library's native transport fixture generator.",
      "imagePath": "/samples/protocols/test-card.png",
      "wavPath": "/samples/protocols/ssdv-transports/slow-fsk-telemetry-ssdv.wav",
      "flacPath": "/samples/protocols/ssdv-transports/slow-fsk-telemetry-ssdv.flac",
      "wavSHA256": "3271f460e96eac15efe091d0480f63d6f35c17980ea29be58f7143b013f42b36",
      "flacSHA256": "d939f5250180c955b919bc066b1d5fb9bcd32c646b98039ae98f1f96b03cea6b",
      "flacBytes": 165718,
      "durationSeconds": 3.03
    },
    {
      "id": "ssdv-iq",
      "label": "9600 FSK with a 3200 Hz offset",
      "directory": "ssdv-transports",
      "sampleRate": 96000,
      "channels": 2,
      "signalDomain": "complexIQ",
      "binaryFile": "g3ruh-9600-offset3200.iq16",
      "contents": "Interleaved signed PCM16 little-endian I,Q pairs; AX.25 test payload, no complete image.",
      "validation": "Generated by the pinned native transport fixture generator.",
      "imagePath": "/samples/protocols/test-card.png",
      "binaryPath": "/samples/protocols/ssdv-transports/g3ruh-9600-offset3200.iq16",
      "binarySHA256": "d7b0c58dc51193fa6c48aaad76079dc777fbfbf5b30eb53c9c3d6c18ab4681b3"
    },
    {
      "id": "weather-fax-60",
      "sampleRate": 48000,
      "channels": 1,
      "durationSeconds": 32,
      "lpm": 60,
      "ioc": 576,
      "width": 576,
      "height": 32,
      "signalDomain": "audio",
      "imagePath": "/samples/protocols/weather-fax.png",
      "contents": "Synthetic grayscale calibration strip. Image rows only; no start, phasing or stop sequence. Not a weather forecast.",
      "validation": "Generated at 1500 Hz black and 2300 Hz white with a continuous phase and exact configured line length.",
      "wavPath": "/samples/protocols/weather-fax-60/sample.wav",
      "flacPath": "/samples/protocols/weather-fax-60/sample.flac",
      "wavSHA256": "6e11876c5f69c27b800566da6b75ac316e519f03a951e9c9dc811e5d4ea3bf30",
      "flacSHA256": "f75310f8ad31bb7ae72625136a57eeabc67965d4799f318e9c1e1278ae86da02",
      "flacBytes": 789287
    },
    {
      "id": "weather-fax-90",
      "sampleRate": 48000,
      "channels": 1,
      "durationSeconds": 21.333333,
      "lpm": 90,
      "ioc": 576,
      "width": 576,
      "height": 32,
      "signalDomain": "audio",
      "imagePath": "/samples/protocols/weather-fax.png",
      "contents": "Synthetic grayscale calibration strip. Image rows only; no start, phasing or stop sequence. Not a weather forecast.",
      "validation": "Generated at 1500 Hz black and 2300 Hz white with a continuous phase and exact configured line length.",
      "wavPath": "/samples/protocols/weather-fax-90/sample.wav",
      "flacPath": "/samples/protocols/weather-fax-90/sample.flac",
      "wavSHA256": "6fdf212943625660a6aab494e358117db54fc388578728c4ae659ba83037357f",
      "flacSHA256": "d655cffc64b8ff23aa2b2d459049ef653c112e55a5df8cba5efb485d1c77943a",
      "flacBytes": 556918
    },
    {
      "id": "weather-fax-100",
      "sampleRate": 48000,
      "channels": 1,
      "durationSeconds": 19.2,
      "lpm": 100,
      "ioc": 576,
      "width": 576,
      "height": 32,
      "signalDomain": "audio",
      "imagePath": "/samples/protocols/weather-fax.png",
      "contents": "Synthetic grayscale calibration strip. Image rows only; no start, phasing or stop sequence. Not a weather forecast.",
      "validation": "Generated at 1500 Hz black and 2300 Hz white with a continuous phase and exact configured line length.",
      "wavPath": "/samples/protocols/weather-fax-100/sample.wav",
      "flacPath": "/samples/protocols/weather-fax-100/sample.flac",
      "wavSHA256": "44da725e73506951628ae01eacbda650b31bfcf2ac370d329e2e65e1fafbd742",
      "flacSHA256": "da59a76a6a33faa0fbaf2fb6e7fc13f59802646958f84a7216e006e0299c2ee5",
      "flacBytes": 524911
    },
    {
      "id": "weather-fax-120",
      "sampleRate": 48000,
      "channels": 1,
      "durationSeconds": 16,
      "lpm": 120,
      "ioc": 576,
      "width": 576,
      "height": 32,
      "signalDomain": "audio",
      "imagePath": "/samples/protocols/weather-fax.png",
      "contents": "Synthetic grayscale calibration strip. Image rows only; no start, phasing or stop sequence. Not a weather forecast.",
      "validation": "Generated at 1500 Hz black and 2300 Hz white with a continuous phase and exact configured line length.",
      "wavPath": "/samples/protocols/weather-fax-120/sample.wav",
      "flacPath": "/samples/protocols/weather-fax-120/sample.flac",
      "wavSHA256": "d9628085c55cb1433ad8c0930bd4bc664ec31c5fd4a130e342e3dd11c2cda10e",
      "flacSHA256": "b70469d494356b8c2c203d8c07a027f2a9cd130135e1943f8614e6d00da33afa",
      "flacBytes": 424063
    },
    {
      "id": "weather-fax-180",
      "sampleRate": 48000,
      "channels": 1,
      "durationSeconds": 10.666667,
      "lpm": 180,
      "ioc": 576,
      "width": 576,
      "height": 32,
      "signalDomain": "audio",
      "imagePath": "/samples/protocols/weather-fax.png",
      "contents": "Synthetic grayscale calibration strip. Image rows only; no start, phasing or stop sequence. Not a weather forecast.",
      "validation": "Generated at 1500 Hz black and 2300 Hz white with a continuous phase and exact configured line length.",
      "wavPath": "/samples/protocols/weather-fax-180/sample.wav",
      "flacPath": "/samples/protocols/weather-fax-180/sample.flac",
      "wavSHA256": "657c5ce144a9934294c5a2035edb7c50537eb19b9fa972d258fc22f57aec6b56",
      "flacSHA256": "0a79a947cff3a880ea62ece962e4877a0806e6faa948ec0ab9051f6aac5da71b",
      "flacBytes": 295542
    },
    {
      "id": "weather-fax-240",
      "sampleRate": 48000,
      "channels": 1,
      "durationSeconds": 8,
      "lpm": 240,
      "ioc": 576,
      "width": 576,
      "height": 32,
      "signalDomain": "audio",
      "imagePath": "/samples/protocols/weather-fax.png",
      "contents": "Synthetic grayscale calibration strip. Image rows only; no start, phasing or stop sequence. Not a weather forecast.",
      "validation": "Generated at 1500 Hz black and 2300 Hz white with a continuous phase and exact configured line length.",
      "wavPath": "/samples/protocols/weather-fax-240/sample.wav",
      "flacPath": "/samples/protocols/weather-fax-240/sample.flac",
      "wavSHA256": "ce497764226c5fee2bf4626d1ad253c5628aeb7eff8024337a766c329d75d3fb",
      "flacSHA256": "6d8e58b550ecb2b2e4f479a182357346da7d543a655e1b4235dd5dd0dd6e7dca",
      "flacBytes": 228409
    }
  ]
}
