The presets are created through the wled web gui. General color temperature and brightness is handled by adaptive.
Since I rely on the ‘on chip’ presets I created this flow that will find any wled in ha and then back up the config and preset file.
[{"id":"c9cdf4624b107923","type":"function","z":"0126d250209d4133","name":"Create requests","func":"let array = msg.payload;\nlet servers = [];\n\nfor (let i = 0; i < array.length; i++) {\n const element = array[i].state;\n servers.push(element);\n \n}\n\nlet i = 0;\nlet x = 0;\nvar delay = 0;\n\nfunction getPresetConfig() { \n setTimeout(function () { \n if (i < servers.length) {\n let serverAddress = servers[i];\n msg.url = \"http://\" + serverAddress + \"/edit?download=/presets.json\";\n node.send(msg);\n node.status({fill:\"green\",shape:\"dot\",text: \"preset req \" + serverAddress});\n delay = 5000;\n i++;\n getPresetConfig(); \n }\n else if (i >= servers.length && i < servers.length*2) {\n let serverAddress = servers[x];\n msg.url = \"http://\" + serverAddress + \"/edit?download=/cfg.json\";\n node.send(msg);\n node.status({ fill: \"green\", shape: \"dot\", text: \"config req \" + serverAddress })\n i++;\n x++;\n getPresetConfig()\n }\n else { \n node.status({ fill: \"green\", shape: \"dot\", text: \"done\" })\n node.done\n } \n }, delay)\n}\n\ngetPresetConfig(); ","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":500,"y":80,"wires":[["1478da51e18492f4"]]},{"id":"1478da51e18492f4","type":"http request","z":"0126d250209d4133","name":"Get presets/cfg","method":"GET","ret":"txt","paytoqs":"body","url":"","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":680,"y":80,"wires":[["4a7be5914f598c5a"]]},{"id":"c9293467f3a7f0d7","type":"file","z":"0126d250209d4133","name":"Save preset/config","filename":"filename","filenameType":"msg","appendNewline":false,"createDir":true,"overwriteFile":"true","encoding":"none","x":1030,"y":80,"wires":[[]]},{"id":"4a7be5914f598c5a","type":"change","z":"0126d250209d4133","name":"format save","rules":[{"t":"delete","p":"topic","pt":"msg"},{"t":"delete","p":"statusCode","pt":"msg"},{"t":"delete","p":"headers","pt":"msg"},{"t":"delete","p":"responseUrl","pt":"msg"},{"t":"delete","p":"retry","pt":"msg"},{"t":"delete","p":"redirectList","pt":"msg"},{"t":"delete","p":"_msgid","pt":"msg"},{"t":"change","p":"url","pt":"msg","from":"http://","fromt":"str","to":"/media/wled/","tot":"str"},{"t":"change","p":"url","pt":"msg","from":"/edit?download=/","fromt":"str","to":"_","tot":"str"},{"t":"move","p":"url","pt":"msg","to":"filename","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":850,"y":80,"wires":[["c9293467f3a7f0d7"]]},{"id":"0eeb14d984affba2","type":"ha-get-entities","z":"0126d250209d4133","name":"Get wled IPs","server":"","version":1,"rules":[{"property":"attributes.friendly_name","logic":"is","value":"WLED","valueType":"re"},{"property":"attributes.friendly_name","logic":"is","value":"IP","valueType":"re"}],"outputType":"array","outputEmptyResults":false,"outputLocationType":"msg","outputLocation":"payload","outputResultsCount":1,"x":310,"y":80,"wires":[["c9cdf4624b107923","4b3c6bd18e250073"]]},{"id":"a56f494492557eb3","type":"inject","z":"0126d250209d4133","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"00 05 * * *","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":150,"y":80,"wires":[["0eeb14d984affba2"]]},{"id":"05f3197309c81de8","type":"global-config","env":[],"modules":{"node-red-contrib-home-assistant-websocket":"0.80.3"}}]