Sewer Signal

Preset format

A preset is JSON describing an NTSC/VHS transformation. It does not include UI state, file paths, or React internals. Same source, settings, and seed should match wherever the engine can run.

Envelope

Versioning

Unknown future schema versions are rejected. Missing keys in an ntsc-rs v1 file fall back to engine defaults. Extra keys are ignored. A bump to schemaVersion 2 would be additive only if old files still load.

ntsc-rs files

Flat JSON with version: 1 and snake_case keys such as tracking_noise_height is accepted as an ntsc-rs native preset. Export from this app is the nested Sewer Signal document, not a claim of byte-identical ntsc-rs GUI files.

Example

{
  "schemaVersion": 1,
  "tool": "ntsc-vhs",
  "name": "Studio master",
  "engine": "ntsc-rs",
  "settings": {
    "randomSeed": 0,
    "useField": "interleavedUpperFirst",
    "filterType": "butterworth",
    "inputLumaFilter": "notch",
    "chromaLowpassIn": "full",
    "compositeSharpening": 1,
    "compositeNoise": {
      "enabled": true,
      "intensity": 0.05,
      "frequency": 0.5,
      "detail": 1
    },
    "snow": {
      "intensity": 0.00025,
      "anisotropy": 0.5
    },
    "scanlinePhaseShift": "deg180",
    "scanlinePhaseShiftOffset": 0,
    "chromaDemodulation": "notch",
    "lumaSmear": 0.5,
    "headSwitching": {
      "enabled": true,
      "height": 8,
      "offset": 3,
      "horizontalShift": 72,
      "startMidLine": {
        "enabled": true,
        "position": 0.95,
        "jitter": 0.03
      }
    },
    "trackingNoise": {
      "enabled": true,
      "height": 12,
      "waveIntensity": 15,
      "snowIntensity": 0.025,
      "snowAnisotropy": 0.25,
      "noiseIntensity": 0.25
    },
    "ringing": {
      "enabled": true,
      "frequency": 0.45,
      "power": 4,
      "scale": 4
    },
    "lumaNoise": {
      "enabled": true,
      "intensity": 0.01,
      "frequency": 0.5,
      "detail": 1
    },
    "chromaNoise": {
      "enabled": true,
      "intensity": 0.1,
      "frequency": 0.05,
      "detail": 2
    },
    "chromaPhaseError": 0,
    "chromaPhaseNoise": 0.001,
    "chromaDelay": {
      "horizontal": 0,
      "vertical": 0
    },
    "vhs": {
      "enabled": true,
      "tapeSpeed": "lp",
      "chromaLoss": 0.000025,
      "verticalChromaBlend": true,
      "sharpen": {
        "enabled": true,
        "intensity": 0.25,
        "frequency": 1
      },
      "edgeWave": {
        "enabled": true,
        "intensity": 0.5,
        "speed": 4,
        "frequency": 0.05,
        "detail": 2
      }
    },
    "chromaLowpassOut": "full",
    "scale": {
      "enabled": true,
      "horizontal": 1,
      "vertical": 1,
      "scaleWithVideoSize": false
    }
  }
}

Import / export

On the VHS tool: Export JSON / Import JSON. Invalid JSON, wrong tool IDs, and unknown versions fail with a readable error. ntscQT presets are refused.