Parameter reference for the $V_{SVD}$ Vector Matrix — a structured, machine-readable encoding of subjective visual disturbance symptom states. Each parameter maps 1-to-1 to a field in the Visual Snow Simulator application's SymptomLog data class.
This is an open specification, not a formal ISO standard. It is structured to ISO/IEC drafting conventions so that it can serve as a credible input to a future standardization process if sufficient clinical adoption occurs. See the full specification for the standardization pathway discussion.
Code-leading policy: The Kotlin source is the ground truth. This page is derived from it. · JSON schema: svd-v1.json · Source: SymptomLog.kt, Configs.kt, Enums.kt, Models.kt
$$V_{SVD} = [V_{ST},\ V_{CL},\ V_{FL},\ V_{BF},\ V_{LA},\ V_{GE},\ V_{DC},\ V_{DS},\ V_{TI},\ V_{CVD},\ V_{VF}]$$
Two identifiers per parameter: The Code column (e.g., ST-01) is a stable, language-neutral label for use in research papers and clinical communication — it never changes even if the app is refactored. The JSON field column (e.g., snowIntensity) is the actual field name used in JSON serialization and the app's database. When writing a paper, cite the code. When writing code or JSON, use the JSON field name.
Systems wishing to align with this specification should:
[min, max] range at the point of input.snowIntensity) as JSON keys when serializing session data — these match the app's SymptomLog schema exactly. The ISO-style codes (e.g., ST-01) are stable documentation labels for use in research papers and cross-system communication, not serialization keys.Partial implementation is supported: a system may implement a subset of the eleven domains, as long as it declares which domains are covered. This specification has no formal certification process — alignment is voluntary.
The Visual Snow Simulator operates on a Zero-Knowledge Architecture.
Persistent visual noise across the entire visual field — the defining symptom of Visual Snow Syndrome (Schankin et al., 2014). Phenomenologically analogous to noise on an untuned analogue television.
| Code | JSON field | Type | Default | Range / Values | Clinical Rationale |
|---|---|---|---|---|---|
| ST-01 | snowIntensity | Float32 | 0.5 | [0.0, 1.0] | Primary severity proxy for baseline symptom burden. |
| ST-02 | snowAlpha | Float32 | 0.6 | [0.0, 1.0] | Perceived intrusiveness independently of density. |
| ST-03 | snowGrainSize | Float32 | 1.0 | [0.5, 30.0] | Differentiates fine TV-like shimmer from coarser noise. |
| ST-04 | snowSpeed | Float32 | 1.0 | [0.1, 3.0] | Temporal flicker dynamics independently of brightness. |
| ST-05 | snowPattern | Enum | "Random" | Random, Circular, Brownian, Linear | Motion model; supports phenotype matching across sessions. |
| ST-06 | snowColorMode | Enum | "White" | White, Tinted, Rainbow | Chromatic static phenotype encoding. |
| ST-07 | snowColorArgb | ARGB Long | 0xFFFFFFFF | any ARGB | Active when ST-06 = Tinted. Exact tint color of static grain. |
Perceived reduction of luminance dynamic range, reported as washed-out or low-contrast vision. Related to WHO ICF code b21022 (Contrast sensitivity).
| Code | JSON field | Type | Default | Range / Values | Clinical Rationale |
|---|---|---|---|---|---|
| CL-01 | contrastLossEnabled | Boolean | false | false, true | Explicit domain flag; avoids confounding with static intensity. |
| CL-02 | contrastLossStrength | Float32 | 0.5 | [0.0, 1.0] | Quantifies functional contrast reduction; 1.0 = fully desaturated. |
Distinct opacities within the vitreous or perceptual field. In SVD context includes both true vitreous floaters and cortical/entoptic equivalents. Tracked separately from static because floater burden follows different trigger patterns.
| Code | JSON field | Type | Default | Range / Values | Clinical Rationale |
|---|---|---|---|---|---|
| FL-01 | floatersCount > 0 | Boolean | false | false, true | Derived: active when count > 0. Explicit separation from static noise. |
| FL-02 | floatersCount | Integer | 0 | [0, 50] | Visual clutter load; supports comparison across trigger conditions. |
| FL-03 | floaterMinSize | Float32 | 0.01 | [0.005, 0.1] | Fine debris vs. large-spot distinction. |
| FL-04 | floaterMaxSize | Float32 | 0.05 | [0.01, 0.2] | Large opacities that disproportionately affect reading and focus. |
| FL-05 | floaterAlpha | Float32 | 0.25 | [0.0, 1.0] | Opacity affects perceived disability independently of count. |
| FL-06 | floaterGyroSensitivity | Float32 | 0.002 | [0.0, 0.02] | Motion-coupled drift; patients reporting stronger movement when turning. |
| FL-07 | floaterBrownian | Float32 | 0.0003 | [0.0, 0.002] | Spontaneous micro-jitter for physiologic realism. |
| FL-08 | floaterDamping | Float32 | 0.95 | [0.5, 0.999] | Motion inertia; controls how quickly floaters settle. |
| FL-09 | floaterColorArgb | ARGB Long | 0xFF000000 | any ARGB | Perceived floater tint; aids qualitative clinician communication. |
| FL-10 | floaterShape | Enum | "Circle" | Circle, Worm, Cluster | Morphology classification for longitudinal pattern matching. |
Scheerer's phenomenon — hyper-aware visualization of leukocytes moving through retinal capillaries. Perceived as small bright dots traversing the visual field, most prominent on blue sky or uniform bright backgrounds.
| Code | JSON field | Type | Default | Range / Values | Clinical Rationale |
|---|---|---|---|---|---|
| BF-01 | blueFieldEnabled | Boolean | false | false, true | Separate domain; entoptic complaints track different triggers than static. |
| BF-02 | blueFieldCount | Integer | 120 | [20, 400] | Symptom density; reflects response to lighting context. |
| BF-03 | blueFieldAlpha | Float32 | 0.5 | [0.0, 1.0] | Perceived prominence independent of count. |
| BF-04 | blueFieldSpeed | Float32 | 1.0 | [0.1, 5.0] | Differentiates fast darting from slow drift reports. |
| BF-05 | blueFieldSize | Float32 | 1.0 | [0.5, 5.0] | Particle size multiplier; subtle vs. overt entoptic sensation. |
| BF-06 | blueFieldShape | Enum | "Circle" | Circle, Arc, Spark | Dot morphology for descriptive fidelity. |
| BF-07 | blueFieldMovement | Enum | "Squiggly" | Linear, Squiggly, Circular | Trajectory model for subgroup classification. |
| BF-08 | blueFieldColorArgb | ARGB Long | 0xFFFFFFFF | any ARGB | Perceived particle color; individual phenotype encoding. |
Aberrant interactions with light sources: aura, scotoma, photopsia, glare (starburst), and halo phenomena. These have distinct clinical subtypes and timing profiles from baseline static.
| Code | JSON field | Type | Default | Range / Values | Clinical Rationale |
|---|---|---|---|---|---|
| LA-01 | auraIntensity | Float32 | 0.0 | [0.0, 1.0] | Aura flare; differs in timing/triggers from static baseline. |
| LA-02 | auraType | Enum | "Scotoma" | Scotoma, Fortification | Morphology category; supports reproducibility assessment. |
| LA-03 | scotomaCount | Integer | 1 | [1, 5] | Active when LA-02 = Scotoma. Supports plural blind-spot mapping. |
| LA-04 | scotomaPositions | String | "0.5,0.5" | "x1,y1;x2,y2;…" normalized | Per-scotoma XY positions as normalized screen coordinates (0–1). |
| LA-04b | scotomaColorArgb | ARGB Long | 0xFF000000 | any ARGB | Scotoma render color. |
| LA-04c | scotomaAlpha | Float32 | 0.85 | [0.0, 1.0] | Scotoma opacity; severity of perceived blind-spot occlusion. |
| LA-05 | photopsiaIntensity | Float32 | 0.0 | [0.0, 1.0] | Episodic flash burden independent of baseline static level. |
| LA-06 | glareEnabled | Boolean | false | false, true | Starburst glare; photosensitivity and night-driving burden. |
| LA-07 | glareIntensity | Float32 | 0.65 | [0.0, 1.0] | Photosensitivity severity across conditions. |
| LA-08 | glareRayCount | Integer | 12 | [4, 24] | Glare pattern complexity around point light sources. |
| LA-09 | glareSizeFraction | Float32 | 0.14 | [0.05, 0.4] | Ray length relative to screen; close-halo vs. extended starburst. |
| LA-10 | glareColorArgb | ARGB Long | 0xFFFFFFFF | any ARGB | Chromatic glare hue; may indicate neurologic vs. optical contribution. |
| LA-11 | haloEnabled | Boolean | false | false, true | Rainbow/chromatic halo; distinguishes from noise-based symptoms. |
| LA-12 | nearHaloEnabled | Boolean | false | false, true | Close-range halo; captures reading/indoor-light difficulties. |
Edge-contour luminance emphasis and bleed; perceived as glowing outlines around objects and high-contrast boundaries.
| Code | JSON field | Type | Default | Range / Values | Clinical Rationale |
|---|---|---|---|---|---|
| GE-01 | glowEdgesEnabled | Boolean | false | false, true | Luminous-contour / edge-shimmer subtype flag. |
| GE-02 | glowEdgesAlpha | Float32 | 0.6 | [0.0, 1.0] | Direct intensity proxy for this distortion mode. |
| GE-03 | glowEdgesScale | Integer | 96 | [32, 240] | Processing scale; controls glow breadth vs. edge crispness. |
| GE-04 | glowEdgesBlack | Float32 | 0.08 | [0.0, 0.4] | Low-end threshold; whether faint edges appear or are suppressed. |
| GE-05 | glowEdgesWhite | Float32 | 0.92 | [0.6, 1.0] | High-end clipping; models over-bright edge perception. |
| GE-06 | glowEdgesGamma | Float32 | 1.0 | [0.2, 3.0] | Non-linear contrast response fitted to individual perception. |
| GE-07 | glowEdgesBlur | Integer | 2 | [0, 6] | Spatial smoothing; crisp vs. smeared vs. halo edge character. |
| GE-08 | glowEdgesColorize | Float32 | 0.0 | [0.0, 1.0] | Chromatic-aberration-style contour experience strength. |
| GE-09 | glowEdgesDispX | Float32 | 0.0 | [−60, 60] | Horizontal ghost displacement (px); directional ghosting. |
| GE-10 | glowEdgesDispY | Float32 | 0.0 | [−60, 60] | Vertical ghost displacement (px); orientation-specific disturbance. |
| GE-11 | glowEdgesTintArgb | ARGB Long | 0xFFFFFFFF | any ARGB | Edge tint color; communicates subjective light-distortion quality. |
| GE-12 | edgeGlowIntensity | Float32 | 0.0 | [0.0, 1.0] | Independent overall edge-glow overlay strength; combined-effect intensity distinct from GE-02 alpha. |
Non-point, spatial-frequency dynamic haze textures perceived across the visual field; distinct from discrete-particle static.
| Code | JSON field | Type | Default | Range / Values | Clinical Rationale |
|---|---|---|---|---|---|
| DC-01 | cloudsEnabled | Boolean | false | false, true | Separates non-point haze reports from discrete-particle static. |
| DC-02 | cloudsAlpha | Float32 | 0.4 | [0.0, 1.0] | Direct cloud visibility metric. |
| DC-03 | cloudsSpeed | Float32 | 1.0 | [0.1, 5.0] | Temporal evolution rate; distinct from static flicker speed. |
| DC-04 | cloudsScale | Float32 | 1.0 | [0.25, 4.0] | Spatial frequency; differentiates coarse haze from fine texture. |
| DC-05 | cloudsHue | Float32 | 200 | [0.0, 360.0]° | Base color angle in color-linked distortion episodes. |
| DC-06 | cloudsHueRange | Float32 | 60 | [10.0, 180.0]° | Color variability; higher range creates multi-hue dynamics. |
| DC-07 | cloudsSaturation | Float32 | 0.75 | [0.0, 1.0] | Neutral vs. strongly chromatic distortion character. |
| DC-08 | cloudsContrast | Float32 | 0.5 | [0.0, 2.0] | Perceived harshness and visual interference load. |
| DC-09 | cloudsSoftLight | Boolean | true | false, true | Soft-light vs. normal blend mode; affects comfort and realism. |
Temporal and spatial misalignments: diplopia (double vision), palinopsia (afterimages/trailing), visual vibration, oscillopsia, and Charles Bonnet-type hallucinatory phenomena. Clinical palinopsia subtypes per Gersztenkorn & Lee (2015): Hallucinatory is associated with cortical/neurologic pathology; Illusory occurs in VSS without structural lesion.
| Code | JSON field | Type | Default | Range / Values | Clinical Rationale |
|---|---|---|---|---|---|
| DS-01 | vibrationIntensity | Float32 | 0.0 | [0.0, 1.0] | Scene micro-jitter; distinct from static density. |
| DS-02 | diplopiaIntensity | Float32 | 0.0 | [0.0, 1.0] | Double-vision separation burden. |
| DS-03 | diplopiaDirection | Float32 | 0.0 | [0.0, 360.0]° | Angular direction of image separation. |
| DS-04 | diplopiaRotation | Float32 | 0.0 | [0.0, 360.0]° | Models skewed/tilted ghost images. |
| DS-04b | wavyVisionIntensity | Float32 | 0.0 | [0.0, 1.0] | Oscillopsia / metamorphopsia intensity. |
| DS-04c | wavyVisionSpeed | Float32 | 1.0 | [0.1, 5.0] | Wave oscillation speed. |
| DS-05 | palinopsiaEnabled | Boolean | false | false, true | Afterimage/trailing explicit flag; distinct trigger profile from static. |
| DS-06 | palinopsiaType | Enum | "Illusory" | Hallucinatory, Illusory | Clinical subtype (Gersztenkorn & Lee, 2015). |
| DS-07 | palinopsiaShape | Enum | "Circle" | Circle, WholeScreen | Spatial extent; affects functional impact on reading and navigation. |
| DS-08 | palinopsiaGhostCount | Integer | 3 | [1, 5] | Number of ghost frame layers; visual persistence complexity. |
| DS-09 | palinopsiaGhostAlpha | Float32 | 0.18 | [0.05, 0.6] | Ghost frame opacity; key determinant of text/edge interference. |
| DS-09b | palinopsiaTrailCount | Integer | 8 | [1, 20] | Number of motion-trail layers. |
| DS-09c | palinopsiaTrailAlpha | Float32 | 0.12 | [0.0, 0.6] | Trail opacity. |
| DS-09d | palinopsiaGhostLifeSec | Float32 | 2.0 | [0.5, 10.0] s | Ghost persistence duration. |
| DS-11 | PalinopsiaConfig.circleRadiusFraction | Float32 | 0.38 | [0.1, 0.6] | Active when DS-07 = Circle; central vs. peripheral field involvement. |
| DS-12 | palinopsiaMotionWeight | Float32 | 1.0 | [0.0, 1.0] | Sensor vs. manual trail direction blend. |
| DS-13 | palinopsiaManualAngle | Float32 | 0.0 | [0.0, 360.0]° | Fixed trail angle when motion weight is reduced. |
| DS-14 | palinopsiaRotation | Float32 | 0.0 | [0.0, 360.0]° | Ghost rotation relative to scene. |
| DS-15 | palinopsiaTrailFadeRate | Float32 | 0.88 | [0.0, 1.0] | Layer fade; 0 = uniform, 1 = sharp. Differentiates flicker from smear palinopsia. |
| DS-16 | palinopsiaTrailColorArgb | ARGB Long | 0xFFFFFFFF | any ARGB | Trail tint color; chromatic trailing on light-dark transitions. |
| DS-17 | cbsIntensity | Float32 | 0.0 | [0.0, 1.0] | Charles Bonnet-type structured/geometric hallucination intensity; relevant comorbidity in patients with concurrent visual field loss. |
Auditory co-symptom overlay. Tinnitus is a recognized concurrent symptom in an estimated 40–60 % of VSS patients in published cohorts.
| Code | JSON field | Type | Default | Range / Values | Clinical Rationale |
|---|---|---|---|---|---|
| TI-01 | tinnitusEnabled | Boolean | false | false, true | Enables multimodal episode logging within one session. |
| TI-02 | tinnitusVol | Float32 | 0.1 | [0.0, 1.0] | Perceived loudness; correlates with anxiety, sleep, stress burden. |
| TI-03 | tinnitusFreq | Float32 | 4000 | [100, 15 000] Hz | Base frequency characterization across sessions. |
| TI-04 | tinnitusType | Enum | "PureTone" | PureTone, WhiteNoise, PinkNoise, BrownNoise, FrequencyVariation, MultiFrequency, Pulsing | Sound-quality matching for report fidelity. |
| TI-05 | tinnitusFreqVariation | Float32 | 200 | [10, 2 000] Hz | Modulation depth in FrequencyVariation mode; wavering pitch instability. |
| TI-06 | tinnitusPulseRate | Float32 | 2.0 | [0.5, 10.0] Hz | Beat frequency in Pulsing mode; contextual flare metadata. |
| TI-07 | tinnitusSecondaryFreqs | String (CSV) | "1.5,2.0" | comma-separated multipliers | Harmonic/inharmonic frequency multipliers in MultiFrequency mode; captures complex tonal percepts. |
Simulation of color vision deficiency as a co-occurring or standalone visual impairment. Supports congenital (hereditary) and acquired CVD phenotypes.
| Code | JSON field | Type | Default | Range / Values | Clinical Rationale |
|---|---|---|---|---|---|
| CVD-01 | cvdType | Enum | "None" | None, Protanopia, Deuteranopia, Tritanopia, Achromatopsia | CVD phenotype classification; supports co-morbidity profiling. |
| CVD-02 | cvdSeverity | Float32 | 0.0 | [0.0, 1.0] | Severity; 0 = no effect, 1 = full simulation of phenotype. |
Peripheral or hemi-field vision loss patterns. Includes hemianopia (half-field loss following retrochiasmal pathology) and tunnel vision (concentric peripheral constriction).
| Code | JSON field | Type | Default | Range / Values | Clinical Rationale |
|---|---|---|---|---|---|
| VF-01 | hemianopiaSide | Enum | "None" | None, Left, Right, Superior, Inferior | Hemianopia side classification; retrochiasmal field defect mapping. |
| VF-02 | hemianopiaOpacity | Float32 | 0.0 | [0.0, 1.0] | Affected-field opacity; 0 = transparent, 1 = fully occluded. |
| VF-03 | tunnelVisionRadius | Float32 | 1.0 | [0.1, 1.0] | Normalized radius of remaining visual field; 1.0 = no tunnel. |
| VF-04 | tunnelVisionSoftness | Float32 | 0.5 | [0.0, 1.0] | Edge feathering of tunnel boundary; gradual vs. abrupt field loss. |
The following contextual fields are RECOMMENDED in session snapshots alongside $V_{SVD}$. All are persisted in SymptomLog.
| Field | JSON field | Type | Range | Clinical Rationale |
|---|---|---|---|---|
| Anxiety | anxietyLevel | Integer | [0, 10] | Symptom salience amplifier; stress-linked vs. visually-driven spikes. |
| Depression | depressionLevel | Integer | [0, 10] | Mood burden context for quality-of-life interpretation. |
| Stress | stressLevel | Integer | [0, 10] | Trigger-response pattern detection across weeks. |
| Sleep Duration | sleepHours | Float32 | [0.0, 12.0] h | Sensory tolerance predictor; next-day severity correlation. |
| Energy Level | energyLevel | Integer | [0, 10] | Functional impact beyond raw visual severity. |
| Trigger Notes | recentTriggers | String | free text | Non-standardized contextual factors (light, caffeine, workload…). |
| Session Notes | note | String | free text | Qualitative nuance for clinician interpretation. |
| Is Preset | isPreset | Boolean | — | Marks snapshot as a reusable reference profile. |
| Symptom Tags | symptomsList | String | free text | Comma-separated self-reported symptom tags. |
| Timestamp | timestamp | Long (epoch ms) | ISO 8601 | Required for longitudinal alignment. |
| Import from Health Connect | — | optional | permissioned | Sleep/activity metadata; reduces manual entry burden. |
Optional self-reported checklist items. These are relevance signals for pattern exploration and shall not be interpreted as diagnostic conclusions.
| Question | Clinical Rationale |
|---|---|
| Long-term or childhood antibiotic use | Broad history marker for developmental or systemic context; cohort stratification. |
| Logged medications (past or current) | Avoids misattributing temporal symptom changes to visual causes. |
| Nose in vision (abnormal awareness) | Altered visual filtering/awareness; atypical perceptual salience patterns. |
| Nystagmus (involuntary eye movement) | Interacts with perceived visual instability; clinically relevant context. |
| Blood flow or circulation issues | Vascular context for chronic neurologic symptom discussion. |
| High blood pressure | Covariate in symptom trend analysis; altered visual comfort. |
| Kidney disease | Systemic health affects fatigue, stress response, medication burden. |
| Severe head injury during childhood | Neurologic history marker for exploratory cohort comparisons. |
| Brain inflammation (post-accident or infection) | Neuroinflammatory history; differential patterning. |
| Stressful periods causing trauma | Psychophysiologic load amplifies symptom perception. |
| High stress hormones / chronic stress | Affects sensory threshold and sleep architecture. |
| Cyclical Cushing's or high cortisol | Endocrine variability alters neurologic and mood symptoms. |
| ADHD | Attention regulation influences symptom salience and coping strategies. |
| Neurodivergent traits | Different sensory processing profiles affect symptom experience and reporting. |
| Dyslexia | Reading/visual processing history; task-specific functional burden. |
| Allergies | Allergic states influence fatigue, sleep, overall symptom load. |
| Insect bites (e.g., caterpillar exposure) | Environmental exposure; exploratory cohort association metadata. |
| MTHFR gene variant | Optional, non-diagnostic; high-level subgroup exploration only. |
| Ptosis (drooping eyelids) | Ocular/neuromuscular signs; perceived visual effort. |
| Memory inhibition or memory issues | Cognitive symptoms co-occur with chronic sensory strain. |
| Repetitive nightmares | Sleep disturbance indicator; correlates with next-day symptom severity. |
| Neuronal excitability symptoms (sensory sensitivity) | Hyperexcitability features relevant to sensory syndrome profiling. |
| Family history of similar symptoms | Epidemiologic framing; hereditary clustering signal detection. |
This is an open specification today. If clinical adoption grows, the path toward formal standardization is described in the full specification document. The immediate priority is research use and community feedback, not standardization itself.
This VSS/SVD-specific vector matrix is the reference implementation feeding into a broader, condition-agnostic effort: the Open Visual Symptom Standard (OVS), published at openvisual.org. Where this page documents the VSS app's concrete parameters, OVS defines the general schema hierarchy (visual noise, field defects, optical aberrations, persistence, hallucination, spatial distortion, entoptic, color perception, auditory) that this domain vector is a profile of.
Reference JSON serialization format for $V_{SVD}$ session snapshots covering all eleven domains.
DOI publication → clinical research use → HL7 FHIR profile → SNOMED CT codes → ISO/TC 215 (only if warranted by evidence).
ICD-11 9E2Y · SNOMED CT 413997008 · HL7 FHIR Observation · WHO ICF b21022 · PROM frameworks.
Parameter codes are stable identifiers. Codes are never reassigned. New parameters get the next sequential code. Kotlin source is the ground truth.
The condition-agnostic parent schema this specification maps to. See openvisual.org and the in-repo docs/ovs/OVS_SPEC.md.