{ "id": "feedback-highlight-accumulator", "name": "Feedback Background Memory", "description": "Learns a persistent per-pixel background plate in shader-local feedback and compares the live frame against that evolving full-frame state.", "category": "Feedback", "entryPoint": "updateBackgroundModel", "passes": [ { "id": "background", "source": "shader.slang", "entryPoint": "updateBackgroundModel", "output": "backgroundModel" }, { "id": "display", "source": "shader.slang", "entryPoint": "displayBackgroundDifference", "inputs": [ "backgroundModel" ], "output": "layerOutput" } ], "feedback": { "enabled": true, "writePass": "background" }, "parameters": [ { "id": "learnRate", "label": "Learn Rate", "type": "float", "default": 0.03, "min": 0.001, "max": 0.5, "step": 0.001, "description": "How quickly the stored background model adapts toward the current frame." }, { "id": "differenceThreshold", "label": "Difference Threshold", "type": "float", "default": 0.12, "min": 0.001, "max": 1.0, "step": 0.001, "description": "Minimum difference between the live frame and stored background before the overlay becomes visible." }, { "id": "softness", "label": "Threshold Softness", "type": "float", "default": 0.08, "min": 0.001, "max": 0.5, "step": 0.001, "description": "Softens the transition around the difference threshold." }, { "id": "overlayOpacity", "label": "Overlay Opacity", "type": "float", "default": 0.85, "min": 0.0, "max": 1.0, "step": 0.01, "description": "Strength of the motion/difference overlay on top of the live image." }, { "id": "backgroundMix", "label": "Background Mix", "type": "float", "default": 0.15, "min": 0.0, "max": 1.0, "step": 0.01, "description": "Amount of the learned background model shown underneath the live source." }, { "id": "overlayTint", "label": "Overlay Tint", "type": "color", "default": [ 1.0, 0.45, 0.08, 1.0 ], "min": [ 0.0, 0.0, 0.0, 0.0 ], "max": [ 1.0, 1.0, 1.0, 1.0 ], "step": [ 0.01, 0.01, 0.01, 0.01 ], "description": "Tint used for areas that differ from the learned background." } ] }