[
  {
    "id": "avt-avt104",
    "family": "AVT",
    "name": "Amiga Video Transceiver AVT104",
    "shortName": "AVT104",
    "supportStatus": "needs-verification",
    "appShortName": null,
    "developerOrOrigin": "Amiga Video Transceiver",
    "approxEra": "Amiga Video Transceiver era",
    "colorModel": "RGB",
    "componentSequence": "R-G-B",
    "durationSeconds": 96,
    "durationLabel": "96 s listed for AVT104",
    "appDurationLabel": null,
    "columns": 256,
    "displayLines": 256,
    "dataLines": 256,
    "frameLabel": "256 x 256",
    "appFrameLabel": null,
    "dataLinesLabel": "256",
    "visCode": null,
    "standardVisCode": null,
    "appRawVisCode": null,
    "visLabel": "VIS not confirmed in checked sources",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 160,
    "timingProfile": "Secondary AVT table gives 96 s and 256 x 256. The checked Dayton timing paper explicitly excludes AVT modes, so line-level AVT synchronization is not asserted here.",
    "publicTimingProfile": "Secondary AVT table gives 96 s and 256 x 256. The checked Dayton timing paper explicitly excludes AVT modes, so line-level AVT synchronization is not asserted here.",
    "appTimingProfile": null,
    "specStatus": "Secondary AVT table row. Dayton N7CXI excludes AVT timing tables because it did not have solid author data.",
    "commonUse": "AVT104 is a reference-only analog SSTV row with 96 s duration, 256 x 256 raster, RGB color model, and VIS not confirmed in checked sources.",
    "strengths": [
      "AVT104 documents a legacy AVT row with 96 s duration and 256 x 256 raster.",
      "AVT104's R-G-B / RGB listing helps separate the AVT family variants before implementation-level timing is available."
    ],
    "tradeoffs": [
      "AVT104 has no confirmed VIS in the checked sources, so automatic receiver selection cannot be specified from this row alone.",
      "AVT104 line-level porch timing remains secondary-source context; treat the 96 s entry as historical, not as an app-supported preset."
    ],
    "sourceRefs": [
      "wikipedia-sstv",
      "n7cxi-dayton"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "AVT104 is included from a secondary AVT mode table as 96 s and 256 x 256. Dayton N7CXI is cited only for the caveat that AVT timings were excluded from its proposed specifications due lack of solid source data. Longer AVT mode recorded in SSTV Handbook style mode lists."
  },
  {
    "id": "avt-avt125bw",
    "family": "AVT",
    "name": "Amiga Video Transceiver AVT125 BW",
    "shortName": "AVT125BW",
    "supportStatus": "reference-only",
    "appShortName": null,
    "developerOrOrigin": "Amiga Video Transceiver",
    "approxEra": "Amiga Video Transceiver era",
    "colorModel": "BW",
    "componentSequence": "Y",
    "durationSeconds": 133,
    "durationLabel": "133 s listed for AVT125 BW",
    "appDurationLabel": null,
    "columns": 320,
    "displayLines": 400,
    "dataLines": 400,
    "frameLabel": "320 x 400",
    "appFrameLabel": null,
    "dataLinesLabel": "400",
    "visCode": {
      "hex": "0x50, 0x51, 0x52, 0x53",
      "decimal": "80, 81, 82, 83"
    },
    "standardVisCode": {
      "hex": "0x50, 0x51, 0x52, 0x53",
      "decimal": "80, 81, 82, 83"
    },
    "appRawVisCode": null,
    "visLabel": "VIS 80, 81, 82, 83",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 192,
    "timingProfile": "Mode-list row gives 133 s total duration, 400 scan lines, 320 columns, and 192 lpm; line-level porch timing is not part of this catalog row.",
    "publicTimingProfile": "Mode-list row gives 133 s total duration, 400 scan lines, 320 columns, and 192 lpm; line-level porch timing is not part of this catalog row.",
    "appTimingProfile": null,
    "specStatus": "OK2MNM table row; Dayton N7CXI excludes AVT timing tables, so this remains reference-only.",
    "commonUse": "AVT125BW is a reference-only analog SSTV row with 133 s duration, 320 x 400 raster, BW color model, and VIS 80, 81, 82, 83.",
    "strengths": [
      "AVT125BW has a concrete catalogue row: 133 s listed for AVT125 BW, 320 x 400, BW, VIS 80, 81, 82, 83.",
      "AVT125BW's Y component order and 192 lpm line rate make it useful for comparing airtime, raster, and colour structure against related modes."
    ],
    "tradeoffs": [
      "AVT125BW is not app-supported yet, so the 133 s listed for AVT125 BW / 320 x 400 row should be treated as reference data rather than a verified transmit preset.",
      "AVT125BW still needs implementation-grade porch, sync, and pixel timing before an app-generated WAV/FLAC sample can be published with the same confidence as supported modes."
    ],
    "sourceRefs": [
      "sstv-handbook",
      "n7cxi-dayton"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "OK2MNM lists AVT 125 BW as BW, VIS 80/81/82/83, 133 s, 400 lines, 320 columns, 192.000 lpm. Dayton N7CXI is cited only for its AVT data caveat. Black-and-white AVT mode; exact identifiers are source-table dependent."
  },
  {
    "id": "avt-avt16h",
    "family": "AVT",
    "name": "Amiga Video Transceiver AVT16 High",
    "shortName": "AVT16h",
    "supportStatus": "needs-verification",
    "appShortName": null,
    "developerOrOrigin": "Amiga Video Transceiver",
    "approxEra": "Amiga Video Transceiver era",
    "colorModel": "BW or single RGB component",
    "componentSequence": "single component",
    "durationSeconds": 16,
    "durationLabel": "16 s",
    "appDurationLabel": null,
    "columns": 128,
    "displayLines": 256,
    "dataLines": 256,
    "frameLabel": "128 x 256",
    "appFrameLabel": null,
    "dataLinesLabel": "256",
    "visCode": null,
    "standardVisCode": null,
    "appRawVisCode": null,
    "visLabel": "VIS not confirmed in checked sources",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 960,
    "timingProfile": "Secondary AVT table gives 16 s and 128 x 256. The checked Dayton timing paper explicitly excludes AVT modes, so line-level AVT synchronization is not asserted here.",
    "publicTimingProfile": "Secondary AVT table gives 16 s and 128 x 256. The checked Dayton timing paper explicitly excludes AVT modes, so line-level AVT synchronization is not asserted here.",
    "appTimingProfile": null,
    "specStatus": "Secondary AVT table row. Dayton N7CXI excludes AVT timing tables because it did not have solid author data.",
    "commonUse": "AVT16h is a reference-only analog SSTV row with 16 s duration, 128 x 256 raster, BW or single RGB component color model, and VIS not confirmed in checked sources.",
    "strengths": [
      "AVT16h documents a legacy AVT row with 16 s duration and 128 x 256 raster.",
      "AVT16h's single component / BW or single RGB component listing helps separate the AVT family variants before implementation-level timing is available."
    ],
    "tradeoffs": [
      "AVT16h has no confirmed VIS in the checked sources, so automatic receiver selection cannot be specified from this row alone.",
      "AVT16h line-level porch timing remains secondary-source context; treat the 16 s entry as historical, not as an app-supported preset."
    ],
    "sourceRefs": [
      "wikipedia-sstv",
      "n7cxi-dayton"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "AVT16h is included from a secondary AVT mode table as 16 s and 128 x 256. Dayton N7CXI is cited only for the caveat that AVT timings were excluded from its proposed specifications due lack of solid source data. High-frame AVT 16-second variant recorded in analog SSTV reference tables."
  },
  {
    "id": "avt-avt16w",
    "family": "AVT",
    "name": "Amiga Video Transceiver AVT16 Wide",
    "shortName": "AVT16w",
    "supportStatus": "needs-verification",
    "appShortName": null,
    "developerOrOrigin": "Amiga Video Transceiver",
    "approxEra": "Amiga Video Transceiver era",
    "colorModel": "BW or single RGB component",
    "componentSequence": "single component",
    "durationSeconds": 16,
    "durationLabel": "16 s",
    "appDurationLabel": null,
    "columns": 256,
    "displayLines": 128,
    "dataLines": 128,
    "frameLabel": "256 x 128",
    "appFrameLabel": null,
    "dataLinesLabel": "128",
    "visCode": null,
    "standardVisCode": null,
    "appRawVisCode": null,
    "visLabel": "VIS not confirmed in checked sources",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 480,
    "timingProfile": "Secondary AVT table gives 16 s and 256 x 128. The checked Dayton timing paper explicitly excludes AVT modes, so line-level AVT synchronization is not asserted here.",
    "publicTimingProfile": "Secondary AVT table gives 16 s and 256 x 128. The checked Dayton timing paper explicitly excludes AVT modes, so line-level AVT synchronization is not asserted here.",
    "appTimingProfile": null,
    "specStatus": "Secondary AVT table row. Dayton N7CXI excludes AVT timing tables because it did not have solid author data.",
    "commonUse": "AVT16w is a reference-only analog SSTV row with 16 s duration, 256 x 128 raster, BW or single RGB component color model, and VIS not confirmed in checked sources.",
    "strengths": [
      "AVT16w documents a legacy AVT row with 16 s duration and 256 x 128 raster.",
      "AVT16w's single component / BW or single RGB component listing helps separate the AVT family variants before implementation-level timing is available."
    ],
    "tradeoffs": [
      "AVT16w has no confirmed VIS in the checked sources, so automatic receiver selection cannot be specified from this row alone.",
      "AVT16w line-level porch timing remains secondary-source context; treat the 16 s entry as historical, not as an app-supported preset."
    ],
    "sourceRefs": [
      "wikipedia-sstv",
      "n7cxi-dayton"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "AVT16w is included from a secondary AVT mode table as 16 s and 256 x 128. Dayton N7CXI is cited only for the caveat that AVT timings were excluded from its proposed specifications due lack of solid source data. Wide-frame AVT 16-second variant recorded in analog SSTV reference tables."
  },
  {
    "id": "avt-avt188",
    "family": "AVT",
    "name": "Amiga Video Transceiver AVT188",
    "shortName": "AVT188",
    "supportStatus": "needs-verification",
    "appShortName": null,
    "developerOrOrigin": "Amiga Video Transceiver",
    "approxEra": "Amiga Video Transceiver era",
    "colorModel": "RGB",
    "componentSequence": "R-G-B",
    "durationSeconds": 196,
    "durationLabel": "196 s listed for AVT188",
    "appDurationLabel": null,
    "columns": 320,
    "displayLines": 400,
    "dataLines": 400,
    "frameLabel": "320 x 400",
    "appFrameLabel": null,
    "dataLinesLabel": "400",
    "visCode": {
      "hex": "0x4C, 0x4D, 0x4E, 0x4F",
      "decimal": "76, 77, 78, 79"
    },
    "standardVisCode": {
      "hex": "0x4C, 0x4D, 0x4E, 0x4F",
      "decimal": "76, 77, 78, 79"
    },
    "appRawVisCode": null,
    "visLabel": "VIS 76, 77, 78, 79",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 384,
    "timingProfile": "Mode-list row gives 196 s total duration, 400 scan lines, 320 columns, and 384 lpm; line-level porch timing is not part of this catalog row.",
    "publicTimingProfile": "Mode-list row gives 196 s total duration, 400 scan lines, 320 columns, and 384 lpm; line-level porch timing is not part of this catalog row.",
    "appTimingProfile": null,
    "specStatus": "OK2MNM table row with a published VIS collision note.",
    "commonUse": "AVT188 is a reference-only analog SSTV row with 196 s duration, 320 x 400 raster, RGB color model, and VIS 76, 77, 78, 79.",
    "strengths": [
      "AVT188 has a concrete catalogue row: 196 s listed for AVT188, 320 x 400, RGB, VIS 76, 77, 78, 79.",
      "AVT188's R-G-B component order and 384 lpm line rate make it useful for comparing airtime, raster, and colour structure against related modes."
    ],
    "tradeoffs": [
      "AVT188 is not app-supported yet, so the 196 s listed for AVT188 / 320 x 400 row should be treated as reference data rather than a verified transmit preset.",
      "AVT188 still needs implementation-grade porch, sync, and pixel timing before an app-generated WAV/FLAC sample can be published with the same confidence as supported modes."
    ],
    "sourceRefs": [
      "sstv-handbook",
      "n7cxi-dayton"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "OK2MNM lists AVT188 as RGB, VIS 76/77/78/79, 196 s, 400 lines, 320 columns, 384.000 lpm, and notes that AVT188 and Scottie DX accidentally share VIS 76. Known reference-table caveat: AVT188 and Scottie DX can collide in VIS listings."
  },
  {
    "id": "avt-avt24",
    "family": "AVT",
    "name": "Amiga Video Transceiver AVT24",
    "shortName": "AVT24",
    "supportStatus": "supported",
    "appShortName": "AVT24",
    "developerOrOrigin": "Amiga Video Transceiver",
    "approxEra": "Amiga Video Transceiver era",
    "colorModel": "RGB",
    "componentSequence": "R-G-B",
    "durationSeconds": 22.5016,
    "durationLabel": "22.502 s",
    "appDurationLabel": "22.502 s",
    "columns": 128,
    "displayLines": 120,
    "dataLines": 120,
    "frameLabel": "128 x 120",
    "appFrameLabel": "128 x 120",
    "dataLinesLabel": "120",
    "visCode": {
      "hex": "0x40",
      "decimal": 64
    },
    "standardVisCode": {
      "hex": "0x40",
      "decimal": 64
    },
    "appRawVisCode": {
      "hex": "0xC0",
      "decimal": 192
    },
    "visLabel": "VIS 64 (0x40; AVT normal code from public 64/65/66/67 set)",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 5,
    "frontPorchMs": 0.8,
    "backPorchMs": 0.5,
    "separatorMs": 0.5,
    "transmitSyncMs": 5,
    "transmitFrontPorchMs": 0.8,
    "transmitBackPorchMs": 0,
    "transmitSeparatorMs": 0.5,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 319.977,
    "timingProfile": "App RX line fields: sync 5 ms; front porch 0.8 ms; back porch 0.5 ms; separator/blank 0.5 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "publicTimingProfile": null,
    "appTimingProfile": "App RX line fields: sync 5 ms; front porch 0.8 ms; back porch 0.5 ms; separator/blank 0.5 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public line-level timing was not found in checked sources, so app timing fields are labeled separately.",
    "commonUse": "Historical Amiga Video Transceiver compatibility and reference decoding.",
    "strengths": [
      "AVT24 is a fast compact AVT mode: 22.502 s, 128 x 120, RGB.",
      "AVT24 preserves AVT R-G-B RGB ordering while publishing the normal-code label VIS 64 (0x40; AVT normal code from public 64/65/66/67 set) separately from the app raw VIS value.",
      "AVT24 has explicit app timing fields: 5 ms sync, 0.8 ms front porch, 0.5 ms back porch, 0.5 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "AVT24 is documented from the app timing row; the line fields are explicit even where checked public sources do not publish every porch value."
    ],
    "tradeoffs": [
      "AVT24's 22.502 s airtime is practical for casual contacts, while the 128 x 120 frame still gives less margin than the longer high-detail modes.",
      "AVT24 AVT public tables vary by source; use the app-generated sample audio when checking exact receive timing."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "sstv-handbook"
    ],
    "verificationStatus": "app-derived",
    "sourceNotes": "AVT public mode tables vary and Dayton N7CXI excludes AVT timing because it did not have solid author data. This row presents the app-supported implementation with the public normal VIS label where available. App raw VIS 0xC0 and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "avt-avt32",
    "family": "AVT",
    "name": "Amiga Video Transceiver AVT32",
    "shortName": "AVT32",
    "supportStatus": "needs-verification",
    "appShortName": null,
    "developerOrOrigin": "Amiga Video Transceiver",
    "approxEra": "Amiga Video Transceiver era",
    "colorModel": "BW or single RGB component",
    "componentSequence": "single component",
    "durationSeconds": 32,
    "durationLabel": "32 s",
    "appDurationLabel": null,
    "columns": 256,
    "displayLines": 256,
    "dataLines": 256,
    "frameLabel": "256 x 256",
    "appFrameLabel": null,
    "dataLinesLabel": "256",
    "visCode": null,
    "standardVisCode": null,
    "appRawVisCode": null,
    "visLabel": "VIS not confirmed in checked sources",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 480,
    "timingProfile": "Secondary AVT table gives 32 s and 256 x 256. The checked Dayton timing paper explicitly excludes AVT modes, so line-level AVT synchronization is not asserted here.",
    "publicTimingProfile": "Secondary AVT table gives 32 s and 256 x 256. The checked Dayton timing paper explicitly excludes AVT modes, so line-level AVT synchronization is not asserted here.",
    "appTimingProfile": null,
    "specStatus": "Secondary AVT table row. Dayton N7CXI excludes AVT timing tables because it did not have solid author data.",
    "commonUse": "AVT32 is a reference-only analog SSTV row with 32 s duration, 256 x 256 raster, BW or single RGB component color model, and VIS not confirmed in checked sources.",
    "strengths": [
      "AVT32 documents a legacy AVT row with 32 s duration and 256 x 256 raster.",
      "AVT32's single component / BW or single RGB component listing helps separate the AVT family variants before implementation-level timing is available."
    ],
    "tradeoffs": [
      "AVT32 has no confirmed VIS in the checked sources, so automatic receiver selection cannot be specified from this row alone.",
      "AVT32 line-level porch timing remains secondary-source context; treat the 32 s entry as historical, not as an app-supported preset."
    ],
    "sourceRefs": [
      "wikipedia-sstv",
      "n7cxi-dayton"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "AVT32 is included from a secondary AVT mode table as 32 s and 256 x 256. Dayton N7CXI is cited only for the caveat that AVT timings were excluded from its proposed specifications due lack of solid source data. AVT 32-second family member used for historical compatibility reference."
  },
  {
    "id": "avt-avt48h",
    "family": "AVT",
    "name": "Amiga Video Transceiver AVT48 High",
    "shortName": "AVT48h",
    "supportStatus": "needs-verification",
    "appShortName": null,
    "developerOrOrigin": "Amiga Video Transceiver",
    "approxEra": "Amiga Video Transceiver era",
    "colorModel": "RGB",
    "componentSequence": "R-G-B",
    "durationSeconds": 48,
    "durationLabel": "48 s",
    "appDurationLabel": null,
    "columns": 128,
    "displayLines": 256,
    "dataLines": 256,
    "frameLabel": "128 x 256",
    "appFrameLabel": null,
    "dataLinesLabel": "256",
    "visCode": null,
    "standardVisCode": null,
    "appRawVisCode": null,
    "visLabel": "VIS not confirmed in checked sources",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 320,
    "timingProfile": "Secondary AVT table gives 48 s and 128 x 256. The checked Dayton timing paper explicitly excludes AVT modes, so line-level AVT synchronization is not asserted here.",
    "publicTimingProfile": "Secondary AVT table gives 48 s and 128 x 256. The checked Dayton timing paper explicitly excludes AVT modes, so line-level AVT synchronization is not asserted here.",
    "appTimingProfile": null,
    "specStatus": "Secondary AVT table row. Dayton N7CXI excludes AVT timing tables because it did not have solid author data.",
    "commonUse": "AVT48h is a reference-only analog SSTV row with 48 s duration, 128 x 256 raster, RGB color model, and VIS not confirmed in checked sources.",
    "strengths": [
      "AVT48h documents a legacy AVT row with 48 s duration and 128 x 256 raster.",
      "AVT48h's R-G-B / RGB listing helps separate the AVT family variants before implementation-level timing is available."
    ],
    "tradeoffs": [
      "AVT48h has no confirmed VIS in the checked sources, so automatic receiver selection cannot be specified from this row alone.",
      "AVT48h line-level porch timing remains secondary-source context; treat the 48 s entry as historical, not as an app-supported preset."
    ],
    "sourceRefs": [
      "wikipedia-sstv",
      "n7cxi-dayton"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "AVT48h is included from a secondary AVT mode table as 48 s and 128 x 256. Dayton N7CXI is cited only for the caveat that AVT timings were excluded from its proposed specifications due lack of solid source data. High AVT 48-second variant; verify exact sync behavior before implementing."
  },
  {
    "id": "avt-avt48w",
    "family": "AVT",
    "name": "Amiga Video Transceiver AVT48 Wide",
    "shortName": "AVT48w",
    "supportStatus": "needs-verification",
    "appShortName": null,
    "developerOrOrigin": "Amiga Video Transceiver",
    "approxEra": "Amiga Video Transceiver era",
    "colorModel": "RGB",
    "componentSequence": "R-G-B",
    "durationSeconds": 48,
    "durationLabel": "48 s",
    "appDurationLabel": null,
    "columns": 256,
    "displayLines": 128,
    "dataLines": 128,
    "frameLabel": "256 x 128",
    "appFrameLabel": null,
    "dataLinesLabel": "128",
    "visCode": null,
    "standardVisCode": null,
    "appRawVisCode": null,
    "visLabel": "VIS not confirmed in checked sources",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 160,
    "timingProfile": "Secondary AVT table gives 48 s and 256 x 128. The checked Dayton timing paper explicitly excludes AVT modes, so line-level AVT synchronization is not asserted here.",
    "publicTimingProfile": "Secondary AVT table gives 48 s and 256 x 128. The checked Dayton timing paper explicitly excludes AVT modes, so line-level AVT synchronization is not asserted here.",
    "appTimingProfile": null,
    "specStatus": "Secondary AVT table row. Dayton N7CXI excludes AVT timing tables because it did not have solid author data.",
    "commonUse": "AVT48w is a reference-only analog SSTV row with 48 s duration, 256 x 128 raster, RGB color model, and VIS not confirmed in checked sources.",
    "strengths": [
      "AVT48w documents a legacy AVT row with 48 s duration and 256 x 128 raster.",
      "AVT48w's R-G-B / RGB listing helps separate the AVT family variants before implementation-level timing is available."
    ],
    "tradeoffs": [
      "AVT48w has no confirmed VIS in the checked sources, so automatic receiver selection cannot be specified from this row alone.",
      "AVT48w line-level porch timing remains secondary-source context; treat the 48 s entry as historical, not as an app-supported preset."
    ],
    "sourceRefs": [
      "wikipedia-sstv",
      "n7cxi-dayton"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "AVT48w is included from a secondary AVT mode table as 48 s and 256 x 128. Dayton N7CXI is cited only for the caveat that AVT timings were excluded from its proposed specifications due lack of solid source data. Wide AVT 48-second variant; verify exact sync behavior before implementing."
  },
  {
    "id": "avt-avt8",
    "family": "AVT",
    "name": "Amiga Video Transceiver AVT8",
    "shortName": "AVT8",
    "supportStatus": "needs-verification",
    "appShortName": null,
    "developerOrOrigin": "Amiga Video Transceiver",
    "approxEra": "Amiga Video Transceiver era",
    "colorModel": "BW or single RGB component",
    "componentSequence": "single component",
    "durationSeconds": 8,
    "durationLabel": "8 s",
    "appDurationLabel": null,
    "columns": 128,
    "displayLines": 128,
    "dataLines": 128,
    "frameLabel": "128 x 128",
    "appFrameLabel": null,
    "dataLinesLabel": "128",
    "visCode": null,
    "standardVisCode": null,
    "appRawVisCode": null,
    "visLabel": "VIS not confirmed in checked sources",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 960,
    "timingProfile": "Secondary AVT table gives 8 s and 128 x 128. The checked Dayton timing paper explicitly excludes AVT modes, so line-level AVT synchronization is not asserted here.",
    "publicTimingProfile": "Secondary AVT table gives 8 s and 128 x 128. The checked Dayton timing paper explicitly excludes AVT modes, so line-level AVT synchronization is not asserted here.",
    "appTimingProfile": null,
    "specStatus": "Secondary AVT table row. Dayton N7CXI excludes AVT timing tables because it did not have solid author data.",
    "commonUse": "AVT8 is a reference-only analog SSTV row with 8 s duration, 128 x 128 raster, BW or single RGB component color model, and VIS not confirmed in checked sources.",
    "strengths": [
      "AVT8 documents a legacy AVT row with 8 s duration and 128 x 128 raster.",
      "AVT8's single component / BW or single RGB component listing helps separate the AVT family variants before implementation-level timing is available."
    ],
    "tradeoffs": [
      "AVT8 has no confirmed VIS in the checked sources, so automatic receiver selection cannot be specified from this row alone.",
      "AVT8 line-level porch timing remains secondary-source context; treat the 8 s entry as historical, not as an app-supported preset."
    ],
    "sourceRefs": [
      "wikipedia-sstv",
      "n7cxi-dayton"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "AVT8 is included from a secondary AVT mode table as 8 s and 128 x 128. Dayton N7CXI is cited only for the caveat that AVT timings were excluded from its proposed specifications due lack of solid source data. Very short AVT family analog reference mode; public tables vary on full timing detail."
  },
  {
    "id": "avt-avt90",
    "family": "AVT",
    "name": "Amiga Video Transceiver AVT90",
    "shortName": "AVT90",
    "supportStatus": "supported",
    "appShortName": "AVT90",
    "developerOrOrigin": "Amiga Video Transceiver",
    "approxEra": "Amiga Video Transceiver era",
    "colorModel": "RGB",
    "componentSequence": "R-G-B",
    "durationSeconds": 90.0045,
    "durationLabel": "90.004 s",
    "appDurationLabel": "90.004 s",
    "columns": 320,
    "displayLines": 240,
    "dataLines": 240,
    "frameLabel": "320 x 240",
    "appFrameLabel": "320 x 240",
    "dataLinesLabel": "240",
    "visCode": {
      "hex": "0x44",
      "decimal": 68
    },
    "standardVisCode": {
      "hex": "0x44",
      "decimal": 68
    },
    "appRawVisCode": {
      "hex": "0x44",
      "decimal": 68
    },
    "visLabel": "VIS 68 (0x44; AVT normal code from public 68/69/70/71 set)",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 5,
    "frontPorchMs": 0.8,
    "backPorchMs": 0.5,
    "separatorMs": 0.5,
    "transmitSyncMs": 5,
    "transmitFrontPorchMs": 0.8,
    "transmitBackPorchMs": 0,
    "transmitSeparatorMs": 0.5,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 159.992,
    "timingProfile": "App RX line fields: sync 5 ms; front porch 0.8 ms; back porch 0.5 ms; separator/blank 0.5 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "publicTimingProfile": null,
    "appTimingProfile": "App RX line fields: sync 5 ms; front porch 0.8 ms; back porch 0.5 ms; separator/blank 0.5 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public line-level timing was not found in checked sources, so app timing fields are labeled separately.",
    "commonUse": "Historical Amiga Video Transceiver compatibility and reference decoding.",
    "strengths": [
      "AVT90 is a standard-length standard colour AVT mode: 90.004 s, 320 x 240, RGB.",
      "AVT90 preserves AVT R-G-B RGB ordering while publishing the normal-code label VIS 68 (0x44; AVT normal code from public 68/69/70/71 set) separately from the app raw VIS value.",
      "AVT90 has explicit app timing fields: 5 ms sync, 0.8 ms front porch, 0.5 ms back porch, 0.5 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "AVT90 is documented from the app timing row; the line fields are explicit even where checked public sources do not publish every porch value."
    ],
    "tradeoffs": [
      "AVT90's 90.004 s frame is a balanced choice, but it still needs a stable path for the full 320 x 240 scan.",
      "AVT90 AVT public tables vary by source; use the app-generated sample audio when checking exact receive timing."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "sstv-handbook"
    ],
    "verificationStatus": "app-derived",
    "sourceNotes": "AVT public mode tables vary and Dayton N7CXI excludes AVT timing because it did not have solid author data. This row presents the app-supported implementation with the public normal VIS label where available. App raw VIS 0x44 and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "avt-avt94",
    "family": "AVT",
    "name": "Amiga Video Transceiver AVT94",
    "shortName": "AVT94",
    "supportStatus": "supported",
    "appShortName": "AVT94",
    "developerOrOrigin": "Amiga Video Transceiver",
    "approxEra": "Amiga Video Transceiver era",
    "colorModel": "RGB",
    "componentSequence": "R-G-B",
    "durationSeconds": 93.75,
    "durationLabel": "93.750 s",
    "appDurationLabel": "93.750 s",
    "columns": 320,
    "displayLines": 200,
    "dataLines": 200,
    "frameLabel": "320 x 200",
    "appFrameLabel": "320 x 200",
    "dataLinesLabel": "200",
    "visCode": {
      "hex": "0x48",
      "decimal": 72
    },
    "standardVisCode": {
      "hex": "0x48",
      "decimal": 72
    },
    "appRawVisCode": {
      "hex": "0x48",
      "decimal": 72
    },
    "visLabel": "VIS 72 (0x48; AVT normal code from public 72/73/74/75 set)",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 5,
    "frontPorchMs": 0.8,
    "backPorchMs": 0.5,
    "separatorMs": 0.5,
    "transmitSyncMs": 5,
    "transmitFrontPorchMs": 0.8,
    "transmitBackPorchMs": 0,
    "transmitSeparatorMs": 0.5,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 128,
    "timingProfile": "App RX line fields: sync 5 ms; front porch 0.8 ms; back porch 0.5 ms; separator/blank 0.5 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "publicTimingProfile": null,
    "appTimingProfile": "App RX line fields: sync 5 ms; front porch 0.8 ms; back porch 0.5 ms; separator/blank 0.5 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public line-level timing was not found in checked sources, so app timing fields are labeled separately.",
    "commonUse": "Historical Amiga Video Transceiver compatibility and reference decoding.",
    "strengths": [
      "AVT94 is a standard-length compact AVT mode: 93.750 s, 320 x 200, RGB.",
      "AVT94 preserves AVT R-G-B RGB ordering while publishing the normal-code label VIS 72 (0x48; AVT normal code from public 72/73/74/75 set) separately from the app raw VIS value.",
      "AVT94 has explicit app timing fields: 5 ms sync, 0.8 ms front porch, 0.5 ms back porch, 0.5 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "AVT94 is documented from the app timing row; the line fields are explicit even where checked public sources do not publish every porch value."
    ],
    "tradeoffs": [
      "AVT94's 93.750 s frame is a balanced choice, but it still needs a stable path for the full 320 x 200 scan.",
      "AVT94 AVT public tables vary by source; use the app-generated sample audio when checking exact receive timing."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "sstv-handbook"
    ],
    "verificationStatus": "app-derived",
    "sourceNotes": "AVT public mode tables vary and Dayton N7CXI excludes AVT timing because it did not have solid author data. This row presents the app-supported implementation with the public normal VIS label where available. App raw VIS 0x48 and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "fax-fax480",
    "family": "FAX",
    "name": "FAX480",
    "shortName": "FAX480",
    "supportStatus": "supported",
    "appShortName": "FAX480",
    "developerOrOrigin": "radiofacsimile and analog SSTV software references",
    "approxEra": "analog SSTV era",
    "colorModel": "BW",
    "componentSequence": "Y",
    "durationSeconds": 133.633,
    "durationLabel": "138 s public catalog; app table 133.633 s without the 5-second FAX header",
    "appDurationLabel": "133.633 s",
    "columns": 512,
    "displayLines": 500,
    "dataLines": 500,
    "frameLabel": "512 x 480 image (+20 phasing lines)",
    "appFrameLabel": "512 x 500",
    "dataLinesLabel": "480 image lines + 20 phasing lines",
    "visCode": null,
    "standardVisCode": null,
    "appRawVisCode": {
      "hex": "0x00",
      "decimal": 0
    },
    "visLabel": "No Robot VIS in Dayton FAX480 timing; OK2MNM catalog lists VIS 85",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 5.12,
    "frontPorchMs": 0,
    "backPorchMs": 0,
    "separatorMs": 0,
    "transmitSyncMs": 5.12,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 0,
    "transmitSeparatorMs": 0,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 224.495,
    "timingProfile": "Public FAX480 timing: monochrome 512 x 480 radiofacsimile-style frame, 5-second FAX tone header, 20-line phasing interval, then 5.12 ms sync plus 512-pixel scan lines.",
    "publicTimingProfile": "Public FAX480 timing: monochrome 512 x 480 radiofacsimile-style frame, 5-second FAX tone header, 20-line phasing interval, then 5.12 ms sync plus 512-pixel scan lines.",
    "appTimingProfile": "App RX line fields: sync 5.12 ms; front porch 0 ms; back porch 0 ms; separator/blank 0 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "FAX family analog SSTV operation and compatibility reference.",
    "strengths": [
      "FAX480 is a standard-length high-detail FAX mode: 138 s public catalog; app table 133.633 s without the 5-second FAX header, 512 x 480 image (+20 phasing lines), BW.",
      "FAX480 uses monochrome Y FAX-style scanning; the catalogue caveat is recorded as: No Robot VIS in Dayton FAX480 timing; OK2MNM catalog lists VIS 85. Timing and VIS identity stay separate.",
      "FAX480 has explicit app timing fields: 5.12 ms sync, 0 ms front porch, 0 ms back porch, 0 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "FAX480 has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "FAX480's duration caveat matters: 138 s public catalog; app table 133.633 s without the 5-second FAX header. Keep that distinction visible when checking the full 512 x 480 image (+20 phasing lines) scan.",
      "FAX480 has this VIS caveat: No Robot VIS in Dayton FAX480 timing; OK2MNM catalog lists VIS 85; receivers that require a normal Robot VIS announcement may need manual FAX-style setup."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "sstv-handbook",
      "n7cxi-dayton"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x00 and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "fax-sp17-bw",
    "family": "FAX",
    "name": "SP-17 B/W",
    "shortName": "SP-17",
    "supportStatus": "reference-only",
    "appShortName": null,
    "developerOrOrigin": "radiofacsimile and analog SSTV software references",
    "approxEra": "analog SSTV era",
    "colorModel": "BW",
    "componentSequence": "Y",
    "durationSeconds": 17,
    "durationLabel": "17 s",
    "appDurationLabel": null,
    "columns": 128,
    "displayLines": 256,
    "dataLines": 256,
    "frameLabel": "128 x 256",
    "appFrameLabel": null,
    "dataLinesLabel": "256",
    "visCode": {
      "hex": "0x7D",
      "decimal": 125
    },
    "standardVisCode": {
      "hex": "0x7D",
      "decimal": 125
    },
    "appRawVisCode": null,
    "visLabel": "VIS 125",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 895.52,
    "timingProfile": "Mode-list row gives 17 s total duration, 256 scan lines, 128 columns, and 895.52 lpm; line-level porch timing is not part of this catalog row.",
    "publicTimingProfile": "Mode-list row gives 17 s total duration, 256 scan lines, 128 columns, and 895.52 lpm; line-level porch timing is not part of this catalog row.",
    "appTimingProfile": null,
    "specStatus": "Reference timing row from the OK2MNM SSTV mode-list PDF.",
    "commonUse": "SP-17 is a 17 s black-and-white analog image mode row, useful as a compact monochrome comparison point.",
    "strengths": [
      "SP-17 has a concrete catalogue row: 17 s, 128 x 256, BW, VIS 125.",
      "SP-17's Y component order and 895.52 lpm line rate make it useful for comparing airtime, raster, and colour structure against related modes."
    ],
    "tradeoffs": [
      "SP-17 is not app-supported yet, so the 17 s / 128 x 256 row should be treated as reference data rather than a verified transmit preset.",
      "SP-17 still needs implementation-grade porch, sync, and pixel timing before an app-generated WAV/FLAC sample can be published with the same confidence as supported modes."
    ],
    "sourceRefs": [
      "sstv-handbook"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "OK2MNM SSTV Handbook chapter 5 lists SP-17 as BW, VIS 125, 17 s, 256 lines, 128 columns, 895.52 lpm. Black-and-white FAX/SSTV reference mode."
  },
  {
    "id": "kenwood-fast-fm",
    "family": "Kenwood FAST FM",
    "name": "Kenwood FAST FM",
    "shortName": "FAST FM",
    "supportStatus": "reference-only",
    "appShortName": null,
    "developerOrOrigin": "Kenwood FAST FM",
    "approxEra": "analog SSTV era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY",
    "durationSeconds": 13,
    "durationLabel": "13 s",
    "appDurationLabel": null,
    "columns": 320,
    "displayLines": 240,
    "dataLines": 240,
    "frameLabel": "320 x 240",
    "appFrameLabel": null,
    "dataLinesLabel": "240",
    "visCode": {
      "hex": "0x5A",
      "decimal": 90
    },
    "standardVisCode": {
      "hex": "0x5A",
      "decimal": 90
    },
    "appRawVisCode": null,
    "visLabel": "VIS 90",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 1118.881,
    "timingProfile": "Mode-list row gives 13 s total duration, 240 scan lines, 320 columns, and 1118.881 lpm; line-level porch timing is not part of this catalog row.",
    "publicTimingProfile": "Mode-list row gives 13 s total duration, 240 scan lines, 320 columns, and 1118.881 lpm; line-level porch timing is not part of this catalog row.",
    "appTimingProfile": null,
    "specStatus": "Reference timing row from the OK2MNM SSTV mode-list PDF.",
    "commonUse": "Kenwood FAST FM is a very fast 13 s YCrCb row; the OK2MNM note marks its VIS behavior as odd parity.",
    "strengths": [
      "FAST FM has a concrete catalogue row: 13 s, 320 x 240, YCrCb, VIS 90.",
      "FAST FM's Y-RY-BY component order and 1118.881 lpm line rate make it useful for comparing airtime, raster, and colour structure against related modes."
    ],
    "tradeoffs": [
      "FAST FM is not app-supported yet, so the 13 s / 320 x 240 row should be treated as reference data rather than a verified transmit preset.",
      "FAST FM still needs implementation-grade porch, sync, and pixel timing before an app-generated WAV/FLAC sample can be published with the same confidence as supported modes."
    ],
    "sourceRefs": [
      "sstv-handbook"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "OK2MNM SSTV Handbook chapter 5 lists FAST FM as YCrCb, VIS 90, 13 s, 240 lines, 320 columns, 1118.881 lpm. Kenwood FAST FM image mode referenced in SSTV Handbook style analog lists."
  },
  {
    "id": "martin-hq1",
    "family": "Martin",
    "name": "Martin HQ1",
    "shortName": "HQ1",
    "supportStatus": "reference-only",
    "appShortName": null,
    "developerOrOrigin": "Martin Emmerson",
    "approxEra": "classic analog color SSTV era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY",
    "durationSeconds": 90,
    "durationLabel": "90 s",
    "appDurationLabel": null,
    "columns": 320,
    "displayLines": 256,
    "dataLines": 256,
    "frameLabel": "320 x 256",
    "appFrameLabel": null,
    "dataLinesLabel": "256",
    "visCode": {
      "hex": "0x29",
      "decimal": 41
    },
    "standardVisCode": {
      "hex": "0x29",
      "decimal": 41
    },
    "appRawVisCode": null,
    "visLabel": "VIS 41",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 170.099,
    "timingProfile": "Mode-list row gives 90 s total duration, 256 scan lines, 320 columns, and 170.099 lpm; line-level porch timing is not part of this catalog row.",
    "publicTimingProfile": "Mode-list row gives 90 s total duration, 256 scan lines, 320 columns, and 170.099 lpm; line-level porch timing is not part of this catalog row.",
    "appTimingProfile": null,
    "specStatus": "Reference timing row from the OK2MNM SSTV mode-list PDF.",
    "commonUse": "Martin HQ1 is a high-quality Martin-family reference mode using color-difference coding rather than the classic Martin RGB line order.",
    "strengths": [
      "HQ1 has a concrete catalogue row: 90 s, 320 x 256, YCrCb, VIS 41.",
      "HQ1's Y-RY-BY component order and 170.099 lpm line rate make it useful for comparing airtime, raster, and colour structure against related modes."
    ],
    "tradeoffs": [
      "HQ1 is not app-supported yet, so the 90 s / 320 x 256 row should be treated as reference data rather than a verified transmit preset.",
      "HQ1 still needs implementation-grade porch, sync, and pixel timing before an app-generated WAV/FLAC sample can be published with the same confidence as supported modes."
    ],
    "sourceRefs": [
      "sstv-handbook"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "OK2MNM SSTV Handbook chapter 5 lists HQ1 as YCrCb, VIS 41, 90 s, 256 lines, 320 columns, 170.099 lpm. Martin high-quality variant found in reference mode catalogs."
  },
  {
    "id": "martin-hq2",
    "family": "Martin",
    "name": "Martin HQ2",
    "shortName": "HQ2",
    "supportStatus": "reference-only",
    "appShortName": null,
    "developerOrOrigin": "Martin Emmerson",
    "approxEra": "classic analog color SSTV era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY",
    "durationSeconds": 112,
    "durationLabel": "112 s",
    "appDurationLabel": null,
    "columns": 320,
    "displayLines": 256,
    "dataLines": 256,
    "frameLabel": "320 x 256",
    "appFrameLabel": null,
    "dataLinesLabel": "256",
    "visCode": {
      "hex": "0x2A",
      "decimal": 42
    },
    "standardVisCode": {
      "hex": "0x2A",
      "decimal": 42
    },
    "appRawVisCode": null,
    "visLabel": "VIS 42",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 137.35,
    "timingProfile": "Mode-list row gives 112 s total duration, 256 scan lines, 320 columns, and 137.35 lpm; line-level porch timing is not part of this catalog row.",
    "publicTimingProfile": "Mode-list row gives 112 s total duration, 256 scan lines, 320 columns, and 137.35 lpm; line-level porch timing is not part of this catalog row.",
    "appTimingProfile": null,
    "specStatus": "Reference timing row from the OK2MNM SSTV mode-list PDF.",
    "commonUse": "Martin HQ2 is a longer high-quality Martin-family reference mode with the same 320 x 256 raster as HQ1.",
    "strengths": [
      "HQ2 has a concrete catalogue row: 112 s, 320 x 256, YCrCb, VIS 42.",
      "HQ2's Y-RY-BY component order and 137.35 lpm line rate make it useful for comparing airtime, raster, and colour structure against related modes."
    ],
    "tradeoffs": [
      "HQ2 is not app-supported yet, so the 112 s / 320 x 256 row should be treated as reference data rather than a verified transmit preset.",
      "HQ2 still needs implementation-grade porch, sync, and pixel timing before an app-generated WAV/FLAC sample can be published with the same confidence as supported modes."
    ],
    "sourceRefs": [
      "sstv-handbook"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "OK2MNM SSTV Handbook chapter 5 lists HQ2 as YCrCb, VIS 42, 112 s, 256 lines, 320 columns, 137.35 lpm. Martin high-quality variant found in reference mode catalogs."
  },
  {
    "id": "martin-hq3",
    "family": "Martin",
    "name": "Martin HQ3",
    "shortName": "HQ3",
    "supportStatus": "needs-verification",
    "appShortName": null,
    "developerOrOrigin": "Martin Emmerson",
    "approxEra": "classic analog color SSTV era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY",
    "durationSeconds": 63,
    "durationLabel": "63 s",
    "appDurationLabel": null,
    "columns": 320,
    "displayLines": 144,
    "dataLines": 144,
    "frameLabel": "320 x 144",
    "appFrameLabel": null,
    "dataLinesLabel": "144",
    "visCode": null,
    "standardVisCode": null,
    "appRawVisCode": null,
    "visLabel": "VIS unknown in OK2MNM table",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 137.35,
    "timingProfile": "Mode-list row gives 63 s total duration, 144 scan lines, 320 columns, and 137.35 lpm; line-level porch timing is not part of this catalog row.",
    "publicTimingProfile": "Mode-list row gives 63 s total duration, 144 scan lines, 320 columns, and 137.35 lpm; line-level porch timing is not part of this catalog row.",
    "appTimingProfile": null,
    "specStatus": "Reference timing row from the OK2MNM SSTV mode-list PDF.",
    "commonUse": "Martin HQ3 is listed as a 63 s, 320 x 144 YCrCb high-quality Martin-family mode, but the checked table does not publish its VIS code.",
    "strengths": [
      "HQ3 has a concrete catalogue row: 63 s, 320 x 144, YCrCb, VIS unknown in OK2MNM table.",
      "HQ3's Y-RY-BY component order and 137.35 lpm line rate make it useful for comparing airtime, raster, and colour structure against related modes."
    ],
    "tradeoffs": [
      "HQ3 is not app-supported yet, so the 63 s / 320 x 144 row should be treated as reference data rather than a verified transmit preset.",
      "HQ3 still needs implementation-grade porch, sync, and pixel timing before an app-generated WAV/FLAC sample can be published with the same confidence as supported modes."
    ],
    "sourceRefs": [
      "sstv-handbook"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "OK2MNM SSTV Handbook chapter 5 lists HQ3 as YCrCb, VIS unknown in OK2MNM table, 63 s, 144 lines, 320 columns, 137.35 lpm. Martin high-quality variant listed in the OK2MNM mode table without a confirmed VIS code."
  },
  {
    "id": "martin-hq4",
    "family": "Martin",
    "name": "Martin HQ4",
    "shortName": "HQ4",
    "supportStatus": "needs-verification",
    "appShortName": null,
    "developerOrOrigin": "Martin Emmerson",
    "approxEra": "classic analog color SSTV era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY",
    "durationSeconds": 51,
    "durationLabel": "51 s",
    "appDurationLabel": null,
    "columns": 320,
    "displayLines": 144,
    "dataLines": 144,
    "frameLabel": "320 x 144",
    "appFrameLabel": null,
    "dataLinesLabel": "144",
    "visCode": null,
    "standardVisCode": null,
    "appRawVisCode": null,
    "visLabel": "VIS unknown in OK2MNM table",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 170.099,
    "timingProfile": "Mode-list row gives 51 s total duration, 144 scan lines, 320 columns, and 170.099 lpm; line-level porch timing is not part of this catalog row.",
    "publicTimingProfile": "Mode-list row gives 51 s total duration, 144 scan lines, 320 columns, and 170.099 lpm; line-level porch timing is not part of this catalog row.",
    "appTimingProfile": null,
    "specStatus": "Reference timing row from the OK2MNM SSTV mode-list PDF.",
    "commonUse": "Martin HQ4 is listed as a 51 s, 320 x 144 YCrCb high-quality Martin-family mode, but the checked table does not publish its VIS code.",
    "strengths": [
      "HQ4 has a concrete catalogue row: 51 s, 320 x 144, YCrCb, VIS unknown in OK2MNM table.",
      "HQ4's Y-RY-BY component order and 170.099 lpm line rate make it useful for comparing airtime, raster, and colour structure against related modes."
    ],
    "tradeoffs": [
      "HQ4 is not app-supported yet, so the 51 s / 320 x 144 row should be treated as reference data rather than a verified transmit preset.",
      "HQ4 still needs implementation-grade porch, sync, and pixel timing before an app-generated WAV/FLAC sample can be published with the same confidence as supported modes."
    ],
    "sourceRefs": [
      "sstv-handbook"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "OK2MNM SSTV Handbook chapter 5 lists HQ4 as YCrCb, VIS unknown in OK2MNM table, 51 s, 144 lines, 320 columns, 170.099 lpm. Martin high-quality variant listed in the OK2MNM mode table without a confirmed VIS code."
  },
  {
    "id": "martin-m1",
    "family": "Martin",
    "name": "Martin 1",
    "shortName": "M1",
    "supportStatus": "supported",
    "appShortName": "M1",
    "developerOrOrigin": "Martin Emmerson",
    "approxEra": "classic analog color SSTV era",
    "colorModel": "RGB",
    "componentSequence": "G-B-R",
    "durationSeconds": 114.297,
    "durationLabel": "114.297 s",
    "appDurationLabel": "114.297 s",
    "columns": 320,
    "displayLines": 256,
    "dataLines": 256,
    "frameLabel": "320 x 256",
    "appFrameLabel": "320 x 256",
    "dataLinesLabel": "256",
    "visCode": {
      "hex": "0x2C",
      "decimal": 44
    },
    "standardVisCode": {
      "hex": "0x2C",
      "decimal": 44
    },
    "appRawVisCode": {
      "hex": "0xAC",
      "decimal": 172
    },
    "visLabel": "VIS 44 (0x2C)",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 5,
    "frontPorchMs": 0.8,
    "backPorchMs": 0.5,
    "separatorMs": 0.5,
    "transmitSyncMs": 5,
    "transmitFrontPorchMs": 0.8,
    "transmitBackPorchMs": 0,
    "transmitSeparatorMs": 0.5,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 134.387,
    "timingProfile": "Public Martin M1 timing: VIS 44; 256 lines; 4.862 ms sync at 1200 Hz, 0.572 ms sync porch, Green scan 146.432 ms, 0.572 ms separator, Blue scan, 0.572 ms separator, Red scan, 0.572 ms separator.",
    "publicTimingProfile": "Public Martin M1 timing: VIS 44; 256 lines; 4.862 ms sync at 1200 Hz, 0.572 ms sync porch, Green scan 146.432 ms, 0.572 ms separator, Blue scan, 0.572 ms separator, Red scan, 0.572 ms separator.",
    "appTimingProfile": "App RX line fields: sync 5 ms; front porch 0.8 ms; back porch 0.5 ms; separator/blank 0.5 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Classic HF color SSTV and compatibility testing.",
    "strengths": [
      "M1 is a standard-length standard colour Martin mode: 114.297 s, 320 x 256, RGB.",
      "M1 keeps the classic Martin G-B-R RGB order, which makes colour order predictable for receivers expecting VIS 44 (0x2C).",
      "M1 has explicit app timing fields: 5 ms sync, 0.8 ms front porch, 0.5 ms back porch, 0.5 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "M1 has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "M1's 114.297 s frame is a balanced choice, but it still needs a stable path for the full 320 x 256 scan.",
      "M1 sends colour sequentially in RGB; sync drift can appear as colour fringing before the whole frame becomes unreadable."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "sstv-handbook",
      "n7cxi-dayton",
      "bruxy-mode-look"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0xAC and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "martin-m2",
    "family": "Martin",
    "name": "Martin 2",
    "shortName": "M2",
    "supportStatus": "supported",
    "appShortName": "M2",
    "developerOrOrigin": "Martin Emmerson",
    "approxEra": "classic analog color SSTV era",
    "colorModel": "RGB",
    "componentSequence": "G-B-R",
    "durationSeconds": 58.064,
    "durationLabel": "58.064 s",
    "appDurationLabel": "58.064 s",
    "columns": 320,
    "displayLines": 256,
    "dataLines": 256,
    "frameLabel": "320 x 256",
    "appFrameLabel": "320 x 256",
    "dataLinesLabel": "256",
    "visCode": {
      "hex": "0x28",
      "decimal": 40
    },
    "standardVisCode": {
      "hex": "0x28",
      "decimal": 40
    },
    "appRawVisCode": {
      "hex": "0x28",
      "decimal": 40
    },
    "visLabel": "VIS 40 (0x28)",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 5,
    "frontPorchMs": 0.8,
    "backPorchMs": 0.5,
    "separatorMs": 0.5,
    "transmitSyncMs": 5,
    "transmitFrontPorchMs": 0.8,
    "transmitBackPorchMs": 0,
    "transmitSeparatorMs": 0.5,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 264.536,
    "timingProfile": "Public Martin M2 timing: VIS 40; 256 lines; same Martin line order as M1 with 4.862 ms sync, 0.572 ms porch/separators, and 73.216 ms color scans.",
    "publicTimingProfile": "Public Martin M2 timing: VIS 40; 256 lines; same Martin line order as M1 with 4.862 ms sync, 0.572 ms porch/separators, and 73.216 ms color scans.",
    "appTimingProfile": "App RX line fields: sync 5 ms; front porch 0.8 ms; back porch 0.5 ms; separator/blank 0.5 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Martin family analog SSTV operation and compatibility reference.",
    "strengths": [
      "M2 is a medium-length standard colour Martin mode: 58.064 s, 320 x 256, RGB.",
      "M2 keeps the classic Martin G-B-R RGB order, which makes colour order predictable for receivers expecting VIS 40 (0x28).",
      "M2 has explicit app timing fields: 5 ms sync, 0.8 ms front porch, 0.5 ms back porch, 0.5 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "M2 has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "M2's 58.064 s airtime is practical for casual contacts, while the 320 x 256 frame still gives less margin than the longer high-detail modes.",
      "M2 sends colour sequentially in RGB; sync drift can appear as colour fringing before the whole frame becomes unreadable."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "sstv-handbook",
      "n7cxi-dayton"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x28 and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "martin-m3",
    "family": "Martin",
    "name": "Martin 3",
    "shortName": "M3",
    "supportStatus": "reference-only",
    "appShortName": null,
    "developerOrOrigin": "Martin Emmerson",
    "approxEra": "classic analog color SSTV era",
    "colorModel": "RGB",
    "componentSequence": "G-B-R",
    "durationSeconds": 57,
    "durationLabel": "57 s",
    "appDurationLabel": null,
    "columns": 320,
    "displayLines": 128,
    "dataLines": 128,
    "frameLabel": "320 x 128",
    "appFrameLabel": null,
    "dataLinesLabel": "128",
    "visCode": {
      "hex": "0x24",
      "decimal": 36
    },
    "standardVisCode": {
      "hex": "0x24",
      "decimal": 36
    },
    "appRawVisCode": null,
    "visLabel": "VIS 36",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 134.395,
    "timingProfile": "Mode-list row gives 57 s total duration, 128 scan lines, 320 columns, and 134.395 lpm; line-level porch timing is not part of this catalog row.",
    "publicTimingProfile": "Mode-list row gives 57 s total duration, 128 scan lines, 320 columns, and 134.395 lpm; line-level porch timing is not part of this catalog row.",
    "appTimingProfile": null,
    "specStatus": "Reference timing row from the OK2MNM SSTV mode-list PDF.",
    "commonUse": "M3 is a reference-only analog SSTV row with 57 s duration, 320 x 128 raster, RGB color model, and VIS 36.",
    "strengths": [
      "M3 has a concrete catalogue row: 57 s, 320 x 128, RGB, VIS 36.",
      "M3's G-B-R component order and 134.395 lpm line rate make it useful for comparing airtime, raster, and colour structure against related modes."
    ],
    "tradeoffs": [
      "M3 is not app-supported yet, so the 57 s / 320 x 128 row should be treated as reference data rather than a verified transmit preset.",
      "M3 still needs implementation-grade porch, sync, and pixel timing before an app-generated WAV/FLAC sample can be published with the same confidence as supported modes."
    ],
    "sourceRefs": [
      "sstv-handbook"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "OK2MNM SSTV Handbook chapter 5 lists M3 as RGB, VIS 36, 57 s, 128 lines, 320 columns, 134.395 lpm. Less common Martin family variant beyond the app-supported M1 and M2 modes."
  },
  {
    "id": "martin-m4",
    "family": "Martin",
    "name": "Martin 4",
    "shortName": "M4",
    "supportStatus": "reference-only",
    "appShortName": null,
    "developerOrOrigin": "Martin Emmerson",
    "approxEra": "classic analog color SSTV era",
    "colorModel": "RGB",
    "componentSequence": "G-B-R",
    "durationSeconds": 29,
    "durationLabel": "29 s",
    "appDurationLabel": null,
    "columns": 320,
    "displayLines": 128,
    "dataLines": 128,
    "frameLabel": "320 x 128",
    "appFrameLabel": null,
    "dataLinesLabel": "128",
    "visCode": {
      "hex": "0x20",
      "decimal": 32
    },
    "standardVisCode": {
      "hex": "0x20",
      "decimal": 32
    },
    "appRawVisCode": null,
    "visLabel": "VIS 32",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 264.553,
    "timingProfile": "Mode-list row gives 29 s total duration, 128 scan lines, 320 columns, and 264.553 lpm; line-level porch timing is not part of this catalog row.",
    "publicTimingProfile": "Mode-list row gives 29 s total duration, 128 scan lines, 320 columns, and 264.553 lpm; line-level porch timing is not part of this catalog row.",
    "appTimingProfile": null,
    "specStatus": "Reference timing row from the OK2MNM SSTV mode-list PDF.",
    "commonUse": "M4 is a reference-only analog SSTV row with 29 s duration, 320 x 128 raster, RGB color model, and VIS 32.",
    "strengths": [
      "M4 has a concrete catalogue row: 29 s, 320 x 128, RGB, VIS 32.",
      "M4's G-B-R component order and 264.553 lpm line rate make it useful for comparing airtime, raster, and colour structure against related modes."
    ],
    "tradeoffs": [
      "M4 is not app-supported yet, so the 29 s / 320 x 128 row should be treated as reference data rather than a verified transmit preset.",
      "M4 still needs implementation-grade porch, sync, and pixel timing before an app-generated WAV/FLAC sample can be published with the same confidence as supported modes."
    ],
    "sourceRefs": [
      "sstv-handbook"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "OK2MNM SSTV Handbook chapter 5 lists M4 as RGB, VIS 32, 29 s, 128 lines, 320 columns, 264.553 lpm. Less common Martin family variant beyond the app-supported M1 and M2 modes."
  },
  {
    "id": "mmsstv-mc110-n",
    "family": "MMSSTV",
    "name": "MMSSTV MC110-Narrow",
    "shortName": "MC110-N",
    "supportStatus": "supported",
    "appShortName": "MC110-N",
    "developerOrOrigin": "MMSSTV",
    "approxEra": "sound-card SSTV era",
    "colorModel": "RGB",
    "componentSequence": "R-G-B",
    "durationSeconds": 109.703,
    "durationLabel": "109.703 s",
    "appDurationLabel": "109.703 s",
    "columns": 320,
    "displayLines": 256,
    "dataLines": 256,
    "frameLabel": "320 x 256",
    "appFrameLabel": "320 x 256",
    "dataLinesLabel": "256",
    "visCode": {
      "hex": "0x14",
      "decimal": 20
    },
    "standardVisCode": null,
    "appRawVisCode": {
      "hex": "0x05456D",
      "decimal": 345453
    },
    "visLabel": "N-VIS 0x14 (20; MMSSTV narrow-band code)",
    "extendedVis": true,
    "nvisCode": {
      "hex": "0x14",
      "decimal": 20
    },
    "nvisLabel": "N-VIS 0x14 (20)",
    "syncMs": 8,
    "frontPorchMs": 0,
    "backPorchMs": 0.5,
    "separatorMs": 0,
    "transmitSyncMs": 9,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 1,
    "transmitSeparatorMs": 0,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 2172,
    "deviationHz": 128,
    "videoToneRangeHz": [
      2044,
      2300
    ],
    "lineRateLpm": 140.014,
    "timingProfile": "MMSSTV MC-N timing: narrow-band RGB mode with 8.000 ms sync, 0.500 ms separator, then R, G, and B scans occupying the 2044-2300 Hz narrow tone span.",
    "publicTimingProfile": "MMSSTV MC-N timing: narrow-band RGB mode with 8.000 ms sync, 0.500 ms separator, then R, G, and B scans occupying the 2044-2300 Hz narrow tone span.",
    "appTimingProfile": "App RX line fields: sync 8 ms; front porch 0 ms; back porch 0.5 ms; separator/blank 0 ms; video tones 2044-2300 Hz around 2172 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Software-era analog SSTV operation and MMSSTV compatibility.",
    "strengths": [
      "MC110-N is a standard-length standard colour MMSSTV mode: 109.703 s, 320 x 256, RGB.",
      "MC110-N identifies through N-VIS 0x14 (20; MMSSTV narrow-band code), separating MMSSTV-era modes from the 7-bit VIS space used by older analog families.",
      "MC110-N has explicit app timing fields: 8 ms sync, 0 ms front porch, 0.5 ms back porch, 0 ms separator/blank, and 2044-2300 Hz around 2172 Hz video tones.",
      "MC110-N has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "MC110-N's 109.703 s frame is a balanced choice, but it still needs a stable path for the full 320 x 256 scan.",
      "MC110-N depends on N-VIS 0x14 (20) and the narrow 2044-2300 Hz around 2172 Hz span; older receivers that only watch standard VIS may need manual mode selection."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "mmsstv-mode-txt",
      "mmsstv-doc"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x05456D and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build. Public MMSSTV VIS 0x14 differs from app raw 0x05456D; both values are shown."
  },
  {
    "id": "mmsstv-mc140-n",
    "family": "MMSSTV",
    "name": "MMSSTV MC140-Narrow",
    "shortName": "MC140-N",
    "supportStatus": "supported",
    "appShortName": "MC140-N",
    "developerOrOrigin": "MMSSTV",
    "approxEra": "sound-card SSTV era",
    "colorModel": "RGB",
    "componentSequence": "R-G-B",
    "durationSeconds": 140.426,
    "durationLabel": "140.426 s",
    "appDurationLabel": "140.426 s",
    "columns": 320,
    "displayLines": 256,
    "dataLines": 256,
    "frameLabel": "320 x 256",
    "appFrameLabel": "320 x 256",
    "dataLinesLabel": "256",
    "visCode": {
      "hex": "0x15",
      "decimal": 21
    },
    "standardVisCode": null,
    "appRawVisCode": {
      "hex": "0x01556D",
      "decimal": 87405
    },
    "visLabel": "N-VIS 0x15 (21; MMSSTV narrow-band code)",
    "extendedVis": true,
    "nvisCode": {
      "hex": "0x15",
      "decimal": 21
    },
    "nvisLabel": "N-VIS 0x15 (21)",
    "syncMs": 8,
    "frontPorchMs": 0,
    "backPorchMs": 0.5,
    "separatorMs": 0,
    "transmitSyncMs": 9,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 1,
    "transmitSeparatorMs": 0,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 2172,
    "deviationHz": 128,
    "videoToneRangeHz": [
      2044,
      2300
    ],
    "lineRateLpm": 109.381,
    "timingProfile": "MMSSTV MC-N timing: narrow-band RGB mode with 8.000 ms sync, 0.500 ms separator, then R, G, and B scans occupying the 2044-2300 Hz narrow tone span.",
    "publicTimingProfile": "MMSSTV MC-N timing: narrow-band RGB mode with 8.000 ms sync, 0.500 ms separator, then R, G, and B scans occupying the 2044-2300 Hz narrow tone span.",
    "appTimingProfile": "App RX line fields: sync 8 ms; front porch 0 ms; back porch 0.5 ms; separator/blank 0 ms; video tones 2044-2300 Hz around 2172 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Software-era analog SSTV operation and MMSSTV compatibility.",
    "strengths": [
      "MC140-N is a standard-length standard colour MMSSTV mode: 140.426 s, 320 x 256, RGB.",
      "MC140-N identifies through N-VIS 0x15 (21; MMSSTV narrow-band code), separating MMSSTV-era modes from the 7-bit VIS space used by older analog families.",
      "MC140-N has explicit app timing fields: 8 ms sync, 0 ms front porch, 0.5 ms back porch, 0 ms separator/blank, and 2044-2300 Hz around 2172 Hz video tones.",
      "MC140-N has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "MC140-N's 140.426 s frame is a balanced choice, but it still needs a stable path for the full 320 x 256 scan.",
      "MC140-N depends on N-VIS 0x15 (21) and the narrow 2044-2300 Hz around 2172 Hz span; older receivers that only watch standard VIS may need manual mode selection."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "mmsstv-mode-txt",
      "mmsstv-doc"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x01556D and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build. Public MMSSTV VIS 0x15 differs from app raw 0x01556D; both values are shown."
  },
  {
    "id": "mmsstv-mc180-n",
    "family": "MMSSTV",
    "name": "MMSSTV MC180-Narrow",
    "shortName": "MC180-N",
    "supportStatus": "supported",
    "appShortName": "MC180-N",
    "developerOrOrigin": "MMSSTV",
    "approxEra": "sound-card SSTV era",
    "colorModel": "RGB",
    "componentSequence": "R-G-B",
    "durationSeconds": 180.363,
    "durationLabel": "180.363 s",
    "appDurationLabel": "180.363 s",
    "columns": 320,
    "displayLines": 256,
    "dataLines": 256,
    "frameLabel": "320 x 256",
    "appFrameLabel": "320 x 256",
    "dataLinesLabel": "256",
    "visCode": {
      "hex": "0x16",
      "decimal": 22
    },
    "standardVisCode": null,
    "appRawVisCode": {
      "hex": "0x0D656D",
      "decimal": 877933
    },
    "visLabel": "N-VIS 0x16 (22; MMSSTV narrow-band code)",
    "extendedVis": true,
    "nvisCode": {
      "hex": "0x16",
      "decimal": 22
    },
    "nvisLabel": "N-VIS 0x16 (22)",
    "syncMs": 8,
    "frontPorchMs": 0,
    "backPorchMs": 0.5,
    "separatorMs": 0,
    "transmitSyncMs": 9,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 1,
    "transmitSeparatorMs": 0,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 2172,
    "deviationHz": 128,
    "videoToneRangeHz": [
      2044,
      2300
    ],
    "lineRateLpm": 85.162,
    "timingProfile": "MMSSTV MC-N timing: narrow-band RGB mode with 8.000 ms sync, 0.500 ms separator, then R, G, and B scans occupying the 2044-2300 Hz narrow tone span.",
    "publicTimingProfile": "MMSSTV MC-N timing: narrow-band RGB mode with 8.000 ms sync, 0.500 ms separator, then R, G, and B scans occupying the 2044-2300 Hz narrow tone span.",
    "appTimingProfile": "App RX line fields: sync 8 ms; front porch 0 ms; back porch 0.5 ms; separator/blank 0 ms; video tones 2044-2300 Hz around 2172 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Software-era analog SSTV operation and MMSSTV compatibility.",
    "strengths": [
      "MC180-N is a long-form standard colour MMSSTV mode: 180.363 s, 320 x 256, RGB.",
      "MC180-N identifies through N-VIS 0x16 (22; MMSSTV narrow-band code), separating MMSSTV-era modes from the 7-bit VIS space used by older analog families.",
      "MC180-N has explicit app timing fields: 8 ms sync, 0 ms front porch, 0.5 ms back porch, 0 ms separator/blank, and 2044-2300 Hz around 2172 Hz video tones.",
      "MC180-N has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "MC180-N's 180.363 s transfer can carry more picture detail, but it occupies the channel longer and is less forgiving of fades across the 320 x 256 frame.",
      "MC180-N depends on N-VIS 0x16 (22) and the narrow 2044-2300 Hz around 2172 Hz span; older receivers that only watch standard VIS may need manual mode selection."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "mmsstv-mode-txt",
      "mmsstv-doc"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x0D656D and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build. Public MMSSTV VIS 0x16 differs from app raw 0x0D656D; both values are shown."
  },
  {
    "id": "mmsstv-ml180",
    "family": "MMSSTV",
    "name": "ML180",
    "shortName": "ML180",
    "supportStatus": "supported",
    "appShortName": "ML180",
    "developerOrOrigin": "MMSSTV",
    "approxEra": "sound-card SSTV era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY",
    "durationSeconds": 180.2085,
    "durationLabel": "180.208 s",
    "appDurationLabel": "180.208 s",
    "columns": 640,
    "displayLines": 496,
    "dataLines": 496,
    "frameLabel": "640 x 496",
    "appFrameLabel": "640 x 496",
    "dataLinesLabel": "496",
    "visCode": {
      "hex": "0x8523",
      "decimal": 34083
    },
    "standardVisCode": null,
    "appRawVisCode": {
      "hex": "0x8523",
      "decimal": 34083
    },
    "visLabel": "Extended VIS 0x8523 (34083; MMSSTV 16-bit code)",
    "extendedVis": true,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 9,
    "frontPorchMs": 0.5,
    "backPorchMs": 0.5,
    "separatorMs": 0.5,
    "transmitSyncMs": 9,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 1,
    "transmitSeparatorMs": 0,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 165.142,
    "timingProfile": "MMSSTV MR/ML timing: 9.000 ms sync, 1.000 ms separator, Y scan, 0.100 ms last-pixel pulse, half-width R-Y, 0.100 ms last-pixel pulse, half-width B-Y, 0.100 ms last-pixel pulse.",
    "publicTimingProfile": "MMSSTV MR/ML timing: 9.000 ms sync, 1.000 ms separator, Y scan, 0.100 ms last-pixel pulse, half-width R-Y, 0.100 ms last-pixel pulse, half-width B-Y, 0.100 ms last-pixel pulse.",
    "appTimingProfile": "App RX line fields: sync 9 ms; front porch 0.5 ms; back porch 0.5 ms; separator/blank 0.5 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Software-era analog SSTV operation and MMSSTV compatibility.",
    "strengths": [
      "ML180 is a long-form high-detail MMSSTV mode: 180.208 s, 640 x 496, YCrCb.",
      "ML180 identifies through Extended VIS 0x8523 (34083; MMSSTV 16-bit code), separating MMSSTV-era modes from the 7-bit VIS space used by older analog families.",
      "ML180 has explicit app timing fields: 9 ms sync, 0.5 ms front porch, 0.5 ms back porch, 0.5 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "ML180 has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "ML180's 180.208 s transfer can carry more picture detail, but it occupies the channel longer and is less forgiving of fades across the 640 x 496 frame.",
      "ML180 uses Extended VIS 0x8523 (34083; MMSSTV 16-bit code); standard 7-bit VIS-only decoders may not auto-label it without MMSSTV extended-VIS support."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "mmsstv-mode-txt",
      "mmsstv-doc"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x8523 and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "mmsstv-ml240",
    "family": "MMSSTV",
    "name": "ML240",
    "shortName": "ML240",
    "supportStatus": "supported",
    "appShortName": "ML240",
    "developerOrOrigin": "MMSSTV",
    "approxEra": "sound-card SSTV era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY",
    "durationSeconds": 239.7328,
    "durationLabel": "239.733 s",
    "appDurationLabel": "239.733 s",
    "columns": 640,
    "displayLines": 496,
    "dataLines": 496,
    "frameLabel": "640 x 496",
    "appFrameLabel": "640 x 496",
    "dataLinesLabel": "496",
    "visCode": {
      "hex": "0x8623",
      "decimal": 34339
    },
    "standardVisCode": null,
    "appRawVisCode": {
      "hex": "0x8623",
      "decimal": 34339
    },
    "visLabel": "Extended VIS 0x8623 (34339; MMSSTV 16-bit code)",
    "extendedVis": true,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 9,
    "frontPorchMs": 0.5,
    "backPorchMs": 0.5,
    "separatorMs": 0.5,
    "transmitSyncMs": 9,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 1,
    "transmitSeparatorMs": 0,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 124.138,
    "timingProfile": "MMSSTV MR/ML timing: 9.000 ms sync, 1.000 ms separator, Y scan, 0.100 ms last-pixel pulse, half-width R-Y, 0.100 ms last-pixel pulse, half-width B-Y, 0.100 ms last-pixel pulse.",
    "publicTimingProfile": "MMSSTV MR/ML timing: 9.000 ms sync, 1.000 ms separator, Y scan, 0.100 ms last-pixel pulse, half-width R-Y, 0.100 ms last-pixel pulse, half-width B-Y, 0.100 ms last-pixel pulse.",
    "appTimingProfile": "App RX line fields: sync 9 ms; front porch 0.5 ms; back porch 0.5 ms; separator/blank 0.5 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Software-era analog SSTV operation and MMSSTV compatibility.",
    "strengths": [
      "ML240 is a long-form high-detail MMSSTV mode: 239.733 s, 640 x 496, YCrCb.",
      "ML240 identifies through Extended VIS 0x8623 (34339; MMSSTV 16-bit code), separating MMSSTV-era modes from the 7-bit VIS space used by older analog families.",
      "ML240 has explicit app timing fields: 9 ms sync, 0.5 ms front porch, 0.5 ms back porch, 0.5 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "ML240 has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "ML240's 239.733 s transfer can carry more picture detail, but it occupies the channel longer and is less forgiving of fades across the 640 x 496 frame.",
      "ML240 uses Extended VIS 0x8623 (34339; MMSSTV 16-bit code); standard 7-bit VIS-only decoders may not auto-label it without MMSSTV extended-VIS support."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "mmsstv-mode-txt",
      "mmsstv-doc"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x8623 and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "mmsstv-ml280",
    "family": "MMSSTV",
    "name": "ML280",
    "shortName": "ML280",
    "supportStatus": "supported",
    "appShortName": "ML280",
    "developerOrOrigin": "MMSSTV",
    "approxEra": "sound-card SSTV era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY",
    "durationSeconds": 280.406,
    "durationLabel": "280.406 s",
    "appDurationLabel": "280.406 s",
    "columns": 640,
    "displayLines": 496,
    "dataLines": 496,
    "frameLabel": "640 x 496",
    "appFrameLabel": "640 x 496",
    "dataLinesLabel": "496",
    "visCode": {
      "hex": "0x8923",
      "decimal": 35107
    },
    "standardVisCode": null,
    "appRawVisCode": {
      "hex": "0x8923",
      "decimal": 35107
    },
    "visLabel": "Extended VIS 0x8923 (35107; MMSSTV 16-bit code)",
    "extendedVis": true,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 9,
    "frontPorchMs": 0,
    "backPorchMs": 1,
    "separatorMs": 0,
    "transmitSyncMs": 9,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 1,
    "transmitSeparatorMs": 0,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 106.132,
    "timingProfile": "MMSSTV MR/ML timing: 9.000 ms sync, 1.000 ms separator, Y scan, 0.100 ms last-pixel pulse, half-width R-Y, 0.100 ms last-pixel pulse, half-width B-Y, 0.100 ms last-pixel pulse.",
    "publicTimingProfile": "MMSSTV MR/ML timing: 9.000 ms sync, 1.000 ms separator, Y scan, 0.100 ms last-pixel pulse, half-width R-Y, 0.100 ms last-pixel pulse, half-width B-Y, 0.100 ms last-pixel pulse.",
    "appTimingProfile": "App RX line fields: sync 9 ms; front porch 0 ms; back porch 1 ms; separator/blank 0 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Software-era analog SSTV operation and MMSSTV compatibility.",
    "strengths": [
      "ML280 is a extended high-detail MMSSTV mode: 280.406 s, 640 x 496, YCrCb.",
      "ML280 identifies through Extended VIS 0x8923 (35107; MMSSTV 16-bit code), separating MMSSTV-era modes from the 7-bit VIS space used by older analog families.",
      "ML280 has explicit app timing fields: 9 ms sync, 0 ms front porch, 1 ms back porch, 0 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "ML280 has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "ML280's 280.406 s transfer can carry more picture detail, but it occupies the channel longer and is less forgiving of fades across the 640 x 496 frame.",
      "ML280 uses Extended VIS 0x8923 (35107; MMSSTV 16-bit code); standard 7-bit VIS-only decoders may not auto-label it without MMSSTV extended-VIS support."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "mmsstv-mode-txt",
      "mmsstv-doc"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x8923 and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "mmsstv-ml320",
    "family": "MMSSTV",
    "name": "ML320",
    "shortName": "ML320",
    "supportStatus": "supported",
    "appShortName": "ML320",
    "developerOrOrigin": "MMSSTV",
    "approxEra": "sound-card SSTV era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY",
    "durationSeconds": 320.091,
    "durationLabel": "320.091 s",
    "appDurationLabel": "320.091 s",
    "columns": 640,
    "displayLines": 496,
    "dataLines": 496,
    "frameLabel": "640 x 496",
    "appFrameLabel": "640 x 496",
    "dataLinesLabel": "496",
    "visCode": {
      "hex": "0x8A23",
      "decimal": 35363
    },
    "standardVisCode": null,
    "appRawVisCode": {
      "hex": "0x8A23",
      "decimal": 35363
    },
    "visLabel": "Extended VIS 0x8A23 (35363; MMSSTV 16-bit code)",
    "extendedVis": true,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 9,
    "frontPorchMs": 0,
    "backPorchMs": 1,
    "separatorMs": 0,
    "transmitSyncMs": 9,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 1,
    "transmitSeparatorMs": 0,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 92.974,
    "timingProfile": "MMSSTV MR/ML timing: 9.000 ms sync, 1.000 ms separator, Y scan, 0.100 ms last-pixel pulse, half-width R-Y, 0.100 ms last-pixel pulse, half-width B-Y, 0.100 ms last-pixel pulse.",
    "publicTimingProfile": "MMSSTV MR/ML timing: 9.000 ms sync, 1.000 ms separator, Y scan, 0.100 ms last-pixel pulse, half-width R-Y, 0.100 ms last-pixel pulse, half-width B-Y, 0.100 ms last-pixel pulse.",
    "appTimingProfile": "App RX line fields: sync 9 ms; front porch 0 ms; back porch 1 ms; separator/blank 0 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Software-era analog SSTV operation and MMSSTV compatibility.",
    "strengths": [
      "ML320 is a extended high-detail MMSSTV mode: 320.091 s, 640 x 496, YCrCb.",
      "ML320 identifies through Extended VIS 0x8A23 (35363; MMSSTV 16-bit code), separating MMSSTV-era modes from the 7-bit VIS space used by older analog families.",
      "ML320 has explicit app timing fields: 9 ms sync, 0 ms front porch, 1 ms back porch, 0 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "ML320 has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "ML320's 320.091 s transfer can carry more picture detail, but it occupies the channel longer and is less forgiving of fades across the 640 x 496 frame.",
      "ML320 uses Extended VIS 0x8A23 (35363; MMSSTV 16-bit code); standard 7-bit VIS-only decoders may not auto-label it without MMSSTV extended-VIS support."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "mmsstv-mode-txt",
      "mmsstv-doc"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x8A23 and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "mmsstv-mp110-n",
    "family": "MMSSTV",
    "name": "MMSSTV MP110-Narrow",
    "shortName": "MP110-N",
    "supportStatus": "supported",
    "appShortName": "MP110-N",
    "developerOrOrigin": "MMSSTV",
    "approxEra": "sound-card SSTV era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY",
    "durationSeconds": 109.832,
    "durationLabel": "109.832 s",
    "appDurationLabel": "109.832 s",
    "columns": 320,
    "displayLines": 256,
    "dataLines": 128,
    "frameLabel": "320 x 256",
    "appFrameLabel": "320 x 256",
    "dataLinesLabel": "128",
    "visCode": {
      "hex": "0x04",
      "decimal": 4
    },
    "standardVisCode": null,
    "appRawVisCode": {
      "hex": "0x44456D",
      "decimal": 4474221
    },
    "visLabel": "N-VIS 0x04 (4; MMSSTV narrow-band code)",
    "extendedVis": true,
    "nvisCode": {
      "hex": "0x04",
      "decimal": 4
    },
    "nvisLabel": "N-VIS 0x04 (4)",
    "syncMs": 9,
    "frontPorchMs": 0,
    "backPorchMs": 1,
    "separatorMs": 0,
    "transmitSyncMs": 9,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 1,
    "transmitSeparatorMs": 0,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 2172,
    "deviationHz": 128,
    "videoToneRangeHz": [
      2044,
      2300
    ],
    "lineRateLpm": 139.85,
    "timingProfile": "MMSSTV MP-N timing: narrow-band color-difference mode with 9.000 ms sync, 1.000 ms separator at the lower narrow tone, Y odd, R-Y, B-Y, Y even; scan signals occupy the 2044-2300 Hz span.",
    "publicTimingProfile": "MMSSTV MP-N timing: narrow-band color-difference mode with 9.000 ms sync, 1.000 ms separator at the lower narrow tone, Y odd, R-Y, B-Y, Y even; scan signals occupy the 2044-2300 Hz span.",
    "appTimingProfile": "App RX line fields: sync 9 ms; front porch 0 ms; back porch 1 ms; separator/blank 0 ms; video tones 2044-2300 Hz around 2172 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Software-era analog SSTV operation and MMSSTV compatibility.",
    "strengths": [
      "MP110-N is a standard-length standard colour MMSSTV mode: 109.832 s, 320 x 256, YCrCb.",
      "MP110-N identifies through N-VIS 0x04 (4; MMSSTV narrow-band code), separating MMSSTV-era modes from the 7-bit VIS space used by older analog families.",
      "MP110-N has explicit app timing fields: 9 ms sync, 0 ms front porch, 1 ms back porch, 0 ms separator/blank, and 2044-2300 Hz around 2172 Hz video tones.",
      "MP110-N has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "MP110-N's 109.832 s frame is a balanced choice, but it still needs a stable path for the full 320 x 256 scan.",
      "MP110-N depends on N-VIS 0x04 (4) and the narrow 2044-2300 Hz around 2172 Hz span; older receivers that only watch standard VIS may need manual mode selection."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "mmsstv-mode-txt",
      "mmsstv-doc",
      "bruxy-mode-look"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x44456D and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build. Public MMSSTV VIS 0x04 differs from app raw 0x44456D; both values are shown."
  },
  {
    "id": "mmsstv-mp115",
    "family": "MMSSTV",
    "name": "MMSSTV MP115",
    "shortName": "MP115",
    "supportStatus": "supported",
    "appShortName": "MP115",
    "developerOrOrigin": "MMSSTV",
    "approxEra": "sound-card SSTV era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY",
    "durationSeconds": 115.464,
    "durationLabel": "115.464 s",
    "appDurationLabel": "115.464 s",
    "columns": 320,
    "displayLines": 256,
    "dataLines": 128,
    "frameLabel": "320 x 256",
    "appFrameLabel": "320 x 256",
    "dataLinesLabel": "128",
    "visCode": {
      "hex": "0x2923",
      "decimal": 10531
    },
    "standardVisCode": null,
    "appRawVisCode": {
      "hex": "0x2923",
      "decimal": 10531
    },
    "visLabel": "Extended VIS 0x2923 (10531; MMSSTV 16-bit code)",
    "extendedVis": true,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 9,
    "frontPorchMs": 0,
    "backPorchMs": 1,
    "separatorMs": 0,
    "transmitSyncMs": 9,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 1,
    "transmitSeparatorMs": 0,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 133.028,
    "timingProfile": "MMSSTV MP timing: 9.000 ms sync, 1.000 ms separator, Y odd, R-Y, B-Y, Y even; color-difference scans repeat for 128 scan groups.",
    "publicTimingProfile": "MMSSTV MP timing: 9.000 ms sync, 1.000 ms separator, Y odd, R-Y, B-Y, Y even; color-difference scans repeat for 128 scan groups.",
    "appTimingProfile": "App RX line fields: sync 9 ms; front porch 0 ms; back porch 1 ms; separator/blank 0 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Software-era analog SSTV operation and MMSSTV compatibility.",
    "strengths": [
      "MP115 is a standard-length standard colour MMSSTV mode: 115.464 s, 320 x 256, YCrCb.",
      "MP115 identifies through Extended VIS 0x2923 (10531; MMSSTV 16-bit code), separating MMSSTV-era modes from the 7-bit VIS space used by older analog families.",
      "MP115 has explicit app timing fields: 9 ms sync, 0 ms front porch, 1 ms back porch, 0 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "MP115 has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "MP115's 115.464 s frame is a balanced choice, but it still needs a stable path for the full 320 x 256 scan.",
      "MP115 uses Extended VIS 0x2923 (10531; MMSSTV 16-bit code); standard 7-bit VIS-only decoders may not auto-label it without MMSSTV extended-VIS support."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "mmsstv-mode-txt",
      "mmsstv-doc"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x2923 and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "mmsstv-mp140",
    "family": "MMSSTV",
    "name": "MMSSTV MP140",
    "shortName": "MP140",
    "supportStatus": "supported",
    "appShortName": "MP140",
    "developerOrOrigin": "MMSSTV",
    "approxEra": "sound-card SSTV era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY",
    "durationSeconds": 139.528,
    "durationLabel": "139.528 s",
    "appDurationLabel": "139.528 s",
    "columns": 320,
    "displayLines": 256,
    "dataLines": 128,
    "frameLabel": "320 x 256",
    "appFrameLabel": "320 x 256",
    "dataLinesLabel": "128",
    "visCode": {
      "hex": "0x2A23",
      "decimal": 10787
    },
    "standardVisCode": null,
    "appRawVisCode": {
      "hex": "0x2A23",
      "decimal": 10787
    },
    "visLabel": "Extended VIS 0x2A23 (10787; MMSSTV 16-bit code)",
    "extendedVis": true,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 9,
    "frontPorchMs": 0,
    "backPorchMs": 1,
    "separatorMs": 0,
    "transmitSyncMs": 9,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 1,
    "transmitSeparatorMs": 0,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 110.085,
    "timingProfile": "MMSSTV MP timing: 9.000 ms sync, 1.000 ms separator, Y odd, R-Y, B-Y, Y even; color-difference scans repeat for 128 scan groups.",
    "publicTimingProfile": "MMSSTV MP timing: 9.000 ms sync, 1.000 ms separator, Y odd, R-Y, B-Y, Y even; color-difference scans repeat for 128 scan groups.",
    "appTimingProfile": "App RX line fields: sync 9 ms; front porch 0 ms; back porch 1 ms; separator/blank 0 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Software-era analog SSTV operation and MMSSTV compatibility.",
    "strengths": [
      "MP140 is a standard-length standard colour MMSSTV mode: 139.528 s, 320 x 256, YCrCb.",
      "MP140 identifies through Extended VIS 0x2A23 (10787; MMSSTV 16-bit code), separating MMSSTV-era modes from the 7-bit VIS space used by older analog families.",
      "MP140 has explicit app timing fields: 9 ms sync, 0 ms front porch, 1 ms back porch, 0 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "MP140 has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "MP140's 139.528 s frame is a balanced choice, but it still needs a stable path for the full 320 x 256 scan.",
      "MP140 uses Extended VIS 0x2A23 (10787; MMSSTV 16-bit code); standard 7-bit VIS-only decoders may not auto-label it without MMSSTV extended-VIS support."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "mmsstv-mode-txt",
      "mmsstv-doc"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x2A23 and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "mmsstv-mp140-n",
    "family": "MMSSTV",
    "name": "MMSSTV MP140-Narrow",
    "shortName": "MP140-N",
    "supportStatus": "supported",
    "appShortName": "MP140-N",
    "developerOrOrigin": "MMSSTV",
    "approxEra": "sound-card SSTV era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY",
    "durationSeconds": 139.53,
    "durationLabel": "139.530 s",
    "appDurationLabel": "139.530 s",
    "columns": 320,
    "displayLines": 256,
    "dataLines": 128,
    "frameLabel": "320 x 256",
    "appFrameLabel": "320 x 256",
    "dataLinesLabel": "128",
    "visCode": {
      "hex": "0x05",
      "decimal": 5
    },
    "standardVisCode": null,
    "appRawVisCode": {
      "hex": "0x40556D",
      "decimal": 4216173
    },
    "visLabel": "N-VIS 0x05 (5; MMSSTV narrow-band code)",
    "extendedVis": true,
    "nvisCode": {
      "hex": "0x05",
      "decimal": 5
    },
    "nvisLabel": "N-VIS 0x05 (5)",
    "syncMs": 9,
    "frontPorchMs": 0,
    "backPorchMs": 1,
    "separatorMs": 0,
    "transmitSyncMs": 9,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 1,
    "transmitSeparatorMs": 0,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 2172,
    "deviationHz": 128,
    "videoToneRangeHz": [
      2044,
      2300
    ],
    "lineRateLpm": 110.084,
    "timingProfile": "MMSSTV MP-N timing: narrow-band color-difference mode with 9.000 ms sync, 1.000 ms separator at the lower narrow tone, Y odd, R-Y, B-Y, Y even; scan signals occupy the 2044-2300 Hz span.",
    "publicTimingProfile": "MMSSTV MP-N timing: narrow-band color-difference mode with 9.000 ms sync, 1.000 ms separator at the lower narrow tone, Y odd, R-Y, B-Y, Y even; scan signals occupy the 2044-2300 Hz span.",
    "appTimingProfile": "App RX line fields: sync 9 ms; front porch 0 ms; back porch 1 ms; separator/blank 0 ms; video tones 2044-2300 Hz around 2172 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Software-era analog SSTV operation and MMSSTV compatibility.",
    "strengths": [
      "MP140-N is a standard-length standard colour MMSSTV mode: 139.530 s, 320 x 256, YCrCb.",
      "MP140-N identifies through N-VIS 0x05 (5; MMSSTV narrow-band code), separating MMSSTV-era modes from the 7-bit VIS space used by older analog families.",
      "MP140-N has explicit app timing fields: 9 ms sync, 0 ms front porch, 1 ms back porch, 0 ms separator/blank, and 2044-2300 Hz around 2172 Hz video tones.",
      "MP140-N has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "MP140-N's 139.530 s frame is a balanced choice, but it still needs a stable path for the full 320 x 256 scan.",
      "MP140-N depends on N-VIS 0x05 (5) and the narrow 2044-2300 Hz around 2172 Hz span; older receivers that only watch standard VIS may need manual mode selection."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "mmsstv-mode-txt",
      "mmsstv-doc"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x40556D and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build. Public MMSSTV VIS 0x05 differs from app raw 0x40556D; both values are shown."
  },
  {
    "id": "mmsstv-mp175",
    "family": "MMSSTV",
    "name": "MMSSTV MP175",
    "shortName": "MP175",
    "supportStatus": "supported",
    "appShortName": "MP175",
    "developerOrOrigin": "MMSSTV",
    "approxEra": "sound-card SSTV era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY",
    "durationSeconds": 175.373,
    "durationLabel": "175.373 s",
    "appDurationLabel": "175.373 s",
    "columns": 320,
    "displayLines": 256,
    "dataLines": 128,
    "frameLabel": "320 x 256",
    "appFrameLabel": "320 x 256",
    "dataLinesLabel": "128",
    "visCode": {
      "hex": "0x2C23",
      "decimal": 11299
    },
    "standardVisCode": null,
    "appRawVisCode": {
      "hex": "0x2C23",
      "decimal": 11299
    },
    "visLabel": "Extended VIS 0x2C23 (11299; MMSSTV 16-bit code)",
    "extendedVis": true,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 9,
    "frontPorchMs": 0,
    "backPorchMs": 1,
    "separatorMs": 0,
    "transmitSyncMs": 9,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 1,
    "transmitSeparatorMs": 0,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 87.585,
    "timingProfile": "MMSSTV MP timing: 9.000 ms sync, 1.000 ms separator, Y odd, R-Y, B-Y, Y even; color-difference scans repeat for 128 scan groups.",
    "publicTimingProfile": "MMSSTV MP timing: 9.000 ms sync, 1.000 ms separator, Y odd, R-Y, B-Y, Y even; color-difference scans repeat for 128 scan groups.",
    "appTimingProfile": "App RX line fields: sync 9 ms; front porch 0 ms; back porch 1 ms; separator/blank 0 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Software-era analog SSTV operation and MMSSTV compatibility.",
    "strengths": [
      "MP175 is a long-form standard colour MMSSTV mode: 175.373 s, 320 x 256, YCrCb.",
      "MP175 identifies through Extended VIS 0x2C23 (11299; MMSSTV 16-bit code), separating MMSSTV-era modes from the 7-bit VIS space used by older analog families.",
      "MP175 has explicit app timing fields: 9 ms sync, 0 ms front porch, 1 ms back porch, 0 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "MP175 has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "MP175's 175.373 s transfer can carry more picture detail, but it occupies the channel longer and is less forgiving of fades across the 320 x 256 frame.",
      "MP175 uses Extended VIS 0x2C23 (11299; MMSSTV 16-bit code); standard 7-bit VIS-only decoders may not auto-label it without MMSSTV extended-VIS support."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "mmsstv-mode-txt",
      "mmsstv-doc"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x2C23 and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "mmsstv-mp73",
    "family": "MMSSTV",
    "name": "MMSSTV MP73",
    "shortName": "MP73",
    "supportStatus": "supported",
    "appShortName": "MP73",
    "developerOrOrigin": "MMSSTV",
    "approxEra": "sound-card SSTV era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY",
    "durationSeconds": 72.9642,
    "durationLabel": "72.964 s",
    "appDurationLabel": "72.964 s",
    "columns": 320,
    "displayLines": 256,
    "dataLines": 128,
    "frameLabel": "320 x 256",
    "appFrameLabel": "320 x 256",
    "dataLinesLabel": "128",
    "visCode": {
      "hex": "0x2523",
      "decimal": 9507
    },
    "standardVisCode": null,
    "appRawVisCode": {
      "hex": "0x2523",
      "decimal": 9507
    },
    "visLabel": "Extended VIS 0x2523 (9507; MMSSTV 16-bit code)",
    "extendedVis": true,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 9,
    "frontPorchMs": 0,
    "backPorchMs": 1,
    "separatorMs": 0,
    "transmitSyncMs": 9,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 1,
    "transmitSeparatorMs": 0,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 210.514,
    "timingProfile": "MMSSTV MP timing: 9.000 ms sync, 1.000 ms separator, Y odd, R-Y, B-Y, Y even; color-difference scans repeat for 128 scan groups.",
    "publicTimingProfile": "MMSSTV MP timing: 9.000 ms sync, 1.000 ms separator, Y odd, R-Y, B-Y, Y even; color-difference scans repeat for 128 scan groups.",
    "appTimingProfile": "App RX line fields: sync 9 ms; front porch 0 ms; back porch 1 ms; separator/blank 0 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Software-era analog SSTV operation and MMSSTV compatibility.",
    "strengths": [
      "MP73 is a medium-length standard colour MMSSTV mode: 72.964 s, 320 x 256, YCrCb.",
      "MP73 identifies through Extended VIS 0x2523 (9507; MMSSTV 16-bit code), separating MMSSTV-era modes from the 7-bit VIS space used by older analog families.",
      "MP73 has explicit app timing fields: 9 ms sync, 0 ms front porch, 1 ms back porch, 0 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "MP73 has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "MP73's 72.964 s airtime is practical for casual contacts, while the 320 x 256 frame still gives less margin than the longer high-detail modes.",
      "MP73 uses Extended VIS 0x2523 (9507; MMSSTV 16-bit code); standard 7-bit VIS-only decoders may not auto-label it without MMSSTV extended-VIS support."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "mmsstv-mode-txt",
      "mmsstv-doc"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x2523 and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "mmsstv-mp73-n",
    "family": "MMSSTV",
    "name": "MMSSTV MP73-Narrow",
    "shortName": "MP73-N",
    "supportStatus": "supported",
    "appShortName": "MP73-N",
    "developerOrOrigin": "MMSSTV",
    "approxEra": "sound-card SSTV era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY",
    "durationSeconds": 72.9665,
    "durationLabel": "72.966 s",
    "appDurationLabel": "72.966 s",
    "columns": 320,
    "displayLines": 256,
    "dataLines": 128,
    "frameLabel": "320 x 256",
    "appFrameLabel": "320 x 256",
    "dataLinesLabel": "128",
    "visCode": {
      "hex": "0x02",
      "decimal": 2
    },
    "standardVisCode": null,
    "appRawVisCode": {
      "hex": "0x5C256D",
      "decimal": 6038893
    },
    "visLabel": "N-VIS 0x02 (2; MMSSTV narrow-band code)",
    "extendedVis": true,
    "nvisCode": {
      "hex": "0x02",
      "decimal": 2
    },
    "nvisLabel": "N-VIS 0x02 (2)",
    "syncMs": 9,
    "frontPorchMs": 0,
    "backPorchMs": 1,
    "separatorMs": 0,
    "transmitSyncMs": 9,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 1,
    "transmitSeparatorMs": 0,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 2172,
    "deviationHz": 128,
    "videoToneRangeHz": [
      2044,
      2300
    ],
    "lineRateLpm": 210.508,
    "timingProfile": "MMSSTV MP-N timing: narrow-band color-difference mode with 9.000 ms sync, 1.000 ms separator at the lower narrow tone, Y odd, R-Y, B-Y, Y even; scan signals occupy the 2044-2300 Hz span.",
    "publicTimingProfile": "MMSSTV MP-N timing: narrow-band color-difference mode with 9.000 ms sync, 1.000 ms separator at the lower narrow tone, Y odd, R-Y, B-Y, Y even; scan signals occupy the 2044-2300 Hz span.",
    "appTimingProfile": "App RX line fields: sync 9 ms; front porch 0 ms; back porch 1 ms; separator/blank 0 ms; video tones 2044-2300 Hz around 2172 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Software-era analog SSTV operation and MMSSTV compatibility.",
    "strengths": [
      "MP73-N is a medium-length standard colour MMSSTV mode: 72.966 s, 320 x 256, YCrCb.",
      "MP73-N identifies through N-VIS 0x02 (2; MMSSTV narrow-band code), separating MMSSTV-era modes from the 7-bit VIS space used by older analog families.",
      "MP73-N has explicit app timing fields: 9 ms sync, 0 ms front porch, 1 ms back porch, 0 ms separator/blank, and 2044-2300 Hz around 2172 Hz video tones.",
      "MP73-N has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "MP73-N's 72.966 s airtime is practical for casual contacts, while the 320 x 256 frame still gives less margin than the longer high-detail modes.",
      "MP73-N depends on N-VIS 0x02 (2) and the narrow 2044-2300 Hz around 2172 Hz span; older receivers that only watch standard VIS may need manual mode selection."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "mmsstv-mode-txt",
      "mmsstv-doc"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x5C256D and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build. Public MMSSTV VIS 0x02 differs from app raw 0x5C256D; both values are shown."
  },
  {
    "id": "mmsstv-mr115",
    "family": "MMSSTV",
    "name": "MMSSTV MR115",
    "shortName": "MR115",
    "supportStatus": "supported",
    "appShortName": "MR115",
    "developerOrOrigin": "MMSSTV",
    "approxEra": "sound-card SSTV era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY",
    "durationSeconds": 115.285,
    "durationLabel": "115.285 s",
    "appDurationLabel": "115.285 s",
    "columns": 320,
    "displayLines": 256,
    "dataLines": 256,
    "frameLabel": "320 x 256",
    "appFrameLabel": "320 x 256",
    "dataLinesLabel": "256",
    "visCode": {
      "hex": "0x4923",
      "decimal": 18723
    },
    "standardVisCode": null,
    "appRawVisCode": {
      "hex": "0x4923",
      "decimal": 18723
    },
    "visLabel": "Extended VIS 0x4923 (18723; MMSSTV 16-bit code)",
    "extendedVis": true,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 9,
    "frontPorchMs": 0,
    "backPorchMs": 1,
    "separatorMs": 0,
    "transmitSyncMs": 9,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 1,
    "transmitSeparatorMs": 0,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 133.235,
    "timingProfile": "MMSSTV MR/ML timing: 9.000 ms sync, 1.000 ms separator, Y scan, 0.100 ms last-pixel pulse, half-width R-Y, 0.100 ms last-pixel pulse, half-width B-Y, 0.100 ms last-pixel pulse.",
    "publicTimingProfile": "MMSSTV MR/ML timing: 9.000 ms sync, 1.000 ms separator, Y scan, 0.100 ms last-pixel pulse, half-width R-Y, 0.100 ms last-pixel pulse, half-width B-Y, 0.100 ms last-pixel pulse.",
    "appTimingProfile": "App RX line fields: sync 9 ms; front porch 0 ms; back porch 1 ms; separator/blank 0 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Software-era analog SSTV operation and MMSSTV compatibility.",
    "strengths": [
      "MR115 is a standard-length standard colour MMSSTV mode: 115.285 s, 320 x 256, YCrCb.",
      "MR115 identifies through Extended VIS 0x4923 (18723; MMSSTV 16-bit code), separating MMSSTV-era modes from the 7-bit VIS space used by older analog families.",
      "MR115 has explicit app timing fields: 9 ms sync, 0 ms front porch, 1 ms back porch, 0 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "MR115 has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "MR115's 115.285 s frame is a balanced choice, but it still needs a stable path for the full 320 x 256 scan.",
      "MR115 uses Extended VIS 0x4923 (18723; MMSSTV 16-bit code); standard 7-bit VIS-only decoders may not auto-label it without MMSSTV extended-VIS support."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "mmsstv-mode-txt",
      "mmsstv-doc"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x4923 and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "mmsstv-mr140",
    "family": "MMSSTV",
    "name": "MMSSTV MR140",
    "shortName": "MR140",
    "supportStatus": "supported",
    "appShortName": "MR140",
    "developerOrOrigin": "MMSSTV",
    "approxEra": "sound-card SSTV era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY",
    "durationSeconds": 140.374,
    "durationLabel": "140.374 s",
    "appDurationLabel": "140.374 s",
    "columns": 320,
    "displayLines": 256,
    "dataLines": 256,
    "frameLabel": "320 x 256",
    "appFrameLabel": "320 x 256",
    "dataLinesLabel": "256",
    "visCode": {
      "hex": "0x4A23",
      "decimal": 18979
    },
    "standardVisCode": null,
    "appRawVisCode": {
      "hex": "0x4A23",
      "decimal": 18979
    },
    "visLabel": "Extended VIS 0x4A23 (18979; MMSSTV 16-bit code)",
    "extendedVis": true,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 9,
    "frontPorchMs": 0,
    "backPorchMs": 1,
    "separatorMs": 0,
    "transmitSyncMs": 9,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 1,
    "transmitSeparatorMs": 0,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 109.422,
    "timingProfile": "MMSSTV MR/ML timing: 9.000 ms sync, 1.000 ms separator, Y scan, 0.100 ms last-pixel pulse, half-width R-Y, 0.100 ms last-pixel pulse, half-width B-Y, 0.100 ms last-pixel pulse.",
    "publicTimingProfile": "MMSSTV MR/ML timing: 9.000 ms sync, 1.000 ms separator, Y scan, 0.100 ms last-pixel pulse, half-width R-Y, 0.100 ms last-pixel pulse, half-width B-Y, 0.100 ms last-pixel pulse.",
    "appTimingProfile": "App RX line fields: sync 9 ms; front porch 0 ms; back porch 1 ms; separator/blank 0 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Software-era analog SSTV operation and MMSSTV compatibility.",
    "strengths": [
      "MR140 is a standard-length standard colour MMSSTV mode: 140.374 s, 320 x 256, YCrCb.",
      "MR140 identifies through Extended VIS 0x4A23 (18979; MMSSTV 16-bit code), separating MMSSTV-era modes from the 7-bit VIS space used by older analog families.",
      "MR140 has explicit app timing fields: 9 ms sync, 0 ms front porch, 1 ms back porch, 0 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "MR140 has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "MR140's 140.374 s frame is a balanced choice, but it still needs a stable path for the full 320 x 256 scan.",
      "MR140 uses Extended VIS 0x4A23 (18979; MMSSTV 16-bit code); standard 7-bit VIS-only decoders may not auto-label it without MMSSTV extended-VIS support."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "mmsstv-mode-txt",
      "mmsstv-doc"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x4A23 and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "mmsstv-mr175",
    "family": "MMSSTV",
    "name": "MMSSTV MR175",
    "shortName": "MR175",
    "supportStatus": "supported",
    "appShortName": "MR175",
    "developerOrOrigin": "MMSSTV",
    "approxEra": "sound-card SSTV era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY",
    "durationSeconds": 175.192,
    "durationLabel": "175.192 s",
    "appDurationLabel": "175.192 s",
    "columns": 320,
    "displayLines": 256,
    "dataLines": 256,
    "frameLabel": "320 x 256",
    "appFrameLabel": "320 x 256",
    "dataLinesLabel": "256",
    "visCode": {
      "hex": "0x4C23",
      "decimal": 19491
    },
    "standardVisCode": null,
    "appRawVisCode": {
      "hex": "0x4A23",
      "decimal": 18979
    },
    "visLabel": "Extended VIS 0x4C23 (19491; MMSSTV 16-bit code)",
    "extendedVis": true,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 9,
    "frontPorchMs": 0,
    "backPorchMs": 1,
    "separatorMs": 0,
    "transmitSyncMs": 9,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 1,
    "transmitSeparatorMs": 0,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 87.675,
    "timingProfile": "MMSSTV MR/ML timing: 9.000 ms sync, 1.000 ms separator, Y scan, 0.100 ms last-pixel pulse, half-width R-Y, 0.100 ms last-pixel pulse, half-width B-Y, 0.100 ms last-pixel pulse.",
    "publicTimingProfile": "MMSSTV MR/ML timing: 9.000 ms sync, 1.000 ms separator, Y scan, 0.100 ms last-pixel pulse, half-width R-Y, 0.100 ms last-pixel pulse, half-width B-Y, 0.100 ms last-pixel pulse.",
    "appTimingProfile": "App RX line fields: sync 9 ms; front porch 0 ms; back porch 1 ms; separator/blank 0 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Software-era analog SSTV operation and MMSSTV compatibility.",
    "strengths": [
      "MR175 is a long-form standard colour MMSSTV mode: 175.192 s, 320 x 256, YCrCb.",
      "MR175 identifies through Extended VIS 0x4C23 (19491; MMSSTV 16-bit code), separating MMSSTV-era modes from the 7-bit VIS space used by older analog families.",
      "MR175 has explicit app timing fields: 9 ms sync, 0 ms front porch, 1 ms back porch, 0 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "MR175 has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "MR175's 175.192 s transfer can carry more picture detail, but it occupies the channel longer and is less forgiving of fades across the 320 x 256 frame.",
      "MR175 uses Extended VIS 0x4C23 (19491; MMSSTV 16-bit code); standard 7-bit VIS-only decoders may not auto-label it without MMSSTV extended-VIS support."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "mmsstv-mode-txt",
      "mmsstv-doc"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x4A23 and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build. Public MMSSTV VIS 0x4C23 differs from app raw 0x4A23; both values are shown."
  },
  {
    "id": "mmsstv-mr73",
    "family": "MMSSTV",
    "name": "MMSSTV MR73",
    "shortName": "MR73",
    "supportStatus": "supported",
    "appShortName": "MR73",
    "developerOrOrigin": "MMSSTV",
    "approxEra": "sound-card SSTV era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY",
    "durationSeconds": 73.298,
    "durationLabel": "73.298 s",
    "appDurationLabel": "73.298 s",
    "columns": 320,
    "displayLines": 256,
    "dataLines": 256,
    "frameLabel": "320 x 256",
    "appFrameLabel": "320 x 256",
    "dataLinesLabel": "256",
    "visCode": {
      "hex": "0x4523",
      "decimal": 17699
    },
    "standardVisCode": null,
    "appRawVisCode": {
      "hex": "0x4523",
      "decimal": 17699
    },
    "visLabel": "Extended VIS 0x4523 (17699; MMSSTV 16-bit code)",
    "extendedVis": true,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 9,
    "frontPorchMs": 0,
    "backPorchMs": 1,
    "separatorMs": 0,
    "transmitSyncMs": 9,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 1,
    "transmitSeparatorMs": 0,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 209.556,
    "timingProfile": "MMSSTV MR/ML timing: 9.000 ms sync, 1.000 ms separator, Y scan, 0.100 ms last-pixel pulse, half-width R-Y, 0.100 ms last-pixel pulse, half-width B-Y, 0.100 ms last-pixel pulse.",
    "publicTimingProfile": "MMSSTV MR/ML timing: 9.000 ms sync, 1.000 ms separator, Y scan, 0.100 ms last-pixel pulse, half-width R-Y, 0.100 ms last-pixel pulse, half-width B-Y, 0.100 ms last-pixel pulse.",
    "appTimingProfile": "App RX line fields: sync 9 ms; front porch 0 ms; back porch 1 ms; separator/blank 0 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Software-era analog SSTV operation and MMSSTV compatibility.",
    "strengths": [
      "MR73 is a medium-length standard colour MMSSTV mode: 73.298 s, 320 x 256, YCrCb.",
      "MR73 identifies through Extended VIS 0x4523 (17699; MMSSTV 16-bit code), separating MMSSTV-era modes from the 7-bit VIS space used by older analog families.",
      "MR73 has explicit app timing fields: 9 ms sync, 0 ms front porch, 1 ms back porch, 0 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "MR73 has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "MR73's 73.298 s airtime is practical for casual contacts, while the 320 x 256 frame still gives less margin than the longer high-detail modes.",
      "MR73 uses Extended VIS 0x4523 (17699; MMSSTV 16-bit code); standard 7-bit VIS-only decoders may not auto-label it without MMSSTV extended-VIS support."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "mmsstv-mode-txt",
      "mmsstv-doc"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x4523 and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "mmsstv-mr90",
    "family": "MMSSTV",
    "name": "MMSSTV MR90",
    "shortName": "MR90",
    "supportStatus": "supported",
    "appShortName": "MR90",
    "developerOrOrigin": "MMSSTV",
    "approxEra": "sound-card SSTV era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY",
    "durationSeconds": 90.195,
    "durationLabel": "90.195 s",
    "appDurationLabel": "90.195 s",
    "columns": 320,
    "displayLines": 256,
    "dataLines": 256,
    "frameLabel": "320 x 256",
    "appFrameLabel": "320 x 256",
    "dataLinesLabel": "256",
    "visCode": {
      "hex": "0x4623",
      "decimal": 17955
    },
    "standardVisCode": null,
    "appRawVisCode": {
      "hex": "0x4623",
      "decimal": 17955
    },
    "visLabel": "Extended VIS 0x4623 (17955; MMSSTV 16-bit code)",
    "extendedVis": true,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 9,
    "frontPorchMs": 0,
    "backPorchMs": 1,
    "separatorMs": 0,
    "transmitSyncMs": 9,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 1,
    "transmitSeparatorMs": 0,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 170.298,
    "timingProfile": "MMSSTV MR/ML timing: 9.000 ms sync, 1.000 ms separator, Y scan, 0.100 ms last-pixel pulse, half-width R-Y, 0.100 ms last-pixel pulse, half-width B-Y, 0.100 ms last-pixel pulse.",
    "publicTimingProfile": "MMSSTV MR/ML timing: 9.000 ms sync, 1.000 ms separator, Y scan, 0.100 ms last-pixel pulse, half-width R-Y, 0.100 ms last-pixel pulse, half-width B-Y, 0.100 ms last-pixel pulse.",
    "appTimingProfile": "App RX line fields: sync 9 ms; front porch 0 ms; back porch 1 ms; separator/blank 0 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Software-era analog SSTV operation and MMSSTV compatibility.",
    "strengths": [
      "MR90 is a standard-length standard colour MMSSTV mode: 90.195 s, 320 x 256, YCrCb.",
      "MR90 identifies through Extended VIS 0x4623 (17955; MMSSTV 16-bit code), separating MMSSTV-era modes from the 7-bit VIS space used by older analog families.",
      "MR90 has explicit app timing fields: 9 ms sync, 0 ms front porch, 1 ms back porch, 0 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "MR90 has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "MR90's 90.195 s frame is a balanced choice, but it still needs a stable path for the full 320 x 256 scan.",
      "MR90 uses Extended VIS 0x4623 (17955; MMSSTV 16-bit code); standard 7-bit VIS-only decoders may not auto-label it without MMSSTV extended-VIS support."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "mmsstv-mode-txt",
      "mmsstv-doc"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x4623 and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "bw-bw12",
    "family": "Monochrome",
    "name": "B/W 12",
    "shortName": "BW12",
    "supportStatus": "supported",
    "appShortName": "BW12",
    "developerOrOrigin": "Robot-compatible monochrome SSTV",
    "approxEra": "early and Robot-compatible monochrome SSTV",
    "colorModel": "BW",
    "componentSequence": "Y",
    "durationSeconds": 12.001,
    "durationLabel": "12.001 s",
    "appDurationLabel": "12.001 s",
    "columns": 160,
    "displayLines": 120,
    "dataLines": 120,
    "frameLabel": "160 x 120",
    "appFrameLabel": "160 x 120",
    "dataLinesLabel": "120",
    "visCode": {
      "hex": "0x06",
      "decimal": 6
    },
    "standardVisCode": {
      "hex": "0x06",
      "decimal": 6
    },
    "appRawVisCode": {
      "hex": "0x86",
      "decimal": 134
    },
    "visLabel": "VIS 6 (0x06; green BW component, public component set 5/6/7)",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 6,
    "frontPorchMs": 0.5,
    "backPorchMs": 1.5,
    "separatorMs": 0,
    "transmitSyncMs": 6,
    "transmitFrontPorchMs": 1,
    "transmitBackPorchMs": 1,
    "transmitSeparatorMs": 0,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 599.95,
    "timingProfile": "App RX line fields: sync 6 ms; front porch 0.5 ms; back porch 1.5 ms; separator/blank 0 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "publicTimingProfile": null,
    "appTimingProfile": "App RX line fields: sync 6 ms; front porch 0.5 ms; back porch 1.5 ms; separator/blank 0 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public line-level timing was not found in checked sources, so app timing fields are labeled separately.",
    "commonUse": "Short black-and-white image transmission and compatibility testing.",
    "strengths": [
      "BW12 is a very fast compact Monochrome mode: 12.001 s, 160 x 120, BW.",
      "BW12 uses a single Y luminance channel, so the VIS 6 (0x06; green BW component, public component set 5/6/7) entry can be decoded as a compact monochrome image without colour registration concerns.",
      "BW12 has explicit app timing fields: 6 ms sync, 0.5 ms front porch, 1.5 ms back porch, 0 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "BW12 is documented from the app timing row; the line fields are explicit even where checked public sources do not publish every porch value."
    ],
    "tradeoffs": [
      "BW12's 12.001 s pass is quick, but the 160 x 120 frame leaves little scan time for fine detail or noisy channels.",
      "BW12 is deliberately monochrome; it is efficient for tone and sync checks, but it cannot preserve colour information."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "sstv-handbook"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x86 and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "bw-bw8",
    "family": "Monochrome",
    "name": "B/W 8",
    "shortName": "BW8",
    "supportStatus": "supported",
    "appShortName": "BW8",
    "developerOrOrigin": "Robot-compatible monochrome SSTV",
    "approxEra": "early and Robot-compatible monochrome SSTV",
    "colorModel": "BW",
    "componentSequence": "Y",
    "durationSeconds": 8.028,
    "durationLabel": "8.028 s",
    "appDurationLabel": "8.028 s",
    "columns": 160,
    "displayLines": 120,
    "dataLines": 120,
    "frameLabel": "160 x 120",
    "appFrameLabel": "160 x 120",
    "dataLinesLabel": "120",
    "visCode": {
      "hex": "0x02",
      "decimal": 2
    },
    "standardVisCode": {
      "hex": "0x02",
      "decimal": 2
    },
    "appRawVisCode": {
      "hex": "0x82",
      "decimal": 130
    },
    "visLabel": "VIS 2 (0x02; green BW component, public component set 1/2/3)",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 6,
    "frontPorchMs": 0.5,
    "backPorchMs": 0.5,
    "separatorMs": 0,
    "transmitSyncMs": 6,
    "transmitFrontPorchMs": 1,
    "transmitBackPorchMs": 0.5,
    "transmitSeparatorMs": 0,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 896.861,
    "timingProfile": "App RX line fields: sync 6 ms; front porch 0.5 ms; back porch 0.5 ms; separator/blank 0 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "publicTimingProfile": null,
    "appTimingProfile": "App RX line fields: sync 6 ms; front porch 0.5 ms; back porch 0.5 ms; separator/blank 0 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public line-level timing was not found in checked sources, so app timing fields are labeled separately.",
    "commonUse": "Short black-and-white image transmission and compatibility testing.",
    "strengths": [
      "BW8 is a very fast compact Monochrome mode: 8.028 s, 160 x 120, BW.",
      "BW8 uses a single Y luminance channel, so the VIS 2 (0x02; green BW component, public component set 1/2/3) entry can be decoded as a compact monochrome image without colour registration concerns.",
      "BW8 has explicit app timing fields: 6 ms sync, 0.5 ms front porch, 0.5 ms back porch, 0 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "BW8 is documented from the app timing row; the line fields are explicit even where checked public sources do not publish every porch value."
    ],
    "tradeoffs": [
      "BW8's 8.028 s pass is quick, but the 160 x 120 frame leaves little scan time for fine detail or noisy channels.",
      "BW8 is deliberately monochrome; it is efficient for tone and sync checks, but it cannot preserve colour information."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "sstv-handbook"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x82 and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "mscan-tv1",
    "family": "MSCAN",
    "name": "MSCAN TV-1",
    "shortName": "TV-1",
    "supportStatus": "reference-only",
    "appShortName": null,
    "developerOrOrigin": "MSCAN",
    "approxEra": "analog SSTV era",
    "colorModel": "RGB",
    "componentSequence": "R-G-B",
    "durationSeconds": 320,
    "durationLabel": "320 s",
    "appDurationLabel": null,
    "columns": 320,
    "displayLines": 256,
    "dataLines": 256,
    "frameLabel": "320 x 256",
    "appFrameLabel": null,
    "dataLinesLabel": "256",
    "visCode": {
      "hex": "0x68",
      "decimal": 104
    },
    "standardVisCode": {
      "hex": "0x68",
      "decimal": 104
    },
    "appRawVisCode": null,
    "visLabel": "VIS 104",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 84.383,
    "timingProfile": "Mode-list row gives 320 s total duration, 256 scan lines, 320 columns, and 84.383 lpm; line-level porch timing is not part of this catalog row.",
    "publicTimingProfile": "Mode-list row gives 320 s total duration, 256 scan lines, 320 columns, and 84.383 lpm; line-level porch timing is not part of this catalog row.",
    "appTimingProfile": null,
    "specStatus": "Reference timing row from the OK2MNM SSTV mode-list PDF.",
    "commonUse": "MSCAN TV-1 is a long 320 s RGB software-era mode row, kept for compatibility with historical MSCAN references.",
    "strengths": [
      "TV-1 has a concrete catalogue row: 320 s, 320 x 256, RGB, VIS 104.",
      "TV-1's R-G-B component order and 84.383 lpm line rate make it useful for comparing airtime, raster, and colour structure against related modes."
    ],
    "tradeoffs": [
      "TV-1 is not app-supported yet, so the 320 s / 320 x 256 row should be treated as reference data rather than a verified transmit preset.",
      "TV-1 still needs implementation-grade porch, sync, and pixel timing before an app-generated WAV/FLAC sample can be published with the same confidence as supported modes."
    ],
    "sourceRefs": [
      "sstv-handbook"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "OK2MNM SSTV Handbook chapter 5 lists TV-1 as RGB, VIS 104, 320 s, 256 lines, 320 columns, 84.383 lpm. MSCAN software-era analog SSTV mode."
  },
  {
    "id": "mscan-tv2",
    "family": "MSCAN",
    "name": "MSCAN TV-2",
    "shortName": "TV-2",
    "supportStatus": "reference-only",
    "appShortName": null,
    "developerOrOrigin": "MSCAN",
    "approxEra": "analog SSTV era",
    "colorModel": "RGB",
    "componentSequence": "R-G-B",
    "durationSeconds": 320,
    "durationLabel": "320 s",
    "appDurationLabel": null,
    "columns": 320,
    "displayLines": 256,
    "dataLines": 256,
    "frameLabel": "320 x 256",
    "appFrameLabel": null,
    "dataLinesLabel": "256",
    "visCode": {
      "hex": "0x69",
      "decimal": 105
    },
    "standardVisCode": {
      "hex": "0x69",
      "decimal": 105
    },
    "appRawVisCode": null,
    "visLabel": "VIS 105",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 134.53,
    "timingProfile": "Mode-list row gives 320 s total duration, 256 scan lines, 320 columns, and 134.53 lpm; line-level porch timing is not part of this catalog row.",
    "publicTimingProfile": "Mode-list row gives 320 s total duration, 256 scan lines, 320 columns, and 134.53 lpm; line-level porch timing is not part of this catalog row.",
    "appTimingProfile": null,
    "specStatus": "Reference timing row from the OK2MNM SSTV mode-list PDF.",
    "commonUse": "MSCAN TV-2 is listed with the same duration and raster as TV-1 but a different VIS and line rate.",
    "strengths": [
      "TV-2 has a concrete catalogue row: 320 s, 320 x 256, RGB, VIS 105.",
      "TV-2's R-G-B component order and 134.53 lpm line rate make it useful for comparing airtime, raster, and colour structure against related modes."
    ],
    "tradeoffs": [
      "TV-2 is not app-supported yet, so the 320 s / 320 x 256 row should be treated as reference data rather than a verified transmit preset.",
      "TV-2 still needs implementation-grade porch, sync, and pixel timing before an app-generated WAV/FLAC sample can be published with the same confidence as supported modes."
    ],
    "sourceRefs": [
      "sstv-handbook"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "OK2MNM SSTV Handbook chapter 5 lists TV-2 as RGB, VIS 105, 320 s, 256 lines, 320 columns, 134.53 lpm. MSCAN software-era analog SSTV mode."
  },
  {
    "id": "pasokon-p3",
    "family": "Pasokon",
    "name": "Pasokon P3",
    "shortName": "P3",
    "supportStatus": "supported",
    "appShortName": "P3",
    "developerOrOrigin": "Pasokon TV",
    "approxEra": "high-resolution analog SSTV era",
    "colorModel": "RGB",
    "componentSequence": "R-G-B",
    "durationSeconds": 203.0642,
    "durationLabel": "203.064 s",
    "appDurationLabel": "203.064 s",
    "columns": 640,
    "displayLines": 496,
    "dataLines": 496,
    "frameLabel": "640 x 496",
    "appFrameLabel": "640 x 496",
    "dataLinesLabel": "496",
    "visCode": {
      "hex": "0x71",
      "decimal": 113
    },
    "standardVisCode": {
      "hex": "0x71",
      "decimal": 113
    },
    "appRawVisCode": {
      "hex": "0x71",
      "decimal": 113
    },
    "visLabel": "VIS 113 (0x71)",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 5.2,
    "frontPorchMs": 2.1,
    "backPorchMs": 0.8,
    "separatorMs": 2.5,
    "transmitSyncMs": 5.2,
    "transmitFrontPorchMs": 1.0399999999999998,
    "transmitBackPorchMs": 1.0399999999999998,
    "transmitSeparatorMs": 1.0399999999999998,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 146.555,
    "timingProfile": "Public Pasokon P3 timing: VIS 113; 496 lines; 5.208 ms sync, 1.042 ms porch, then Red, Green, and Blue scans with 133.333 ms color scan time.",
    "publicTimingProfile": "Public Pasokon P3 timing: VIS 113; 496 lines; 5.208 ms sync, 1.042 ms porch, then Red, Green, and Blue scans with 133.333 ms color scan time.",
    "appTimingProfile": "App RX line fields: sync 5.2 ms; front porch 2.1 ms; back porch 0.8 ms; separator/blank 2.5 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Pasokon family analog SSTV operation and compatibility reference.",
    "strengths": [
      "P3 is a long-form high-detail Pasokon mode: 203.064 s, 640 x 496, RGB.",
      "P3 uses R-G-B RGB component order and VIS 113 (0x71), giving receivers enough mode identity to separate it from neighbouring Pasokon rows.",
      "P3 has explicit app timing fields: 5.2 ms sync, 2.1 ms front porch, 0.8 ms back porch, 2.5 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "P3 has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "P3's 203.064 s transfer can carry more picture detail, but it occupies the channel longer and is less forgiving of fades across the 640 x 496 frame.",
      "P3 sends colour sequentially in RGB; sync drift can appear as colour fringing before the whole frame becomes unreadable."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "sstv-handbook",
      "n7cxi-dayton"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x71 and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "pasokon-p5",
    "family": "Pasokon",
    "name": "Pasokon P5",
    "shortName": "P5",
    "supportStatus": "supported",
    "appShortName": "P5",
    "developerOrOrigin": "Pasokon TV",
    "approxEra": "high-resolution analog SSTV era",
    "colorModel": "RGB",
    "componentSequence": "R-G-B",
    "durationSeconds": 304.596,
    "durationLabel": "304.596 s",
    "appDurationLabel": "304.596 s",
    "columns": 640,
    "displayLines": 496,
    "dataLines": 496,
    "frameLabel": "640 x 496",
    "appFrameLabel": "640 x 496",
    "dataLinesLabel": "496",
    "visCode": {
      "hex": "0x72",
      "decimal": 114
    },
    "standardVisCode": {
      "hex": "0x72",
      "decimal": 114
    },
    "appRawVisCode": {
      "hex": "0x72",
      "decimal": 114
    },
    "visLabel": "VIS 114 (0x72)",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 7.8,
    "frontPorchMs": 1.6,
    "backPorchMs": 1.6,
    "separatorMs": 1.6,
    "transmitSyncMs": 7.8,
    "transmitFrontPorchMs": 1.6,
    "transmitBackPorchMs": 1.6,
    "transmitSeparatorMs": 1.6,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 97.703,
    "timingProfile": "Public Pasokon P5 timing: VIS 114; 496 lines; 7.813 ms sync, 1.563 ms porch, then Red, Green, and Blue scans with 200.000 ms color scan time.",
    "publicTimingProfile": "Public Pasokon P5 timing: VIS 114; 496 lines; 7.813 ms sync, 1.563 ms porch, then Red, Green, and Blue scans with 200.000 ms color scan time.",
    "appTimingProfile": "App RX line fields: sync 7.8 ms; front porch 1.6 ms; back porch 1.6 ms; separator/blank 1.6 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Pasokon family analog SSTV operation and compatibility reference.",
    "strengths": [
      "P5 is a extended high-detail Pasokon mode: 304.596 s, 640 x 496, RGB.",
      "P5 uses R-G-B RGB component order and VIS 114 (0x72), giving receivers enough mode identity to separate it from neighbouring Pasokon rows.",
      "P5 has explicit app timing fields: 7.8 ms sync, 1.6 ms front porch, 1.6 ms back porch, 1.6 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "P5 has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "P5's 304.596 s transfer can carry more picture detail, but it occupies the channel longer and is less forgiving of fades across the 640 x 496 frame.",
      "P5 sends colour sequentially in RGB; sync drift can appear as colour fringing before the whole frame becomes unreadable."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "sstv-handbook",
      "n7cxi-dayton"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x72 and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "pasokon-p7",
    "family": "Pasokon",
    "name": "Pasokon P7",
    "shortName": "P7",
    "supportStatus": "supported",
    "appShortName": "P7",
    "developerOrOrigin": "Pasokon TV",
    "approxEra": "high-resolution analog SSTV era",
    "colorModel": "RGB",
    "componentSequence": "R-G-B",
    "durationSeconds": 406.128,
    "durationLabel": "406.128 s",
    "appDurationLabel": "406.128 s",
    "columns": 640,
    "displayLines": 496,
    "dataLines": 496,
    "frameLabel": "640 x 496",
    "appFrameLabel": "640 x 496",
    "dataLinesLabel": "496",
    "visCode": {
      "hex": "0x73",
      "decimal": 115
    },
    "standardVisCode": {
      "hex": "0x73",
      "decimal": 115
    },
    "appRawVisCode": {
      "hex": "0xF3",
      "decimal": 243
    },
    "visLabel": "VIS 115 (0x73)",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 10.4,
    "frontPorchMs": 2.1,
    "backPorchMs": 2.1,
    "separatorMs": 2.1,
    "transmitSyncMs": 10.4,
    "transmitFrontPorchMs": 2.1,
    "transmitBackPorchMs": 2.1,
    "transmitSeparatorMs": 2.1,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 73.277,
    "timingProfile": "Public Pasokon P7 timing: VIS 115; 496 lines; 10.417 ms sync, 2.083 ms porch, then Red, Green, and Blue scans with 266.666 ms color scan time.",
    "publicTimingProfile": "Public Pasokon P7 timing: VIS 115; 496 lines; 10.417 ms sync, 2.083 ms porch, then Red, Green, and Blue scans with 266.666 ms color scan time.",
    "appTimingProfile": "App RX line fields: sync 10.4 ms; front porch 2.1 ms; back porch 2.1 ms; separator/blank 2.1 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Pasokon family analog SSTV operation and compatibility reference.",
    "strengths": [
      "P7 is a extended high-detail Pasokon mode: 406.128 s, 640 x 496, RGB.",
      "P7 uses R-G-B RGB component order and VIS 115 (0x73), giving receivers enough mode identity to separate it from neighbouring Pasokon rows.",
      "P7 has explicit app timing fields: 10.4 ms sync, 2.1 ms front porch, 2.1 ms back porch, 2.1 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "P7 has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "P7's 406.128 s transfer can carry more picture detail, but it occupies the channel longer and is less forgiving of fades across the 640 x 496 frame.",
      "P7 sends colour sequentially in RGB; sync drift can appear as colour fringing before the whole frame becomes unreadable."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "sstv-handbook",
      "n7cxi-dayton"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0xF3 and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "pd-pd120",
    "family": "PD",
    "name": "PD120",
    "shortName": "PD120",
    "supportStatus": "supported",
    "appShortName": "PD120",
    "developerOrOrigin": "Paul Turner, G4IJE",
    "approxEra": "high-resolution analog SSTV era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY-Y",
    "durationSeconds": 126.1115,
    "durationLabel": "126.112 s",
    "appDurationLabel": "126.112 s",
    "columns": 640,
    "displayLines": 496,
    "dataLines": 248,
    "frameLabel": "640 x 496",
    "appFrameLabel": "640 x 496",
    "dataLinesLabel": "248",
    "visCode": {
      "hex": "0x5F",
      "decimal": 95
    },
    "standardVisCode": {
      "hex": "0x5F",
      "decimal": 95
    },
    "appRawVisCode": {
      "hex": "0x5F",
      "decimal": 95
    },
    "visLabel": "VIS 95 (0x5F)",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 20,
    "frontPorchMs": 0,
    "backPorchMs": 2.0799999999999996,
    "separatorMs": 0,
    "transmitSyncMs": 20,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 2.3,
    "transmitSeparatorMs": 0,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 235.982,
    "timingProfile": "Public PD timing: 20.000 ms sync, 2.080 ms porch, odd-line Y, averaged R-Y, averaged B-Y, even-line Y; repeat pairs until the mode-specific line count is complete.",
    "publicTimingProfile": "Public PD timing: 20.000 ms sync, 2.080 ms porch, odd-line Y, averaged R-Y, averaged B-Y, even-line Y; repeat pairs until the mode-specific line count is complete.",
    "appTimingProfile": "App RX line fields: sync 20 ms; front porch 0 ms; back porch 2.08 ms; separator/blank 0 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "High-compatibility satellite and event SSTV mode with more detail than Robot 36.",
    "strengths": [
      "PD120 is a standard-length high-detail PD mode: 126.112 s, 640 x 496, YCrCb.",
      "PD120 uses Y-RY-BY-Y pair-line colour-difference scanning, giving two luma passes around shared chroma samples in the PD family.",
      "PD120 has explicit app timing fields: 20 ms sync, 0 ms front porch, 2.08 ms back porch, 0 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "PD120 has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "PD120's 126.112 s frame is a balanced choice, but it still needs a stable path for the full 640 x 496 scan.",
      "PD120 colour-difference coding can preserve useful luminance detail, but chroma edges may look softer than full-rate RGB modes after weak-path reception."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "sstv-handbook",
      "n7cxi-dayton"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x5F and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "pd-pd160",
    "family": "PD",
    "name": "PD160",
    "shortName": "PD160",
    "supportStatus": "supported",
    "appShortName": "PD160",
    "developerOrOrigin": "Paul Turner, G4IJE",
    "approxEra": "high-resolution analog SSTV era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY-Y",
    "durationSeconds": 160.8942,
    "durationLabel": "160.894 s",
    "appDurationLabel": "160.894 s",
    "columns": 512,
    "displayLines": 400,
    "dataLines": 200,
    "frameLabel": "512 x 400",
    "appFrameLabel": "512 x 400",
    "dataLinesLabel": "200",
    "visCode": {
      "hex": "0x62",
      "decimal": 98
    },
    "standardVisCode": {
      "hex": "0x62",
      "decimal": 98
    },
    "appRawVisCode": {
      "hex": "0xE2",
      "decimal": 226
    },
    "visLabel": "VIS 98 (0x62)",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 20,
    "frontPorchMs": 0,
    "backPorchMs": 2,
    "separatorMs": 0,
    "transmitSyncMs": 20,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 2.3,
    "transmitSeparatorMs": 0,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 149.166,
    "timingProfile": "Public PD timing: 20.000 ms sync, 2.080 ms porch, odd-line Y, averaged R-Y, averaged B-Y, even-line Y; repeat pairs until the mode-specific line count is complete.",
    "publicTimingProfile": "Public PD timing: 20.000 ms sync, 2.080 ms porch, odd-line Y, averaged R-Y, averaged B-Y, even-line Y; repeat pairs until the mode-specific line count is complete.",
    "appTimingProfile": "App RX line fields: sync 20 ms; front porch 0 ms; back porch 2 ms; separator/blank 0 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Higher-resolution color work where longer transmission time is acceptable.",
    "strengths": [
      "PD160 is a long-form large-frame PD mode: 160.894 s, 512 x 400, YCrCb.",
      "PD160 uses Y-RY-BY-Y pair-line colour-difference scanning, giving two luma passes around shared chroma samples in the PD family.",
      "PD160 has explicit app timing fields: 20 ms sync, 0 ms front porch, 2 ms back porch, 0 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "PD160 has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "PD160's 160.894 s transfer can carry more picture detail, but it occupies the channel longer and is less forgiving of fades across the 512 x 400 frame.",
      "PD160 colour-difference coding can preserve useful luminance detail, but chroma edges may look softer than full-rate RGB modes after weak-path reception."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "sstv-handbook",
      "n7cxi-dayton"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0xE2 and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "pd-pd180",
    "family": "PD",
    "name": "PD180",
    "shortName": "PD180",
    "supportStatus": "supported",
    "appShortName": "PD180",
    "developerOrOrigin": "Paul Turner, G4IJE",
    "approxEra": "high-resolution analog SSTV era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY-Y",
    "durationSeconds": 187.0645,
    "durationLabel": "187.065 s",
    "appDurationLabel": "187.065 s",
    "columns": 640,
    "displayLines": 496,
    "dataLines": 248,
    "frameLabel": "640 x 496",
    "appFrameLabel": "640 x 496",
    "dataLinesLabel": "248",
    "visCode": {
      "hex": "0x60",
      "decimal": 96
    },
    "standardVisCode": {
      "hex": "0x60",
      "decimal": 96
    },
    "appRawVisCode": {
      "hex": "0x60",
      "decimal": 96
    },
    "visLabel": "VIS 96 (0x60)",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 20,
    "frontPorchMs": 0,
    "backPorchMs": 2,
    "separatorMs": 0,
    "transmitSyncMs": 20,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 2.3,
    "transmitSeparatorMs": 0,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 159.09,
    "timingProfile": "Public PD timing: 20.000 ms sync, 2.080 ms porch, odd-line Y, averaged R-Y, averaged B-Y, even-line Y; repeat pairs until the mode-specific line count is complete.",
    "publicTimingProfile": "Public PD timing: 20.000 ms sync, 2.080 ms porch, odd-line Y, averaged R-Y, averaged B-Y, even-line Y; repeat pairs until the mode-specific line count is complete.",
    "appTimingProfile": "App RX line fields: sync 20 ms; front porch 0 ms; back porch 2 ms; separator/blank 0 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Higher-resolution color work where longer transmission time is acceptable.",
    "strengths": [
      "PD180 is a long-form high-detail PD mode: 187.065 s, 640 x 496, YCrCb.",
      "PD180 uses Y-RY-BY-Y pair-line colour-difference scanning, giving two luma passes around shared chroma samples in the PD family.",
      "PD180 has explicit app timing fields: 20 ms sync, 0 ms front porch, 2 ms back porch, 0 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "PD180 has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "PD180's 187.065 s transfer can carry more picture detail, but it occupies the channel longer and is less forgiving of fades across the 640 x 496 frame.",
      "PD180 colour-difference coding can preserve useful luminance detail, but chroma edges may look softer than full-rate RGB modes after weak-path reception."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "sstv-handbook",
      "n7cxi-dayton"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x60 and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "pd-pd240",
    "family": "PD",
    "name": "PD240",
    "shortName": "PD240",
    "supportStatus": "supported",
    "appShortName": "PD240",
    "developerOrOrigin": "Paul Turner, G4IJE",
    "approxEra": "high-resolution analog SSTV era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY-Y",
    "durationSeconds": 248.017,
    "durationLabel": "248.017 s",
    "appDurationLabel": "248.017 s",
    "columns": 640,
    "displayLines": 496,
    "dataLines": 248,
    "frameLabel": "640 x 496",
    "appFrameLabel": "640 x 496",
    "dataLinesLabel": "248",
    "visCode": {
      "hex": "0x61",
      "decimal": 97
    },
    "standardVisCode": {
      "hex": "0x61",
      "decimal": 97
    },
    "appRawVisCode": {
      "hex": "0xE1",
      "decimal": 225
    },
    "visLabel": "VIS 97 (0x61)",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 20,
    "frontPorchMs": 2,
    "backPorchMs": 2,
    "separatorMs": 0,
    "transmitSyncMs": 20,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 2.3,
    "transmitSeparatorMs": 0,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 119.992,
    "timingProfile": "Public PD timing: 20.000 ms sync, 2.080 ms porch, odd-line Y, averaged R-Y, averaged B-Y, even-line Y; repeat pairs until the mode-specific line count is complete.",
    "publicTimingProfile": "Public PD timing: 20.000 ms sync, 2.080 ms porch, odd-line Y, averaged R-Y, averaged B-Y, even-line Y; repeat pairs until the mode-specific line count is complete.",
    "appTimingProfile": "App RX line fields: sync 20 ms; front porch 2 ms; back porch 2 ms; separator/blank 0 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Higher-resolution color work where longer transmission time is acceptable.",
    "strengths": [
      "PD240 is a extended high-detail PD mode: 248.017 s, 640 x 496, YCrCb.",
      "PD240 uses Y-RY-BY-Y pair-line colour-difference scanning, giving two luma passes around shared chroma samples in the PD family.",
      "PD240 has explicit app timing fields: 20 ms sync, 2 ms front porch, 2 ms back porch, 0 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "PD240 has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "PD240's 248.017 s transfer can carry more picture detail, but it occupies the channel longer and is less forgiving of fades across the 640 x 496 frame.",
      "PD240 colour-difference coding can preserve useful luminance detail, but chroma edges may look softer than full-rate RGB modes after weak-path reception."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "sstv-handbook",
      "n7cxi-dayton"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0xE1 and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "pd-pd290",
    "family": "PD",
    "name": "PD290",
    "shortName": "PD290",
    "supportStatus": "supported",
    "appShortName": "PD290",
    "developerOrOrigin": "Paul Turner, G4IJE",
    "approxEra": "high-resolution analog SSTV era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY-Y",
    "durationSeconds": 288.702,
    "durationLabel": "288.702 s",
    "appDurationLabel": "288.702 s",
    "columns": 800,
    "displayLines": 616,
    "dataLines": 308,
    "frameLabel": "800 x 616",
    "appFrameLabel": "800 x 616",
    "dataLinesLabel": "308",
    "visCode": {
      "hex": "0x5E",
      "decimal": 94
    },
    "standardVisCode": {
      "hex": "0x5E",
      "decimal": 94
    },
    "appRawVisCode": {
      "hex": "0xDE",
      "decimal": 222
    },
    "visLabel": "VIS 94 (0x5E)",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 20,
    "frontPorchMs": 0,
    "backPorchMs": 2,
    "separatorMs": 0,
    "transmitSyncMs": 20,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 2.3,
    "transmitSeparatorMs": 0,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 128.021,
    "timingProfile": "Public PD timing: 20.000 ms sync, 2.080 ms porch, odd-line Y, averaged R-Y, averaged B-Y, even-line Y; repeat pairs until the mode-specific line count is complete.",
    "publicTimingProfile": "Public PD timing: 20.000 ms sync, 2.080 ms porch, odd-line Y, averaged R-Y, averaged B-Y, even-line Y; repeat pairs until the mode-specific line count is complete.",
    "appTimingProfile": "App RX line fields: sync 20 ms; front porch 0 ms; back porch 2 ms; separator/blank 0 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Higher-resolution color work where longer transmission time is acceptable.",
    "strengths": [
      "PD290 is a extended high-detail PD mode: 288.702 s, 800 x 616, YCrCb.",
      "PD290 uses Y-RY-BY-Y pair-line colour-difference scanning, giving two luma passes around shared chroma samples in the PD family.",
      "PD290 has explicit app timing fields: 20 ms sync, 0 ms front porch, 2 ms back porch, 0 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "PD290 has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "PD290's 288.702 s transfer can carry more picture detail, but it occupies the channel longer and is less forgiving of fades across the 800 x 616 frame.",
      "PD290 colour-difference coding can preserve useful luminance detail, but chroma edges may look softer than full-rate RGB modes after weak-path reception."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "sstv-handbook",
      "n7cxi-dayton"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0xDE and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "pd-pd50",
    "family": "PD",
    "name": "PD50",
    "shortName": "PD50",
    "supportStatus": "supported",
    "appShortName": "PD50",
    "developerOrOrigin": "Paul Turner, G4IJE",
    "approxEra": "high-resolution analog SSTV era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY-Y",
    "durationSeconds": 49.6877,
    "durationLabel": "49.688 s",
    "appDurationLabel": "49.688 s",
    "columns": 320,
    "displayLines": 256,
    "dataLines": 128,
    "frameLabel": "320 x 256",
    "appFrameLabel": "320 x 256",
    "dataLinesLabel": "128",
    "visCode": {
      "hex": "0x5D",
      "decimal": 93
    },
    "standardVisCode": {
      "hex": "0x5D",
      "decimal": 93
    },
    "appRawVisCode": {
      "hex": "0xDD",
      "decimal": 221
    },
    "visLabel": "VIS 93 (0x5D)",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 20,
    "frontPorchMs": 0,
    "backPorchMs": 2.0799999999999996,
    "separatorMs": 0,
    "transmitSyncMs": 20,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 2.3,
    "transmitSeparatorMs": 0,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 309.131,
    "timingProfile": "Public PD timing: 20.000 ms sync, 2.080 ms porch, odd-line Y, averaged R-Y, averaged B-Y, even-line Y; repeat pairs until the mode-specific line count is complete.",
    "publicTimingProfile": "Public PD timing: 20.000 ms sync, 2.080 ms porch, odd-line Y, averaged R-Y, averaged B-Y, even-line Y; repeat pairs until the mode-specific line count is complete.",
    "appTimingProfile": "App RX line fields: sync 20 ms; front porch 0 ms; back porch 2.08 ms; separator/blank 0 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Higher-resolution color work where longer transmission time is acceptable.",
    "strengths": [
      "PD50 is a medium-length standard colour PD mode: 49.688 s, 320 x 256, YCrCb.",
      "PD50 uses Y-RY-BY-Y pair-line colour-difference scanning, giving two luma passes around shared chroma samples in the PD family.",
      "PD50 has explicit app timing fields: 20 ms sync, 0 ms front porch, 2.08 ms back porch, 0 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "PD50 has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "PD50's 49.688 s airtime is practical for casual contacts, while the 320 x 256 frame still gives less margin than the longer high-detail modes.",
      "PD50 colour-difference coding can preserve useful luminance detail, but chroma edges may look softer than full-rate RGB modes after weak-path reception."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "sstv-handbook",
      "n7cxi-dayton"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0xDD and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "pd-pd90",
    "family": "PD",
    "name": "PD90",
    "shortName": "PD90",
    "supportStatus": "supported",
    "appShortName": "PD90",
    "developerOrOrigin": "Paul Turner, G4IJE",
    "approxEra": "high-resolution analog SSTV era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY-Y",
    "durationSeconds": 89.995,
    "durationLabel": "89.995 s",
    "appDurationLabel": "89.995 s",
    "columns": 320,
    "displayLines": 256,
    "dataLines": 128,
    "frameLabel": "320 x 256",
    "appFrameLabel": "320 x 256",
    "dataLinesLabel": "128",
    "visCode": {
      "hex": "0x63",
      "decimal": 99
    },
    "standardVisCode": {
      "hex": "0x63",
      "decimal": 99
    },
    "appRawVisCode": {
      "hex": "0x63",
      "decimal": 99
    },
    "visLabel": "VIS 99 (0x63)",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 20,
    "frontPorchMs": 0,
    "backPorchMs": 2.0799999999999996,
    "separatorMs": 0,
    "transmitSyncMs": 20,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 2.3,
    "transmitSeparatorMs": 0,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 170.676,
    "timingProfile": "Public PD timing: 20.000 ms sync, 2.080 ms porch, odd-line Y, averaged R-Y, averaged B-Y, even-line Y; repeat pairs until the mode-specific line count is complete.",
    "publicTimingProfile": "Public PD timing: 20.000 ms sync, 2.080 ms porch, odd-line Y, averaged R-Y, averaged B-Y, even-line Y; repeat pairs until the mode-specific line count is complete.",
    "appTimingProfile": "App RX line fields: sync 20 ms; front porch 0 ms; back porch 2.08 ms; separator/blank 0 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Higher-resolution color work where longer transmission time is acceptable.",
    "strengths": [
      "PD90 is a medium-length standard colour PD mode: 89.995 s, 320 x 256, YCrCb.",
      "PD90 uses Y-RY-BY-Y pair-line colour-difference scanning, giving two luma passes around shared chroma samples in the PD family.",
      "PD90 has explicit app timing fields: 20 ms sync, 0 ms front porch, 2.08 ms back porch, 0 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "PD90 has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "PD90's 89.995 s frame is a balanced choice, but it still needs a stable path for the full 320 x 256 scan.",
      "PD90 colour-difference coding can preserve useful luminance detail, but chroma edges may look softer than full-rate RGB modes after weak-path reception."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "sstv-handbook",
      "n7cxi-dayton"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x63 and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "proskan-j120",
    "family": "Proskan",
    "name": "Proskan J120",
    "shortName": "J120",
    "supportStatus": "reference-only",
    "appShortName": null,
    "developerOrOrigin": "Proskan",
    "approxEra": "analog SSTV era",
    "colorModel": "RGB",
    "componentSequence": "R-G-B",
    "durationSeconds": 120,
    "durationLabel": "120 s",
    "appDurationLabel": null,
    "columns": 320,
    "displayLines": 240,
    "dataLines": 240,
    "frameLabel": "320 x 240",
    "appFrameLabel": null,
    "dataLinesLabel": "240",
    "visCode": {
      "hex": "0x64",
      "decimal": 100
    },
    "standardVisCode": {
      "hex": "0x64",
      "decimal": 100
    },
    "appRawVisCode": null,
    "visLabel": "VIS 100",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 128.046,
    "timingProfile": "Mode-list row gives 120 s total duration, 240 scan lines, 320 columns, and 128.046 lpm; line-level porch timing is not part of this catalog row.",
    "publicTimingProfile": "Mode-list row gives 120 s total duration, 240 scan lines, 320 columns, and 128.046 lpm; line-level porch timing is not part of this catalog row.",
    "appTimingProfile": null,
    "specStatus": "Reference timing row from the OK2MNM SSTV mode-list PDF.",
    "commonUse": "Proskan J120 is a 120 s, 320 x 240 RGB row from the Proskan family.",
    "strengths": [
      "J120 has a concrete catalogue row: 120 s, 320 x 240, RGB, VIS 100.",
      "J120's R-G-B component order and 128.046 lpm line rate make it useful for comparing airtime, raster, and colour structure against related modes."
    ],
    "tradeoffs": [
      "J120 is not app-supported yet, so the 120 s / 320 x 240 row should be treated as reference data rather than a verified transmit preset.",
      "J120 still needs implementation-grade porch, sync, and pixel timing before an app-generated WAV/FLAC sample can be published with the same confidence as supported modes."
    ],
    "sourceRefs": [
      "sstv-handbook"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "OK2MNM SSTV Handbook chapter 5 lists J120 as RGB, VIS 100, 120 s, 240 lines, 320 columns, 128.046 lpm. Proskan J120 analog SSTV reference mode."
  },
  {
    "id": "robot-bw24",
    "family": "Robot",
    "name": "Robot B/W 24",
    "shortName": "BW24",
    "supportStatus": "reference-only",
    "appShortName": null,
    "developerOrOrigin": "Robot Research",
    "approxEra": "Robot Research hardware era",
    "colorModel": "BW",
    "componentSequence": "Y",
    "durationSeconds": 24,
    "durationLabel": "24 s",
    "appDurationLabel": null,
    "columns": 240,
    "displayLines": 320,
    "dataLines": 320,
    "frameLabel": "240 x 320",
    "appFrameLabel": null,
    "dataLinesLabel": "320",
    "visCode": {
      "hex": "0x09, 0x0A, 0x0B",
      "decimal": "9, 10, 11"
    },
    "standardVisCode": {
      "hex": "0x09, 0x0A, 0x0B",
      "decimal": "9, 10, 11"
    },
    "appRawVisCode": null,
    "visLabel": "VIS 9, 10, 11",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 300,
    "timingProfile": "Mode-list row gives 24 s total duration, 320 scan lines, 240 columns, and 300 lpm; line-level porch timing is not part of this catalog row.",
    "publicTimingProfile": "Mode-list row gives 24 s total duration, 320 scan lines, 240 columns, and 300 lpm; line-level porch timing is not part of this catalog row.",
    "appTimingProfile": null,
    "specStatus": "Reference timing row from the OK2MNM SSTV mode-list PDF.",
    "commonUse": "Robot B/W 24 is a monochrome Robot row with component-specific VIS entries listed for red, green, and blue component use.",
    "strengths": [
      "BW24 has a concrete catalogue row: 24 s, 240 x 320, BW, VIS 9, 10, 11.",
      "BW24's Y component order and 300 lpm line rate make it useful for comparing airtime, raster, and colour structure against related modes."
    ],
    "tradeoffs": [
      "BW24 is not app-supported yet, so the 24 s / 240 x 320 row should be treated as reference data rather than a verified transmit preset.",
      "BW24 still needs implementation-grade porch, sync, and pixel timing before an app-generated WAV/FLAC sample can be published with the same confidence as supported modes."
    ],
    "sourceRefs": [
      "sstv-handbook"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "OK2MNM SSTV Handbook chapter 5 lists BW24 as BW, VIS 9, 10, 11, 24 s, 320 lines, 240 columns, 300 lpm. Robot monochrome 24-second variant."
  },
  {
    "id": "robot-bw36",
    "family": "Robot",
    "name": "Robot B/W 36",
    "shortName": "BW36",
    "supportStatus": "reference-only",
    "appShortName": null,
    "developerOrOrigin": "Robot Research",
    "approxEra": "Robot Research hardware era",
    "colorModel": "BW",
    "componentSequence": "Y",
    "durationSeconds": 36,
    "durationLabel": "36 s",
    "appDurationLabel": null,
    "columns": 240,
    "displayLines": 320,
    "dataLines": 320,
    "frameLabel": "240 x 320",
    "appFrameLabel": null,
    "dataLinesLabel": "320",
    "visCode": {
      "hex": "0x0D, 0x0E, 0x0F",
      "decimal": "13, 14, 15"
    },
    "standardVisCode": {
      "hex": "0x0D, 0x0E, 0x0F",
      "decimal": "13, 14, 15"
    },
    "appRawVisCode": null,
    "visLabel": "VIS 13, 14, 15",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 200,
    "timingProfile": "Mode-list row gives 36 s total duration, 320 scan lines, 240 columns, and 200 lpm; line-level porch timing is not part of this catalog row.",
    "publicTimingProfile": "Mode-list row gives 36 s total duration, 320 scan lines, 240 columns, and 200 lpm; line-level porch timing is not part of this catalog row.",
    "appTimingProfile": null,
    "specStatus": "Reference timing row from the OK2MNM SSTV mode-list PDF.",
    "commonUse": "Robot B/W 36 is the 36 s monochrome Robot row with component-specific VIS entries; green is commonly used for BW images in the OK2MNM note.",
    "strengths": [
      "BW36 has a concrete catalogue row: 36 s, 240 x 320, BW, VIS 13, 14, 15.",
      "BW36's Y component order and 200 lpm line rate make it useful for comparing airtime, raster, and colour structure against related modes."
    ],
    "tradeoffs": [
      "BW36 is not app-supported yet, so the 36 s / 240 x 320 row should be treated as reference data rather than a verified transmit preset.",
      "BW36 still needs implementation-grade porch, sync, and pixel timing before an app-generated WAV/FLAC sample can be published with the same confidence as supported modes."
    ],
    "sourceRefs": [
      "sstv-handbook"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "OK2MNM SSTV Handbook chapter 5 lists BW36 as BW, VIS 13, 14, 15, 36 s, 320 lines, 240 columns, 200 lpm. Robot monochrome 36-second variant."
  },
  {
    "id": "robot-color-12",
    "family": "Robot",
    "name": "Robot Color 12",
    "shortName": "C12",
    "supportStatus": "reference-only",
    "appShortName": null,
    "developerOrOrigin": "Robot Research",
    "approxEra": "Robot Research hardware era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY",
    "durationSeconds": 12,
    "durationLabel": "12 s",
    "appDurationLabel": null,
    "columns": 160,
    "displayLines": 120,
    "dataLines": 120,
    "frameLabel": "160 x 120",
    "appFrameLabel": null,
    "dataLinesLabel": "120",
    "visCode": {
      "hex": "0x00",
      "decimal": 0
    },
    "standardVisCode": {
      "hex": "0x00",
      "decimal": 0
    },
    "appRawVisCode": null,
    "visLabel": "VIS 0",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 600,
    "timingProfile": "Mode-list row gives 12 s total duration, 120 scan lines, 160 columns, and 600 lpm; line-level porch timing is not part of this catalog row.",
    "publicTimingProfile": "Mode-list row gives 12 s total duration, 120 scan lines, 160 columns, and 600 lpm; line-level porch timing is not part of this catalog row.",
    "appTimingProfile": null,
    "specStatus": "Reference timing row from the OK2MNM SSTV mode-list PDF.",
    "commonUse": "Robot Color 12 is the 12 s Robot color-difference row; it is useful for understanding the short Robot color family below Robot 24/36/72.",
    "strengths": [
      "C12 has a concrete catalogue row: 12 s, 160 x 120, YCrCb, VIS 0.",
      "C12's Y-RY-BY component order and 600 lpm line rate make it useful for comparing airtime, raster, and colour structure against related modes."
    ],
    "tradeoffs": [
      "C12 is not app-supported yet, so the 12 s / 160 x 120 row should be treated as reference data rather than a verified transmit preset.",
      "C12 still needs implementation-grade porch, sync, and pixel timing before an app-generated WAV/FLAC sample can be published with the same confidence as supported modes."
    ],
    "sourceRefs": [
      "sstv-handbook"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "OK2MNM SSTV Handbook chapter 5 lists C12 as YCrCb, VIS 0, 12 s, 120 lines, 160 columns, 600 lpm. Fast Robot color reference mode; lower detail than Robot 36/72."
  },
  {
    "id": "robot-color-24",
    "family": "Robot",
    "name": "Robot Color 24",
    "shortName": "C24",
    "supportStatus": "reference-only",
    "appShortName": null,
    "developerOrOrigin": "Robot Research",
    "approxEra": "Robot Research hardware era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY",
    "durationSeconds": 24,
    "durationLabel": "24 s",
    "appDurationLabel": null,
    "columns": 160,
    "displayLines": 120,
    "dataLines": 120,
    "frameLabel": "160 x 120",
    "appFrameLabel": null,
    "dataLinesLabel": "120",
    "visCode": {
      "hex": "0x04",
      "decimal": 4
    },
    "standardVisCode": {
      "hex": "0x04",
      "decimal": 4
    },
    "appRawVisCode": null,
    "visLabel": "VIS 4",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 300,
    "timingProfile": "Mode-list row gives 24 s total duration, 120 scan lines, 160 columns, and 300 lpm; line-level porch timing is not part of this catalog row.",
    "publicTimingProfile": "Mode-list row gives 24 s total duration, 120 scan lines, 160 columns, and 300 lpm; line-level porch timing is not part of this catalog row.",
    "appTimingProfile": null,
    "specStatus": "Reference timing row from the OK2MNM SSTV mode-list PDF.",
    "commonUse": "Robot Color 24 is the catalog form of Robot 24: 24 s, 160 x 120, YCrCb color-difference coding.",
    "strengths": [
      "C24 has a concrete catalogue row: 24 s, 160 x 120, YCrCb, VIS 4.",
      "C24's Y-RY-BY component order and 300 lpm line rate make it useful for comparing airtime, raster, and colour structure against related modes."
    ],
    "tradeoffs": [
      "C24 is not app-supported yet, so the 24 s / 160 x 120 row should be treated as reference data rather than a verified transmit preset.",
      "C24 still needs implementation-grade porch, sync, and pixel timing before an app-generated WAV/FLAC sample can be published with the same confidence as supported modes."
    ],
    "sourceRefs": [
      "sstv-handbook"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "OK2MNM SSTV Handbook chapter 5 lists C24 as YCrCb, VIS 4, 24 s, 120 lines, 160 columns, 300 lpm. Robot color reference mode close to app-supported Robot 24 timing class."
  },
  {
    "id": "robot-color-36",
    "family": "Robot",
    "name": "Robot Color 36",
    "shortName": "C36",
    "supportStatus": "reference-only",
    "appShortName": null,
    "developerOrOrigin": "Robot Research",
    "approxEra": "Robot Research hardware era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY",
    "durationSeconds": 36,
    "durationLabel": "36 s",
    "appDurationLabel": null,
    "columns": 320,
    "displayLines": 240,
    "dataLines": 240,
    "frameLabel": "320 x 240",
    "appFrameLabel": null,
    "dataLinesLabel": "240",
    "visCode": {
      "hex": "0x08",
      "decimal": 8
    },
    "standardVisCode": {
      "hex": "0x08",
      "decimal": 8
    },
    "appRawVisCode": null,
    "visLabel": "VIS 8",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 400,
    "timingProfile": "Mode-list row gives 36 s total duration, 240 scan lines, 320 columns, and 400 lpm; line-level porch timing is not part of this catalog row.",
    "publicTimingProfile": "Mode-list row gives 36 s total duration, 240 scan lines, 320 columns, and 400 lpm; line-level porch timing is not part of this catalog row.",
    "appTimingProfile": null,
    "specStatus": "Reference timing row from the OK2MNM SSTV mode-list PDF.",
    "commonUse": "Robot Color 36 is the catalog form of Robot 36, the highly compatible 36 s mode often used for public ISS SSTV.",
    "strengths": [
      "C36 has a concrete catalogue row: 36 s, 320 x 240, YCrCb, VIS 8.",
      "C36's Y-RY-BY component order and 400 lpm line rate make it useful for comparing airtime, raster, and colour structure against related modes."
    ],
    "tradeoffs": [
      "C36 is not app-supported yet, so the 36 s / 320 x 240 row should be treated as reference data rather than a verified transmit preset.",
      "C36 still needs implementation-grade porch, sync, and pixel timing before an app-generated WAV/FLAC sample can be published with the same confidence as supported modes."
    ],
    "sourceRefs": [
      "sstv-handbook"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "OK2MNM SSTV Handbook chapter 5 lists C36 as YCrCb, VIS 8, 36 s, 240 lines, 320 columns, 400 lpm. Robot 36 family definition in public mode catalogs."
  },
  {
    "id": "robot-color-72",
    "family": "Robot",
    "name": "Robot Color 72",
    "shortName": "C72",
    "supportStatus": "reference-only",
    "appShortName": null,
    "developerOrOrigin": "Robot Research",
    "approxEra": "Robot Research hardware era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY",
    "durationSeconds": 72,
    "durationLabel": "72 s",
    "appDurationLabel": null,
    "columns": 320,
    "displayLines": 240,
    "dataLines": 240,
    "frameLabel": "320 x 240",
    "appFrameLabel": null,
    "dataLinesLabel": "240",
    "visCode": {
      "hex": "0x0C",
      "decimal": 12
    },
    "standardVisCode": {
      "hex": "0x0C",
      "decimal": 12
    },
    "appRawVisCode": null,
    "visLabel": "VIS 12",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 200,
    "timingProfile": "Mode-list row gives 72 s total duration, 240 scan lines, 320 columns, and 200 lpm; line-level porch timing is not part of this catalog row.",
    "publicTimingProfile": "Mode-list row gives 72 s total duration, 240 scan lines, 320 columns, and 200 lpm; line-level porch timing is not part of this catalog row.",
    "appTimingProfile": null,
    "specStatus": "Reference timing row from the OK2MNM SSTV mode-list PDF.",
    "commonUse": "Robot Color 72 is the longer 72 s Robot color-difference row, trading airtime for more chroma detail than Robot 36.",
    "strengths": [
      "C72 has a concrete catalogue row: 72 s, 320 x 240, YCrCb, VIS 12.",
      "C72's Y-RY-BY component order and 200 lpm line rate make it useful for comparing airtime, raster, and colour structure against related modes."
    ],
    "tradeoffs": [
      "C72 is not app-supported yet, so the 72 s / 320 x 240 row should be treated as reference data rather than a verified transmit preset.",
      "C72 still needs implementation-grade porch, sync, and pixel timing before an app-generated WAV/FLAC sample can be published with the same confidence as supported modes."
    ],
    "sourceRefs": [
      "sstv-handbook"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "OK2MNM SSTV Handbook chapter 5 lists C72 as YCrCb, VIS 12, 72 s, 240 lines, 320 columns, 200 lpm. Robot 72 family definition in public mode catalogs."
  },
  {
    "id": "robot-r24",
    "family": "Robot",
    "name": "Robot 24",
    "shortName": "R24",
    "supportStatus": "supported",
    "appShortName": "R24",
    "developerOrOrigin": "Robot Research",
    "approxEra": "Robot Research hardware era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY",
    "durationSeconds": 24.0015,
    "durationLabel": "24.002 s",
    "appDurationLabel": "24.002 s",
    "columns": 160,
    "displayLines": 120,
    "dataLines": 120,
    "frameLabel": "160 x 120",
    "appFrameLabel": "160 x 120",
    "dataLinesLabel": "120",
    "visCode": {
      "hex": "0x04",
      "decimal": 4
    },
    "standardVisCode": {
      "hex": "0x04",
      "decimal": 4
    },
    "appRawVisCode": {
      "hex": "0x84",
      "decimal": 132
    },
    "visLabel": "VIS 4 (0x04)",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 6,
    "frontPorchMs": 0.1,
    "backPorchMs": 3,
    "separatorMs": 4.5,
    "transmitSyncMs": 6,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 1.2,
    "transmitSeparatorMs": 3.8,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 299.981,
    "timingProfile": "App RX line fields: sync 6 ms; front porch 0.1 ms; back porch 3 ms; separator/blank 4.5 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "publicTimingProfile": null,
    "appTimingProfile": "App RX line fields: sync 6 ms; front porch 0.1 ms; back porch 3 ms; separator/blank 4.5 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public line-level timing was not found in checked sources, so app timing fields are labeled separately.",
    "commonUse": "Robot family analog SSTV operation and compatibility reference.",
    "strengths": [
      "R24 is a fast compact Robot mode: 24.002 s, 160 x 120, YCrCb.",
      "R24 uses Y-RY-BY colour-difference scanning; the VIS 4 (0x04) row keeps luminance separate from alternating chroma information for Robot-family compatibility.",
      "R24 has explicit app timing fields: 6 ms sync, 0.1 ms front porch, 3 ms back porch, 4.5 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "R24 is documented from the app timing row; the line fields are explicit even where checked public sources do not publish every porch value."
    ],
    "tradeoffs": [
      "R24's 24.002 s airtime is practical for casual contacts, while the 160 x 120 frame still gives less margin than the longer high-detail modes.",
      "R24 colour-difference coding can preserve useful luminance detail, but chroma edges may look softer than full-rate RGB modes after weak-path reception."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "sstv-handbook"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x84 and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "robot-r36",
    "family": "Robot",
    "name": "Robot 36",
    "shortName": "R36",
    "supportStatus": "supported",
    "appShortName": "R36",
    "developerOrOrigin": "Robot Research",
    "approxEra": "Robot Research hardware era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY",
    "durationSeconds": 36.002,
    "durationLabel": "36.002 s",
    "appDurationLabel": "36.002 s",
    "columns": 320,
    "displayLines": 240,
    "dataLines": 240,
    "frameLabel": "320 x 240",
    "appFrameLabel": "320 x 240",
    "dataLinesLabel": "240",
    "visCode": {
      "hex": "0x08",
      "decimal": 8
    },
    "standardVisCode": {
      "hex": "0x08",
      "decimal": 8
    },
    "appRawVisCode": {
      "hex": "0x88",
      "decimal": 136
    },
    "visLabel": "VIS 8 (0x08)",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 9,
    "frontPorchMs": 0.4,
    "backPorchMs": 2.5,
    "separatorMs": 7,
    "transmitSyncMs": 9,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 3,
    "transmitSeparatorMs": 5.4,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 399.978,
    "timingProfile": "Public Robot 36 timing: VIS 8; 240 lines; 9.0 ms sync, 3.0 ms sync porch, 88.0 ms Y scan, alternating 1500 Hz and 2300 Hz separators, 1.5 ms porch, and 44.0 ms R-Y or B-Y chroma scans.",
    "publicTimingProfile": "Public Robot 36 timing: VIS 8; 240 lines; 9.0 ms sync, 3.0 ms sync porch, 88.0 ms Y scan, alternating 1500 Hz and 2300 Hz separators, 1.5 ms porch, and 44.0 ms R-Y or B-Y chroma scans.",
    "appTimingProfile": "App RX line fields: sync 9 ms; front porch 0.4 ms; back porch 2.5 ms; separator/blank 7 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Fast color SSTV, commonly associated with public ISS SSTV reception.",
    "strengths": [
      "R36 is a fast standard colour Robot mode: 36.002 s, 320 x 240, YCrCb.",
      "R36 uses Y-RY-BY colour-difference scanning; the VIS 8 (0x08) row keeps luminance separate from alternating chroma information for Robot-family compatibility.",
      "R36 has explicit app timing fields: 9 ms sync, 0.4 ms front porch, 2.5 ms back porch, 7 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "R36 has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "R36's 36.002 s airtime is practical for casual contacts, while the 320 x 240 frame still gives less margin than the longer high-detail modes.",
      "R36 colour-difference coding can preserve useful luminance detail, but chroma edges may look softer than full-rate RGB modes after weak-path reception."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "sstv-handbook",
      "n7cxi-dayton",
      "bruxy-mode-look",
      "sigidwiki-sstv"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x88 and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "robot-r72",
    "family": "Robot",
    "name": "Robot 72",
    "shortName": "R72",
    "supportStatus": "supported",
    "appShortName": "R72",
    "developerOrOrigin": "Robot Research",
    "approxEra": "Robot Research hardware era",
    "colorModel": "YCrCb",
    "componentSequence": "Y-RY-BY",
    "durationSeconds": 72.005,
    "durationLabel": "72.005 s",
    "appDurationLabel": "72.005 s",
    "columns": 320,
    "displayLines": 240,
    "dataLines": 240,
    "frameLabel": "320 x 240",
    "appFrameLabel": "320 x 240",
    "dataLinesLabel": "240",
    "visCode": {
      "hex": "0x0C",
      "decimal": 12
    },
    "standardVisCode": {
      "hex": "0x0C",
      "decimal": 12
    },
    "appRawVisCode": {
      "hex": "0x0C",
      "decimal": 12
    },
    "visLabel": "VIS 12 (0x0C)",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 9,
    "frontPorchMs": 0.4,
    "backPorchMs": 3.5,
    "separatorMs": 6,
    "transmitSyncMs": 9,
    "transmitFrontPorchMs": 0.4,
    "transmitBackPorchMs": 2.5,
    "transmitSeparatorMs": 6,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 199.986,
    "timingProfile": "Public Robot 72 timing: VIS 12; 240 lines; 9.0 ms sync, 3.0 ms sync porch, 138.0 ms Y scan, 4.5 ms separators, 1.5 ms porches, and 69.0 ms R-Y and B-Y scans.",
    "publicTimingProfile": "Public Robot 72 timing: VIS 12; 240 lines; 9.0 ms sync, 3.0 ms sync porch, 138.0 ms Y scan, 4.5 ms separators, 1.5 ms porches, and 69.0 ms R-Y and B-Y scans.",
    "appTimingProfile": "App RX line fields: sync 9 ms; front porch 0.4 ms; back porch 3.5 ms; separator/blank 6 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Robot family analog SSTV operation and compatibility reference.",
    "strengths": [
      "R72 is a medium-length standard colour Robot mode: 72.005 s, 320 x 240, YCrCb.",
      "R72 uses Y-RY-BY colour-difference scanning; the VIS 12 (0x0C) row keeps luminance separate from alternating chroma information for Robot-family compatibility.",
      "R72 has explicit app timing fields: 9 ms sync, 0.4 ms front porch, 3.5 ms back porch, 6 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "R72 has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "R72's 72.005 s airtime is practical for casual contacts, while the 320 x 240 frame still gives less margin than the longer high-detail modes.",
      "R72 colour-difference coding can preserve useful luminance detail, but chroma edges may look softer than full-rate RGB modes after weak-path reception."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "sstv-handbook",
      "n7cxi-dayton",
      "bruxy-mode-look"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x0C and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "scottie-dx2",
    "family": "Scottie",
    "name": "Scottie DX2",
    "shortName": "DX2",
    "supportStatus": "reference-only",
    "appShortName": null,
    "developerOrOrigin": "Eddie Murphy, GM3SBC",
    "approxEra": "classic analog color SSTV era",
    "colorModel": "RGB",
    "componentSequence": "G-B-R",
    "durationSeconds": 136,
    "durationLabel": "136 s",
    "appDurationLabel": null,
    "columns": 320,
    "displayLines": 256,
    "dataLines": 256,
    "frameLabel": "320 x 256",
    "appFrameLabel": null,
    "dataLinesLabel": "256",
    "visCode": {
      "hex": "0x50",
      "decimal": 80
    },
    "standardVisCode": {
      "hex": "0x50",
      "decimal": 80
    },
    "appRawVisCode": null,
    "visLabel": "VIS 80",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 112.905,
    "timingProfile": "Mode-list row gives 136 s total duration, 256 scan lines, 320 columns, and 112.905 lpm; line-level porch timing is not part of this catalog row.",
    "publicTimingProfile": "Mode-list row gives 136 s total duration, 256 scan lines, 320 columns, and 112.905 lpm; line-level porch timing is not part of this catalog row.",
    "appTimingProfile": null,
    "specStatus": "Reference timing row from the OK2MNM SSTV mode-list PDF.",
    "commonUse": "DX2 is a reference-only analog SSTV row with 136 s duration, 320 x 256 raster, RGB color model, and VIS 80.",
    "strengths": [
      "DX2 has a concrete catalogue row: 136 s, 320 x 256, RGB, VIS 80.",
      "DX2's G-B-R component order and 112.905 lpm line rate make it useful for comparing airtime, raster, and colour structure against related modes."
    ],
    "tradeoffs": [
      "DX2 is not app-supported yet, so the 136 s / 320 x 256 row should be treated as reference data rather than a verified transmit preset.",
      "DX2 still needs implementation-grade porch, sync, and pixel timing before an app-generated WAV/FLAC sample can be published with the same confidence as supported modes."
    ],
    "sourceRefs": [
      "sstv-handbook"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "OK2MNM SSTV Handbook chapter 5 lists DX2 as RGB, VIS 80, 136 s, 256 lines, 320 columns, 112.905 lpm. Extended Scottie DX variant listed by analog SSTV references."
  },
  {
    "id": "scottie-s1",
    "family": "Scottie",
    "name": "Scottie 1",
    "shortName": "S1",
    "supportStatus": "supported",
    "appShortName": "S1",
    "developerOrOrigin": "Eddie Murphy, GM3SBC",
    "approxEra": "classic analog color SSTV era",
    "colorModel": "RGB",
    "componentSequence": "G-B-R",
    "durationSeconds": 109.6325,
    "durationLabel": "109.632 s",
    "appDurationLabel": "109.632 s",
    "columns": 320,
    "displayLines": 256,
    "dataLines": 256,
    "frameLabel": "320 x 256",
    "appFrameLabel": "320 x 256",
    "dataLinesLabel": "256",
    "visCode": {
      "hex": "0x3C",
      "decimal": 60
    },
    "standardVisCode": {
      "hex": "0x3C",
      "decimal": 60
    },
    "appRawVisCode": {
      "hex": "0x3C",
      "decimal": 60
    },
    "visLabel": "VIS 60 (0x3C)",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 9,
    "frontPorchMs": 0.1,
    "backPorchMs": 1.25,
    "separatorMs": 1.25,
    "transmitSyncMs": 9,
    "transmitFrontPorchMs": 0.8,
    "transmitBackPorchMs": 0.8,
    "transmitSeparatorMs": 1.25,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 140.104,
    "timingProfile": "Public Scottie S1 timing: VIS 60; 256 lines; first line begins with a 9.0 ms starting sync, then Green, Blue, sync between Blue and Red, 1.5 ms separator/porch pulses, and a 138.240 ms color scan.",
    "publicTimingProfile": "Public Scottie S1 timing: VIS 60; 256 lines; first line begins with a 9.0 ms starting sync, then Green, Blue, sync between Blue and Red, 1.5 ms separator/porch pulses, and a 138.240 ms color scan.",
    "appTimingProfile": "App RX line fields: sync 9 ms; front porch 0.1 ms; back porch 1.25 ms; separator/blank 1.25 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Scottie family analog SSTV operation and compatibility reference.",
    "strengths": [
      "S1 is a standard-length standard colour Scottie mode: 109.632 s, 320 x 256, RGB.",
      "S1 keeps the classic Scottie G-B-R RGB order, which makes colour order predictable for receivers expecting VIS 60 (0x3C).",
      "S1 has explicit app timing fields: 9 ms sync, 0.1 ms front porch, 1.25 ms back porch, 1.25 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "S1 has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "S1's 109.632 s frame is a balanced choice, but it still needs a stable path for the full 320 x 256 scan.",
      "S1 sends colour sequentially in RGB; sync drift can appear as colour fringing before the whole frame becomes unreadable."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "sstv-handbook",
      "n7cxi-dayton"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x3C and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "scottie-s2",
    "family": "Scottie",
    "name": "Scottie 2",
    "shortName": "S2",
    "supportStatus": "supported",
    "appShortName": "S2",
    "developerOrOrigin": "Eddie Murphy, GM3SBC",
    "approxEra": "classic analog color SSTV era",
    "colorModel": "RGB",
    "componentSequence": "G-B-R",
    "durationSeconds": 71.0945,
    "durationLabel": "71.094 s",
    "appDurationLabel": "71.094 s",
    "columns": 320,
    "displayLines": 256,
    "dataLines": 256,
    "frameLabel": "320 x 256",
    "appFrameLabel": "320 x 256",
    "dataLinesLabel": "256",
    "visCode": {
      "hex": "0x38",
      "decimal": 56
    },
    "standardVisCode": {
      "hex": "0x38",
      "decimal": 56
    },
    "appRawVisCode": {
      "hex": "0xB8",
      "decimal": 184
    },
    "visLabel": "VIS 56 (0x38)",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 9,
    "frontPorchMs": 0.1,
    "backPorchMs": 1.5,
    "separatorMs": 1.5,
    "transmitSyncMs": 9,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 1.1,
    "transmitSeparatorMs": 1.25,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 216.05,
    "timingProfile": "Public Scottie S2 timing: VIS 56; Scottie line structure with 9.0 ms starting sync, sync between Blue and Red, 1.5 ms separator/porch pulses, and 88.064 ms color scans.",
    "publicTimingProfile": "Public Scottie S2 timing: VIS 56; Scottie line structure with 9.0 ms starting sync, sync between Blue and Red, 1.5 ms separator/porch pulses, and 88.064 ms color scans.",
    "appTimingProfile": "App RX line fields: sync 9 ms; front porch 0.1 ms; back porch 1.5 ms; separator/blank 1.5 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Scottie family analog SSTV operation and compatibility reference.",
    "strengths": [
      "S2 is a medium-length standard colour Scottie mode: 71.094 s, 320 x 256, RGB.",
      "S2 keeps the classic Scottie G-B-R RGB order, which makes colour order predictable for receivers expecting VIS 56 (0x38).",
      "S2 has explicit app timing fields: 9 ms sync, 0.1 ms front porch, 1.5 ms back porch, 1.5 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "S2 has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "S2's 71.094 s airtime is practical for casual contacts, while the 320 x 256 frame still gives less margin than the longer high-detail modes.",
      "S2 sends colour sequentially in RGB; sync drift can appear as colour fringing before the whole frame becomes unreadable."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "sstv-handbook",
      "n7cxi-dayton"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0xB8 and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "scottie-s3",
    "family": "Scottie",
    "name": "Scottie 3",
    "shortName": "S3",
    "supportStatus": "reference-only",
    "appShortName": null,
    "developerOrOrigin": "Eddie Murphy, GM3SBC",
    "approxEra": "classic analog color SSTV era",
    "colorModel": "RGB",
    "componentSequence": "G-B-R",
    "durationSeconds": 55,
    "durationLabel": "55 s",
    "appDurationLabel": null,
    "columns": 320,
    "displayLines": 128,
    "dataLines": 128,
    "frameLabel": "320 x 128",
    "appFrameLabel": null,
    "dataLinesLabel": "128",
    "visCode": {
      "hex": "0x34",
      "decimal": 52
    },
    "standardVisCode": {
      "hex": "0x34",
      "decimal": 52
    },
    "appRawVisCode": null,
    "visLabel": "VIS 52",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 140.115,
    "timingProfile": "Mode-list row gives 55 s total duration, 128 scan lines, 320 columns, and 140.115 lpm; line-level porch timing is not part of this catalog row.",
    "publicTimingProfile": "Mode-list row gives 55 s total duration, 128 scan lines, 320 columns, and 140.115 lpm; line-level porch timing is not part of this catalog row.",
    "appTimingProfile": null,
    "specStatus": "Reference timing row from the OK2MNM SSTV mode-list PDF.",
    "commonUse": "S3 is a reference-only analog SSTV row with 55 s duration, 320 x 128 raster, RGB color model, and VIS 52.",
    "strengths": [
      "S3 has a concrete catalogue row: 55 s, 320 x 128, RGB, VIS 52.",
      "S3's G-B-R component order and 140.115 lpm line rate make it useful for comparing airtime, raster, and colour structure against related modes."
    ],
    "tradeoffs": [
      "S3 is not app-supported yet, so the 55 s / 320 x 128 row should be treated as reference data rather than a verified transmit preset.",
      "S3 still needs implementation-grade porch, sync, and pixel timing before an app-generated WAV/FLAC sample can be published with the same confidence as supported modes."
    ],
    "sourceRefs": [
      "sstv-handbook"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "OK2MNM SSTV Handbook chapter 5 lists S3 as RGB, VIS 52, 55 s, 128 lines, 320 columns, 140.115 lpm. Less common Scottie family variant beyond S1, S2, and DX."
  },
  {
    "id": "scottie-s4",
    "family": "Scottie",
    "name": "Scottie 4",
    "shortName": "S4",
    "supportStatus": "reference-only",
    "appShortName": null,
    "developerOrOrigin": "Eddie Murphy, GM3SBC",
    "approxEra": "classic analog color SSTV era",
    "colorModel": "RGB",
    "componentSequence": "G-B-R",
    "durationSeconds": 36,
    "durationLabel": "36 s",
    "appDurationLabel": null,
    "columns": 320,
    "displayLines": 128,
    "dataLines": 128,
    "frameLabel": "320 x 128",
    "appFrameLabel": null,
    "dataLinesLabel": "128",
    "visCode": {
      "hex": "0x30",
      "decimal": 48
    },
    "standardVisCode": {
      "hex": "0x30",
      "decimal": 48
    },
    "appRawVisCode": null,
    "visLabel": "VIS 48",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 216.067,
    "timingProfile": "Mode-list row gives 36 s total duration, 128 scan lines, 320 columns, and 216.067 lpm; line-level porch timing is not part of this catalog row.",
    "publicTimingProfile": "Mode-list row gives 36 s total duration, 128 scan lines, 320 columns, and 216.067 lpm; line-level porch timing is not part of this catalog row.",
    "appTimingProfile": null,
    "specStatus": "Reference timing row from the OK2MNM SSTV mode-list PDF.",
    "commonUse": "S4 is a reference-only analog SSTV row with 36 s duration, 320 x 128 raster, RGB color model, and VIS 48.",
    "strengths": [
      "S4 has a concrete catalogue row: 36 s, 320 x 128, RGB, VIS 48.",
      "S4's G-B-R component order and 216.067 lpm line rate make it useful for comparing airtime, raster, and colour structure against related modes."
    ],
    "tradeoffs": [
      "S4 is not app-supported yet, so the 36 s / 320 x 128 row should be treated as reference data rather than a verified transmit preset.",
      "S4 still needs implementation-grade porch, sync, and pixel timing before an app-generated WAV/FLAC sample can be published with the same confidence as supported modes."
    ],
    "sourceRefs": [
      "sstv-handbook"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "OK2MNM SSTV Handbook chapter 5 lists S4 as RGB, VIS 48, 36 s, 128 lines, 320 columns, 216.067 lpm. Less common Scottie family variant beyond S1, S2, and DX."
  },
  {
    "id": "scottie-sdx",
    "family": "Scottie",
    "name": "Scottie DX",
    "shortName": "SDX",
    "supportStatus": "supported",
    "appShortName": "SDX",
    "developerOrOrigin": "Eddie Murphy, GM3SBC",
    "approxEra": "classic analog color SSTV era",
    "colorModel": "RGB",
    "componentSequence": "G-B-R",
    "durationSeconds": 268.8938,
    "durationLabel": "268.894 s",
    "appDurationLabel": "268.894 s",
    "columns": 320,
    "displayLines": 256,
    "dataLines": 256,
    "frameLabel": "320 x 256",
    "appFrameLabel": "320 x 256",
    "dataLinesLabel": "256",
    "visCode": {
      "hex": "0x4C",
      "decimal": 76
    },
    "standardVisCode": {
      "hex": "0x4C",
      "decimal": 76
    },
    "appRawVisCode": {
      "hex": "0xCC",
      "decimal": 204
    },
    "visLabel": "VIS 76 (0x4C)",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 9,
    "frontPorchMs": 0,
    "backPorchMs": 0,
    "separatorMs": 1,
    "transmitSyncMs": 9,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 0,
    "transmitSeparatorMs": 1,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 57.123,
    "timingProfile": "Public Scottie DX timing: VIS 76; Scottie line structure with 9.0 ms starting sync, sync between Blue and Red, 1.5 ms separator/porch pulses, and 345.600 ms color scans.",
    "publicTimingProfile": "Public Scottie DX timing: VIS 76; Scottie line structure with 9.0 ms starting sync, sync between Blue and Red, 1.5 ms separator/porch pulses, and 345.600 ms color scans.",
    "appTimingProfile": "App RX line fields: sync 9 ms; front porch 0 ms; back porch 0 ms; separator/blank 1 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Scottie family analog SSTV operation and compatibility reference.",
    "strengths": [
      "SDX is a extended standard colour Scottie mode: 268.894 s, 320 x 256, RGB.",
      "SDX keeps the classic Scottie G-B-R RGB order, which makes colour order predictable for receivers expecting VIS 76 (0x4C).",
      "SDX has explicit app timing fields: 9 ms sync, 0 ms front porch, 0 ms back porch, 1 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "SDX has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "SDX's 268.894 s transfer can carry more picture detail, but it occupies the channel longer and is less forgiving of fades across the 320 x 256 frame.",
      "SDX sends colour sequentially in RGB; sync drift can appear as colour fringing before the whole frame becomes unreadable."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "sstv-handbook",
      "n7cxi-dayton"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0xCC and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "fax-vester-color",
    "family": "Vester",
    "name": "Vester Color FAX",
    "shortName": "Vester Color FAX",
    "supportStatus": "reference-only",
    "appShortName": null,
    "developerOrOrigin": "Vester",
    "approxEra": "analog SSTV era",
    "colorModel": "RGB",
    "componentSequence": "R-G-B",
    "durationSeconds": 414,
    "durationLabel": "414 s",
    "appDurationLabel": null,
    "columns": 512,
    "displayLines": 480,
    "dataLines": 480,
    "frameLabel": "512 x 480",
    "appFrameLabel": null,
    "dataLinesLabel": "480",
    "visCode": {
      "hex": "0x56",
      "decimal": 86
    },
    "standardVisCode": {
      "hex": "0x56",
      "decimal": 86
    },
    "appRawVisCode": null,
    "visLabel": "VIS 86",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 74.832,
    "timingProfile": "Mode-list row gives 414 s total duration, 480 scan lines, 512 columns, and 74.832 lpm; line-level porch timing is not part of this catalog row.",
    "publicTimingProfile": "Mode-list row gives 414 s total duration, 480 scan lines, 512 columns, and 74.832 lpm; line-level porch timing is not part of this catalog row.",
    "appTimingProfile": null,
    "specStatus": "Reference timing row from the OK2MNM SSTV mode-list PDF.",
    "commonUse": "Vester Color FAX is a long 414 s, 512 x 480 RGB facsimile-style row, kept separate from short SSTV modes because of its much longer airtime.",
    "strengths": [
      "Vester Color FAX has a concrete catalogue row: 414 s, 512 x 480, RGB, VIS 86.",
      "Vester Color FAX's R-G-B component order and 74.832 lpm line rate make it useful for comparing airtime, raster, and colour structure against related modes."
    ],
    "tradeoffs": [
      "Vester Color FAX is not app-supported yet, so the 414 s / 512 x 480 row should be treated as reference data rather than a verified transmit preset.",
      "Vester Color FAX still needs implementation-grade porch, sync, and pixel timing before an app-generated WAV/FLAC sample can be published with the same confidence as supported modes."
    ],
    "sourceRefs": [
      "sstv-handbook"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "OK2MNM SSTV Handbook chapter 5 lists Vester Color FAX as RGB, VIS 86, 414 s, 480 lines, 512 columns, 74.832 lpm. Vester color facsimile mode listed in analog SSTV mode taxonomies."
  },
  {
    "id": "wraase-sc1-24",
    "family": "Wraase",
    "name": "Wraase SC-1 24",
    "shortName": "SC1-24",
    "supportStatus": "reference-only",
    "appShortName": null,
    "developerOrOrigin": "Wraase electronic",
    "approxEra": "Wraase SC hardware/software era",
    "colorModel": "RGB",
    "componentSequence": "R-G-B",
    "durationSeconds": 24,
    "durationLabel": "24 s",
    "appDurationLabel": null,
    "columns": 128,
    "displayLines": 128,
    "dataLines": 128,
    "frameLabel": "128 x 128",
    "appFrameLabel": null,
    "dataLinesLabel": "128",
    "visCode": {
      "hex": "0x10",
      "decimal": 16
    },
    "standardVisCode": {
      "hex": "0x10",
      "decimal": 16
    },
    "appRawVisCode": null,
    "visLabel": "VIS 16",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 900,
    "timingProfile": "Mode-list row gives 24 s total duration, 128 scan lines, 128 columns, and 900 lpm; line-level porch timing is not part of this catalog row.",
    "publicTimingProfile": "Mode-list row gives 24 s total duration, 128 scan lines, 128 columns, and 900 lpm; line-level porch timing is not part of this catalog row.",
    "appTimingProfile": null,
    "specStatus": "Reference timing row from the OK2MNM SSTV mode-list PDF.",
    "commonUse": "SC1-24 is a reference-only analog SSTV row with 24 s duration, 128 x 128 raster, RGB color model, and VIS 16.",
    "strengths": [
      "SC1-24 has a concrete catalogue row: 24 s, 128 x 128, RGB, VIS 16.",
      "SC1-24's R-G-B component order and 900 lpm line rate make it useful for comparing airtime, raster, and colour structure against related modes."
    ],
    "tradeoffs": [
      "SC1-24 is not app-supported yet, so the 24 s / 128 x 128 row should be treated as reference data rather than a verified transmit preset.",
      "SC1-24 still needs implementation-grade porch, sync, and pixel timing before an app-generated WAV/FLAC sample can be published with the same confidence as supported modes."
    ],
    "sourceRefs": [
      "sstv-handbook"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "OK2MNM SSTV Handbook chapter 5 lists SC1-24 as RGB, VIS 16, 24 s, 128 lines, 128 columns, 900 lpm. SC-1 reference variant; source tables should be checked for exact porch timing."
  },
  {
    "id": "wraase-sc1-48",
    "family": "Wraase",
    "name": "Wraase SC-1 48",
    "shortName": "SC1-48",
    "supportStatus": "reference-only",
    "appShortName": null,
    "developerOrOrigin": "Wraase electronic",
    "approxEra": "Wraase SC hardware/software era",
    "colorModel": "RGB",
    "componentSequence": "R-G-B",
    "durationSeconds": 48,
    "durationLabel": "48 s",
    "appDurationLabel": null,
    "columns": 256,
    "displayLines": 128,
    "dataLines": 128,
    "frameLabel": "256 x 128",
    "appFrameLabel": null,
    "dataLinesLabel": "128",
    "visCode": {
      "hex": "0x14",
      "decimal": 20
    },
    "standardVisCode": {
      "hex": "0x14",
      "decimal": 20
    },
    "appRawVisCode": null,
    "visLabel": "VIS 20",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 489.102,
    "timingProfile": "Mode-list row gives 48 s total duration, 128 scan lines, 256 columns, and 489.102 lpm; line-level porch timing is not part of this catalog row.",
    "publicTimingProfile": "Mode-list row gives 48 s total duration, 128 scan lines, 256 columns, and 489.102 lpm; line-level porch timing is not part of this catalog row.",
    "appTimingProfile": null,
    "specStatus": "Reference timing row from the OK2MNM SSTV mode-list PDF.",
    "commonUse": "SC1-48 is a reference-only analog SSTV row with 48 s duration, 256 x 128 raster, RGB color model, and VIS 20.",
    "strengths": [
      "SC1-48 has a concrete catalogue row: 48 s, 256 x 128, RGB, VIS 20.",
      "SC1-48's R-G-B component order and 489.102 lpm line rate make it useful for comparing airtime, raster, and colour structure against related modes."
    ],
    "tradeoffs": [
      "SC1-48 is not app-supported yet, so the 48 s / 256 x 128 row should be treated as reference data rather than a verified transmit preset.",
      "SC1-48 still needs implementation-grade porch, sync, and pixel timing before an app-generated WAV/FLAC sample can be published with the same confidence as supported modes."
    ],
    "sourceRefs": [
      "sstv-handbook"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "OK2MNM SSTV Handbook chapter 5 lists SC1-48 as RGB, VIS 20, 48 s, 128 lines, 256 columns, 489.102 lpm. SC-1 reference variant; source tables should be checked for exact porch timing."
  },
  {
    "id": "wraase-sc1-48q",
    "family": "Wraase",
    "name": "Wraase SC-1 48Q",
    "shortName": "SC1-48Q",
    "supportStatus": "reference-only",
    "appShortName": null,
    "developerOrOrigin": "Wraase electronic",
    "approxEra": "Wraase SC hardware/software era",
    "colorModel": "RGB",
    "componentSequence": "R-G-B",
    "durationSeconds": 48,
    "durationLabel": "48 s",
    "appDurationLabel": null,
    "columns": 128,
    "displayLines": 256,
    "dataLines": 256,
    "frameLabel": "128 x 256",
    "appFrameLabel": null,
    "dataLinesLabel": "256",
    "visCode": {
      "hex": "0x18",
      "decimal": 24
    },
    "standardVisCode": {
      "hex": "0x18",
      "decimal": 24
    },
    "appRawVisCode": null,
    "visLabel": "VIS 24",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 900,
    "timingProfile": "Mode-list row gives 48 s total duration, 256 scan lines, 128 columns, and 900 lpm; line-level porch timing is not part of this catalog row.",
    "publicTimingProfile": "Mode-list row gives 48 s total duration, 256 scan lines, 128 columns, and 900 lpm; line-level porch timing is not part of this catalog row.",
    "appTimingProfile": null,
    "specStatus": "Reference timing row from the OK2MNM SSTV mode-list PDF.",
    "commonUse": "SC1-48Q is a reference-only analog SSTV row with 48 s duration, 128 x 256 raster, RGB color model, and VIS 24.",
    "strengths": [
      "SC1-48Q has a concrete catalogue row: 48 s, 128 x 256, RGB, VIS 24.",
      "SC1-48Q's R-G-B component order and 900 lpm line rate make it useful for comparing airtime, raster, and colour structure against related modes."
    ],
    "tradeoffs": [
      "SC1-48Q is not app-supported yet, so the 48 s / 128 x 256 row should be treated as reference data rather than a verified transmit preset.",
      "SC1-48Q still needs implementation-grade porch, sync, and pixel timing before an app-generated WAV/FLAC sample can be published with the same confidence as supported modes."
    ],
    "sourceRefs": [
      "sstv-handbook"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "OK2MNM SSTV Handbook chapter 5 lists SC1-48Q as RGB, VIS 24, 48 s, 256 lines, 128 columns, 900 lpm. Quarter-frame or quality-oriented SC-1 variant depending on source nomenclature."
  },
  {
    "id": "wraase-sc1-96",
    "family": "Wraase",
    "name": "Wraase SC-1 96",
    "shortName": "SC1-96",
    "supportStatus": "reference-only",
    "appShortName": null,
    "developerOrOrigin": "Wraase electronic",
    "approxEra": "Wraase SC hardware/software era",
    "colorModel": "RGB",
    "componentSequence": "R-G-B",
    "durationSeconds": 96,
    "durationLabel": "96 s",
    "appDurationLabel": null,
    "columns": 256,
    "displayLines": 256,
    "dataLines": 256,
    "frameLabel": "256 x 256",
    "appFrameLabel": null,
    "dataLinesLabel": "256",
    "visCode": {
      "hex": "0x1C",
      "decimal": 28
    },
    "standardVisCode": {
      "hex": "0x1C",
      "decimal": 28
    },
    "appRawVisCode": null,
    "visLabel": "VIS 28",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 500,
    "timingProfile": "Mode-list row gives 96 s total duration, 256 scan lines, 256 columns, and 500 lpm; line-level porch timing is not part of this catalog row.",
    "publicTimingProfile": "Mode-list row gives 96 s total duration, 256 scan lines, 256 columns, and 500 lpm; line-level porch timing is not part of this catalog row.",
    "appTimingProfile": null,
    "specStatus": "Reference timing row from the OK2MNM SSTV mode-list PDF.",
    "commonUse": "SC1-96 is a reference-only analog SSTV row with 96 s duration, 256 x 256 raster, RGB color model, and VIS 28.",
    "strengths": [
      "SC1-96 has a concrete catalogue row: 96 s, 256 x 256, RGB, VIS 28.",
      "SC1-96's R-G-B component order and 500 lpm line rate make it useful for comparing airtime, raster, and colour structure against related modes."
    ],
    "tradeoffs": [
      "SC1-96 is not app-supported yet, so the 96 s / 256 x 256 row should be treated as reference data rather than a verified transmit preset.",
      "SC1-96 still needs implementation-grade porch, sync, and pixel timing before an app-generated WAV/FLAC sample can be published with the same confidence as supported modes."
    ],
    "sourceRefs": [
      "sstv-handbook"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "OK2MNM SSTV Handbook chapter 5 lists SC1-96 as RGB, VIS 28, 96 s, 256 lines, 256 columns, 500 lpm. Longer SC-1 reference variant."
  },
  {
    "id": "wraase-sc1-bw16",
    "family": "Wraase",
    "name": "Wraase SC-1 B/W 16",
    "shortName": "SC1-BW16",
    "supportStatus": "reference-only",
    "appShortName": null,
    "developerOrOrigin": "Wraase electronic",
    "approxEra": "Wraase SC hardware/software era",
    "colorModel": "BW",
    "componentSequence": "Y",
    "durationSeconds": 16,
    "durationLabel": "16 s",
    "appDurationLabel": null,
    "columns": 256,
    "displayLines": 120,
    "dataLines": 120,
    "frameLabel": "256 x 120",
    "appFrameLabel": null,
    "dataLinesLabel": "120",
    "visCode": {
      "hex": "0x15, 0x16, 0x17",
      "decimal": "21, 22, 23"
    },
    "standardVisCode": {
      "hex": "0x15, 0x16, 0x17",
      "decimal": "21, 22, 23"
    },
    "appRawVisCode": null,
    "visLabel": "VIS 21, 22, 23",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 500,
    "timingProfile": "Mode-list row gives 16 s total duration, 120 scan lines, 256 columns, and 500 lpm; line-level porch timing is not part of this catalog row.",
    "publicTimingProfile": "Mode-list row gives 16 s total duration, 120 scan lines, 256 columns, and 500 lpm; line-level porch timing is not part of this catalog row.",
    "appTimingProfile": null,
    "specStatus": "Reference timing row from the OK2MNM SSTV mode-list PDF.",
    "commonUse": "Wraase SC1 B/W 16 doubles the B/W 8 airtime and horizontal columns while keeping the 120-line row.",
    "strengths": [
      "SC1-BW16 has a concrete catalogue row: 16 s, 256 x 120, BW, VIS 21, 22, 23.",
      "SC1-BW16's Y component order and 500 lpm line rate make it useful for comparing airtime, raster, and colour structure against related modes."
    ],
    "tradeoffs": [
      "SC1-BW16 is not app-supported yet, so the 16 s / 256 x 120 row should be treated as reference data rather than a verified transmit preset.",
      "SC1-BW16 still needs implementation-grade porch, sync, and pixel timing before an app-generated WAV/FLAC sample can be published with the same confidence as supported modes."
    ],
    "sourceRefs": [
      "sstv-handbook"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "OK2MNM SSTV Handbook chapter 5 lists SC1-BW16 as BW, VIS 21, 22, 23, 16 s, 120 lines, 256 columns, 500 lpm. OK2MNM lists this under Wraase SC1, not under Vester Color FAX."
  },
  {
    "id": "wraase-sc1-bw24",
    "family": "Wraase",
    "name": "Wraase SC-1 B/W 24",
    "shortName": "SC1-BW24",
    "supportStatus": "reference-only",
    "appShortName": null,
    "developerOrOrigin": "Wraase electronic",
    "approxEra": "Wraase SC hardware/software era",
    "colorModel": "BW",
    "componentSequence": "Y",
    "durationSeconds": 24,
    "durationLabel": "24 s",
    "appDurationLabel": null,
    "columns": 128,
    "displayLines": 256,
    "dataLines": 256,
    "frameLabel": "128 x 256",
    "appFrameLabel": null,
    "dataLinesLabel": "256",
    "visCode": {
      "hex": "0x19, 0x1A, 0x1B",
      "decimal": "25, 26, 27"
    },
    "standardVisCode": {
      "hex": "0x19, 0x1A, 0x1B",
      "decimal": "25, 26, 27"
    },
    "appRawVisCode": null,
    "visLabel": "VIS 25, 26, 27",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 930.52,
    "timingProfile": "Mode-list row gives 24 s total duration, 256 scan lines, 128 columns, and 930.52 lpm; line-level porch timing is not part of this catalog row.",
    "publicTimingProfile": "Mode-list row gives 24 s total duration, 256 scan lines, 128 columns, and 930.52 lpm; line-level porch timing is not part of this catalog row.",
    "appTimingProfile": null,
    "specStatus": "Reference timing row from the OK2MNM SSTV mode-list PDF.",
    "commonUse": "Wraase SC1 B/W 24 is a 24 s monochrome SC1 row with 128 columns and 256 listed lines.",
    "strengths": [
      "SC1-BW24 has a concrete catalogue row: 24 s, 128 x 256, BW, VIS 25, 26, 27.",
      "SC1-BW24's Y component order and 930.52 lpm line rate make it useful for comparing airtime, raster, and colour structure against related modes."
    ],
    "tradeoffs": [
      "SC1-BW24 is not app-supported yet, so the 24 s / 128 x 256 row should be treated as reference data rather than a verified transmit preset.",
      "SC1-BW24 still needs implementation-grade porch, sync, and pixel timing before an app-generated WAV/FLAC sample can be published with the same confidence as supported modes."
    ],
    "sourceRefs": [
      "sstv-handbook"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "OK2MNM SSTV Handbook chapter 5 lists SC1-BW24 as BW, VIS 25, 26, 27, 24 s, 256 lines, 128 columns, 930.52 lpm. OK2MNM lists this under Wraase SC1, not under Vester Color FAX."
  },
  {
    "id": "wraase-sc1-bw32",
    "family": "Wraase",
    "name": "Wraase SC-1 B/W 32",
    "shortName": "SC1-BW32",
    "supportStatus": "reference-only",
    "appShortName": null,
    "developerOrOrigin": "Wraase electronic",
    "approxEra": "Wraase SC hardware/software era",
    "colorModel": "BW",
    "componentSequence": "Y",
    "durationSeconds": 32,
    "durationLabel": "32 s",
    "appDurationLabel": null,
    "columns": 256,
    "displayLines": 240,
    "dataLines": 240,
    "frameLabel": "256 x 240",
    "appFrameLabel": null,
    "dataLinesLabel": "240",
    "visCode": {
      "hex": "0x1D, 0x1E, 0x1F",
      "decimal": "29, 30, 31"
    },
    "standardVisCode": {
      "hex": "0x1D, 0x1E, 0x1F",
      "decimal": "29, 30, 31"
    },
    "appRawVisCode": null,
    "visLabel": "VIS 29, 30, 31",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 500,
    "timingProfile": "Mode-list row gives 32 s total duration, 240 scan lines, 256 columns, and 500 lpm; line-level porch timing is not part of this catalog row.",
    "publicTimingProfile": "Mode-list row gives 32 s total duration, 240 scan lines, 256 columns, and 500 lpm; line-level porch timing is not part of this catalog row.",
    "appTimingProfile": null,
    "specStatus": "Reference timing row from the OK2MNM SSTV mode-list PDF.",
    "commonUse": "Wraase SC1 B/W 32 is the 32 s monochrome SC1 row with 256 columns and 240 listed lines.",
    "strengths": [
      "SC1-BW32 has a concrete catalogue row: 32 s, 256 x 240, BW, VIS 29, 30, 31.",
      "SC1-BW32's Y component order and 500 lpm line rate make it useful for comparing airtime, raster, and colour structure against related modes."
    ],
    "tradeoffs": [
      "SC1-BW32 is not app-supported yet, so the 32 s / 256 x 240 row should be treated as reference data rather than a verified transmit preset.",
      "SC1-BW32 still needs implementation-grade porch, sync, and pixel timing before an app-generated WAV/FLAC sample can be published with the same confidence as supported modes."
    ],
    "sourceRefs": [
      "sstv-handbook"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "OK2MNM SSTV Handbook chapter 5 lists SC1-BW32 as BW, VIS 29, 30, 31, 32 s, 240 lines, 256 columns, 500 lpm. OK2MNM lists this under Wraase SC1, not under Vester Color FAX."
  },
  {
    "id": "wraase-sc1-bw8",
    "family": "Wraase",
    "name": "Wraase SC-1 B/W 8",
    "shortName": "SC1-BW8",
    "supportStatus": "reference-only",
    "appShortName": null,
    "developerOrOrigin": "Wraase electronic",
    "approxEra": "Wraase SC hardware/software era",
    "colorModel": "BW",
    "componentSequence": "Y",
    "durationSeconds": 8,
    "durationLabel": "8 s",
    "appDurationLabel": null,
    "columns": 128,
    "displayLines": 120,
    "dataLines": 120,
    "frameLabel": "128 x 120",
    "appFrameLabel": null,
    "dataLinesLabel": "120",
    "visCode": {
      "hex": "0x11, 0x12, 0x13",
      "decimal": "17, 18, 19"
    },
    "standardVisCode": {
      "hex": "0x11, 0x12, 0x13",
      "decimal": "17, 18, 19"
    },
    "appRawVisCode": null,
    "visLabel": "VIS 17, 18, 19",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 1000,
    "timingProfile": "Mode-list row gives 8 s total duration, 120 scan lines, 128 columns, and 1000 lpm; line-level porch timing is not part of this catalog row.",
    "publicTimingProfile": "Mode-list row gives 8 s total duration, 120 scan lines, 128 columns, and 1000 lpm; line-level porch timing is not part of this catalog row.",
    "appTimingProfile": null,
    "specStatus": "Reference timing row from the OK2MNM SSTV mode-list PDF.",
    "commonUse": "Wraase SC1 B/W 8 is an 8 s monochrome SC1 row with component-specific VIS entries for red, green, and blue component use.",
    "strengths": [
      "SC1-BW8 has a concrete catalogue row: 8 s, 128 x 120, BW, VIS 17, 18, 19.",
      "SC1-BW8's Y component order and 1000 lpm line rate make it useful for comparing airtime, raster, and colour structure against related modes."
    ],
    "tradeoffs": [
      "SC1-BW8 is not app-supported yet, so the 8 s / 128 x 120 row should be treated as reference data rather than a verified transmit preset.",
      "SC1-BW8 still needs implementation-grade porch, sync, and pixel timing before an app-generated WAV/FLAC sample can be published with the same confidence as supported modes."
    ],
    "sourceRefs": [
      "sstv-handbook"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "OK2MNM SSTV Handbook chapter 5 lists SC1-BW8 as BW, VIS 17, 18, 19, 8 s, 120 lines, 128 columns, 1000 lpm. OK2MNM lists this under Wraase SC1, not under Vester Color FAX."
  },
  {
    "id": "wraase-sc2-120",
    "family": "Wraase",
    "name": "Wraase SC2 120",
    "shortName": "SC2-120",
    "supportStatus": "supported",
    "appShortName": "SC2-120",
    "developerOrOrigin": "Wraase electronic",
    "approxEra": "Wraase SC hardware/software era",
    "colorModel": "RGB",
    "componentSequence": "R-G-B",
    "durationSeconds": 121.7425,
    "durationLabel": "121.743 s",
    "appDurationLabel": "121.743 s",
    "columns": 320,
    "displayLines": 256,
    "dataLines": 256,
    "frameLabel": "320 x 256",
    "appFrameLabel": "320 x 256",
    "dataLinesLabel": "256",
    "visCode": {
      "hex": "0x3F",
      "decimal": 63
    },
    "standardVisCode": {
      "hex": "0x3F",
      "decimal": 63
    },
    "appRawVisCode": {
      "hex": "0x3F",
      "decimal": 63
    },
    "visLabel": "VIS 63 (0x3F)",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 5,
    "frontPorchMs": 1,
    "backPorchMs": 1,
    "separatorMs": 1,
    "transmitSyncMs": 5,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 0,
    "transmitSeparatorMs": 0,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 126.168,
    "timingProfile": "App RX line fields: sync 5 ms; front porch 1 ms; back porch 1 ms; separator/blank 1 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "publicTimingProfile": null,
    "appTimingProfile": "App RX line fields: sync 5 ms; front porch 1 ms; back porch 1 ms; separator/blank 1 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public line-level timing was not found in checked sources, so app timing fields are labeled separately.",
    "commonUse": "Wraase family analog SSTV operation and compatibility reference.",
    "strengths": [
      "SC2-120 is a standard-length standard colour Wraase mode: 121.743 s, 320 x 256, RGB.",
      "SC2-120 uses R-G-B RGB component order and VIS 63 (0x3F), giving receivers enough mode identity to separate it from neighbouring Wraase rows.",
      "SC2-120 has explicit app timing fields: 5 ms sync, 1 ms front porch, 1 ms back porch, 1 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "SC2-120 is documented from the app timing row; the line fields are explicit even where checked public sources do not publish every porch value."
    ],
    "tradeoffs": [
      "SC2-120's 121.743 s frame is a balanced choice, but it still needs a stable path for the full 320 x 256 scan.",
      "SC2-120 sends colour sequentially in RGB; sync drift can appear as colour fringing before the whole frame becomes unreadable."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "sstv-handbook"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0x3F and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "wraase-sc2-180",
    "family": "Wraase",
    "name": "Wraase SC2 180",
    "shortName": "SC2-180",
    "supportStatus": "supported",
    "appShortName": "SC2-180",
    "developerOrOrigin": "Wraase electronic",
    "approxEra": "Wraase SC hardware/software era",
    "colorModel": "RGB",
    "componentSequence": "R-G-B",
    "durationSeconds": 182.0385,
    "durationLabel": "182.038 s",
    "appDurationLabel": "182.038 s",
    "columns": 320,
    "displayLines": 256,
    "dataLines": 256,
    "frameLabel": "320 x 256",
    "appFrameLabel": "320 x 256",
    "dataLinesLabel": "256",
    "visCode": {
      "hex": "0x37",
      "decimal": 55
    },
    "standardVisCode": {
      "hex": "0x37",
      "decimal": 55
    },
    "appRawVisCode": {
      "hex": "0xB7",
      "decimal": 183
    },
    "visLabel": "VIS 55 (0x37)",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 5,
    "frontPorchMs": 1,
    "backPorchMs": 1,
    "separatorMs": 1,
    "transmitSyncMs": 5,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 0,
    "transmitSeparatorMs": 0,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 84.378,
    "timingProfile": "Public Wraase SC2-180 timing: VIS 55; 256 lines; 5.5225 ms sync, 0.500 ms porch, then Red, Green, and Blue scans.",
    "publicTimingProfile": "Public Wraase SC2-180 timing: VIS 55; 256 lines; 5.5225 ms sync, 0.500 ms porch, then Red, Green, and Blue scans.",
    "appTimingProfile": "App RX line fields: sync 5 ms; front porch 1 ms; back porch 1 ms; separator/blank 1 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public VIS and timing summary are separated from the app raw timing fields.",
    "commonUse": "Wraase family analog SSTV operation and compatibility reference.",
    "strengths": [
      "SC2-180 is a long-form standard colour Wraase mode: 182.038 s, 320 x 256, RGB.",
      "SC2-180 uses R-G-B RGB component order and VIS 55 (0x37), giving receivers enough mode identity to separate it from neighbouring Wraase rows.",
      "SC2-180 has explicit app timing fields: 5 ms sync, 1 ms front porch, 1 ms back porch, 1 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "SC2-180 has a checked public timing summary plus app timing fields, so the public spec and implementation timing can be compared line by line."
    ],
    "tradeoffs": [
      "SC2-180's 182.038 s transfer can carry more picture detail, but it occupies the channel longer and is less forgiving of fades across the 320 x 256 frame.",
      "SC2-180 sends colour sequentially in RGB; sync drift can appear as colour fringing before the whole frame becomes unreadable."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "sstv-handbook",
      "n7cxi-dayton"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0xB7 and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  },
  {
    "id": "wraase-sc2-30",
    "family": "Wraase",
    "name": "Wraase SC-2 30",
    "shortName": "SC2-30",
    "supportStatus": "reference-only",
    "appShortName": null,
    "developerOrOrigin": "Wraase electronic",
    "approxEra": "Wraase SC hardware/software era",
    "colorModel": "RGB",
    "componentSequence": "R-G-B",
    "durationSeconds": 30,
    "durationLabel": "30 s",
    "appDurationLabel": null,
    "columns": 320,
    "displayLines": 128,
    "dataLines": 128,
    "frameLabel": "320 x 128",
    "appFrameLabel": null,
    "dataLinesLabel": "128",
    "visCode": {
      "hex": "0x33",
      "decimal": 51
    },
    "standardVisCode": {
      "hex": "0x33",
      "decimal": 51
    },
    "appRawVisCode": null,
    "visLabel": "VIS 51",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": null,
    "frontPorchMs": null,
    "backPorchMs": null,
    "separatorMs": null,
    "transmitSyncMs": null,
    "transmitFrontPorchMs": null,
    "transmitBackPorchMs": null,
    "transmitSeparatorMs": null,
    "pixelDurationMs": null,
    "componentDurationsMs": [],
    "subcarrierHz": null,
    "deviationHz": null,
    "videoToneRangeHz": null,
    "lineRateLpm": 249.595,
    "timingProfile": "Mode-list row gives 30 s total duration, 128 scan lines, 320 columns, and 249.595 lpm; line-level porch timing is not part of this catalog row.",
    "publicTimingProfile": "Mode-list row gives 30 s total duration, 128 scan lines, 320 columns, and 249.595 lpm; line-level porch timing is not part of this catalog row.",
    "appTimingProfile": null,
    "specStatus": "Reference timing row from the OK2MNM SSTV mode-list PDF.",
    "commonUse": "SC2-30 is a reference-only analog SSTV row with 30 s duration, 320 x 128 raster, RGB color model, and VIS 51.",
    "strengths": [
      "SC2-30 has a concrete catalogue row: 30 s, 320 x 128, RGB, VIS 51.",
      "SC2-30's R-G-B component order and 249.595 lpm line rate make it useful for comparing airtime, raster, and colour structure against related modes."
    ],
    "tradeoffs": [
      "SC2-30 is not app-supported yet, so the 30 s / 320 x 128 row should be treated as reference data rather than a verified transmit preset.",
      "SC2-30 still needs implementation-grade porch, sync, and pixel timing before an app-generated WAV/FLAC sample can be published with the same confidence as supported modes."
    ],
    "sourceRefs": [
      "sstv-handbook"
    ],
    "verificationStatus": "single-source",
    "sourceNotes": "OK2MNM SSTV Handbook chapter 5 lists SC2-30 as RGB, VIS 51, 30 s, 128 lines, 320 columns, 249.595 lpm. SC-2 mode shorter than app-supported SC2-60/120/180."
  },
  {
    "id": "wraase-sc2-60",
    "family": "Wraase",
    "name": "Wraase SC2 60",
    "shortName": "SC2-60",
    "supportStatus": "supported",
    "appShortName": "SC2-60",
    "developerOrOrigin": "Wraase electronic",
    "approxEra": "Wraase SC hardware/software era",
    "colorModel": "RGB",
    "componentSequence": "R-G-B",
    "durationSeconds": 61.5435,
    "durationLabel": "61.544 s",
    "appDurationLabel": "61.544 s",
    "columns": 320,
    "displayLines": 256,
    "dataLines": 256,
    "frameLabel": "320 x 256",
    "appFrameLabel": "320 x 256",
    "dataLinesLabel": "256",
    "visCode": {
      "hex": "0x3B",
      "decimal": 59
    },
    "standardVisCode": {
      "hex": "0x3B",
      "decimal": 59
    },
    "appRawVisCode": {
      "hex": "0xBB",
      "decimal": 187
    },
    "visLabel": "VIS 59 (0x3B)",
    "extendedVis": false,
    "nvisCode": null,
    "nvisLabel": null,
    "syncMs": 5,
    "frontPorchMs": 1,
    "backPorchMs": 1,
    "separatorMs": 1,
    "transmitSyncMs": 5,
    "transmitFrontPorchMs": 0,
    "transmitBackPorchMs": 0,
    "transmitSeparatorMs": 0,
    "pixelDurationMs": 0,
    "componentDurationsMs": [],
    "subcarrierHz": 1900,
    "deviationHz": 400,
    "videoToneRangeHz": [
      1500,
      2300
    ],
    "lineRateLpm": 249.58,
    "timingProfile": "App RX line fields: sync 5 ms; front porch 1 ms; back porch 1 ms; separator/blank 1 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "publicTimingProfile": null,
    "appTimingProfile": "App RX line fields: sync 5 ms; front porch 1 ms; back porch 1 ms; separator/blank 1 ms; video tones 1500-2300 Hz around 1900 Hz.",
    "specStatus": "Supported in app; public line-level timing was not found in checked sources, so app timing fields are labeled separately.",
    "commonUse": "Wraase family analog SSTV operation and compatibility reference.",
    "strengths": [
      "SC2-60 is a medium-length standard colour Wraase mode: 61.544 s, 320 x 256, RGB.",
      "SC2-60 uses R-G-B RGB component order and VIS 59 (0x3B), giving receivers enough mode identity to separate it from neighbouring Wraase rows.",
      "SC2-60 has explicit app timing fields: 5 ms sync, 1 ms front porch, 1 ms back porch, 1 ms separator/blank, and 1500-2300 Hz around 1900 Hz video tones.",
      "SC2-60 is documented from the app timing row; the line fields are explicit even where checked public sources do not publish every porch value."
    ],
    "tradeoffs": [
      "SC2-60's 61.544 s airtime is practical for casual contacts, while the 320 x 256 frame still gives less margin than the longer high-detail modes.",
      "SC2-60 sends colour sequentially in RGB; sync drift can appear as colour fringing before the whole frame becomes unreadable."
    ],
    "sourceRefs": [
      "app-sstvtable",
      "sstv-handbook"
    ],
    "verificationStatus": "cross-checked",
    "sourceNotes": "Public VIS/timing labels are normalized from checked SSTV references where available. App raw VIS 0xBB and app timing fields are generated from sstv/sstv/sstv/sstvparam.swift during the website build."
  }
]
