From 1db905eaae1c3fa5558b50ec8b7f06823476b94d Mon Sep 17 00:00:00 2001 From: Jimmy Date: Sat, 9 May 2026 17:06:56 +1200 Subject: [PATCH] feat(patterns): add supports_manual metadata in db/pattern.json Allow staging db/pattern.json by replacing blanket db/ ignore with a whitelist for tracked db files. Co-authored-by: Cursor --- .gitignore | 12 +++++++++++- db/pattern.json | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 7abc0a9..dc82bf7 100644 --- a/.gitignore +++ b/.gitignore @@ -28,7 +28,17 @@ Thumbs.db scripts/.led-controller-venv docs/.help-print.html settings.json -db/ +# Track shared JSON + preset binaries; ignore other db/*.json (e.g. device, zone) locally +db/* +!db/group.json +!db/palette.json +!db/pattern.json +!db/preset.json +!db/profile.json +!db/scene.json +!db/sequence.json +!db/presets/ +!db/presets/*.bin *.log *.db *.sqlite diff --git a/db/pattern.json b/db/pattern.json index 03f1f84..5633d49 100644 --- a/db/pattern.json +++ b/db/pattern.json @@ -1 +1 @@ -{"on": {"min_delay": 10, "max_delay": 10000, "max_colors": 1}, "off": {"min_delay": 10, "max_delay": 10000, "max_colors": 0}, "rainbow": {"n1": "Step Rate", "min_delay": 10, "max_delay": 10000, "max_colors": 0}, "colour_cycle": {"n1": "Step Rate", "min_delay": 10, "max_delay": 10000, "max_colors": 10}, "transition": {"min_delay": 10, "max_delay": 10000, "max_colors": 10}, "chase": {"n1": "Colour 1 Length", "n2": "Colour 2 Length", "n3": "Step 1", "n4": "Step 2", "min_delay": 10, "max_delay": 10000, "max_colors": 2, "has_background": true}, "pulse": {"n1": "Attack", "n2": "Hold", "n3": "Decay", "min_delay": 10, "max_delay": 10000, "max_colors": 10, "has_background": true}, "circle": {"n1": "Head Rate", "n2": "Max Length", "n3": "Tail Rate", "n4": "Min Length", "min_delay": 10, "max_delay": 10000, "max_colors": 2, "has_background": true}, "blink": {"min_delay": 10, "max_delay": 10000, "max_colors": 10, "has_background": true}, "flicker": {"n1": "Min brightness", "min_delay": 10, "max_delay": 10000, "max_colors": 10}, "flame": {"n1": "Min brightness", "n2": "Breath period (ms)", "n3": "Spark gap min (ms, 0=default 10–30 s, -1=off)", "n4": "Spark gap max (ms)", "min_delay": 10, "max_delay": 10000, "max_colors": 10}, "twinkle": {"n1": "Twinkle activity (1–255, higher = more changes)", "n2": "Density (0–255, higher = more of the strip lit)", "n3": "Min adjacent LEDs per twinkle (same as max for fixed length)", "n4": "Max adjacent LEDs per twinkle (same as min for fixed length)", "min_delay": 10, "max_delay": 10000, "max_colors": 10, "has_background": true}, "radiate": {"n1": "Node spacing (LEDs)", "n2": "Out time (ms)", "n3": "In time (ms)", "min_delay": 10, "max_delay": 10000, "max_colors": 2, "has_background": true}, "meteor_rain": {"n1": "Tail length", "n2": "Speed (LEDs per frame)", "n3": "Fade amount (1-255)", "min_delay": 10, "max_delay": 10000, "max_colors": 10}, "scanner": {"n1": "Eye width", "n2": "End pause (frames)", "min_delay": 10, "max_delay": 10000, "max_colors": 10, "has_background": true}, "gradient_scroll": {"n1": "Scroll step rate", "min_delay": 10, "max_delay": 10000, "max_colors": 10}, "comet_dual": {"n1": "Tail length", "n2": "Speed", "n3": "Gap", "max_colors": 10, "min_delay": 10, "max_delay": 10000, "has_background": true}, "sparkle_trail": {"n1": "Spark density", "n2": "Decay", "max_colors": 10, "min_delay": 10, "max_delay": 10000}, "wave": {"n1": "Wavelength", "n2": "Amplitude", "n3": "Drift speed", "max_colors": 10, "min_delay": 10, "max_delay": 10000}, "plasma": {"n1": "Scale", "n2": "Speed", "n3": "Contrast", "max_colors": 10, "min_delay": 10, "max_delay": 10000}, "segment_chase": {"n1": "Segment size", "n2": "Phase step", "n3": "Segment phase offset", "n4": "Gap per segment", "max_colors": 10, "min_delay": 10, "max_delay": 10000, "has_background": true}, "bar_graph": {"n1": "Level percent", "max_colors": 10, "min_delay": 10, "max_delay": 10000, "has_background": true}, "breathing_dual": {"n1": "Phase offset", "n2": "Ease", "max_colors": 10, "min_delay": 10, "max_delay": 10000}, "strobe_burst": {"n1": "Burst count", "n2": "Burst gap", "n3": "Cooldown", "max_colors": 10, "min_delay": 10, "max_delay": 10000, "has_background": true}, "rain_drops": {"n1": "Drop rate", "n2": "Ripple width", "max_colors": 10, "min_delay": 10, "max_delay": 10000, "has_background": true}, "fireflies": {"n1": "Count", "n2": "Twinkle speed", "max_colors": 10, "min_delay": 10, "max_delay": 10000, "has_background": true}, "clock_sweep": {"n1": "Hand width", "n2": "Marker interval", "max_colors": 10, "min_delay": 10, "max_delay": 10000, "has_background": true}, "marquee": {"n1": "On length", "n2": "Off length", "n3": "Step", "max_colors": 10, "min_delay": 10, "max_delay": 10000, "has_background": true}, "aurora": {"n1": "Band count", "n2": "Shimmer", "max_colors": 10, "min_delay": 10, "max_delay": 10000}, "snowfall": {"n1": "Flake density", "n2": "Fall speed", "max_colors": 10, "min_delay": 10, "max_delay": 10000, "has_background": true}, "heartbeat": {"n1": "Pulse 1 ms", "n2": "Pulse 2 ms", "n3": "Pause ms", "max_colors": 10, "min_delay": 10, "max_delay": 10000, "has_background": true}, "orbit": {"n1": "Orbit count", "n2": "Base speed", "max_colors": 10, "min_delay": 10, "max_delay": 10000, "has_background": true}, "palette_morph": {"n1": "Morph ms", "n2": "Warp rate", "n3": "Turbulence", "max_colors": 10, "min_delay": 10, "max_delay": 10000}} \ No newline at end of file +{"on":{"min_delay":10,"max_delay":10000,"max_colors":1,"supports_manual":true},"off":{"min_delay":10,"max_delay":10000,"max_colors":0,"supports_manual":true},"rainbow":{"n1":"Step Rate","min_delay":10,"max_delay":10000,"max_colors":0,"supports_manual":true},"colour_cycle":{"n1":"Step Rate","min_delay":10,"max_delay":10000,"max_colors":10,"supports_manual":true},"transition":{"min_delay":10,"max_delay":10000,"max_colors":10,"supports_manual":false},"chase":{"n1":"Colour 1 Length","n2":"Colour 2 Length","n3":"Step 1","n4":"Step 2","min_delay":10,"max_delay":10000,"max_colors":2,"has_background":true,"supports_manual":true},"pulse":{"n1":"Attack","n2":"Hold","n3":"Decay","min_delay":10,"max_delay":10000,"max_colors":10,"has_background":true,"supports_manual":true},"circle":{"n1":"Head Rate","n2":"Max Length","n3":"Tail Rate","n4":"Min Length","min_delay":10,"max_delay":10000,"max_colors":2,"has_background":true,"supports_manual":true},"blink":{"min_delay":10,"max_delay":10000,"max_colors":10,"has_background":true,"supports_manual":true},"flicker":{"n1":"Min brightness","min_delay":10,"max_delay":10000,"max_colors":10,"supports_manual":true},"flame":{"n1":"Min brightness","n2":"Breath period (ms)","n3":"Spark gap min (ms, 0=default 10\u201330 s, -1=off)","n4":"Spark gap max (ms)","min_delay":10,"max_delay":10000,"max_colors":10,"supports_manual":false},"twinkle":{"n1":"Twinkle activity (1\u2013255, higher = more changes)","n2":"Density (0\u2013255, higher = more of the strip lit)","n3":"Min adjacent LEDs per twinkle (same as max for fixed length)","n4":"Max adjacent LEDs per twinkle (same as min for fixed length)","min_delay":10,"max_delay":10000,"max_colors":10,"has_background":true,"supports_manual":true},"radiate":{"n1":"Node spacing (LEDs)","n2":"Out time (ms)","n3":"In time (ms)","min_delay":10,"max_delay":10000,"max_colors":2,"has_background":true,"supports_manual":true},"meteor_rain":{"n1":"Tail length","n2":"Speed (LEDs per frame)","n3":"Fade amount (1-255)","min_delay":10,"max_delay":10000,"max_colors":10,"supports_manual":true},"scanner":{"n1":"Eye width","n2":"End pause (frames)","min_delay":10,"max_delay":10000,"max_colors":10,"has_background":true,"supports_manual":true},"gradient_scroll":{"n1":"Scroll step rate","min_delay":10,"max_delay":10000,"max_colors":10,"supports_manual":false},"comet_dual":{"n1":"Tail length","n2":"Speed","n3":"Gap","max_colors":10,"min_delay":10,"max_delay":10000,"has_background":true,"supports_manual":true},"sparkle_trail":{"n1":"Spark density","n2":"Decay","max_colors":10,"min_delay":10,"max_delay":10000,"supports_manual":true},"wave":{"n1":"Wavelength","n2":"Amplitude","n3":"Drift speed","max_colors":10,"min_delay":10,"max_delay":10000,"supports_manual":false},"plasma":{"n1":"Scale","n2":"Speed","n3":"Contrast","max_colors":10,"min_delay":10,"max_delay":10000,"supports_manual":false},"segment_chase":{"n1":"Segment size","n2":"Phase step","n3":"Segment phase offset","n4":"Gap per segment","max_colors":10,"min_delay":10,"max_delay":10000,"has_background":true,"supports_manual":true},"bar_graph":{"n1":"Level percent","max_colors":10,"min_delay":10,"max_delay":10000,"has_background":true,"supports_manual":true},"breathing_dual":{"n1":"Phase offset","n2":"Ease","max_colors":10,"min_delay":10,"max_delay":10000,"supports_manual":false},"strobe_burst":{"n1":"Burst count","n2":"Burst gap","n3":"Cooldown","max_colors":10,"min_delay":10,"max_delay":10000,"has_background":true,"supports_manual":true},"rain_drops":{"n1":"Drop rate","n2":"Ripple width","max_colors":10,"min_delay":10,"max_delay":10000,"has_background":true,"supports_manual":true},"fireflies":{"n1":"Count","n2":"Twinkle speed","max_colors":10,"min_delay":10,"max_delay":10000,"has_background":true,"supports_manual":true},"clock_sweep":{"n1":"Hand width","n2":"Marker interval","max_colors":10,"min_delay":10,"max_delay":10000,"has_background":true,"supports_manual":true},"marquee":{"n1":"On length","n2":"Off length","n3":"Step","max_colors":10,"min_delay":10,"max_delay":10000,"has_background":true,"supports_manual":true},"aurora":{"n1":"Band count","n2":"Shimmer","max_colors":10,"min_delay":10,"max_delay":10000,"supports_manual":false},"snowfall":{"n1":"Flake density","n2":"Fall speed","max_colors":10,"min_delay":10,"max_delay":10000,"has_background":true,"supports_manual":true},"heartbeat":{"n1":"Pulse 1 ms","n2":"Pulse 2 ms","n3":"Pause ms","max_colors":10,"min_delay":10,"max_delay":10000,"has_background":true,"supports_manual":true},"orbit":{"n1":"Orbit count","n2":"Base speed","max_colors":10,"min_delay":10,"max_delay":10000,"has_background":true,"supports_manual":true},"palette_morph":{"n1":"Morph ms","n2":"Warp rate","n3":"Turbulence","max_colors":10,"min_delay":10,"max_delay":10000,"supports_manual":false}}